mihari 5.7.0 → 5.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/lib/mihari/actor.rb +10 -4
  4. data/lib/mihari/cli/main.rb +2 -0
  5. data/lib/mihari/clients/base.rb +23 -1
  6. data/lib/mihari/clients/binaryedge.rb +1 -3
  7. data/lib/mihari/clients/censys.rb +1 -2
  8. data/lib/mihari/clients/crtsh.rb +2 -3
  9. data/lib/mihari/clients/dnstwister.rb +1 -2
  10. data/lib/mihari/clients/fofa.rb +1 -3
  11. data/lib/mihari/clients/greynoise.rb +1 -2
  12. data/lib/mihari/clients/hunterhow.rb +1 -2
  13. data/lib/mihari/clients/misp.rb +1 -2
  14. data/lib/mihari/clients/onyphe.rb +1 -2
  15. data/lib/mihari/clients/otx.rb +2 -14
  16. data/lib/mihari/clients/passivetotal.rb +3 -16
  17. data/lib/mihari/clients/publsedive.rb +2 -17
  18. data/lib/mihari/clients/securitytrails.rb +3 -25
  19. data/lib/mihari/clients/shodan.rb +1 -2
  20. data/lib/mihari/clients/the_hive.rb +1 -2
  21. data/lib/mihari/clients/urlscan.rb +1 -2
  22. data/lib/mihari/clients/virustotal.rb +3 -17
  23. data/lib/mihari/clients/zoomeye.rb +9 -19
  24. data/lib/mihari/commands/alert.rb +11 -9
  25. data/lib/mihari/commands/database.rb +4 -1
  26. data/lib/mihari/commands/mixins.rb +11 -0
  27. data/lib/mihari/commands/search.rb +13 -32
  28. data/lib/mihari/constants.rb +1 -1
  29. data/lib/mihari/database.rb +1 -1
  30. data/lib/mihari/enrichers/ipinfo.rb +1 -1
  31. data/lib/mihari/entities/tag.rb +1 -0
  32. data/lib/mihari/http.rb +13 -11
  33. data/lib/mihari/rule.rb +14 -0
  34. data/lib/mihari/service.rb +12 -2
  35. data/lib/mihari/services/alert_builder.rb +81 -8
  36. data/lib/mihari/services/alert_runner.rb +3 -10
  37. data/lib/mihari/services/rule_builder.rb +8 -10
  38. data/lib/mihari/services/rule_runner.rb +2 -25
  39. data/lib/mihari/structs/binaryedge.rb +9 -0
  40. data/lib/mihari/structs/censys.rb +0 -14
  41. data/lib/mihari/structs/fofa.rb +3 -0
  42. data/lib/mihari/structs/google_public_dns.rb +0 -4
  43. data/lib/mihari/structs/greynoise.rb +0 -6
  44. data/lib/mihari/structs/hunterhow.rb +0 -6
  45. data/lib/mihari/structs/ipinfo.rb +0 -2
  46. data/lib/mihari/structs/onyphe.rb +0 -4
  47. data/lib/mihari/structs/shodan.rb +0 -2
  48. data/lib/mihari/structs/urlscan.rb +0 -6
  49. data/lib/mihari/structs/virustotal_intelligence.rb +0 -8
  50. data/lib/mihari/version.rb +1 -1
  51. data/lib/mihari/web/app.rb +20 -17
  52. data/lib/mihari/web/endpoints/alerts.rb +75 -38
  53. data/lib/mihari/web/endpoints/artifacts.rb +60 -53
  54. data/lib/mihari/web/endpoints/ip_addresses.rb +19 -4
  55. data/lib/mihari/web/endpoints/rules.rb +132 -88
  56. data/lib/mihari/web/endpoints/tags.rb +15 -13
  57. data/lib/mihari/web/middleware/error_notification_adapter.rb +8 -3
  58. data/lib/mihari/web/public/assets/{index-821134e2.js → index-ec641cb0.js} +45 -44
  59. data/lib/mihari/web/public/index.html +1 -1
  60. data/lib/mihari/web/public/redoc-static.html +400 -400
  61. data/lib/mihari.rb +0 -2
  62. data/mihari.gemspec +5 -5
  63. data/mkdocs.yml +14 -7
  64. metadata +13 -140
  65. data/docs/alternatives.md +0 -5
  66. data/docs/analyzers/binaryedge.md +0 -26
  67. data/docs/analyzers/censys.md +0 -31
  68. data/docs/analyzers/circl.md +0 -37
  69. data/docs/analyzers/crtsh.md +0 -26
  70. data/docs/analyzers/dnstwister.md +0 -25
  71. data/docs/analyzers/feed.md +0 -73
  72. data/docs/analyzers/fofa.md +0 -31
  73. data/docs/analyzers/greynoise.md +0 -26
  74. data/docs/analyzers/hunterhow.md +0 -33
  75. data/docs/analyzers/index.md +0 -104
  76. data/docs/analyzers/onyphe.md +0 -26
  77. data/docs/analyzers/otx.md +0 -28
  78. data/docs/analyzers/passivetotal.md +0 -52
  79. data/docs/analyzers/pulsedive.md +0 -28
  80. data/docs/analyzers/securitytrails.md +0 -41
  81. data/docs/analyzers/shodan.md +0 -26
  82. data/docs/analyzers/urlscan.md +0 -28
  83. data/docs/analyzers/virustotal.md +0 -43
  84. data/docs/analyzers/virustotal_intelligence.md +0 -33
  85. data/docs/analyzers/zoomeye.md +0 -38
  86. data/docs/configuration.md +0 -35
  87. data/docs/emitters/database.md +0 -22
  88. data/docs/emitters/hive.md +0 -26
  89. data/docs/emitters/index.md +0 -36
  90. data/docs/emitters/misp.md +0 -21
  91. data/docs/emitters/slack.md +0 -21
  92. data/docs/emitters/webhook.md +0 -63
  93. data/docs/enrichers/google_public_dns.md +0 -19
  94. data/docs/enrichers/index.md +0 -35
  95. data/docs/enrichers/ipinfo.md +0 -26
  96. data/docs/enrichers/shodan.md +0 -22
  97. data/docs/enrichers/whois.md +0 -17
  98. data/docs/github_actions.md +0 -43
  99. data/docs/index.md +0 -11
  100. data/docs/installation.md +0 -31
  101. data/docs/requirements.md +0 -13
  102. data/docs/rule.md +0 -168
  103. data/docs/tags.md +0 -3
  104. data/docs/usage.md +0 -103
  105. data/frontend/.eslintrc.cjs +0 -22
  106. data/frontend/.gitignore +0 -31
  107. data/frontend/.prettierrc.json +0 -8
  108. data/frontend/README.md +0 -3
  109. data/frontend/env.d.ts +0 -5
  110. data/frontend/index.html +0 -21
  111. data/frontend/package-lock.json +0 -7219
  112. data/frontend/package.json +0 -67
  113. data/frontend/public/favicon.ico +0 -0
  114. data/frontend/scripts/swagger_doc_to_yaml.rb +0 -23
  115. data/frontend/src/App.vue +0 -27
  116. data/frontend/src/ace-config.ts +0 -6
  117. data/frontend/src/api-helper.ts +0 -111
  118. data/frontend/src/api.ts +0 -105
  119. data/frontend/src/components/ErrorMessage.vue +0 -31
  120. data/frontend/src/components/Loading.vue +0 -15
  121. data/frontend/src/components/Navbar.vue +0 -42
  122. data/frontend/src/components/Pagination.vue +0 -119
  123. data/frontend/src/components/alert/Alert.vue +0 -87
  124. data/frontend/src/components/alert/Alerts.vue +0 -63
  125. data/frontend/src/components/alert/AlertsWithPagination.vue +0 -90
  126. data/frontend/src/components/alert/AlertsWrapper.vue +0 -128
  127. data/frontend/src/components/alert/Form.vue +0 -169
  128. data/frontend/src/components/artifact/AS.vue +0 -23
  129. data/frontend/src/components/artifact/Artifact.vue +0 -287
  130. data/frontend/src/components/artifact/ArtifactTag.vue +0 -64
  131. data/frontend/src/components/artifact/ArtifactTags.vue +0 -29
  132. data/frontend/src/components/artifact/ArtifactWrapper.vue +0 -57
  133. data/frontend/src/components/artifact/CPEs.vue +0 -23
  134. data/frontend/src/components/artifact/DnsRecords.vue +0 -32
  135. data/frontend/src/components/artifact/Ports.vue +0 -23
  136. data/frontend/src/components/artifact/ReverseDnsNames.vue +0 -23
  137. data/frontend/src/components/artifact/Tags.vue +0 -29
  138. data/frontend/src/components/artifact/WhoisRecord.vue +0 -44
  139. data/frontend/src/components/config/Configs.vue +0 -65
  140. data/frontend/src/components/config/ConfigsWrapper.vue +0 -32
  141. data/frontend/src/components/link/Link.vue +0 -32
  142. data/frontend/src/components/link/Links.vue +0 -42
  143. data/frontend/src/components/rule/EditRule.vue +0 -72
  144. data/frontend/src/components/rule/EditRuleWrapper.vue +0 -48
  145. data/frontend/src/components/rule/Form.vue +0 -158
  146. data/frontend/src/components/rule/InputForm.vue +0 -45
  147. data/frontend/src/components/rule/NewRule.vue +0 -57
  148. data/frontend/src/components/rule/Rule.vue +0 -100
  149. data/frontend/src/components/rule/RuleWrapper.vue +0 -53
  150. data/frontend/src/components/rule/Rules.vue +0 -84
  151. data/frontend/src/components/rule/RulesWrapper.vue +0 -121
  152. data/frontend/src/components/rule/YAML.vue +0 -37
  153. data/frontend/src/components/tag/Tag.vue +0 -65
  154. data/frontend/src/components/tag/Tags.vue +0 -37
  155. data/frontend/src/countries.ts +0 -350
  156. data/frontend/src/index.ts +0 -20
  157. data/frontend/src/links/anyrun.ts +0 -19
  158. data/frontend/src/links/base.ts +0 -14
  159. data/frontend/src/links/censys.ts +0 -20
  160. data/frontend/src/links/crtsh.ts +0 -20
  161. data/frontend/src/links/dnslytics.ts +0 -38
  162. data/frontend/src/links/greynoise.ts +0 -20
  163. data/frontend/src/links/index.ts +0 -40
  164. data/frontend/src/links/intezer.ts +0 -20
  165. data/frontend/src/links/otx.ts +0 -33
  166. data/frontend/src/links/securitytrails.ts +0 -38
  167. data/frontend/src/links/shodan.ts +0 -20
  168. data/frontend/src/links/urlscan.ts +0 -50
  169. data/frontend/src/links/virustotal.ts +0 -72
  170. data/frontend/src/main.ts +0 -41
  171. data/frontend/src/router/index.ts +0 -57
  172. data/frontend/src/rule.ts +0 -14
  173. data/frontend/src/shims-vue.d.ts +0 -6
  174. data/frontend/src/swagger.yaml +0 -771
  175. data/frontend/src/types.ts +0 -188
  176. data/frontend/src/utils.ts +0 -54
  177. data/frontend/src/views/Alerts.vue +0 -20
  178. data/frontend/src/views/Artifact.vue +0 -39
  179. data/frontend/src/views/Configs.vue +0 -20
  180. data/frontend/src/views/EditRule.vue +0 -39
  181. data/frontend/src/views/NewRule.vue +0 -26
  182. data/frontend/src/views/Rule.vue +0 -39
  183. data/frontend/src/views/Rules.vue +0 -20
  184. data/frontend/tests/utils.spec.ts +0 -9
  185. data/frontend/tsconfig.app.json +0 -21
  186. data/frontend/tsconfig.json +0 -14
  187. data/frontend/tsconfig.node.json +0 -13
  188. data/frontend/tsconfig.vitest.json +0 -12
  189. data/frontend/vite.config.ts +0 -24
  190. data/frontend/vitest.config.ts +0 -21
  191. data/lib/mihari/mixins/error_notification.rb +0 -21
  192. data/lib/mihari/services/alert_proxy.rb +0 -97
