mihari 5.6.2 → 5.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (267) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -1
  3. data/README.md +1 -0
  4. data/config.ru +1 -1
  5. data/lib/mihari/actor.rb +18 -2
  6. data/lib/mihari/analyzers/base.rb +13 -12
  7. data/lib/mihari/analyzers/binaryedge.rb +4 -1
  8. data/lib/mihari/analyzers/censys.rb +4 -2
  9. data/lib/mihari/analyzers/circl.rb +4 -1
  10. data/lib/mihari/analyzers/crtsh.rb +4 -1
  11. data/lib/mihari/analyzers/dnstwister.rb +4 -1
  12. data/lib/mihari/analyzers/feed.rb +3 -0
  13. data/lib/mihari/analyzers/fofa.rb +65 -0
  14. data/lib/mihari/analyzers/greynoise.rb +4 -1
  15. data/lib/mihari/analyzers/hunterhow.rb +6 -1
  16. data/lib/mihari/analyzers/onyphe.rb +4 -1
  17. data/lib/mihari/analyzers/otx.rb +4 -1
  18. data/lib/mihari/analyzers/passivetotal.rb +4 -1
  19. data/lib/mihari/analyzers/pulsedive.rb +3 -0
  20. data/lib/mihari/analyzers/securitytrails.rb +4 -1
  21. data/lib/mihari/analyzers/shodan.rb +4 -1
  22. data/lib/mihari/analyzers/urlscan.rb +4 -1
  23. data/lib/mihari/analyzers/virustotal.rb +4 -1
  24. data/lib/mihari/analyzers/virustotal_intelligence.rb +4 -1
  25. data/lib/mihari/analyzers/zoomeye.rb +5 -2
  26. data/lib/mihari/cli/alert.rb +3 -0
  27. data/lib/mihari/cli/base.rb +3 -0
  28. data/lib/mihari/cli/database.rb +3 -0
  29. data/lib/mihari/cli/main.rb +3 -0
  30. data/lib/mihari/cli/rule.rb +3 -0
  31. data/lib/mihari/clients/base.rb +3 -0
  32. data/lib/mihari/clients/binaryedge.rb +5 -2
  33. data/lib/mihari/clients/censys.rb +7 -4
  34. data/lib/mihari/clients/circl.rb +3 -0
  35. data/lib/mihari/clients/crtsh.rb +3 -0
  36. data/lib/mihari/clients/dnstwister.rb +3 -0
  37. data/lib/mihari/clients/fofa.rb +83 -0
  38. data/lib/mihari/clients/greynoise.rb +5 -2
  39. data/lib/mihari/clients/hunterhow.rb +5 -2
  40. data/lib/mihari/clients/misp.rb +3 -0
  41. data/lib/mihari/clients/onyphe.rb +5 -2
  42. data/lib/mihari/clients/otx.rb +3 -0
  43. data/lib/mihari/clients/passivetotal.rb +3 -0
  44. data/lib/mihari/clients/publsedive.rb +4 -1
  45. data/lib/mihari/clients/securitytrails.rb +3 -0
  46. data/lib/mihari/clients/shodan.rb +5 -2
  47. data/lib/mihari/clients/the_hive.rb +3 -0
  48. data/lib/mihari/clients/urlscan.rb +7 -4
  49. data/lib/mihari/clients/virustotal.rb +5 -2
  50. data/lib/mihari/clients/zoomeye.rb +3 -0
  51. data/lib/mihari/commands/alert.rb +9 -16
  52. data/lib/mihari/commands/database.rb +3 -0
  53. data/lib/mihari/commands/rule.rb +10 -1
  54. data/lib/mihari/commands/search.rb +13 -29
  55. data/lib/mihari/commands/version.rb +3 -0
  56. data/lib/mihari/commands/web.rb +4 -1
  57. data/lib/mihari/config.rb +139 -150
  58. data/lib/mihari/constants.rb +1 -1
  59. data/lib/mihari/database.rb +6 -0
  60. data/lib/mihari/emitters/base.rb +13 -11
  61. data/lib/mihari/emitters/database.rb +4 -1
  62. data/lib/mihari/emitters/misp.rb +7 -4
  63. data/lib/mihari/emitters/slack.rb +3 -3
  64. data/lib/mihari/emitters/the_hive.rb +3 -3
  65. data/lib/mihari/emitters/webhook.rb +4 -3
  66. data/lib/mihari/enrichers/base.rb +15 -9
  67. data/lib/mihari/enrichers/google_public_dns.rb +6 -5
  68. data/lib/mihari/enrichers/ipinfo.rb +11 -9
  69. data/lib/mihari/enrichers/shodan.rb +4 -6
  70. data/lib/mihari/enrichers/whois.rb +12 -9
  71. data/lib/mihari/entities/tag.rb +1 -0
  72. data/lib/mihari/errors.rb +6 -0
  73. data/lib/mihari/feed/parser.rb +3 -0
  74. data/lib/mihari/feed/reader.rb +3 -0
  75. data/lib/mihari/http.rb +6 -0
  76. data/lib/mihari/mixins/autonomous_system.rb +3 -0
  77. data/lib/mihari/mixins/configurable.rb +3 -0
  78. data/lib/mihari/mixins/error_notification.rb +3 -0
  79. data/lib/mihari/mixins/falsepositive.rb +3 -0
  80. data/lib/mihari/mixins/refang.rb +3 -0
  81. data/lib/mihari/mixins/retriable.rb +6 -2
  82. data/lib/mihari/models/alert.rb +7 -4
  83. data/lib/mihari/models/artifact.rb +6 -0
  84. data/lib/mihari/models/autonomous_system.rb +4 -1
  85. data/lib/mihari/models/cpe.rb +4 -1
  86. data/lib/mihari/models/dns.rb +4 -1
  87. data/lib/mihari/models/geolocation.rb +4 -1
  88. data/lib/mihari/models/port.rb +4 -1
  89. data/lib/mihari/models/reverse_dns.rb +4 -1
  90. data/lib/mihari/models/rule.rb +6 -3
  91. data/lib/mihari/models/tag.rb +3 -0
  92. data/lib/mihari/models/tagging.rb +3 -0
  93. data/lib/mihari/models/whois.rb +4 -3
  94. data/lib/mihari/rule.rb +31 -12
  95. data/lib/mihari/schemas/alert.rb +3 -0
  96. data/lib/mihari/schemas/analyzer.rb +11 -0
  97. data/lib/mihari/schemas/emitter.rb +3 -0
  98. data/lib/mihari/schemas/enricher.rb +3 -0
  99. data/lib/mihari/schemas/macros.rb +4 -0
  100. data/lib/mihari/schemas/mixins.rb +5 -0
  101. data/lib/mihari/schemas/rule.rb +3 -0
  102. data/lib/mihari/service.rb +26 -0
  103. data/lib/mihari/services/alert_builder.rb +85 -9
  104. data/lib/mihari/services/alert_runner.rb +8 -19
  105. data/lib/mihari/services/rule_builder.rb +13 -12
  106. data/lib/mihari/services/rule_runner.rb +7 -32
  107. data/lib/mihari/structs/binaryedge.rb +22 -28
  108. data/lib/mihari/structs/censys.rb +48 -141
  109. data/lib/mihari/structs/config.rb +19 -30
  110. data/lib/mihari/structs/filters.rb +38 -0
  111. data/lib/mihari/structs/fofa.rb +47 -0
  112. data/lib/mihari/structs/google_public_dns.rb +10 -32
  113. data/lib/mihari/structs/greynoise.rb +33 -90
  114. data/lib/mihari/structs/hunterhow.rb +24 -28
  115. data/lib/mihari/structs/ipinfo.rb +14 -37
  116. data/lib/mihari/structs/onyphe.rb +31 -80
  117. data/lib/mihari/structs/shodan.rb +47 -114
  118. data/lib/mihari/structs/urlscan.rb +24 -69
  119. data/lib/mihari/structs/virustotal_intelligence.rb +20 -64
  120. data/lib/mihari/type_checker.rb +4 -0
  121. data/lib/mihari/types.rb +3 -0
  122. data/lib/mihari/version.rb +1 -1
  123. data/lib/mihari/web/api.rb +15 -10
  124. data/lib/mihari/web/app.rb +64 -56
  125. data/lib/mihari/web/endpoints/alerts.rb +127 -85
  126. data/lib/mihari/web/endpoints/artifacts.rb +91 -79
  127. data/lib/mihari/web/endpoints/configs.rb +18 -13
  128. data/lib/mihari/web/endpoints/ip_addresses.rb +35 -15
  129. data/lib/mihari/web/endpoints/rules.rb +236 -187
  130. data/lib/mihari/web/endpoints/tags.rb +42 -35
  131. data/lib/mihari/web/middleware/connection_adapter.rb +16 -9
  132. data/lib/mihari/web/middleware/error_notification_adapter.rb +17 -10
  133. data/lib/mihari/web/public/assets/{index-28d4c79d.js → index-07fafab5.js} +31 -30
  134. data/lib/mihari/web/public/assets/mode-yaml-24faa242.js +8 -0
  135. data/lib/mihari/web/public/index.html +1 -1
  136. data/lib/mihari.rb +24 -6
  137. data/mihari.gemspec +9 -2
  138. data/mkdocs.yml +4 -2
  139. metadata +38 -133
  140. data/docs/alternatives.md +0 -5
  141. data/docs/analyzers/binaryedge.md +0 -26
  142. data/docs/analyzers/censys.md +0 -31
  143. data/docs/analyzers/circl.md +0 -37
  144. data/docs/analyzers/crtsh.md +0 -26
  145. data/docs/analyzers/dnstwister.md +0 -25
  146. data/docs/analyzers/feed.md +0 -73
  147. data/docs/analyzers/greynoise.md +0 -26
  148. data/docs/analyzers/hunterhow.md +0 -33
  149. data/docs/analyzers/index.md +0 -103
  150. data/docs/analyzers/onyphe.md +0 -26
  151. data/docs/analyzers/otx.md +0 -28
  152. data/docs/analyzers/passivetotal.md +0 -52
  153. data/docs/analyzers/pulsedive.md +0 -28
  154. data/docs/analyzers/securitytrails.md +0 -41
  155. data/docs/analyzers/shodan.md +0 -26
  156. data/docs/analyzers/urlscan.md +0 -28
  157. data/docs/analyzers/virustotal.md +0 -43
  158. data/docs/analyzers/virustotal_intelligence.md +0 -33
  159. data/docs/analyzers/zoomeye.md +0 -38
  160. data/docs/configuration.md +0 -35
  161. data/docs/emitters/database.md +0 -22
  162. data/docs/emitters/hive.md +0 -26
  163. data/docs/emitters/index.md +0 -36
  164. data/docs/emitters/misp.md +0 -21
  165. data/docs/emitters/slack.md +0 -21
  166. data/docs/emitters/webhook.md +0 -63
  167. data/docs/enrichers/google_public_dns.md +0 -19
  168. data/docs/enrichers/index.md +0 -35
  169. data/docs/enrichers/ipinfo.md +0 -26
  170. data/docs/enrichers/shodan.md +0 -22
  171. data/docs/enrichers/whois.md +0 -17
  172. data/docs/github_actions.md +0 -43
  173. data/docs/index.md +0 -11
  174. data/docs/installation.md +0 -31
  175. data/docs/requirements.md +0 -13
  176. data/docs/rule.md +0 -168
  177. data/docs/tags.md +0 -3
  178. data/docs/usage.md +0 -103
  179. data/frontend/.eslintrc.cjs +0 -22
  180. data/frontend/.gitignore +0 -31
  181. data/frontend/.prettierrc.json +0 -8
  182. data/frontend/README.md +0 -3
  183. data/frontend/env.d.ts +0 -5
  184. data/frontend/index.html +0 -21
  185. data/frontend/package-lock.json +0 -7219
  186. data/frontend/package.json +0 -67
  187. data/frontend/public/favicon.ico +0 -0
  188. data/frontend/scripts/swagger_doc_to_yaml.rb +0 -23
  189. data/frontend/src/App.vue +0 -27
  190. data/frontend/src/ace-config.ts +0 -6
  191. data/frontend/src/api-helper.ts +0 -111
  192. data/frontend/src/api.ts +0 -105
  193. data/frontend/src/components/ErrorMessage.vue +0 -31
  194. data/frontend/src/components/Loading.vue +0 -15
  195. data/frontend/src/components/Navbar.vue +0 -42
  196. data/frontend/src/components/Pagination.vue +0 -119
  197. data/frontend/src/components/alert/Alert.vue +0 -87
  198. data/frontend/src/components/alert/Alerts.vue +0 -63
  199. data/frontend/src/components/alert/AlertsWithPagination.vue +0 -90
  200. data/frontend/src/components/alert/AlertsWrapper.vue +0 -128
  201. data/frontend/src/components/alert/Form.vue +0 -182
  202. data/frontend/src/components/artifact/AS.vue +0 -29
  203. data/frontend/src/components/artifact/Artifact.vue +0 -287
  204. data/frontend/src/components/artifact/ArtifactTag.vue +0 -64
  205. data/frontend/src/components/artifact/ArtifactTags.vue +0 -29
  206. data/frontend/src/components/artifact/ArtifactWrapper.vue +0 -57
  207. data/frontend/src/components/artifact/CPEs.vue +0 -23
  208. data/frontend/src/components/artifact/DnsRecords.vue +0 -38
  209. data/frontend/src/components/artifact/Ports.vue +0 -23
  210. data/frontend/src/components/artifact/ReverseDnsNames.vue +0 -31
  211. data/frontend/src/components/artifact/Tags.vue +0 -29
  212. data/frontend/src/components/artifact/WhoisRecord.vue +0 -44
  213. data/frontend/src/components/config/Configs.vue +0 -65
  214. data/frontend/src/components/config/ConfigsWrapper.vue +0 -32
  215. data/frontend/src/components/link/Link.vue +0 -32
  216. data/frontend/src/components/link/Links.vue +0 -42
  217. data/frontend/src/components/rule/EditRule.vue +0 -72
  218. data/frontend/src/components/rule/EditRuleWrapper.vue +0 -48
  219. data/frontend/src/components/rule/Form.vue +0 -158
  220. data/frontend/src/components/rule/InputForm.vue +0 -45
  221. data/frontend/src/components/rule/NewRule.vue +0 -57
  222. data/frontend/src/components/rule/Rule.vue +0 -100
  223. data/frontend/src/components/rule/RuleWrapper.vue +0 -53
  224. data/frontend/src/components/rule/Rules.vue +0 -84
  225. data/frontend/src/components/rule/RulesWrapper.vue +0 -121
  226. data/frontend/src/components/rule/YAML.vue +0 -37
  227. data/frontend/src/components/tag/Tag.vue +0 -65
  228. data/frontend/src/components/tag/Tags.vue +0 -37
  229. data/frontend/src/countries.ts +0 -350
  230. data/frontend/src/index.ts +0 -20
  231. data/frontend/src/links/anyrun.ts +0 -19
  232. data/frontend/src/links/base.ts +0 -14
  233. data/frontend/src/links/censys.ts +0 -20
  234. data/frontend/src/links/crtsh.ts +0 -20
  235. data/frontend/src/links/dnslytics.ts +0 -38
  236. data/frontend/src/links/greynoise.ts +0 -20
  237. data/frontend/src/links/index.ts +0 -40
  238. data/frontend/src/links/intezer.ts +0 -20
  239. data/frontend/src/links/otx.ts +0 -33
  240. data/frontend/src/links/securitytrails.ts +0 -38
  241. data/frontend/src/links/shodan.ts +0 -20
  242. data/frontend/src/links/urlscan.ts +0 -50
  243. data/frontend/src/links/virustotal.ts +0 -72
  244. data/frontend/src/main.ts +0 -41
  245. data/frontend/src/router/index.ts +0 -57
  246. data/frontend/src/rule.ts +0 -14
  247. data/frontend/src/shims-vue.d.ts +0 -6
  248. data/frontend/src/swagger.yaml +0 -771
  249. data/frontend/src/types.ts +0 -188
  250. data/frontend/src/utils.ts +0 -54
  251. data/frontend/src/views/Alerts.vue +0 -20
  252. data/frontend/src/views/Artifact.vue +0 -39
  253. data/frontend/src/views/Configs.vue +0 -20
  254. data/frontend/src/views/EditRule.vue +0 -39
  255. data/frontend/src/views/NewRule.vue +0 -26
  256. data/frontend/src/views/Rule.vue +0 -39
  257. data/frontend/src/views/Rules.vue +0 -20
  258. data/frontend/tests/utils.spec.ts +0 -9
  259. data/frontend/tsconfig.app.json +0 -21
  260. data/frontend/tsconfig.json +0 -14
  261. data/frontend/tsconfig.node.json +0 -13
  262. data/frontend/tsconfig.vitest.json +0 -12
  263. data/frontend/vite.config.ts +0 -24
  264. data/frontend/vitest.config.ts +0 -21
  265. data/lib/mihari/services/alert_proxy.rb +0 -92
  266. data/lib/mihari/templates/rule.yml.erb +0 -5
  267. data/lib/mihari/web/public/assets/mode-yaml-a21faa53.js +0 -8
