mihari 5.4.4 → 5.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -25
  3. data/docs/alternatives.md +5 -0
  4. data/docs/analyzers/binaryedge.md +26 -0
  5. data/docs/analyzers/censys.md +31 -0
  6. data/docs/analyzers/circl.md +37 -0
  7. data/docs/analyzers/crtsh.md +26 -0
  8. data/docs/analyzers/dnstwister.md +25 -0
  9. data/docs/analyzers/feed.md +73 -0
  10. data/docs/analyzers/greynoise.md +26 -0
  11. data/docs/analyzers/hunterhow.md +33 -0
  12. data/docs/analyzers/index.md +79 -0
  13. data/docs/analyzers/onyphe.md +26 -0
  14. data/docs/analyzers/otx.md +28 -0
  15. data/docs/analyzers/passivetotal.md +48 -0
  16. data/docs/analyzers/pulsedive.md +28 -0
  17. data/docs/analyzers/securitytrails.md +37 -0
  18. data/docs/analyzers/shodan.md +26 -0
  19. data/docs/analyzers/urlscan.md +28 -0
  20. data/docs/analyzers/virustotal.md +39 -0
  21. data/docs/analyzers/virustotal_intelligence.md +29 -0
  22. data/docs/analyzers/zoomeye.md +33 -0
  23. data/docs/configuration.md +35 -0
  24. data/docs/emitters/database.md +22 -0
  25. data/docs/emitters/hive.md +26 -0
  26. data/docs/emitters/index.md +7 -0
  27. data/docs/emitters/misp.md +21 -0
  28. data/docs/emitters/slack.md +26 -0
  29. data/docs/emitters/webhook.md +63 -0
  30. data/docs/enrichers/google_public_dns.md +19 -0
  31. data/docs/enrichers/index.md +6 -0
  32. data/docs/enrichers/ipinfo.md +19 -0
  33. data/docs/enrichers/shodan.md +22 -0
  34. data/docs/enrichers/whois.md +17 -0
  35. data/docs/github_actions.md +43 -0
  36. data/docs/index.md +13 -0
  37. data/docs/installation.md +31 -0
  38. data/docs/requirements.md +20 -0
  39. data/docs/rule.md +171 -0
  40. data/docs/tags.md +3 -0
  41. data/docs/usage.md +100 -0
  42. data/frontend/package-lock.json +232 -229
  43. data/frontend/package.json +7 -7
  44. data/lib/mihari/analyzers/feed.rb +7 -7
  45. data/lib/mihari/version.rb +1 -1
  46. data/lib/mihari/web/public/assets/{index-ef33a6cd.js → index-0a5a47bf.js} +43 -41
  47. data/lib/mihari/web/public/index.html +1 -1
  48. data/mihari.gemspec +1 -1
  49. data/mkdocs.yml +35 -0
  50. data/requirements.txt +2 -0
  51. metadata +45 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f1630070f66c1405dede2ff3d57403f219e7b407293ee7e3dc2b01c765ff148
4
- data.tar.gz: 040a0d28d0eae3b8f0ec81736c8119f667d85e8b473cf1e5022a5e0486e46bf4
3
+ metadata.gz: 685244b2cf09a001eacff1c1e0fa1e4fecb44e8affee30dd2bd7914e65cba594
4
+ data.tar.gz: 427285d6992f44011dee5b0038c79da4b0b0958062869b1547d36190d1b27656
5
5
  SHA512:
6
- metadata.gz: 7a3bb9a719b30d527170567ccea897ead5f253009a2fe4c028b5ca942bd170d5447d9ef3f403e8a80217f1a84371213a62dfad1dcb2a79738b7fc6c9d7427f08
7
- data.tar.gz: 8681c17478418bd04025745d2b0470183b8ebda9b8ef9f561ef1d76ab834091f3d27d0ca04323e597d065b3af95ea3a53b1bc288a79690f8fd93e185e1683c5b
6
+ metadata.gz: 06e99eed502d4df71a79104a7dc1d29bed954866dd3523971f1883316dec2eb74ffdff1f78df64e711ffb65f92e4474e7b45b4057e5e8e84295e4a2677b87dd4
7
+ data.tar.gz: 434ede07d0f8c50626bc975f5c0278013ae7bd989e90c7ccbf8d8f031c93e1313fa9d8fffc17d21f1aaf6893b41a027087ef78f3d523461b857038aee0a8d1b4
data/README.md CHANGED
@@ -13,25 +13,9 @@
13
13
 