@@ -1,104 +0,0 @@
1
- # Analyzers
2
-
3
- - [BinaryEdge](binaryedge.md)
4
- - [Censys](censys.md)
5
- - [Circle Passive DNS/SSL](circl.md)
6
- - [crt.sh](crtsh.md)
7
- - [dnstwister](dnstwister.md)
8
- - [Feed](feed.md)
9
- - [Fofa](fofa.md)
10
- - [GreyNoise](greynoise.md)
11
- - [HunterHow](hunterhow.md)
12
- - [Onyphe](onyphe.md)
13
- - [OTX](otx.md)
14
- - [PassiveTotal](passivetotal.md)
15
- - [PulseDive](pulsedive.md)
16
- - [SecurityTrails](securitytrails.md)
17
- - [Shodan](shodan.md)
18
- - [urlscan.io](urlscan.md)
19
- - [VirusTotal](virustotal.md)
20
- - [VirusTotal Intelligence](virustotal_intelligence.md)
21
-
22
- ## Options
23
-
24
- All the analyzers can have optional `options`.
25
-
26
- ```yaml
27
- analyzer: ...
28
- query: ...
29
- options:
30
- retry_times: ...
31
- retry_interval: ...
32
- retry_exponential_backoff: ...
33
- timeout: ...
34
- ignore_error: ...
35
- ```
36
-
37
- Also the following analyzers can have pagination options.
38
-
39
- - [Shodan](./shodan.md)
40
- - [BinaryEdge](./binaryedge.md)
41
- - [Censys](./censys.md)
42
- - [ZoomEye](./zoomeye.md)
43
- - [urlscan.io](./urlscan.md)
44
- - [VirusTotal Intelligence](./virustotal_intelligence.md)
45
- - [HunterHow](./hunterhow.md)
46
-
47
- ```yaml
48
- options:
49
- pagination_interval: ...
50
- pagination_limit: ...
51
- ```
52
-
53
- ### Retry Times
54
-
55
- `retry_times` (`integer`) is a number of times of retry when something goes wrong. Optional. Defaults to 3.
56
-
57
- ### Retry Interval
58
-
59
- `retry_interval` (`integer`) is an interval in seconds between retries. Optional. Defaults to 5.
60
-
61
- ### Retry Exponential Backoff
62
-
63
- `retry_exponential_backoff` (`bool`) controls whether to do exponential backoff. Optional. Defaults to `true`.
64
-
65
- ### Timeout
66
-
67
- `timeout` (`integer`) is an HTTP timeout in seconds. Optional.
68
-
69
- ### Ignore Error
70
-
71
- `ignore_error` (`bool`) controls whether to ignore an error or not. Optional. Defaults to `false`.
72
-
73
- Mihari uses fail-fast approach. For example, if Shodan returns an error, the Censys query next is not triggered because Mihari raises an error before it.
74
-
75
- ```yaml
76
- queries:
77
- - analyzer: shodan
78
- query: ip:1.1.1.1
79
- - analyzer: censys
80
- query: ip:8.8.8.8
81
- ```
82
-
83
- You can set `ignore_error` option to make it fault tolerance.
84
-
85
- ```yaml
86
- queries:
87
- - analyzer: shodan
88
- query: ip:1.1.1.1
89
- options:
90
- ignore_error: true
91
- - analyzer: censys
92
- query: ip:8.8.8.8
93
- ```
94
-
95
- ### Pagination Interval
96
-
97
- `pagination_interval` (`integer`) is an interval in seconds between pagination. Optional. Defaults to 0.
98
-
99
- ### Pagination Limit
100
-
101
- `pagination_limit` (`integer`) is an limit for pagination. Optional. Defaults to 100.
102
-
103
- In the worst case, if something wrong with Mihari or a service, Mihari can drain API quota by doing pagination forever.
104
- `pagination_limit` is a safety valve for that. A number of pagination is limited as `pagination_limit` times.
@@ -1,26 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- ---
5
-
6
- # ONYPHE
7
-
8
- - [https://www.onyphe.io/](https://www.onyphe.io/)
9
-
10
- This analyzer uses ONYPHE API v2 (`/api/v2/simple/datascan`) to search.
11
-
12
- ```yaml
13
- analyzer: onyphe
14
- query: ...
15
- api_key: ...
16
- ```
17
-
18
- ## Components
19
-
20
- ### Query
21
-
22
- `query` (`string`) is a search query.
23
-
24
- ### API Key
25
-
26
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”ONYPHE_API_KEY”"]`.
@@ -1,28 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- - Artifact:Domain
5
- - Passive DNS
6
- ---
7
-
8
- # OTX
9
-
10
- - [https://otx.alienvault.com/](https://otx.alienvault.com/dashboard/new)
11
-
12
- This analyzer uses [OTX API v1](https://otx.alienvault.com/api) (`/api/v1/indicators/`) API to search.
13
-
14
- ```yaml
15
- analyzer: otx
16
- query: ...
17
- api_key: ...
18
- ```
19
-
20
- ## Components
21
-
22
- ### Query
23
-
24
- `query` (`string`) is a passive DNS search query. Domain or IP address.
25
-
26
- ### API Key
27
-
28
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”OTX_API_KEY”"]`.
@@ -1,52 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- - Artifact:Domain
5
- - Passive DNS
6
- - Passive SSL
7
- - Reverse Whois
8
- ---
9
-
10
- # PassiveTotal
11
-
12
- - [https://community.riskiq.com/](https://community.riskiq.com/home)
13
-
14
- This analyzer uses [PassvieTotal API](https://api.passivetotal.org/index.html).
15
-
16
- An API endpoint to use is changed based on a type of a query.
17
-
18
- | Query | API endpoint | Artifact |
19
- | --------------------------------------- | ----------------------------- | ---------- |
20
- | IP address | `/v2/dns/passive` | Domain |
21
- | Domain | `/v2/dns/passive` | IP address |
22
- | Mail | `/v2/whois/search` | Domain |
23
- | Hash (SSL certificate SHA1 fingerprint) | `/v2/ssl-certificate/history` | IP address |
24
-
25
- ```yaml
26
- analyzer: passivetotal
27
- query: ...
28
- username: ...
29
- api_key: ...
30
- ```
31
-
32
- ## Components
33
-
34
- ### Analyzer
35
-
36
- `analyzer` (`string`) should be either of `passivetotal` and `pt`.
37
-
38
- ### Query
39
-
40
- `query` (`string`) is a passive DNS/SSL or reverse whois search query. Domain, IP address, mail or SHA1 certificate fingerprint.
41
-
42
- - Passive DNS: Domain, IP Address
43
- - Passive SSL: SHA1 certificate fingerprint
44
- - Reverse whois: mail
45
-
46
- ### Username
47
-
48
- `username` (`string`) is a username. Optional. Defaults to `ENV[”PASSIVETOTAL_USERNAME"]`.
49
-
50
- ### API Key
51
-
52
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”PASSIVETOTAL_API_KEY"]`.
@@ -1,28 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- - Artifact:Domain
5
- - Passive DNS
6
- ---
7
-
8
- # Pulsedive
9
-
10
- - [https://pulsedive.com/](https://pulsedive.com/)
11
-
12
- This analyzer uses [Pulsedive API](https://pulsedive.com/api/) (`/api/info.php`) to search.
13
-
14
- ```yaml
15
- analyzer: pulsedive
16
- query: ...
17
- api_key: ...
18
- ```
19
-
20
- ## Components
21
-
22
- ### Query
23
-
24
- `query` (`string`) is a passive DNS search query. Domain or IP address.
25
-
26
- ### API Key
27
-
28
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”PULSEDIVE_API_KEY"]`.
@@ -1,41 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- - Artifact:Domain
5
- - Passive DNS
6
- - Reverse Whois
7
- ---
8
-
9
- # SecurityTrails
10
-
11
- - [https://securitytrails.com/](https://securitytrails.com/)
12
-
13
- This analyzer uses [SecurityTrails API](https://docs.securitytrails.com/docs).
14
-
15
- An API endpoint to use is changed based on a type of a query.
16
-
17
- | Query type | API endpoint | Artifact |
18
- | ---------- | ------------------ | ---------- |
19
- | IP address | `/v1/domains/list` | Domain |
20
- | Domain | `/v1/history/` | IP address |
21
- | Mail | `/v1/domains/list` | Domain |
22
-
23
- ```yaml
24
- analyzer: securitytrails
25
- query: ...
26
- api_key: ...
27
- ```
28
-
29
- ## Components
30
-
31
- ### Analyzer
32
-
33
- `analyzer` (`string`) should be either of `securitytrails` and `st`.
34
-
35
- ### Query
36
-
37
- `query` (`string`) is a passive DNS search/reverse whois query. Domain, IP address or mail.
38
-
39
- ### API Key
40
-
41
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”SECURITYTRAILS_API_KEY"]`.
@@ -1,26 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- ---
5
-
6
- # Shodan
7
-
8
- - [https://shodan.io/](https://shodan.io/)
9
-
10
- This analyzer uses [Shodan REST AP](https://developer.shodan.io/api) (`/shodan/host/search`) API to search. Pagination is supported.
11
-
12
- ```yaml
13
- analyzer: shodan
14
- query: ...
15
- api_key: ...
16
- ```
17
-
18
- ## Components
19
-
20
- ### Query
21
-
22
- `query` (`string`) is a search query.
23
-
24
- ### API Key
25
-
26
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”SHODAN_API_KEY"]`.
@@ -1,28 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- - Artifact:Domain
5
- - Artifact:URL
6
- ---
7
-
8
- # urlscan.io
9
-
10
- - [https://urlscan.io/](https://urlscan.io/)
11
-
12
- This analyzer uses [urlscan.io](http://urlscan.io) API (`/api/v1/search`) to search. Pagination is supported.
13
-
14
- ```yaml
15
- analyzer: urlscan
16
- query: ...
17
- api_key: ...
18
- ```
19
-
20
- ## Components
21
-
22
- ### Query
23
-
24
- `query` (`string`) is a search query.
25
-
26
- ### API Key
27
-
28
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”URLSCAN_API_KEY"]`.
@@ -1,43 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- - Artifact:Domain
5
- - Passive DNS
6
- ---
7
-
8
- # VirusTotal
9
-
10
- - [https://www.virustotal.com](https://www.virustotal.com/gui/home/search)
11
-
12
- This analyzer uses VirusTotal API v3.
13
-
14
- An API endpoint to use is changed based on a type of a query.
15
-
16
- ::: top
17
-
18
- Note that this analyzer only checks passive DNS data of a given query (domain or IP address).
19
-
20
- | Query | API endpoint | Artifact |
21
- | ---------- | ----------------------- | ---------- |
22
- | IP address | `/api/v3/ip_addresses/` | Domain |
23
- | Domain | `/api/v3/domains/` | IP address |
24
-
25
- ```yaml
26
- analyzer: virustotal
27
- query: ...
28
- api_key: ...
29
- ```
30
-
31
- ## Components
32
-
33
- ### Analyzer
34
-
35
- `analyzer` (`string`) should be either of `virustoal` and `vt`.
36
-
37
- ### Query
38
-
39
- `query` (`string`) is a passive DNS search query. Domain or IP address.
40
-
41
- ### API Key
42
-
43
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”VIRUSTOTAL_API_KEY"]`.
@@ -1,33 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- - Artifact:Domain
5
- - Artifact:URL
6
- - Artifact:Hash
7
- ---
8
-
9
- # VirusTotal Intelligence
10
-
11
- - [https://www.virustotal.com](https://www.virustotal.com/gui/home/search)
12
-
13
- This analyzer uses VirusTotal Intelligence API. Pagination is supported.
14
-
15
- ```yaml
16
- analyzer: virustotal_intelligence
17
- query: ...
18
- api_key: ...
19
- ```
20
-
21
- ## Components
22
-
23
- ### Analyzer
24
-
25
- `analyzer` (`string`) should be either of `virustotal_intelligence` and ``.
26
-
27
- ### Query
28
-
29
- `query` (`string`) is a search query.
30
-
31
- ### API Key
32
-
33
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”VIRUSTOTAL_API_KEY"]`.
@@ -1,38 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
4
- ---
5
-
6
- # ZoomEye
7
-
8
- - [https://zoomeye.org/](https://zoomeye.org/)
9
-
10
- This analyzer uses ZoomEye API v3. Pagination is supported.
11
-
12
- An API endpoint to use is changed based on a `type` option.
13
-
14
- | Type | API endpoint | Artifact type |
15
- | ---- | -------------- | ------------- |
16
- | web | `/web/search` | IP address |
17
- | host | `/host/search` | IP address |
18
-
19
- ```yaml
20
- analyzer: zoomeye
21
- query: ...
22
- type: ...
23
- api_key: ...
24
- ```
25
-
26
- ## Components
27
-
28
- ### Query
29
-
30
- `query` (`string`) is a search query.
31
-
32
- ### Type
33
-
34
- `type` (`string`) determines a search type. `web` or `host`.
35
-
36
- ### API Key
37
-
38
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”ZOOMEYE_API_KEY"]`.
@@ -1,35 +0,0 @@
1
- # Configuration
2
-
3
- Configuration can be done via environment variables.
4
-
5
- | Environmental Variable | Description | Default |
6
- | ---------------------- | ------------------------------- | ---------------------- |
7
- | DATABASE_URL | Database URL | `sqlite3:///mihari.db` |
8
- | BINARYEDGE_API_KEY | BinaryEdge API key | |
9
- | CENSYS_ID | Censys API ID | |
10
- | CENSYS_SECRET | Censys secret | |
11
- | CIRCL_PASSIVE_PASSWORD | CIRCL passive DNS/SSL password | |
12
- | CIRCL_PASSIVE_USERNAME | CIRCL passive DNS/SSL username, | |
13
- | IPINFO_API_KEY | IPInfo API key (token) | |
14
- | MISP_URL | MISP URL | |
15
- | MISP_API_KEY | MISP API key | |
16
- | ONYPHE_API_KEY | Onyphe API key | |
17
- | OTX_API_KEY | OTX API key | |
18
- | PASSIVETOTAL_API_KEY | PassiveTotal API key | |
19
- | PASSIVETOTAL_USERNAME | PassiveTotal username | |
20
- | PULSEDIVE_API_KEY | Pulsedive API key | |
21
- | SECURITYTRAILS_API_KEY | SecurityTrails API key | |
22
- | SHODAN_API_KEY | Shodan API key | |
23
- | SLACK_CHANNEL | Slack channel name | `#general` |
24
- | SLACK_WEBHOOK_URL | Slack Webhook URL | |
25
- | THEHIVE_URL | TheHive URL, | |
26
- | THEHIVE_API_KEY | TheHive API key, | |
27
- | URLSCAN_API_KEY | urlscan.io API key, | |
28
- | VIRUSTOTAL_API_KEY | VirusTotal API key | |
29
- | ZOOMEYE_API_KEY | ZoomEye API key | |
30
- | SENTRY_DSN | Sentry DSN | |
31
- | RETRY_INTERVAL | Retry interval | 5 |
32
- | RETRY_TIMES | Retry times | 3 |
33
- | PAGINATION_LIMIT | Pagination limit | 100 |
34
-
35
- Or you can set values through `.env` file. Values in `.env` file will be automatically loaded.
@@ -1,22 +0,0 @@
1
- # Database
2
-
3
- This emitter stores data in a database. This emitter uses SQLite3 by default but you can change to use MySQL or PostgreSQL. The database is a primary database of Mihari. Each data generated by Mihari is stored in the database. You can view the data via the built-in web app.
4
-
5
- Mihari loads a database URL via environment variable `DATABASE_URL`. Defaults to `sqlite3:///mihari.db"` (SQLite3).
6
-
7
- If you want to use MySQL or PostgreSQL, please set a database URL for that.
8
-
9
- - MySQL: `mysql2://username:password@host:3306/database` (+ `gem install mysql2`)
10
- - PostgreSQL: `postgres://username:password@host:5432/database` (+ `gem install pg`)
11
-
12
- ```yaml
13
- emitter: database
14
- ```
15
-
16
- !!! note
17
-
18
- You have to initialize the database by `mihari db migrate`.
19
-
20
- ## ER Diagram
21
-
22
- ![](https://imgur.com/krhoSgh.png)
@@ -1,26 +0,0 @@
1
- # TheHive
2
-
3
- - [https://thehive-project.org/](https://thehive-project.org/)
4
-
5
- This emitter creates an alert on TheHive. TheHive v4 & v5 are supported.
6
-
7
- ```yaml
8
- emitter: thehive
9
- url: ...
10
- api_key: ...
11
- api_version: ...
12
- ```
13
-
14
- ## Components
15
-
16
- ### URL
17
-
18
- `url` (`string`) is a TheHive URL. Optional. Defaults to `ENV[”THEHIVE_URL”]`.
19
-
20
- ### API Key
21
-
22
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”THEHIVE_API_KEY”]`.
23
-
24
- ### API Version
25
-
26
- `api_version` (`string`) is a version of The Hive API. Optional. `v4` or `v5`. Defaults to `ENV[”THEHIVE_API_VERSION”]`.
@@ -1,36 +0,0 @@
1
- # Emitters
2
-
3
- - [Database](database.md)
4
- - [TheHive](hive.md)
5
- - [MISP](misp.md)
6
- - [Slack](slack.md)
7
- - [Webhook](webhook.md)
8
-
9
- ## Options
10
-
11
- All the emitters can have optional `options`.
12
-
13
- ```yaml
14
- emitter: ...
15
- options:
16
- timeout: ...
17
- retry_times: ...
18
- retry_interval: ...
19
- retry_exponential_backoff: ...
20
- ```
21
-
22
- ### Timeout
23
-
24
- `timeout` (`integer`) is an HTTP timeout in seconds. Optional.
25
-
26
- ### Retry Times
27
-
28
- `retry_times` (`integer`) is a number of times of retry when something goes wrong. Optional. Defaults to 3.
29
-
30
- ### Retry Interval
31
-
32
- `retry_interval` (`integer`) is an interval in seconds between retries. Optional. Defaults to 5.
33
-
34
- ### Retry Exponential Backoff
35
-
36
- `retry_exponential_backoff` (`bool`) controls whether to do exponential backoff. Optional. Defaults to `true`.
@@ -1,21 +0,0 @@
1
- # MISP
2
-
3
- - [https://www.misp-project.org/](https://www.misp-project.org/)
4
-
5
- This emitter creates an event on MISP based on an alert. MISP v2 is supported.
6
-
7
- ```yaml
8
- emitter: misp
9
- url: ...
10
- api_key: ...
11
- ```
12
-
13
- ## Components
14
-
15
- ### URL
16
-
17
- `url` (`string`) is a MISP URL. Optional. Defaults to `ENV[MISP_URL]`.
18
-
19
- ### API Key
20
-
21
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”MISP_API_KEY”]`.
@@ -1,21 +0,0 @@
1
- # Slack
2
-
3
- - [https://slack.com/](https://slack.com/intl/ja-jp/)
4
-
5
- This emitter post a message to Slack via incoming webhook.
6
-
7
- ```yaml
8
- emitter: slack
9
- webhook_url: ...
10
- channel: ...
11
- ```
12
-
13
- ## Components
14
-
15
- ### Webhook URL
16
-
17
- `url` (`string`) is a Slack's incoming webhook URL. Optional. Defaults to `ENV[SLACK_WEBHOOK_URL]`.
18
-
19
- ### API Key
20
-
21
- `channel` (`string`) is a Slack channel to sent a message. Optional. Defaults to `ENV[SLACK_CHANNEL]` or `#general`.
@@ -1,63 +0,0 @@
1
- # Webhook
2
-
3
- This emitter creates an HTTP request payload based on the specified conditions.
4
-
5
- ```yaml
6
- emitter: webhook
7
- url: ...
8
- method: ...
9
- headers: ...
10
- template: ...
11
- ```
12
-
13
- ## Components
14
-
15
- ### URL
16
-
17
- `url` (`string`) is a webhook URL.
18
-
19
- ### Method
20
-
21
- `method` (`string`)is an HTTP method. Optional. Defaults to `POST`.
22
-
23
- ### Headers
24
-
25
- `headers` (`hash`) are HTTP headers. Optional.
26
-
27
- ### Template
28
-
29
- `template` (`string`) is an [ERB](https://github.com/ruby/erb) template to customize the payload to sent. A template should generate a valid JSON.
30
-
31
- You can use the following parameters inside an ERB template.
32
-
33
- - `rule`: a rule
34
- - `artifacts`: a list of artifacts
35
-
36
- ## Examples
37
-
38
- ### ThreatFox
39
-
40
- ```yaml
41
- - emitter: webhook
42
- url: https://threatfox-api.abuse.ch/api/v1/
43
- headers:
44
- api-key: YOUR_API_KEY
45
- template: threatfox.erb
46
- ```
47
-
48
- ```ruby
49
- {
50
- "query": "submit_ioc",
51
- "threat_type": "payload_delivery",
52
- "ioc_type": "ip:port",
53
- "malware": "foobar",
54
- "confidence_level": 100,
55
- "anonymous": 0,
56
- "iocs": [
57
- <% @artifacts.select { |artifact| artifact.data_type == "ip" }.each_with_index do |artifact, idx| %>
58
- "<%= artifact.data %>:80"
59
- <%= ',' if idx < (@artifacts.length - 1) %>
60
- <% end %>
61
- ]
62
- }
63
- ```