mihari 5.4.4 → 5.4.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -25
- data/docs/alternatives.md +5 -0
- data/docs/analyzers/binaryedge.md +26 -0
- data/docs/analyzers/censys.md +31 -0
- data/docs/analyzers/circl.md +37 -0
- data/docs/analyzers/crtsh.md +26 -0
- data/docs/analyzers/dnstwister.md +25 -0
- data/docs/analyzers/feed.md +73 -0
- data/docs/analyzers/greynoise.md +26 -0
- data/docs/analyzers/hunterhow.md +33 -0
- data/docs/analyzers/index.md +79 -0
- data/docs/analyzers/onyphe.md +26 -0
- data/docs/analyzers/otx.md +28 -0
- data/docs/analyzers/passivetotal.md +48 -0
- data/docs/analyzers/pulsedive.md +28 -0
- data/docs/analyzers/securitytrails.md +37 -0
- data/docs/analyzers/shodan.md +26 -0
- data/docs/analyzers/urlscan.md +28 -0
- data/docs/analyzers/virustotal.md +39 -0
- data/docs/analyzers/virustotal_intelligence.md +29 -0
- data/docs/analyzers/zoomeye.md +33 -0
- data/docs/configuration.md +35 -0
- data/docs/emitters/database.md +22 -0
- data/docs/emitters/hive.md +26 -0
- data/docs/emitters/index.md +7 -0
- data/docs/emitters/misp.md +21 -0
- data/docs/emitters/slack.md +26 -0
- data/docs/emitters/webhook.md +63 -0
- data/docs/enrichers/google_public_dns.md +19 -0
- data/docs/enrichers/index.md +6 -0
- data/docs/enrichers/ipinfo.md +19 -0
- data/docs/enrichers/shodan.md +22 -0
- data/docs/enrichers/whois.md +17 -0
- data/docs/github_actions.md +43 -0
- data/docs/index.md +13 -0
- data/docs/installation.md +31 -0
- data/docs/requirements.md +20 -0
- data/docs/rule.md +171 -0
- data/docs/tags.md +3 -0
- data/docs/usage.md +100 -0
- data/frontend/package-lock.json +232 -229
- data/frontend/package.json +7 -7
- data/lib/mihari/analyzers/feed.rb +7 -7
- data/lib/mihari/version.rb +1 -1
- data/lib/mihari/web/public/assets/{index-ef33a6cd.js → index-0a5a47bf.js} +43 -41
- data/lib/mihari/web/public/index.html +1 -1
- data/mihari.gemspec +1 -1
- data/mkdocs.yml +35 -0
- data/requirements.txt +2 -0
- metadata +45 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 685244b2cf09a001eacff1c1e0fa1e4fecb44e8affee30dd2bd7914e65cba594
|
4
|
+
data.tar.gz: 427285d6992f44011dee5b0038c79da4b0b0958062869b1547d36190d1b27656
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06e99eed502d4df71a79104a7dc1d29bed954866dd3523971f1883316dec2eb74ffdff1f78df64e711ffb65f92e4474e7b45b4057e5e8e84295e4a2677b87dd4
|
7
|
+
data.tar.gz: 434ede07d0f8c50626bc975f5c0278013ae7bd989e90c7ccbf8d8f031c93e1313fa9d8fffc17d21f1aaf6893b41a027087ef78f3d523461b857038aee0a8d1b4
|
data/README.md
CHANGED
@@ -13,25 +13,9 @@
|
|
13
13
|
|
14
14
|
---
|
15
15
|
|
16
|
-
|
16
|
+
A query aggregator for OSINT based threat hunting.
|
17
17
|
|
18
|
-
|
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
|
-
|
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"]`.
|