mihari 5.5.0 → 5.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/docs/analyzers/binaryedge.md +1 -1
  3. data/docs/analyzers/censys.md +1 -1
  4. data/docs/analyzers/circl.md +1 -1
  5. data/docs/analyzers/crtsh.md +1 -1
  6. data/docs/analyzers/dnstwister.md +1 -1
  7. data/docs/analyzers/greynoise.md +1 -1
  8. data/docs/analyzers/hunterhow.md +1 -1
  9. data/docs/analyzers/index.md +29 -15
  10. data/docs/analyzers/onyphe.md +1 -1
  11. data/docs/analyzers/otx.md +2 -2
  12. data/docs/analyzers/passivetotal.md +6 -2
  13. data/docs/analyzers/pulsedive.md +2 -2
  14. data/docs/analyzers/securitytrails.md +6 -2
  15. data/docs/analyzers/shodan.md +1 -1
  16. data/docs/analyzers/urlscan.md +3 -3
  17. data/docs/analyzers/virustotal.md +6 -2
  18. data/docs/analyzers/virustotal_intelligence.md +8 -4
  19. data/docs/analyzers/zoomeye.md +5 -0
  20. data/docs/emitters/hive.md +1 -1
  21. data/docs/emitters/slack.md +0 -5
  22. data/docs/enrichers/google_public_dns.md +1 -1
  23. data/docs/enrichers/ipinfo.md +2 -2
  24. data/docs/enrichers/shodan.md +4 -4
  25. data/docs/enrichers/whois.md +1 -1
  26. data/docs/rule.md +1 -4
  27. data/docs/usage.md +5 -2
  28. data/frontend/package-lock.json +3 -3
  29. data/frontend/src/components/ErrorMessage.vue +0 -1
  30. data/frontend/src/components/alert/Alerts.vue +0 -1
  31. data/frontend/src/components/alert/AlertsWithPagination.vue +0 -1
  32. data/frontend/src/components/alert/AlertsWrapper.vue +0 -6
  33. data/frontend/src/components/alert/Form.vue +1 -3
  34. data/frontend/src/components/artifact/Artifact.vue +0 -17
  35. data/frontend/src/components/artifact/ArtifactWrapper.vue +0 -2
  36. data/frontend/src/components/artifact/WhoisRecord.vue +0 -3
  37. data/frontend/src/components/config/ConfigsWrapper.vue +0 -2
  38. data/frontend/src/components/rule/EditRule.vue +0 -3
  39. data/frontend/src/components/rule/EditRuleWrapper.vue +0 -2
  40. data/frontend/src/components/rule/Form.vue +1 -3
  41. data/frontend/src/components/rule/NewRule.vue +0 -3
  42. data/frontend/src/components/rule/Rule.vue +1 -7
  43. data/frontend/src/components/rule/RuleWrapper.vue +0 -2
  44. data/frontend/src/components/rule/RulesWrapper.vue +0 -6
  45. data/frontend/src/swagger.yaml +254 -254
  46. data/lib/mihari/analyzers/base.rb +4 -41
  47. data/lib/mihari/analyzers/circl.rb +1 -1
  48. data/lib/mihari/analyzers/crtsh.rb +1 -1
  49. data/lib/mihari/analyzers/dnstwister.rb +1 -1
  50. data/lib/mihari/analyzers/otx.rb +1 -1
  51. data/lib/mihari/analyzers/passivetotal.rb +10 -1
  52. data/lib/mihari/analyzers/pulsedive.rb +2 -2
  53. data/lib/mihari/analyzers/rule.rb +24 -59
  54. data/lib/mihari/analyzers/securitytrails.rb +10 -1
  55. data/lib/mihari/analyzers/virustotal.rb +11 -2
  56. data/lib/mihari/analyzers/virustotal_intelligence.rb +16 -0
  57. data/lib/mihari/analyzers/zoomeye.rb +2 -2
  58. data/lib/mihari/base.rb +69 -0
  59. data/lib/mihari/cli/main.rb +36 -0
  60. data/lib/mihari/clients/base.rb +2 -2
  61. data/lib/mihari/clients/binaryedge.rb +3 -5
  62. data/lib/mihari/clients/censys.rb +3 -3
  63. data/lib/mihari/clients/circl.rb +5 -4
  64. data/lib/mihari/clients/crtsh.rb +3 -2
  65. data/lib/mihari/clients/dnstwister.rb +3 -2
  66. data/lib/mihari/clients/greynoise.rb +2 -2
  67. data/lib/mihari/clients/hunterhow.rb +2 -2
  68. data/lib/mihari/clients/misp.rb +1 -1
  69. data/lib/mihari/clients/onyphe.rb +2 -2
  70. data/lib/mihari/clients/otx.rb +4 -3
  71. data/lib/mihari/clients/passivetotal.rb +5 -4
  72. data/lib/mihari/clients/publsedive.rb +4 -3
  73. data/lib/mihari/clients/securitytrails.rb +5 -3
  74. data/lib/mihari/clients/shodan.rb +2 -2
  75. data/lib/mihari/clients/the_hive.rb +1 -1
  76. data/lib/mihari/clients/urlscan.rb +4 -4
  77. data/lib/mihari/clients/virustotal.rb +2 -2
  78. data/lib/mihari/clients/zoomeye.rb +2 -2
  79. data/lib/mihari/commands/alert.rb +6 -33
  80. data/lib/mihari/commands/rule.rb +7 -12
  81. data/lib/mihari/commands/search.rb +10 -38
  82. data/lib/mihari/constants.rb +3 -3
  83. data/lib/mihari/emitters/base.rb +3 -33
  84. data/lib/mihari/emitters/database.rb +1 -1
  85. data/lib/mihari/enrichers/base.rb +2 -33
  86. data/lib/mihari/enrichers/google_public_dns.rb +9 -0
  87. data/lib/mihari/schemas/analyzer.rb +24 -24
  88. data/lib/mihari/schemas/emitter.rb +6 -13
  89. data/lib/mihari/schemas/enricher.rb +4 -11
  90. data/lib/mihari/schemas/options.rb +27 -0
  91. data/lib/mihari/schemas/rule.rb +2 -2
  92. data/lib/mihari/services/alert_runner.rb +1 -1
  93. data/lib/mihari/services/rule_runner.rb +1 -11
  94. data/lib/mihari/types.rb +1 -14
  95. data/lib/mihari/version.rb +1 -1
  96. data/lib/mihari/web/public/assets/{index-33165282.css → index-56fc2187.css} +1 -1
  97. data/lib/mihari/web/public/assets/{index-b5d817a3.js → index-9cc489e6.js} +2 -2
  98. data/lib/mihari/web/public/index.html +2 -2
  99. data/lib/mihari.rb +67 -37
  100. data/mihari.gemspec +1 -0
  101. data/mkdocs.yml +0 -3
  102. metadata +20 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a0bb32d105b9879fbf87b5bcd5d49a4930cc9e054c42f992bd5c58d883ea8b0