@@ -0,0 +1,8 @@
1
+ ace.define("ace/mode/yaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"list.markup",regex:/^(?:-{3}|\.{3})\s*(?=#|$)/},{token:"list.markup",regex:/^\s*[\-?](?:$|\s)/},{token:"constant",regex:"!![\\w//]+"},{token:"constant.language",regex:"[&\\*][a-zA-Z0-9-_]+"},{token:["meta.tag","keyword"],regex:/^(\s*\w[^\s:]*?)(:(?=\s|$))/},{token:["meta.tag","keyword"],regex:/(\w[^\s:]*?)(\s*:(?=\s|$))/},{token:"keyword.operator",regex:"<<\\w*:\\w*"},{token:"keyword.operator",regex:"-\\s*(?=[{])"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:/[|>][-+\d]*(?:$|\s+(?:$|#))/,onMatch:function(e,t,n,r){r=r.replace(/ #.*/,"");var i=/^ *((:\s*)?-(\s*[^|>])?)?/.exec(r)[0].replace(/\S\s*$/,"").length,s=parseInt(/\d+[\s+-]*$/.exec(r));return s?(i+=s-1,this.next="mlString"):this.next="mlStringPre",n.length?(n[0]=this.next,n[1]=i):(n.push(this.next),n.push(i)),this.token},next:"mlString"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:/(\b|[+\-\.])[\d_]+(?:(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)(?=[^\d-\w]|$)$/},{token:"constant.numeric",regex:/[+\-]?\.inf\b|NaN\b|0x[\dA-Fa-f_]+|0b[10_]+/},{token:"constant.language.boolean",regex:"\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\b"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:/[^\s,:\[\]\{\}]+/}],mlStringPre:[{token:"indent",regex:/^ *$/},{token:"indent",regex:/^ */,onMatch:function(e,t,n){var r=n[1];return r>=e.length?(this.next="start",n.shift(),n.shift()):(n[1]=e.length-1,this.next=n[0]="mlString"),this.token},next:"mlString"},{defaultToken:"string"}],mlString:[{token:"indent",regex:/^ *$/},{token:"indent",regex:/^ */,onMatch:function(e,t,n){var r=n[1];return r>=e.length?(this.next="start",n.splice(0)):this.next="mlString",this.token},next:"mlString"},{token:"string",regex:".+"}]},this.normalizeRules()};r.inherits(s,i),t.YamlHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.commentBlock=function(e,t){var n=/\S/,r=e.getLine(t),i=r.search(n);if(i==-1||r[i]!="#")return;var o=r.length,u=e.getLength(),a=t,f=t;while(++t<u){r=e.getLine(t);var l=r.search(n);if(l==-1)continue;if(r[l]!="#")break;f=t}if(f>a){var c=e.getLine(f).length;return new s(a,o,f,c)}},this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;r=this.commentBlock(e,n);if(r)return r},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}),ace.define("ace/mode/folding/yaml",["require","exports","module","ace/lib/oop","ace/mode/folding/coffee","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./coffee").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=/\S/,i=e.getLine(n),o=i.search(r),u=i[o]==="#",a=i[o]==="-";if(o==-1)return;var f=i.length,l=e.getLength(),c=n,h=n;if(u){var p=this.commentBlock(e,n);if(p)return p}else if(a){var p=this.indentationBlock(e,n);if(p)return p}else while(++n<l){var i=e.getLine(n),d=i.search(r);if(d==-1)continue;if(d<=o&&i[o]!=="-"){var v=e.getTokenAt(n,0);if(!v||v.type!=="string")break}h=n}if(h>c){var m=e.getLine(h).length;return new s(c,f,h,m)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/),f=r[i]==="-";if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?"start":"","";if(u==-1){if(i==a&&r[i]=="#"&&s[i]=="#")return e.foldWidgets[n-1]="",e.foldWidgets[n+1]="","start"}else if(u==i&&r[i]=="#"&&o[i]=="#"&&e.getLine(n-2).search(/\S/)==-1)return e.foldWidgets[n-1]="start",e.foldWidgets[n+1]="","";return u!=-1&&u<i?e.foldWidgets[n-1]="start":u!=-1&&u==i&&f?e.foldWidgets[n-1]="start":e.foldWidgets[n-1]="",i<a?"start":""}}.call(o.prototype)}),ace.define("ace/mode/yaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/yaml_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/yaml","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./yaml_highlight_rules").YamlHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./folding/yaml").FoldMode,a=e("../worker/worker_client").WorkerClient,f=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u,this.$behaviour=this.$defaultBehaviour};r.inherits(f,i),function(){this.lineCommentStart=["#"],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e=="start"){var i=t.match(/^.*[\{\(\[]\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/yaml_worker","YamlWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/yaml"}.call(f.prototype),t.Mode=f}); (function() {
2
+ ace.require(["ace/mode/yaml"], function(m) {
3
+ if (typeof module == "object" && typeof exports == "object" && module) {
4
+ module.exports = m;
5
+ }
6
+ });
7
+ })();
8
+
@@ -6,7 +6,7 @@
6
6
  <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