14
14
  ---
15
15
 
16
- Mihari is a tool for OSINT based threat hunting.
16
+ A query aggregator for OSINT based threat hunting.
17
17
 
18
- ## How it works
19
-
20
- ![img](https://github.com/ninoseki/mihari/raw/master/images/overview.jpg)
21
-
22
- - Mihari makes a query against Shodan, Censys, VirusTotal, SecurityTrails, etc. and extracts artifacts (IP addresses, domains, URLs or hashes).
23
- - Mihari checks whether the database (SQLite3, PostgreSQL or MySQL) contains the artifacts or not.
24
- - If it doesn't contain the artifacts:
25
- - Mihari saves artifacts in the database.
26
- - Mihari creates an alert on TheHive.
27
- - Mihari sends a notification to Slack.
28
- - Mihari creates an event on MISP.
29
-
30
- Also, you can check the alerts on a built-in web app.
31
-
32
- ![img](https://github.com/ninoseki/mihari/raw/master/images/web_alerts.png)
33
-
34
- ## Supported services
18
+ Mihari can aggregate multiple searches across multiple services in a single rule & persist findings in a database.
35
19
 
36
20
  Mihari supports the following services by default.
37
21
 
@@ -52,13 +36,7 @@ Mihari supports the following services by default.
52
36
  - [VirusTotal](http://virustotal.com) & [VirusTotal Intelligence](https://www.virustotal.com/gui/intelligence-overview)
53
37
  - [ZoomEye](https://zoomeye.org)
54
38
 
55
- ## Docs
56
-
57
- - [Mihari Knowledge Base](https://www.notion.so/Mihari-Knowledge-Base-266994ff61204428ba6cfcebe40b0bd1)
58
-
59
- ## Presentations
60
-
61
- - [Adversary Infrastructure Tracking with Mihari](https://ninoseki.github.io/presentations/Adversary%20Infrastructure%20Tracking%20with%20Mihari.pdf)
39
+ See [documentation](https://ninoseki.github.io/mihari/) for more details.
62
40
 
63
41
  ## License
64
42
 
@@ -0,0 +1,5 @@
1
+ # Alternatives
2
+
3
+ - [InQuest/ThreatIngestor](https://github.com/InQuest/ThreatIngestor) - Extract and aggregate threat intelligence.
4
+ - [thalesgroup-cert/Watcher](https://github.com/thalesgroup-cert/Watcher) - Watcher - Open Source Cybersecurity Threat Hunting Platform. Developed with Django & React JS.
5
+ - [projectdiscovery/uncover](https://github.com/projectdiscovery/uncover) - Quickly discover exposed hosts on the internet using multiple search engines.
@@ -0,0 +1,26 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ ---
5
+
6
+ # BinaryEdge
7
+
8
+ - [https://www.binaryedge.io/](https://www.binaryedge.io/)
9
+
10
+ This analyzer uses [BinaryEdge API V2](https://docs.binaryedge.io/api-v2/) (`/v2/query/search`) to search. Pagination is supported.
11
+
12
+ ```yaml
13
+ analyzer: binaryedge
14
+ query: ...
15
+ api_key: ...
16
+ ```
17
+
18
+ ## Components
19
+
20
+ ### Query
21
+
22
+ `query` is a search query.
23
+
24
+ ### API Key
25
+
26
+ `api_key` is an API key. Optional. Defaults to `ENV[”BINARYEDGE_API_KEY"]`.
@@ -0,0 +1,31 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ ---
5
+
6
+ # Censys
7
+
8
+ - [https://censys.io/](https://censys.io/)
9
+
10
+ This analyzer uses [Censys Search 2.0 REST API](https://search.censys.io/api) to search. Pagination is supported.
11
+
12
+ ```yaml
13
+ analyzer: censys
14
+ query: ...
15
+ id: ...
16
+ secret: ...
17
+ ```
18
+
19
+ ## Components
20
+
21
+ ### Query
22
+
23
+ `query` is a search query.
24
+
25
+ ### ID
26
+
27
+ `id` is a Cencys ID. Optional. Defaults to `ENV[”CENSYS_ID”]`.
28
+
29
+ ### Secret
30
+
31
+ `secret` is a Cencys secret. Optional. Defaults to `ENV[”CENSYS_SECRET”]`.
@@ -0,0 +1,37 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ - Passive DNS
5
+ - Passive SSL
6
+ ---
7
+
8
+ # CIRCL Passive DNS/SSL
9
+
10
+ - [https://www.circl.lu/services/passive-dns/](https://www.circl.lu/services/passive-dns/)
11
+ - [https://www.circl.lu/services/passive-ssl/](https://www.circl.lu/services/passive-ssl/)
12
+
13
+ This analyzer uses CIRCL passive DNS API or passive SSL API:
14
+
15
+ - Use passive DNS API if a query(input) is a domain
16
+ - Use passive SSL API if a query(input) is a SHA1 certificate fingerprint
17
+
18
+ ```yaml
19
+ analyzer: circl
20
+ query: ...
21
+ password: ...
22
+ username: ...
23
+ ```
24
+
25
+ ## Components
26
+
27
+ ### Query
28
+
29
+ `query` is a domain or SHA1 certificate fingerprint.
30
+
31
+ ### Username
32
+
33
+ `username` is a username. Optional. Defaults to `ENV[”CIRCL_PASSIVE_USERNAME”]`.
34
+
35
+ ### Password
36
+
37
+ `password` is a password. Optional. Defaults to `ENV[”CIRCL_PASSIVE_PASSWORD”]`.
@@ -0,0 +1,26 @@
1
+ ---
2
+ tags:
3
+ - Domain
4
+ ---
5
+
6
+ # crt.sh
7
+
8
+ - [https://crt.sh/](https://crt.sh/)
9
+
10
+ This analyzer uses [crt.sh](http://crt.sh)'s (unofficial?) REST API.
11
+
12
+ ```yaml
13
+ analyzer: crtsh
14
+ query: ...
15
+ exclude_expired: ...
16
+ ```
17
+
18
+ ## Components
19
+
20
+ ### Query
21
+
22
+ `query` is a search query.
23
+
24
+ ### Exclude Expired
25
+
26
+ `exclude_expired` (boolean) determines whether to exclude expired domains or not. Optional. Defaults to `true`.
@@ -0,0 +1,25 @@
1
+ ---
2
+ tags:
3
+ - Domain
4
+ ---
5
+
6
+ # dnstwister
7
+
8
+ - [https://dnstwister.report/](https://dnstwister.report/)
9
+
10
+ This analyzer uses [dnstwister API](https://dnstwister.report/api/) to search.
11
+
12
+ ```yaml
13
+ analyzer: dnstwister
14
+ query: ...
15
+ ```
16
+
17
+ ## Components
18
+
19
+ ### Query
20
+
21
+ `query` is a search query.
22
+
23
+ !!! tip
24
+
25
+ There is no need to input a domain in hexadecimal format. This analyzer automatically converts a domain (in string format) into a hexadecimal value.
@@ -0,0 +1,73 @@
1
+ # Feed
2
+
3
+ This analyzer can ingest a feed (JSON or CSV) by specifying conditions.
4
+
5
+ Note that you should write a selector to get proper IoCs from a feed. A selector is based on [jr](https://github.com/yuya-takeyama/jr).
6
+
7
+ ```yaml
8
+ analyzer: feed
9
+ query: ...
10
+ selector: ...
11
+ method: ...
12
+ headers: ...
13
+ params: ...
14
+ data: ...
15
+ json: ...
16
+ ```
17
+
18
+ ## Components
19
+
20
+ ### Query
21
+
22
+ `query` is a URL of a feed.
23
+
24
+ !!! note
25
+
26
+ I know this is a strange naming. It's just for keeping the convention with other analyzers.
27
+
28
+ ### Method
29
+
30
+ `method` is an HTTP method. Defaults to `GET`.
31
+
32
+ ### Selector
33
+
34
+ `selector` is a `jr` selector.
35
+
36
+ ### Headers
37
+
38
+ `headers` (hash) is an HTTP headers. Optional.
39
+
40
+ ### Params
41
+
42
+ `params` (hash) is an HTTP query params. Optional.
43
+
44
+ ### Data
45
+
46
+ `data` (hash) is an HTTP form data. Optional.
47
+
48
+ ### JSON
49
+
50
+ `json` (hash) is an JSON body. Optional.
51
+
52
+ ## Examples
53
+
54
+ ### ThreatFox
55
+
56
+ ```yaml
57
+ analyzer: feed
58
+ query: "https://threatfox-api.abuse.ch/api/v1/"
59
+ method: POST
60
+ json:
61
+ query: get_iocs
62
+ days: 1
63
+ headers:
64
+ selector: "map(&:data).unwrap.map(&:ioc).map { |v| v.start_with?('http://', 'https://') ? v : v.split(':').first }"
65
+ ```
66
+
67
+ ### URLhaus
68
+
69
+ ```yaml
70
+ analyzer: feed
71
+ query: "https://urlhaus.abuse.ch/feeds/country/JP/"
72
+ selector: "map { |v| v[1] }"
73
+ ```
@@ -0,0 +1,26 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ ---
5
+
6
+ # GreyNoise
7
+
8
+ - [https://www.greynoise.io/](https://www.greynoise.io/)
9
+
10
+ This analyzer uses GreyNoise API (`/v2/experimental/gnql`) to search. Pagination is supported.
11
+
12
+ ```yaml
13
+ analyzer: greynoise
14
+ query: ...
15
+ api_key: ...
16
+ ```
17
+
18
+ ## Components
19
+
20
+ ### Query
21
+
22
+ `query` is a GNQL search query.
23
+
24
+ ### API Key
25
+
26
+ `api_key` is an API key. Optional. Defaults to `ENV[”GREYNOISE_API_KEY"]`.
@@ -0,0 +1,33 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ ---
5
+
6
+ # Hunter How
7
+
8
+ - [https://hunter.how/](https://hunter.how/)
9
+
10
+ This analyzer uses Hunter How API (`https://api.hunter.how/search`) to search. Pagination is supported.
11
+
12
+ ```yaml
13
+ analyzer: hunterhow
14
+ query: ...
15
+ api_key: ...
16
+ start_time: ...
17
+ end_time: ...
18
+ ```
19
+
20
+ ## Components
21
+
22
+ ### Query
23
+
24
+ `query` is a search query.
25
+
26
+ ### Start/End Time
27
+
28
+ - `start_time` (date): Only show results after the given date.
29
+ - `end_time` (date): Only show results after the given date.
30
+
31
+ ### API key
32
+
33
+ `api_key` is an API key. Optional. Defaults to `ENV[”HUNTERHOW_API_KEY"]`.
@@ -0,0 +1,79 @@
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
+ - [GreyNoise](greynoise.md)
10
+ - [HunterHow](hunterhow.md)
11
+ - [Onyphe](onyphe.md)
12
+ - [OTX](otx.md)
13
+ - [PassiveTotal](passivetotal.md)
14
+ - [PulseDive](pulsedive.md)
15
+ - [SecurityTrails](securitytrails.md)
16
+ - [Shodan](shodan.md)
17
+ - [urlscan.io](urlscan.md)
18
+ - [VirusTotal](virustotal.md)
19
+ - [VirusTotal Intelligence](virustotal_intelligence.md)
20
+
21
+ ## Options
22
+
23
+ All the analyzers can have optional `options`.
24
+
25
+ ```yaml
26
+ analyzer: ...
27
+ query: ...
28
+ options:
29
+ interval: ...
30
+ pagination_limit: ...
31
+ retry_times: ...
32
+ retry_interval: ...
33
+ ignore_error: ...
34
+ ```
35
+
36
+ ### Interval
37
+
38
+ `interval` is an interval in seconds between pagination. (If an analyzer does pagination). Optional.
39
+
40
+ ### Pagination Limit
41
+
42
+ `pagination_limit` is an limit for pagination. Defaults to 100.
43
+
44
+ In the worst case, if something wrong with Mihari or a service, Mihari can drain API quota by doing pagination forever.
45
+ `pagination_limit` is a safety valve for that. A number of pagination is limited as `pagination_limit` times.
46
+
47
+ ### Retry Times
48
+
49
+ `retry_times` is a number of times of retry when something goes wrong. Defaults to 3.
50
+
51
+ ### Retry Interval
52
+
53
+ `retry_interval` is an interval in seconds between retries. Defaults to 5.
54
+
55
+ ### Ignore Error
56
+
57
+ `ignore_error` controls whether to ignore an error or not. Defaults to `false`.
58
+
59
+ 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.
60
+
61
+ ```yaml
62
+ queries:
63
+ - analyzer: shodan
64
+ query: ip:1.1.1.1
65
+ - analyzer: censys
66
+ query: ip:8.8.8.8
67
+ ```
68
+
69
+ You can set `ignore_error` option to make it fault tolerance.
70
+
71
+ ```yaml
72
+ queries:
73
+ - analyzer: shodan
74
+ query: ip:1.1.1.1
75
+ options:
76
+ ignore_error: true
77
+ - analyzer: censys
78
+ query: ip:8.8.8.8
79
+ ```
@@ -0,0 +1,26 @@
1
+ ---
2
+ tags:
3
+ - IP address
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` is a search query.
23
+
24
+ ### API Key
25
+
26
+ `api_key` is an API key. Optional. Defaults to `ENV[”ONYPHE_API_KEY”"]`.
@@ -0,0 +1,28 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ - 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` is a passive DNS search query. Domain or IP address.
25
+
26
+ ### API Key
27
+
28
+ `api_key` is an API key. Optional. Defaults to `ENV[”OTX_API_KEY”"]`.
@@ -0,0 +1,48 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ - 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
+ ### Query
35
+
36
+ `query` is a passive DNS/SSL or reverse whois search query. Domain, IP address, mail or SHA1 certificate fingerprint.
37
+
38
+ - Passive DNS: Domain, IP Address
39
+ - Passive SSL: SHA1 certificate fingerprint
40
+ - Reverse whois: mail
41
+
42
+ ### Username
43
+
44
+ `username` is a username. Optional. Defaults to `ENV[”PASSIVETOTAL_USERNAME"]`.
45
+
46
+ ### API Key
47
+
48
+ `api_key` is an API key. Optional. Defaults to `ENV[”PASSIVETOTAL_API_KEY"]`.
@@ -0,0 +1,28 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ - 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` is a passive DNS search query. Domain or IP address.
25
+
26
+ ### API Key
27
+
28
+ `api_key` is an API key. Optional. Defaults to `ENV[”PULSEDIVE_API_KEY"]`.
@@ -0,0 +1,37 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ - 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
+ ### Query
32
+
33
+ `query` is a passive DNS search/reverse whois query. Domain, IP address or mail.
34
+
35
+ ### API Key
36
+
37
+ `api_key` is an API key. Optional. Defaults to `ENV[”SECURITYTRAILS_API_KEY"]`.
@@ -0,0 +1,26 @@
1
+ ---
2
+ tags:
3
+ - IP address
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` is a search query.
23
+
24
+ ### API Key
25
+
26
+ `api_key` is an API key. Optional. Defaults to `ENV[”SHODAN_API_KEY"]`.
@@ -0,0 +1,28 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ - Domain
5
+ - 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` is a search query.
25
+
26
+ ### API Key
27
+
28
+ `api_key` is an API key. Optional. Defaults to `ENV[”URLSCAN_API_KEY"]`.
@@ -0,0 +1,39 @@
1
+ ---
2
+ tags:
3
+ - IP address
4
+ - 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
+ ### Query
34
+
35
+ `query` is a passive DNS search query. Domain or IP address.
36
+
37
+ ### API Key
38
+
39
+ `api_key` is an API key. Optional. Defaults to `ENV[”VIRUSTOTAL_API_KEY"]`.