4
- data.tar.gz: 0c547d79f1a1950008f4797a743bf84b7bc1b766d693eb9c2e9b93d150ee4cb9
3
+ metadata.gz: d661d9c83ba421776c4ca19e4a6fe19b980bbcbe86fe5e7628c1c3a15205e8a9
4
+ data.tar.gz: d3a26407b8f8146b86c70cbc443865ff895390ad6f32816f5873464c3f6b4e9d
5
5
  SHA512:
6
- metadata.gz: f9d5217d01e12da402ad9edde9dbeb35c14f6b18061807c48e9e0f6b84419b009b0bbdd4848d3df7302ba4c414c0fe004d7e0ee86a3e9fa29dcaea7bb79b6a8e
7
- data.tar.gz: aa353778dc0f9eb1d525c828e7e662531ba1318f8c380a93cd1f0bd7eca8da33dba7915de297695223cf53a7c3de35419f152ae6d1c199382e6aa7e870a629f2
6
+ metadata.gz: 35a3783578b46a62dd3eafada97f27ad1701df53ad2b53179155daf4e9545feca0ba912d35c9ca9e8ccaf1f5ce5a15760850d723d55af51f80388b14fc41d95d
7
+ data.tar.gz: 8f7b3a5624c0ea5b677b32983e21ca731afb396c1904737b923c2b0082c7d1e3cac141e655eeae441150d01d4a26cd83b50665685211118efe9c4bfad512eeef
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # BinaryEdge
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # Censys
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  - Passive DNS
5
5
  - Passive SSL
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - Domain
3
+ - Artifact:Domain
4
4
  ---