7
  <link rel="icon" href="/favicon.ico" />
8
8
  <title>Mihari</title>
9
- <script type="module" crossorigin src="/assets/index-28d4c79d.js"></script>
9
+ <script type="module" crossorigin src="/assets/index-07fafab5.js"></script>
10
10
  <link rel="stylesheet" href="/assets/index-56fc2187.css">
11
11
  </head>
12
12
  <body>
data/lib/mihari.rb CHANGED
@@ -3,8 +3,6 @@
3
3
  # standard libs
4
4
  require "ipaddr"
5
5
  require "json"
6
- require "net/http"
7
- require "net/https"
8
6
  require "resolv"
9
7
  require "yaml"
10
8
 
@@ -59,17 +57,23 @@ require "mihari/mixins/error_notification"
59
57
  require "mihari/mixins/refang"
60
58
  require "mihari/mixins/retriable"
61
59
 
60
+ #
61
+ # Mihari module
62
+ #
62
63
  module Mihari
63
64
  class << self
64
65
  include Memist::Memoizable
65
66
 
67
+ #
68
+ # @return [Array<Mihari::Emitters::Base>]
69
+ #
66
70
  def emitters
67
71
  []
68
72
  end
69
73
  memoize :emitters
70
74
 
71
75
  #
72
- # @return [Hash<String, Mihari::Enrichers::Base>]
76
+ # @return [Hash{String => Mihari::Enrichers::Base}]
73
77
  #
