mihari 5.7.0 → 5.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/lib/mihari/actor.rb +10 -4
- data/lib/mihari/cli/main.rb +2 -0
- data/lib/mihari/clients/base.rb +23 -1
- data/lib/mihari/clients/binaryedge.rb +1 -3
- data/lib/mihari/clients/censys.rb +1 -2
- data/lib/mihari/clients/crtsh.rb +2 -3
- data/lib/mihari/clients/dnstwister.rb +1 -2
- data/lib/mihari/clients/fofa.rb +1 -3
- data/lib/mihari/clients/greynoise.rb +1 -2
- data/lib/mihari/clients/hunterhow.rb +1 -2
- data/lib/mihari/clients/misp.rb +1 -2
- data/lib/mihari/clients/onyphe.rb +1 -2
- data/lib/mihari/clients/otx.rb +2 -14
- data/lib/mihari/clients/passivetotal.rb +3 -16
- data/lib/mihari/clients/publsedive.rb +2 -17
- data/lib/mihari/clients/securitytrails.rb +3 -25
- data/lib/mihari/clients/shodan.rb +1 -2
- data/lib/mihari/clients/the_hive.rb +1 -2
- data/lib/mihari/clients/urlscan.rb +1 -2
- data/lib/mihari/clients/virustotal.rb +3 -17
- data/lib/mihari/clients/zoomeye.rb +9 -19
- data/lib/mihari/commands/alert.rb +11 -9
- data/lib/mihari/commands/database.rb +4 -1
- data/lib/mihari/commands/mixins.rb +11 -0
- data/lib/mihari/commands/search.rb +13 -32
- data/lib/mihari/constants.rb +1 -1
- data/lib/mihari/database.rb +1 -1
- data/lib/mihari/enrichers/ipinfo.rb +1 -1
- data/lib/mihari/entities/tag.rb +1 -0
- data/lib/mihari/http.rb +13 -11
- data/lib/mihari/rule.rb +14 -0
- data/lib/mihari/service.rb +12 -2
- data/lib/mihari/services/alert_builder.rb +81 -8
- data/lib/mihari/services/alert_runner.rb +3 -10
- data/lib/mihari/services/rule_builder.rb +8 -10
- data/lib/mihari/services/rule_runner.rb +2 -25
- data/lib/mihari/structs/binaryedge.rb +9 -0
- data/lib/mihari/structs/censys.rb +0 -14
- data/lib/mihari/structs/fofa.rb +3 -0
- data/lib/mihari/structs/google_public_dns.rb +0 -4
- data/lib/mihari/structs/greynoise.rb +0 -6
- data/lib/mihari/structs/hunterhow.rb +0 -6
- data/lib/mihari/structs/ipinfo.rb +0 -2
- data/lib/mihari/structs/onyphe.rb +0 -4
- data/lib/mihari/structs/shodan.rb +0 -2
- data/lib/mihari/structs/urlscan.rb +0 -6
- data/lib/mihari/structs/virustotal_intelligence.rb +0 -8
- data/lib/mihari/version.rb +1 -1
- data/lib/mihari/web/app.rb +20 -17
- data/lib/mihari/web/endpoints/alerts.rb +75 -38
- data/lib/mihari/web/endpoints/artifacts.rb +60 -53
- data/lib/mihari/web/endpoints/ip_addresses.rb +19 -4
- data/lib/mihari/web/endpoints/rules.rb +132 -88
- data/lib/mihari/web/endpoints/tags.rb +15 -13
- data/lib/mihari/web/middleware/error_notification_adapter.rb +8 -3
- data/lib/mihari/web/public/assets/{index-821134e2.js → index-ec641cb0.js} +45 -44
- data/lib/mihari/web/public/index.html +1 -1
- data/lib/mihari/web/public/redoc-static.html +400 -400
- data/lib/mihari.rb +0 -2
- data/mihari.gemspec +5 -5
- data/mkdocs.yml +14 -7
- metadata +13 -140
- data/docs/alternatives.md +0 -5
- data/docs/analyzers/binaryedge.md +0 -26
- data/docs/analyzers/censys.md +0 -31
- data/docs/analyzers/circl.md +0 -37
- data/docs/analyzers/crtsh.md +0 -26
- data/docs/analyzers/dnstwister.md +0 -25
- data/docs/analyzers/feed.md +0 -73
- data/docs/analyzers/fofa.md +0 -31
- data/docs/analyzers/greynoise.md +0 -26
- data/docs/analyzers/hunterhow.md +0 -33
- data/docs/analyzers/index.md +0 -104
- data/docs/analyzers/onyphe.md +0 -26
- data/docs/analyzers/otx.md +0 -28
- data/docs/analyzers/passivetotal.md +0 -52
- data/docs/analyzers/pulsedive.md +0 -28
- data/docs/analyzers/securitytrails.md +0 -41
- data/docs/analyzers/shodan.md +0 -26
- data/docs/analyzers/urlscan.md +0 -28
- data/docs/analyzers/virustotal.md +0 -43
- data/docs/analyzers/virustotal_intelligence.md +0 -33
- data/docs/analyzers/zoomeye.md +0 -38
- data/docs/configuration.md +0 -35
- data/docs/emitters/database.md +0 -22
- data/docs/emitters/hive.md +0 -26
- data/docs/emitters/index.md +0 -36
- data/docs/emitters/misp.md +0 -21
- data/docs/emitters/slack.md +0 -21
- data/docs/emitters/webhook.md +0 -63
- data/docs/enrichers/google_public_dns.md +0 -19
- data/docs/enrichers/index.md +0 -35
- data/docs/enrichers/ipinfo.md +0 -26
- data/docs/enrichers/shodan.md +0 -22
- data/docs/enrichers/whois.md +0 -17
- data/docs/github_actions.md +0 -43
- data/docs/index.md +0 -11
- data/docs/installation.md +0 -31
- data/docs/requirements.md +0 -13
- data/docs/rule.md +0 -168
- data/docs/tags.md +0 -3
- data/docs/usage.md +0 -103
- data/frontend/.eslintrc.cjs +0 -22
- data/frontend/.gitignore +0 -31
- data/frontend/.prettierrc.json +0 -8
- data/frontend/README.md +0 -3
- data/frontend/env.d.ts +0 -5
- data/frontend/index.html +0 -21
- data/frontend/package-lock.json +0 -7219
- data/frontend/package.json +0 -67
- data/frontend/public/favicon.ico +0 -0
- data/frontend/scripts/swagger_doc_to_yaml.rb +0 -23
- data/frontend/src/App.vue +0 -27
- data/frontend/src/ace-config.ts +0 -6
- data/frontend/src/api-helper.ts +0 -111
- data/frontend/src/api.ts +0 -105
- data/frontend/src/components/ErrorMessage.vue +0 -31
- data/frontend/src/components/Loading.vue +0 -15
- data/frontend/src/components/Navbar.vue +0 -42
- data/frontend/src/components/Pagination.vue +0 -119
- data/frontend/src/components/alert/Alert.vue +0 -87
- data/frontend/src/components/alert/Alerts.vue +0 -63
- data/frontend/src/components/alert/AlertsWithPagination.vue +0 -90
- data/frontend/src/components/alert/AlertsWrapper.vue +0 -128
- data/frontend/src/components/alert/Form.vue +0 -169
- data/frontend/src/components/artifact/AS.vue +0 -23
- data/frontend/src/components/artifact/Artifact.vue +0 -287
- data/frontend/src/components/artifact/ArtifactTag.vue +0 -64
- data/frontend/src/components/artifact/ArtifactTags.vue +0 -29
- data/frontend/src/components/artifact/ArtifactWrapper.vue +0 -57
- data/frontend/src/components/artifact/CPEs.vue +0 -23
- data/frontend/src/components/artifact/DnsRecords.vue +0 -32
- data/frontend/src/components/artifact/Ports.vue +0 -23
- data/frontend/src/components/artifact/ReverseDnsNames.vue +0 -23
- data/frontend/src/components/artifact/Tags.vue +0 -29
- data/frontend/src/components/artifact/WhoisRecord.vue +0 -44
- data/frontend/src/components/config/Configs.vue +0 -65
- data/frontend/src/components/config/ConfigsWrapper.vue +0 -32
- data/frontend/src/components/link/Link.vue +0 -32
- data/frontend/src/components/link/Links.vue +0 -42
- data/frontend/src/components/rule/EditRule.vue +0 -72
- data/frontend/src/components/rule/EditRuleWrapper.vue +0 -48
- data/frontend/src/components/rule/Form.vue +0 -158
- data/frontend/src/components/rule/InputForm.vue +0 -45
- data/frontend/src/components/rule/NewRule.vue +0 -57
- data/frontend/src/components/rule/Rule.vue +0 -100
- data/frontend/src/components/rule/RuleWrapper.vue +0 -53
- data/frontend/src/components/rule/Rules.vue +0 -84
- data/frontend/src/components/rule/RulesWrapper.vue +0 -121
- data/frontend/src/components/rule/YAML.vue +0 -37
- data/frontend/src/components/tag/Tag.vue +0 -65
- data/frontend/src/components/tag/Tags.vue +0 -37
- data/frontend/src/countries.ts +0 -350
- data/frontend/src/index.ts +0 -20
- data/frontend/src/links/anyrun.ts +0 -19
- data/frontend/src/links/base.ts +0 -14
- data/frontend/src/links/censys.ts +0 -20
- data/frontend/src/links/crtsh.ts +0 -20
- data/frontend/src/links/dnslytics.ts +0 -38
- data/frontend/src/links/greynoise.ts +0 -20
- data/frontend/src/links/index.ts +0 -40
- data/frontend/src/links/intezer.ts +0 -20
- data/frontend/src/links/otx.ts +0 -33
- data/frontend/src/links/securitytrails.ts +0 -38
- data/frontend/src/links/shodan.ts +0 -20
- data/frontend/src/links/urlscan.ts +0 -50
- data/frontend/src/links/virustotal.ts +0 -72
- data/frontend/src/main.ts +0 -41
- data/frontend/src/router/index.ts +0 -57
- data/frontend/src/rule.ts +0 -14
- data/frontend/src/shims-vue.d.ts +0 -6
- data/frontend/src/swagger.yaml +0 -771
- data/frontend/src/types.ts +0 -188
- data/frontend/src/utils.ts +0 -54
- data/frontend/src/views/Alerts.vue +0 -20
- data/frontend/src/views/Artifact.vue +0 -39
- data/frontend/src/views/Configs.vue +0 -20
- data/frontend/src/views/EditRule.vue +0 -39
- data/frontend/src/views/NewRule.vue +0 -26
- data/frontend/src/views/Rule.vue +0 -39
- data/frontend/src/views/Rules.vue +0 -20
- data/frontend/tests/utils.spec.ts +0 -9
- data/frontend/tsconfig.app.json +0 -21
- data/frontend/tsconfig.json +0 -14
- data/frontend/tsconfig.node.json +0 -13
- data/frontend/tsconfig.vitest.json +0 -12
- data/frontend/vite.config.ts +0 -24
- data/frontend/vitest.config.ts +0 -21
- data/lib/mihari/mixins/error_notification.rb +0 -21
- data/lib/mihari/services/alert_proxy.rb +0 -97
data/docs/analyzers/index.md
DELETED
@@ -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.
|
data/docs/analyzers/onyphe.md
DELETED
@@ -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”"]`.
|
data/docs/analyzers/otx.md
DELETED
@@ -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"]`.
|
data/docs/analyzers/pulsedive.md
DELETED
@@ -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"]`.
|
data/docs/analyzers/shodan.md
DELETED
@@ -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"]`.
|
data/docs/analyzers/urlscan.md
DELETED
@@ -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"]`.
|
data/docs/analyzers/zoomeye.md
DELETED
@@ -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"]`.
|
data/docs/configuration.md
DELETED
@@ -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.
|
data/docs/emitters/database.md
DELETED
@@ -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)
|
data/docs/emitters/hive.md
DELETED
@@ -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”]`.
|
data/docs/emitters/index.md
DELETED
@@ -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`.
|
data/docs/emitters/misp.md
DELETED
@@ -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”]`.
|
data/docs/emitters/slack.md
DELETED
@@ -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`.
|
data/docs/emitters/webhook.md
DELETED
@@ -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
|
-
```
|