5
5
 
6
6
  # crt.sh
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - Domain
3
+ - Artifact:Domain
4
4
  ---
5
5
 
6
6
  # dnstwister
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # GreyNoise
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # Hunter How
@@ -26,29 +26,28 @@ All the analyzers can have optional `options`.
26
26
  analyzer: ...
27
27
  query: ...
28
28
  options:
29
- timeout: ...
30
- pagination_interval: ...
31
- pagination_limit: ...
32
29
  retry_times: ...
33
30
  retry_interval: ...
34
31
  retry_exponential_backoff: ...
32
+ timeout: ...
35
33
  ignore_error: ...
36
34
  ```
37
35
 
38
- ### Timeout
39
-
40
- `timeout` (`integer`) is an HTTP timeout in seconds. Optional.
41
-
42
- ### Pagination Interval
43
-
44
- `pagination_interval` (`integer`) is an interval in seconds between pagination. Optional. Defaults to 0.
36
+ Also the following analyzers can have pagination options.
45
37
 
46
- ### Pagination Limit
47
-
48
- `pagination_limit` (`integer`) is an limit for pagination. Optional. Defaults to 100.
38
+ - [Shodan](./shodan.md)
39
+ - [BinaryEdge](./binaryedge.md)
40
+ - [Censys](./censys.md)
41
+ - [ZoomEye](./zoomeye.md)
42
+ - [urlscan.io](./urlscan.md)
43
+ - [VirusTotal Intelligence](./virustotal_intelligence.md)
44
+ - [HunterHow](./hunterhow.md)
49
45
 
50
- In the worst case, if something wrong with Mihari or a service, Mihari can drain API quota by doing pagination forever.
51
- `pagination_limit` is a safety valve for that. A number of pagination is limited as `pagination_limit` times.
46
+ ```yaml
47
+ options:
48
+ pagination_interval: ...
49
+ pagination_limit: ...
50
+ ```
52
51
 
53
52
  ### Retry Times
54
53
 
@@ -62,6 +61,10 @@ In the worst case, if something wrong with Mihari or a service, Mihari can drain
62
61
 
63
62
  `retry_exponential_backoff` (`bool`) controls whether to do exponential backoff. Optional. Defaults to `true`.
64
63
 
64
+ ### Timeout
65
+
66
+ `timeout` (`integer`) is an HTTP timeout in seconds. Optional.
67
+
65
68
  ### Ignore Error
66
69
 
67
70
  `ignore_error` (`bool`) controls whether to ignore an error or not. Optional. Defaults to `false`.
@@ -87,3 +90,14 @@ queries:
87
90
  - analyzer: censys
88
91
  query: ip:8.8.8.8
89
92
  ```
93
+
94
+ ### Pagination Interval
95
+
96
+ `pagination_interval` (`integer`) is an interval in seconds between pagination. Optional. Defaults to 0.
97
+
98
+ ### Pagination Limit
99
+
100
+ `pagination_limit` (`integer`) is an limit for pagination. Optional. Defaults to 100.
101
+
102
+ In the worst case, if something wrong with Mihari or a service, Mihari can drain API quota by doing pagination forever.
103
+ `pagination_limit` is a safety valve for that. A number of pagination is limited as `pagination_limit` times.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # ONYPHE
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  ---
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  - Passive SSL
7
7
  - Reverse Whois
@@ -31,6 +31,10 @@ api_key: ...
31
31
 
32
32
  ## Components