74
78
  def emitter_to_class
75
79
  @emitter_to_class ||= emitters.flat_map do |klass|
@@ -77,13 +81,16 @@ module Mihari
77
81
  end.to_h
78
82
  end
79
83
 
84
+ #
85
+ # @return [Array<Mihari::Analyzers::Base>]
86
+ #
80
87
  def analyzers
81
88
  []
82
89
  end
83
90
  memoize :analyzers
84
91
 
85
92
  #
86
- # @return [Hash<String, Mihari::Analyzers::Base>]
93
+ # @return [Hash{String => Mihari::Analyzers::Base}]
87
94
  #
88
95
  def analyzer_to_class
89
96
  @analyzer_to_class ||= analyzers.flat_map do |klass|
@@ -91,13 +98,16 @@ module Mihari
91
98
  end.to_h
92
99
  end
93
100
 
101
+ #
102
+ # @return [Array<Mihari::Enrichers::Base>]
103
+ #
94
104
  def enrichers
95
105
  []
96
106
  end
97
107
  memoize :enrichers
98
108
 
99
109
  #
100
- # @return [Hash<String, Mihari::Enrichers::Base>]
110
+ # @return [Hash{String => Mihari::Enrichers::Base}]
101
111
  #
102
112
  def enricher_to_class
103
113
  @enricher_to_class ||= enrichers.flat_map do |klass|
@@ -105,6 +115,9 @@ module Mihari
105
115
  end.to_h
106
116
  end
107
117
 
118
+ #
119
+ # @return [Mihari::Config]
120
+ #
108
121
  def config
109
122
  @config ||= Config.new
110
123
  end
@@ -130,7 +143,10 @@ module Mihari
130
143
  end
131
144
 
132
145
  # Core classes
146
+ require "mihari/service"
147
+
133
148
  require "mihari/actor"
149
+
134
150
  require "mihari/database"
135
151
  require "mihari/http"
136
152
  require "mihari/type_checker"
@@ -174,6 +190,7 @@ require "mihari/clients/censys"
174
190
  require "mihari/clients/circl"
175
191
  require "mihari/clients/crtsh"
176
192
  require "mihari/clients/dnstwister"
193
+ require "mihari/clients/fofa"
177
194
  require "mihari/clients/greynoise"
178
195
  require "mihari/clients/hunterhow"
179
196
  require "mihari/clients/misp"
@@ -197,6 +214,7 @@ require "mihari/analyzers/circl"
197
214
  require "mihari/analyzers/crtsh"
198
215
  require "mihari/analyzers/dnstwister"
199
216
  require "mihari/analyzers/feed"
217
+ require "mihari/analyzers/fofa"
200
218
  require "mihari/analyzers/greynoise"
201
219
  require "mihari/analyzers/hunterhow"
202
220
  require "mihari/analyzers/onyphe"
@@ -221,6 +239,7 @@ require "mihari/structs/binaryedge"
221
239
  require "mihari/structs/censys"
222
240
  require "mihari/structs/config"
223
241
  require "mihari/structs/filters"
242
+ require "mihari/structs/fofa"
224
243
  require "mihari/structs/google_public_dns"
225
244
  require "mihari/structs/greynoise"
226
245
  require "mihari/structs/ipinfo"
@@ -245,7 +264,6 @@ require "mihari/services/rule_builder"
245
264
  require "mihari/services/rule_runner"