33
33
 
34
+ ### Analyzer
35
+
36
+ `analyzer` (`string`) should be either of `passivetotal` and `pt`.
37
+
34
38
  ### Query
35
39
 
36
40
  `query` (`string`) is a passive DNS/SSL or reverse whois search query. Domain, IP address, mail or SHA1 certificate fingerprint.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  ---
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  - Reverse Whois
7
7
  ---
@@ -28,6 +28,10 @@ api_key: ...
28
28
 
29
29
  ## Components
30
30
 
31
+ ### Analyzer
32
+
33
+ `analyzer` (`string`) should be either of `securitytrails` and `st`.
34
+
31
35
  ### Query
32
36
 
33
37
  `query` (`string`) is a passive DNS search/reverse whois query. Domain, IP address or mail.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - IP address
3
+ - Artifact:IP
4
4
  ---
5
5
 
6
6
  # Shodan
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
5
- - URL
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
+ - Artifact:URL
6
6
  ---
7
7
 
8
8
  # urlscan.io
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
5
  - Passive DNS
6
6
  ---
7
7
 
@@ -30,6 +30,10 @@ api_key: ...
30
30
 
31
31
  ## Components
32
32
 
33
+ ### Analyzer
34
+
35
+ `analyzer` (`string`) should be either of `virustoal` and `vt`.
36
+
33
37
  ### Query
34
38
 
35
39
  `query` (`string`) is a passive DNS search query. Domain or IP address.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  tags:
3
- - IP address
4
- - Domain
5
- - URL
6
- - Hash
3
+ - Artifact:IP
4
+ - Artifact:Domain
5
+ - Artifact:URL
6
+ - Artifact:Hash
7
7
  ---
8
8
 
9
9
  # VirusTotal Intelligence
@@ -20,6 +20,10 @@ api_key: ...
20
20
 
21
21
  ## Components
22
22
 
23
+ ### Analyzer
24
+
25
+ `analyzer` (`string`) should be either of `virustotal_intelligence` and ``.
26
+
23
27
  ### Query
24
28
 
25
29
  `query` (`string`) is a search query.
@@ -1,3 +1,8 @@
1
+ ---
2
+ tags:
3
+ - Artifact:IP
4
+ ---
5
+
1
6
  # ZoomEye
2
7
 