246
265
 
247
266
  require "mihari/services/alert_builder"
248
- require "mihari/services/alert_proxy"
249
267
  require "mihari/services/alert_runner"
250
268
 
251
269
  # Entities
data/mihari.gemspec CHANGED
@@ -10,6 +10,10 @@ def ci_env?
10
10
  ENV["CI"]
11
11
  end
12
12
 
13
+ def is_ruby2?
14
+ RUBY_VERSION.to_s.start_with?("2.")
15
+ end
16
+
13
17
  Gem::Specification.new do |spec|
14
18
  spec.name = "mihari"
15
19
  spec.version = Mihari::VERSION
@@ -27,7 +31,7 @@ Gem::Specification.new do |spec|
27
31
  # Specify which files should be added to the gem when it is released.
28
32
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
29
33
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
30
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|images|docker|.github)/}) }
34
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(.github|.vscode|docs|docker|frontend|images|spec|)/}) }
31
35
  end
32
36
  # Include frontend assets in lib/mihari/web/public
33
37
  spec.files += Dir.glob("lib/mihari/web/public/**/*")
@@ -56,6 +60,8 @@ Gem::Specification.new do |spec|
56
60
  spec.add_development_dependency "vcr", "~> 6.2"
57
61
  spec.add_development_dependency "webmock", "~> 3.19"
58
62
 
63
+ spec.add_development_dependency "rubocop-yard", "~> 0.7" unless is_ruby2?
64
+
59
65
  unless ci_env?
60
66
  spec.add_development_dependency "lefthook", "~> 1.5"
61
67
  spec.add_development_dependency "solargraph", "~> 0.49"
@@ -63,6 +69,7 @@ Gem::Specification.new do |spec|
63
69
 
64
70
  spec.add_dependency "activerecord", "7.1.1"
65
71
  spec.add_dependency "addressable", "2.8.5"
72
+ spec.add_dependency "anyway_config", "2.5.4"
66
73
  spec.add_dependency "awrence", "2.0.1"
67
74
  spec.add_dependency "dotenv", "2.8.1"
68
75
  spec.add_dependency "dry-container", "0.11.0"
@@ -91,7 +98,7 @@ Gem::Specification.new do |spec|
91
98
  spec.add_dependency "semantic_logger", "4.14.0"
92
99
  spec.add_dependency "sentry-ruby", "5.12.0"
93
100
  spec.add_dependency "slack-notifier", "2.4.0"
94
- spec.add_dependency "sqlite3", "1.6.7"
101
+ spec.add_dependency "sqlite3", "1.6.8"
95
102
  spec.add_dependency "thor", "1.3.0"
96
103
  spec.add_dependency "thor-hollaback", "0.2.1"
97
104
  spec.add_dependency "uuidtools", "2.2.0"
data/mkdocs.yml CHANGED
@@ -16,6 +16,7 @@ nav:
16
16
  - Usage: usage.md
17
17
  - Configuration: configuration.md
18
18
  - Tips:
19
+ - Docker: docker.md
19
20
  - GitHub Actions: github_actions.md
20
21
  - Alternatives: alternatives.md
21
22
  - References:
@@ -29,6 +30,7 @@ markdown_extensions:
29
30
  permalink: true
30
31
  - admonition
31
32
  - pymdownx.details
32
- - pymdownx.superfences
33
- - pymdownx.highlight
34
33
  - pymdownx.extra
34
+ - pymdownx.highlight
35
+ - pymdownx.magiclink
36
+ - pymdownx.superfences
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mihari
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.2
4
+ version: 5.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manabu Niseki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-28 00:00:00.000000000 Z
11
+ date: 2023-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -276,6 +276,20 @@ dependencies:
276
276
  - - "~>"
277
277
  - !ruby/object:Gem::Version
278
278
  version: '3.19'
279
+ - !ruby/object:Gem::Dependency
280
+ name: rubocop-yard
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '0.7'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '0.7'
279
293
  - !ruby/object:Gem::Dependency
280
294
  name: lefthook
281
295
  requirement: !ruby/object:Gem::Requirement
@@ -332,6 +346,20 @@ dependencies:
332
346
  - - '='
333
347
  - !ruby/object:Gem::Version
334
348
  version: 2.8.5
349
+ - !ruby/object:Gem::Dependency
350
+ name: anyway_config
351
+ requirement: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - '='
354
+ - !ruby/object:Gem::Version
355
+ version: 2.5.4
356
+ type: :runtime
357
+ prerelease: false
358
+ version_requirements: !ruby/object:Gem::Requirement
359
+ requirements:
360
+ - - '='
361
+ - !ruby/object:Gem::Version
362
+ version: 2.5.4
335
363
  - !ruby/object:Gem::Dependency
336
364
  name: awrence
337
365
  requirement: !ruby/object:Gem::Requirement
@@ -730,14 +758,14 @@ dependencies:
730
758
  requirements:
731
759
  - - '='
732
760
  - !ruby/object:Gem::Version
733
- version: 1.6.7
761
+ version: 1.6.8
734
762
  type: :runtime
735
763
  prerelease: false
736
764
  version_requirements: !ruby/object:Gem::Requirement
737
765
  requirements:
738
766
  - - '='
739
767
  - !ruby/object:Gem::Version
740
- version: 1.6.7
768
+ version: 1.6.8
741
769
  - !ruby/object:Gem::Dependency
742
770
  name: thor
743
771
  requirement: !ruby/object:Gem::Requirement
@@ -828,132 +856,7 @@ files:
828
856
  - bin/setup
829
857
  - build_frontend.sh
830
858
  - config.ru
831
- - docs/alternatives.md
832
- - docs/analyzers/binaryedge.md
833
- - docs/analyzers/censys.md
834
- - docs/analyzers/circl.md
835
- - docs/analyzers/crtsh.md
836
- - docs/analyzers/dnstwister.md
837
- - docs/analyzers/feed.md
838
- - docs/analyzers/greynoise.md
839
- - docs/analyzers/hunterhow.md
840
- - docs/analyzers/index.md
841
- - docs/analyzers/onyphe.md
842
- - docs/analyzers/otx.md
843
- - docs/analyzers/passivetotal.md
844
- - docs/analyzers/pulsedive.md
845
- - docs/analyzers/securitytrails.md
846
- - docs/analyzers/shodan.md
847
- - docs/analyzers/urlscan.md
848
- - docs/analyzers/virustotal.md
849
- - docs/analyzers/virustotal_intelligence.md
850
- - docs/analyzers/zoomeye.md
851
- - docs/configuration.md
852
- - docs/emitters/database.md
853
- - docs/emitters/hive.md
854
- - docs/emitters/index.md
855
- - docs/emitters/misp.md
856
- - docs/emitters/slack.md
857
- - docs/emitters/webhook.md
858
- - docs/enrichers/google_public_dns.md
859
- - docs/enrichers/index.md
860
- - docs/enrichers/ipinfo.md
861
- - docs/enrichers/shodan.md
862
- - docs/enrichers/whois.md
863
- - docs/github_actions.md
864
- - docs/index.md
865
- - docs/installation.md
866
- - docs/requirements.md
867
- - docs/rule.md
868
- - docs/tags.md
869
- - docs/usage.md
870
859
  - exe/mihari
871
- - frontend/.eslintrc.cjs
872
- - frontend/.gitignore
873
- - frontend/.prettierrc.json
874
- - frontend/README.md
875
- - frontend/env.d.ts
876
- - frontend/index.html
877
- - frontend/package-lock.json
878
- - frontend/package.json
879
- - frontend/public/favicon.ico
880
- - frontend/scripts/swagger_doc_to_yaml.rb
881
- - frontend/src/App.vue
882
- - frontend/src/ace-config.ts
883
- - frontend/src/api-helper.ts
884
- - frontend/src/api.ts
885
- - frontend/src/components/ErrorMessage.vue
886
- - frontend/src/components/Loading.vue
887
- - frontend/src/components/Navbar.vue
888
- - frontend/src/components/Pagination.vue
889
- - frontend/src/components/alert/Alert.vue
890
- - frontend/src/components/alert/Alerts.vue
891
- - frontend/src/components/alert/AlertsWithPagination.vue
892
- - frontend/src/components/alert/AlertsWrapper.vue
893
- - frontend/src/components/alert/Form.vue
894
- - frontend/src/components/artifact/AS.vue
895
- - frontend/src/components/artifact/Artifact.vue
896
- - frontend/src/components/artifact/ArtifactTag.vue
897
- - frontend/src/components/artifact/ArtifactTags.vue
898
- - frontend/src/components/artifact/ArtifactWrapper.vue
899
- - frontend/src/components/artifact/CPEs.vue
900
- - frontend/src/components/artifact/DnsRecords.vue
901
- - frontend/src/components/artifact/Ports.vue
902
- - frontend/src/components/artifact/ReverseDnsNames.vue
903
- - frontend/src/components/artifact/Tags.vue
904
- - frontend/src/components/artifact/WhoisRecord.vue
905
- - frontend/src/components/config/Configs.vue
906
- - frontend/src/components/config/ConfigsWrapper.vue
907
- - frontend/src/components/link/Link.vue
908
- - frontend/src/components/link/Links.vue
909
- - frontend/src/components/rule/EditRule.vue
910
- - frontend/src/components/rule/EditRuleWrapper.vue
911
- - frontend/src/components/rule/Form.vue
912
- - frontend/src/components/rule/InputForm.vue
913
- - frontend/src/components/rule/NewRule.vue
914
- - frontend/src/components/rule/Rule.vue
915
- - frontend/src/components/rule/RuleWrapper.vue
916
- - frontend/src/components/rule/Rules.vue
917
- - frontend/src/components/rule/RulesWrapper.vue
918
- - frontend/src/components/rule/YAML.vue
919
- - frontend/src/components/tag/Tag.vue
920
- - frontend/src/components/tag/Tags.vue
921
- - frontend/src/countries.ts
922
- - frontend/src/index.ts
923
- - frontend/src/links/anyrun.ts
924
- - frontend/src/links/base.ts
925
- - frontend/src/links/censys.ts
926
- - frontend/src/links/crtsh.ts
927
- - frontend/src/links/dnslytics.ts
928
- - frontend/src/links/greynoise.ts
929
- - frontend/src/links/index.ts
930
- - frontend/src/links/intezer.ts
931
- - frontend/src/links/otx.ts
932
- - frontend/src/links/securitytrails.ts
933
- - frontend/src/links/shodan.ts
934
- - frontend/src/links/urlscan.ts
935
- - frontend/src/links/virustotal.ts
936
- - frontend/src/main.ts
937
- - frontend/src/router/index.ts
938
- - frontend/src/rule.ts
939
- - frontend/src/shims-vue.d.ts
940
- - frontend/src/swagger.yaml
941
- - frontend/src/types.ts
942
- - frontend/src/utils.ts
943
- - frontend/src/views/Alerts.vue
944
- - frontend/src/views/Artifact.vue
945
- - frontend/src/views/Configs.vue
946
- - frontend/src/views/EditRule.vue
947
- - frontend/src/views/NewRule.vue
948
- - frontend/src/views/Rule.vue
949
- - frontend/src/views/Rules.vue
950
- - frontend/tests/utils.spec.ts
951
- - frontend/tsconfig.app.json
952
- - frontend/tsconfig.json
953
- - frontend/tsconfig.node.json
954
- - frontend/tsconfig.vitest.json
955
- - frontend/vite.config.ts
956
- - frontend/vitest.config.ts
957
860
  - lefthook.yml