3
8
  - [https://zoomeye.org/](https://zoomeye.org/)
@@ -5,7 +5,7 @@
5
5
  This emitter creates an alert on TheHive. TheHive v4 & v5 are supported.
6
6
 
7
7
  ```yaml
8
- emitter: the_hive
8
+ emitter: thehive
9
9
  url: ...
10
10
  api_key: ...
11
11
  api_version: ...
@@ -10,11 +10,6 @@ webhook_url: ...
10
10
  channel: ...
11
11
  ```
12
12
 
13
- | Name | Type | Required? | Default | Desc. |
14
- | ----------- | ------ | --------- | ------------------------------- | ----------------- |
15
- | webhook_url | String | No | ENV[SLACK_WEBHOOK_URL] | Slack webhook URL |
16
- | channel | String | No | ENV[SLACK_CHANNEL] / `#general` | Slack channel |
17
-
18
13
  ## Components
19
14
 
20
15
  ### Webhook URL
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - DNS record
3
+ - Enrichment:DNS_Record
4
4
  ---
5
5
 
6
6
  # Google Public DNS
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tags:
3
- - Autonomous system
4
- - Geolocation
3
+ - Enrichment:Autonomous_System
4
+ - Enrichment:Geolocation
5
5
  ---
6
6
 
7
7
  # ipinfo.io
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  tags:
3
- - Port
4
- - CPE
5
- - DNS record
3
+ - Enrichment:Port
4
+ - Enrichment:CPE
5
+ - Enrichment:DNS_Record
6
6
  ---
7
7
 
8
- # Shodan
8
+ # Shodan (The InternetDB API)
9
9
 
10
10
  - [https://www.shodan.io/](https://www.shodan.io/dashboard)
11
11
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tags:
3
- - Whois
3
+ - Enrichment:Whois
4
4
  ---
5
5
 
6
6
  # Whois
data/docs/rule.md CHANGED
@@ -54,7 +54,7 @@ emitters:
54
54
  - emitter: database
55
55
  - emitter: misp
56
56
  - emitter: slack
57
- - emitter: the_hive
57
+ - emitter: thehive
58
58
  data_types:
59
59
  - hash
60
60
  - ip
@@ -124,9 +124,6 @@ See [Emitters](./emitters/index.md) to know details of each emitter.
124
124
  Defaults to:
125
125
 
126
126
  - `database`
127
- - `misp`
128
- - `slack`
129
- - `the_hive`
130
127
 
131
128
  ### Data Types
132
129
 
data/docs/usage.md CHANGED
@@ -8,8 +8,11 @@ Commands:
8
8
  mihari db # Sub commands for DB
9
9
  mihari help [COMMAND] # Describe available commands or one specific command
10
10
  mihari rule # Sub commands for rule
11
- mihari search [PATH_OR_ID] # Search by a rule
11
+ mihari search [PATH_OR_ID] # Search by a rule (Outputs null if there is no new finding)
12
12
  mihari web # Launch the web app
13
+
14
+ Options:
15
+ -d, [--debug], [--no-debug] # Sets up debug mode
13
16
  ```
14
17
 
15
18
  ## `mihari db`
@@ -43,7 +46,7 @@ Mihari asks whether really you want to update a rule if there is a diff by defau
43
46
 
44
47
  ```bash
45
48
  $ mihari search /path/to/rule.yml
46
- There is a diff in the rule (6254bb74-5e5d-42ad-bc1e-231da0293b0f). Are you sure you want to overwrite the rule? (y/n)
49
+ There is a diff in the rule. Are you sure you want to overwrite the rule? (y/n)
47
50
  ```
48
51
 
49
52
  It can be suppressed by providing `-f`.
@@ -6925,9 +6925,9 @@
6925
6925
  }
6926
6926
  },
6927
6927
  "node_modules/vue-template-compiler": {
6928
- "version": "2.7.14",
6929
- "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz",
6930
- "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==",
6928
+ "version": "2.7.15",
6929
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz",
6930
+ "integrity": "sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==",
6931
6931
  "dev": true,
6932
6932
  "dependencies": {
6933
6933
  "de-indent": "^1.0.2",
@@ -3,7 +3,6 @@
3
3
  <p v-if="error.response.data?.message">{{ error.response.data.message }}</p>
4
4
  <p v-else>{{ error }}</p>
5
5
  </div>
6
-
7
6
  <article class="message" v-if="error.response.data?.details">
8
7
  <div class="message-body">
9
8
  <VueJsonPretty :data="error.response.data.details"></VueJsonPretty>
@@ -6,7 +6,6 @@
6
6
  @refresh-page="refreshPage"
7
7
  @update-tag="updateTag"
8
8
  ></Alert>
9
-
10
9
  <Pagination
11
10
  :total="alerts.total"
12
11
  :currentPage="alerts.currentPage"
@@ -1,6 +1,5 @@
1
1
  <template>
2
2
  <Loading v-if="getAlertsTask.isRunning"></Loading>
3
-
4
3
  <Alerts
5
4
  :alerts="getAlertsTask.last.value"
6
5
  v-if="getAlertsTask.last?.value"
@@ -7,9 +7,7 @@
7
7
  :page="page"
8
8
  :tag="tag"
9
9
  ></FormComponent>
10
-
11
10
  <hr />
12
-
13
11
  <div class="columns">
14
12
  <div class="column">
15
13
  <div class="field is-grouped is-grouped-centered">
@@ -25,14 +23,10 @@
25
23
  </div>
26
24
  </div>
27
25
  </div>
28
-
29
26
  <div v-if="getAlertsTask.performCount > 0">
30
27
  <hr />
31
-
32
28
  <Loading v-if="getAlertsTask.isRunning"></Loading>
33
-
34
29
  <ErrorMessage v-if="getAlertsTask.isError" :error="getAlertsTask.last?.error"></ErrorMessage>
35
-
36
30
  <AlertsComponent
37
31
  :alerts="getAlertsTask.last.value"
38
32
  v-if="getAlertsTask.last?.value"
@@ -36,7 +36,6 @@
36
36
  </div>
37
37
  </div>
38
38
  </div>
39
-
40
39
  <div class="columns">
41
40
  <div class="column">
42
41
  <div class="field is-horizontal">
@@ -61,7 +60,6 @@
61
60
  </div>
62
61
  <div class="column"></div>
63
62
  </div>
64
-
65
63
  <div class="columns">
66
64
  <div class="column">
67
65
  <div class="field is-horizontal">
@@ -95,7 +93,7 @@
95
93
  </template>
96
94
 
97
95
  <script lang="ts">
98
- import { defineComponent, type PropType, ref, toRef,watch } from "vue"
96
+ import { defineComponent, type PropType, ref, toRef, watch } from "vue"
99
97
  import { useRoute } from "vue-router"
100
98
 
101
99
  import type { AlertSearchParams } from "@/types"
@@ -4,9 +4,7 @@
4
4
  <Loading></Loading>
5
5
  <hr />
6
6
  </div>
7
-
8
7
  <h2 class="is-size-2 mb-4">Artifact</h2>
9
-
10
8
  <div class="columns">
11
9
  <div
12
10
  class="column is-half"
@@ -21,7 +19,6 @@
21
19
  </h4>
22
20
  <iframe class="mb-4" :src="googleMapSrc" width="100%" height="240px"></iframe>
23
21
  </div>
24
-
25
22
  <div v-if="urlscanLiveshotSrc">
26
23
  <h4 class="is-size-4 mb-2">
27
24
  Live screenshot
@@ -30,11 +27,9 @@
30
27
  <img :src="urlscanLiveshotSrc" class="liveshot" alt="liveshot" />
31
28
  </div>
32
29
  </div>
33
-
34
30
  <div class="column">
35
31
  <div class="block">
36
32
  <h4 class="is-size-4 mb-2">Information</h4>
37
-
38
33
  <table class="table is-fullwidth is-completely-borderless">
39
34
  <tr>
40
35
  <th>ID</th>
@@ -47,7 +42,6 @@
47
42
  <font-awesome-icon icon="lightbulb"></font-awesome-icon>
48
43
  </span>
49
44
  </button>
50
-
51
45
  <button
52
46
  class="button is-info is-light is-small"
53
47
  @click="flipShowMetadata"
@@ -58,7 +52,6 @@
58
52
  <font-awesome-icon icon="info-circle"></font-awesome-icon>
59
53
  </span>
60
54
  </button>
61
-
62
55
  <button class="button is-light is-small" @click="deleteArtifact">
63
56
  <span>Delete</span>
64
57
  <span class="icon is-small">
@@ -86,7 +79,6 @@
86
79
  </tr>
87
80
  </table>
88
81
  </div>
89
-
90
82
  <div v-if="artifact.metadata && showMetadata">
91
83
  <div class="modal is-active">
92
84
  <div class="modal-background" @click="flipShowMetadata"></div>
@@ -103,45 +95,36 @@
103
95
  </div>
104
96
  </div>
105
97
  </div>
106
-
107
98
  <div class="block" v-if="artifact.autonomousSystem">
108
99
  <h4 class="is-size-4 mb-2">AS</h4>
109
100
  <AS :autonomousSystem="artifact.autonomousSystem"></AS>
110
101
  </div>
111
-
112
102
  <div class="block" v-if="artifact.reverseDnsNames">
113
103
  <h4 class="is-size-4 mb-2">Reverse DNS</h4>
114
104
  <ReverseDnsNames :reverseDnsNames="artifact.reverseDnsNames"></ReverseDnsNames>
115
105
  </div>
116
-
117
106
  <div class="block" v-if="artifact.dnsRecords">
118
107
  <h4 class="is-size-4 mb-2">DNS records</h4>
119
108
  <DnsRecords :dnsRecords="artifact.dnsRecords"></DnsRecords>
120
109
  </div>
121
-
122
110
  <div class="block" v-if="artifact.cpes">
123
111
  <h4 class="is-size-4 mb-2">CPEs</h4>
124
112
  <CPEs :cpes="artifact.cpes"></CPEs>
125
113
  </div>
126
-
127
114
  <div class="block" v-if="artifact.ports">
128
115
  <h4 class="is-size-4 mb-2">Ports</h4>
129
116
  <Ports :ports="artifact.ports"></Ports>
130
117
  </div>
131
-
132
118
  <div class="block" v-if="artifact.whoisRecord">
133
119
  <h4 class="is-size-4 mb-2">Whois record</h4>
134
120
  <WhoisRecord :whoisRecord="artifact.whoisRecord"></WhoisRecord>
135
121
  </div>
136
-
137
122
  <div class="block">
138
123
  <h4 class="is-size-4 mb-2">Links</h4>
139
124
  <Links :data="artifact.data" :type="artifact.dataType"></Links>
140
125
  </div>
141
126
  </div>
142
-
143
127
  <hr />
144
-
145
128
  <div class="column">
146
129
  <h2 class="is-size-2 mb-4">Related alerts</h2>
147
130
  <Alerts :artifact="artifact.data"></Alerts>
@@ -1,8 +1,6 @@
1
1
  <template>
2
2
  <Loading v-if="getArtifactTask.isRunning"></Loading>
3
-
4
3
  <ErrorMessage v-if="getArtifactTask.isError" :error="getArtifactTask.last?.error"></ErrorMessage>
5
-
6
4
  <ArtifactComponent
7
5
  :artifact="getArtifactTask.last.value"
8
6
  @refresh="refresh"
@@ -6,21 +6,18 @@
6
6
  <span class="tag is-light">{{ whoisRecord.registrar?.name || "N/A" }}</span>
7
7
  </div>
8
8
  </div>
9
-
10
9
  <div class="control">
11
10
  <div class="tags has-addons are-medium">
12
11
  <span class="tag is-dark">Created on</span>
13
12
  <span class="tag is-light">{{ whoisRecord.createdOn || "N/A" }}</span>
14
13
  </div>
15
14
  </div>
16
-
17
15
  <div class="control">
18
16
  <div class="tags has-addons are-medium">
19
17
  <span class="tag is-dark">Updated on</span>
20
18
  <span class="tag is-light">{{ whoisRecord.updatedOn || "N/A" }}</span>
21
19
  </div>
22
20
  </div>
23
-
24
21
  <div class="control">
25
22
  <div class="tags has-addons are-medium">
26
23
  <span class="tag is-dark">Exipres on</span>
@@ -1,8 +1,6 @@
1
1
  <template>
2
2
  <Loading v-if="getConfigsTask.isRunning"></Loading>
3
-
4
3
  <ErrorMessage v-if="getConfigsTask.isError" :error="getConfigsTask.last?.error"></ErrorMessage>
5
-
6
4
  <Configs :configs="getConfigsTask.last.value" v-if="getConfigsTask.last?.value"></Configs>
7
5
  </template>
8
6
 
@@ -1,9 +1,7 @@
1
1
  <template>
2
2
  <div class="column">
3
3
  <h2 class="is-size-2 mb-4">Edit rule: {{ rule.id }}</h2>
4
-
5
4
  <InputForm v-model:yaml="yaml" @update-yaml="updateYAML"></InputForm>
6
-
7
5
  <div class="field is-grouped is-grouped-centered">
8
6
  <p class="control">
9
7
  <a class="button is-primary" @click="edit">
@@ -14,7 +12,6 @@
14
12
  </a>
15
13
  </p>
16
14
  </div>
17
-
18
15
  <div v-if="updateRuleTask.last?.error">
19
16
  <hr />
20
17
  <ErrorMessage :error="updateRuleTask.last?.error"></ErrorMessage>