958
861
  - lib/mihari.rb
959
862
  - lib/mihari/actor.rb
@@ -964,6 +867,7 @@ files:
964
867
  - lib/mihari/analyzers/crtsh.rb
965
868
  - lib/mihari/analyzers/dnstwister.rb
966
869
  - lib/mihari/analyzers/feed.rb
870
+ - lib/mihari/analyzers/fofa.rb
967
871
  - lib/mihari/analyzers/greynoise.rb
968
872
  - lib/mihari/analyzers/hunterhow.rb
969
873
  - lib/mihari/analyzers/onyphe.rb
@@ -987,6 +891,7 @@ files:
987
891
  - lib/mihari/clients/circl.rb
988
892
  - lib/mihari/clients/crtsh.rb
989
893
  - lib/mihari/clients/dnstwister.rb
894
+ - lib/mihari/clients/fofa.rb
990
895
  - lib/mihari/clients/greynoise.rb
991
896
  - lib/mihari/clients/hunterhow.rb
992
897
  - lib/mihari/clients/misp.rb
@@ -1065,8 +970,8 @@ files:
1065
970
  - lib/mihari/schemas/mixins.rb
1066
971
  - lib/mihari/schemas/options.rb
1067
972
  - lib/mihari/schemas/rule.rb
973
+ - lib/mihari/service.rb
1068
974
  - lib/mihari/services/alert_builder.rb
1069
- - lib/mihari/services/alert_proxy.rb
1070
975
  - lib/mihari/services/alert_runner.rb
1071
976
  - lib/mihari/services/rule_builder.rb
1072
977
  - lib/mihari/services/rule_runner.rb
@@ -1074,6 +979,7 @@ files:
1074
979
  - lib/mihari/structs/censys.rb
1075
980
  - lib/mihari/structs/config.rb
1076
981
  - lib/mihari/structs/filters.rb
982
+ - lib/mihari/structs/fofa.rb
1077
983
  - lib/mihari/structs/google_public_dns.rb
1078
984
  - lib/mihari/structs/greynoise.rb
1079
985
  - lib/mihari/structs/hunterhow.rb
@@ -1082,7 +988,6 @@ files:
1082
988
  - lib/mihari/structs/shodan.rb
1083
989
  - lib/mihari/structs/urlscan.rb
1084
990
  - lib/mihari/structs/virustotal_intelligence.rb
1085
- - lib/mihari/templates/rule.yml.erb
1086
991
  - lib/mihari/type_checker.rb
1087
992
  - lib/mihari/types.rb
1088
993
  - lib/mihari/version.rb
@@ -1096,9 +1001,9 @@ files:
1096
1001
  - lib/mihari/web/endpoints/tags.rb
1097
1002
  - lib/mihari/web/middleware/connection_adapter.rb
1098
1003
  - lib/mihari/web/middleware/error_notification_adapter.rb
1099
- - lib/mihari/web/public/assets/index-28d4c79d.js
1004
+ - lib/mihari/web/public/assets/index-07fafab5.js
1100
1005
  - lib/mihari/web/public/assets/index-56fc2187.css
1101
- - lib/mihari/web/public/assets/mode-yaml-a21faa53.js
1006
+ - lib/mihari/web/public/assets/mode-yaml-24faa242.js
1102
1007
  - lib/mihari/web/public/favicon.ico
1103
1008
  - lib/mihari/web/public/index.html
1104
1009
  - lib/mihari/web/public/redoc-static.html
data/docs/alternatives.md DELETED
@@ -1,5 +0,0 @@
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.
@@ -1,26 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
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` (`string`) is a search query.
23
-
24
- ### API Key
25
-
26
- `api_key` (`string`) is an API key. Optional. Defaults to `ENV[”BINARYEDGE_API_KEY"]`.
@@ -1,31 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
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` (`string`) is a search query.
24
-
25
- ### ID
26
-
27
- `id` (`string`) is a Cencys ID. Optional. Defaults to `ENV[”CENSYS_ID”]`.
28
-
29
- ### Secret
30
-
31
- `secret` (`string`) is a Cencys secret. Optional. Defaults to `ENV[”CENSYS_SECRET”]`.
@@ -1,37 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact:IP
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` (`string`) is a domain or SHA1 certificate fingerprint.
30
-
31
- ### Username
32
-
33
- `username` (`string`) is a username. Optional. Defaults to `ENV[”CIRCL_PASSIVE_USERNAME”]`.
34
-
35
- ### Password
36
-
37
- `password` (`string`) is a password. Optional. Defaults to `ENV[”CIRCL_PASSIVE_PASSWORD”]`.
@@ -1,26 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact: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` (`string`) 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`.
@@ -1,25 +0,0 @@
1
- ---
2
- tags:
3
- - Artifact: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` (`string`) 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.