moriarty-project 0.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. moriarty/__init__.py +5 -0
  2. moriarty/adapters/__init__.py +0 -0
  3. moriarty/agent/__init__.py +0 -0
  4. moriarty/assets/modules/.gitkeep +0 -0
  5. moriarty/assets/modules/asia/douban.yaml +19 -0
  6. moriarty/assets/modules/asia/kakao.yaml +19 -0
  7. moriarty/assets/modules/asia/line.yaml +19 -0
  8. moriarty/assets/modules/asia/mixi.yaml +19 -0
  9. moriarty/assets/modules/asia/naver.yaml +19 -0
  10. moriarty/assets/modules/asia/qq.yaml +19 -0
  11. moriarty/assets/modules/asia/vk.yaml +19 -0
  12. moriarty/assets/modules/asia/wechat.yaml +19 -0
  13. moriarty/assets/modules/asia/weibo.yaml +19 -0
  14. moriarty/assets/modules/asia/xiaohongshu.yaml +19 -0
  15. moriarty/assets/modules/behance.yaml +47 -0
  16. moriarty/assets/modules/business/crunchbase.yaml +27 -0
  17. moriarty/assets/modules/business/fiverr.yaml +32 -0
  18. moriarty/assets/modules/business/freelancer.yaml +27 -0
  19. moriarty/assets/modules/business/glassdoor.yaml +27 -0
  20. moriarty/assets/modules/business/guru.yaml +26 -0
  21. moriarty/assets/modules/business/indeed.yaml +25 -0
  22. moriarty/assets/modules/business/monster.yaml +25 -0
  23. moriarty/assets/modules/business/peopleperhour.yaml +26 -0
  24. moriarty/assets/modules/business/toptal.yaml +28 -0
  25. moriarty/assets/modules/business/upwork.yaml +27 -0
  26. moriarty/assets/modules/business/ziprecruiter.yaml +25 -0
  27. moriarty/assets/modules/content/buymeacoffee.yaml +27 -0
  28. moriarty/assets/modules/content/gumroad.yaml +27 -0
  29. moriarty/assets/modules/content/ko-fi.yaml +32 -0
  30. moriarty/assets/modules/content/onlyfans.yaml +27 -0
  31. moriarty/assets/modules/content/patreon.yaml +33 -0
  32. moriarty/assets/modules/content/substack.yaml +32 -0
  33. moriarty/assets/modules/creative/500px.yaml +31 -0
  34. moriarty/assets/modules/creative/artstation.yaml +33 -0
  35. moriarty/assets/modules/creative/deviantart.yaml +32 -0
  36. moriarty/assets/modules/creative/flickr.yaml +31 -0
  37. moriarty/assets/modules/creative/pexels.yaml +26 -0
  38. moriarty/assets/modules/creative/unsplash.yaml +26 -0
  39. moriarty/assets/modules/creative/vimeo.yaml +31 -0
  40. moriarty/assets/modules/crypto/binance.yaml +27 -0
  41. moriarty/assets/modules/crypto/bitcointalk.yaml +33 -0
  42. moriarty/assets/modules/crypto/coinbase.yaml +26 -0
  43. moriarty/assets/modules/crypto/etherscan.yaml +32 -0
  44. moriarty/assets/modules/crypto/foundation.yaml +28 -0
  45. moriarty/assets/modules/crypto/kraken.yaml +27 -0
  46. moriarty/assets/modules/crypto/mirror.yaml +27 -0
  47. moriarty/assets/modules/crypto/niftygateway.yaml +26 -0
  48. moriarty/assets/modules/crypto/opensea.yaml +32 -0
  49. moriarty/assets/modules/crypto/rarible.yaml +27 -0
  50. moriarty/assets/modules/crypto/superrare.yaml +29 -0
  51. moriarty/assets/modules/dating/bumble.yaml +25 -0
  52. moriarty/assets/modules/dating/grindr.yaml +27 -0
  53. moriarty/assets/modules/dating/happn.yaml +25 -0
  54. moriarty/assets/modules/dating/her.yaml +27 -0
  55. moriarty/assets/modules/dating/hinge.yaml +25 -0
  56. moriarty/assets/modules/dating/match.yaml +25 -0
  57. moriarty/assets/modules/dating/meetme.yaml +27 -0
  58. moriarty/assets/modules/dating/okcupid.yaml +25 -0
  59. moriarty/assets/modules/dating/pof.yaml +25 -0
  60. moriarty/assets/modules/dating/tinder.yaml +25 -0
  61. moriarty/assets/modules/dating-nsfw/adultfriendfinder.yaml +28 -0
  62. moriarty/assets/modules/dating-nsfw/ashley-madison.yaml +26 -0
  63. moriarty/assets/modules/design/adobe-portfolio.yaml +27 -0
  64. moriarty/assets/modules/design/carbonmade.yaml +27 -0
  65. moriarty/assets/modules/design/cgsociety.yaml +27 -0
  66. moriarty/assets/modules/design/coroflot.yaml +27 -0
  67. moriarty/assets/modules/design/figma.yaml +27 -0
  68. moriarty/assets/modules/design/sketch.yaml +26 -0
  69. moriarty/assets/modules/dev/bitbucket.yaml +35 -0
  70. moriarty/assets/modules/dev/codeforces.yaml +32 -0
  71. moriarty/assets/modules/dev/codepen.yaml +34 -0
  72. moriarty/assets/modules/dev/hackerone.yaml +32 -0
  73. moriarty/assets/modules/dev/hackthebox.yaml +27 -0
  74. moriarty/assets/modules/dev/huggingface.yaml +27 -0
  75. moriarty/assets/modules/dev/kaggle.yaml +32 -0
  76. moriarty/assets/modules/dev/leetcode.yaml +32 -0
  77. moriarty/assets/modules/dev/replit.yaml +31 -0
  78. moriarty/assets/modules/dribbble.yaml +53 -0
  79. moriarty/assets/modules/ecommerce/etsy.yaml +32 -0
  80. moriarty/assets/modules/education/duolingo.yaml +32 -0
  81. moriarty/assets/modules/education/edx.yaml +26 -0
  82. moriarty/assets/modules/education/khanacademy.yaml +26 -0
  83. moriarty/assets/modules/education/lynda.yaml +27 -0
  84. moriarty/assets/modules/education/memrise.yaml +27 -0
  85. moriarty/assets/modules/education/pluralsight.yaml +27 -0
  86. moriarty/assets/modules/education/skillshare.yaml +27 -0
  87. moriarty/assets/modules/education/udacity.yaml +27 -0
  88. moriarty/assets/modules/email/github_email.yaml +40 -0
  89. moriarty/assets/modules/email/gravatar.yaml +23 -0
  90. moriarty/assets/modules/europe/badoo.yaml +19 -0
  91. moriarty/assets/modules/europe/lovoo.yaml +19 -0
  92. moriarty/assets/modules/europe/myspace.yaml +19 -0
  93. moriarty/assets/modules/europe/netlog.yaml +19 -0
  94. moriarty/assets/modules/europe/ok.yaml +19 -0
  95. moriarty/assets/modules/europe/skyrock.yaml +19 -0
  96. moriarty/assets/modules/europe/studivz.yaml +19 -0
  97. moriarty/assets/modules/europe/tuenti.yaml +19 -0
  98. moriarty/assets/modules/europe/viadeo.yaml +19 -0
  99. moriarty/assets/modules/europe/xing.yaml +19 -0
  100. moriarty/assets/modules/fitness/fitbit.yaml +27 -0
  101. moriarty/assets/modules/fitness/garmin.yaml +27 -0
  102. moriarty/assets/modules/fitness/myfitnesspal.yaml +27 -0
  103. moriarty/assets/modules/fitness/strava.yaml +33 -0
  104. moriarty/assets/modules/fitness/zwift.yaml +28 -0
  105. moriarty/assets/modules/food/allrecipes.yaml +27 -0
  106. moriarty/assets/modules/food/tasty.yaml +27 -0
  107. moriarty/assets/modules/food/yelp.yaml +32 -0
  108. moriarty/assets/modules/food/zomato.yaml +28 -0
  109. moriarty/assets/modules/forums/4chan.yaml +26 -0
  110. moriarty/assets/modules/forums/8kun.yaml +26 -0
  111. moriarty/assets/modules/forums/9gag.yaml +26 -0
  112. moriarty/assets/modules/forums/discourse.yaml +26 -0
  113. moriarty/assets/modules/forums/disqus.yaml +31 -0
  114. moriarty/assets/modules/forums/hackernews.yaml +32 -0
  115. moriarty/assets/modules/forums/launchpad.yaml +27 -0
  116. moriarty/assets/modules/forums/phpbb.yaml +25 -0
  117. moriarty/assets/modules/forums/quora.yaml +32 -0
  118. moriarty/assets/modules/forums/serverfault.yaml +27 -0
  119. moriarty/assets/modules/forums/slashdot.yaml +28 -0
  120. moriarty/assets/modules/forums/stackexchange.yaml +32 -0
  121. moriarty/assets/modules/forums/superuser.yaml +27 -0
  122. moriarty/assets/modules/forums/vbulletin.yaml +25 -0
  123. moriarty/assets/modules/forums/xenforo.yaml +25 -0
  124. moriarty/assets/modules/forums-nsfw/kiwifarms.yaml +25 -0
  125. moriarty/assets/modules/forums-nsfw/lolcow.yaml +26 -0
  126. moriarty/assets/modules/gaming/apextracker.yaml +27 -0
  127. moriarty/assets/modules/gaming/battlenet.yaml +26 -0
  128. moriarty/assets/modules/gaming/chess.yaml +30 -0
  129. moriarty/assets/modules/gaming/discord-public.yaml +27 -0
  130. moriarty/assets/modules/gaming/dotabuff.yaml +32 -0
  131. moriarty/assets/modules/gaming/epicgames.yaml +25 -0
  132. moriarty/assets/modules/gaming/faceit.yaml +33 -0
  133. moriarty/assets/modules/gaming/fortnitetracker.yaml +32 -0
  134. moriarty/assets/modules/gaming/gog.yaml +26 -0
  135. moriarty/assets/modules/gaming/itch.yaml +32 -0
  136. moriarty/assets/modules/gaming/kongregate.yaml +25 -0
  137. moriarty/assets/modules/gaming/minecraft.yaml +31 -0
  138. moriarty/assets/modules/gaming/opgg.yaml +32 -0
  139. moriarty/assets/modules/gaming/origin.yaml +26 -0
  140. moriarty/assets/modules/gaming/playstation.yaml +30 -0
  141. moriarty/assets/modules/gaming/roblox.yaml +31 -0
  142. moriarty/assets/modules/gaming/xbox.yaml +25 -0
  143. moriarty/assets/modules/github.yaml +68 -0
  144. moriarty/assets/modules/gitlab.yaml +60 -0
  145. moriarty/assets/modules/instagram.yaml +48 -0
  146. moriarty/assets/modules/latam/fotolog.yaml +27 -0
  147. moriarty/assets/modules/latam/orkut.yaml +26 -0
  148. moriarty/assets/modules/latam/taringa.yaml +27 -0
  149. moriarty/assets/modules/learning/coursera.yaml +26 -0
  150. moriarty/assets/modules/learning/udemy.yaml +26 -0
  151. moriarty/assets/modules/linkedin.yaml +40 -0
  152. moriarty/assets/modules/marketplaces/depop.yaml +28 -0
  153. moriarty/assets/modules/marketplaces/ebay.yaml +32 -0
  154. moriarty/assets/modules/marketplaces/grailed.yaml +27 -0
  155. moriarty/assets/modules/marketplaces/mercari.yaml +26 -0
  156. moriarty/assets/modules/marketplaces/poshmark.yaml +27 -0
  157. moriarty/assets/modules/marketplaces/reverb.yaml +27 -0
  158. moriarty/assets/modules/marketplaces/vinted.yaml +28 -0
  159. moriarty/assets/modules/medium.yaml +44 -0
  160. moriarty/assets/modules/music/audiomack.yaml +26 -0
  161. moriarty/assets/modules/music/bandcamp.yaml +30 -0
  162. moriarty/assets/modules/music/beatport.yaml +28 -0
  163. moriarty/assets/modules/music/deezer.yaml +26 -0
  164. moriarty/assets/modules/music/discogs.yaml +32 -0
  165. moriarty/assets/modules/music/genius.yaml +26 -0
  166. moriarty/assets/modules/music/lastfm.yaml +30 -0
  167. moriarty/assets/modules/music/mixcloud.yaml +26 -0
  168. moriarty/assets/modules/music/reverbnation.yaml +31 -0
  169. moriarty/assets/modules/music/soundcloud.yaml +31 -0
  170. moriarty/assets/modules/music/spotify.yaml +26 -0
  171. moriarty/assets/modules/music/tidal.yaml +26 -0
  172. moriarty/assets/modules/nsfw/adultwork.yaml +27 -0
  173. moriarty/assets/modules/nsfw/bongacams.yaml +28 -0
  174. moriarty/assets/modules/nsfw/cam4.yaml +28 -0
  175. moriarty/assets/modules/nsfw/chaturbate.yaml +28 -0
  176. moriarty/assets/modules/nsfw/clips4sale.yaml +27 -0
  177. moriarty/assets/modules/nsfw/extralunchmoney.yaml +27 -0
  178. moriarty/assets/modules/nsfw/fansly.yaml +28 -0
  179. moriarty/assets/modules/nsfw/fetlife.yaml +28 -0
  180. moriarty/assets/modules/nsfw/iwantclips.yaml +27 -0
  181. moriarty/assets/modules/nsfw/justforfans.yaml +28 -0
  182. moriarty/assets/modules/nsfw/loyalfans.yaml +28 -0
  183. moriarty/assets/modules/nsfw/manyvids.yaml +27 -0
  184. moriarty/assets/modules/nsfw/myfreecams.yaml +28 -0
  185. moriarty/assets/modules/nsfw/niteflirt.yaml +26 -0
  186. moriarty/assets/modules/nsfw/pornhub.yaml +32 -0
  187. moriarty/assets/modules/nsfw/redtube.yaml +27 -0
  188. moriarty/assets/modules/nsfw/stripchat.yaml +28 -0
  189. moriarty/assets/modules/nsfw/xhamster.yaml +27 -0
  190. moriarty/assets/modules/nsfw/xvideos.yaml +27 -0
  191. moriarty/assets/modules/nsfw/youporn.yaml +27 -0
  192. moriarty/assets/modules/photography/eyeem.yaml +25 -0
  193. moriarty/assets/modules/photography/fotki.yaml +25 -0
  194. moriarty/assets/modules/photography/photobucket.yaml +26 -0
  195. moriarty/assets/modules/photography/smugmug.yaml +25 -0
  196. moriarty/assets/modules/photography/vsco.yaml +27 -0
  197. moriarty/assets/modules/pinterest.yaml +40 -0
  198. moriarty/assets/modules/podcasts/anchor.yaml +26 -0
  199. moriarty/assets/modules/podcasts/castbox.yaml +26 -0
  200. moriarty/assets/modules/podcasts/podbean.yaml +26 -0
  201. moriarty/assets/modules/professional/about.yaml +31 -0
  202. moriarty/assets/modules/professional/academia.yaml +27 -0
  203. moriarty/assets/modules/professional/angellist.yaml +27 -0
  204. moriarty/assets/modules/professional/calendly.yaml +26 -0
  205. moriarty/assets/modules/professional/issuu.yaml +27 -0
  206. moriarty/assets/modules/professional/mendeley.yaml +27 -0
  207. moriarty/assets/modules/professional/notion.yaml +27 -0
  208. moriarty/assets/modules/professional/orcid.yaml +27 -0
  209. moriarty/assets/modules/professional/producthunt.yaml +31 -0
  210. moriarty/assets/modules/professional/researchgate.yaml +32 -0
  211. moriarty/assets/modules/professional/scribd.yaml +27 -0
  212. moriarty/assets/modules/professional/slideshare.yaml +31 -0
  213. moriarty/assets/modules/professional/trello.yaml +26 -0
  214. moriarty/assets/modules/professional/typeform.yaml +27 -0
  215. moriarty/assets/modules/reddit.yaml +46 -0
  216. moriarty/assets/modules/regional/amino.yaml +27 -0
  217. moriarty/assets/modules/regional/ask-fm.yaml +32 -0
  218. moriarty/assets/modules/regional/babycenter.yaml +26 -0
  219. moriarty/assets/modules/regional/cafemom.yaml +27 -0
  220. moriarty/assets/modules/regional/care2.yaml +27 -0
  221. moriarty/assets/modules/regional/diaspora.yaml +26 -0
  222. moriarty/assets/modules/regional/ello.yaml +27 -0
  223. moriarty/assets/modules/regional/gaia.yaml +27 -0
  224. moriarty/assets/modules/regional/habbo.yaml +27 -0
  225. moriarty/assets/modules/regional/imvu.yaml +27 -0
  226. moriarty/assets/modules/regional/lemmy.yaml +27 -0
  227. moriarty/assets/modules/regional/peertube.yaml +26 -0
  228. moriarty/assets/modules/regional/pixelfed.yaml +27 -0
  229. moriarty/assets/modules/regional/plurk.yaml +26 -0
  230. moriarty/assets/modules/regional/recroom.yaml +27 -0
  231. moriarty/assets/modules/regional/secondlife.yaml +26 -0
  232. moriarty/assets/modules/regional/vine-archive.yaml +27 -0
  233. moriarty/assets/modules/regional/vrchat.yaml +27 -0
  234. moriarty/assets/modules/regional/weheartit.yaml +27 -0
  235. moriarty/assets/modules/social/anilist.yaml +27 -0
  236. moriarty/assets/modules/social/beacons.yaml +26 -0
  237. moriarty/assets/modules/social/blogger.yaml +27 -0
  238. moriarty/assets/modules/social/crunchyroll.yaml +27 -0
  239. moriarty/assets/modules/social/discord.yaml +27 -0
  240. moriarty/assets/modules/social/dreamwidth.yaml +26 -0
  241. moriarty/assets/modules/social/facebook.yaml +34 -0
  242. moriarty/assets/modules/social/goodreads.yaml +32 -0
  243. moriarty/assets/modules/social/imdb.yaml +27 -0
  244. moriarty/assets/modules/social/kitsu.yaml +27 -0
  245. moriarty/assets/modules/social/letterboxd.yaml +32 -0
  246. moriarty/assets/modules/social/linktree.yaml +26 -0
  247. moriarty/assets/modules/social/livejournal.yaml +27 -0
  248. moriarty/assets/modules/social/mastodon.yaml +30 -0
  249. moriarty/assets/modules/social/minds.yaml +25 -0
  250. moriarty/assets/modules/social/myanimelist.yaml +32 -0
  251. moriarty/assets/modules/social/ravelry.yaml +27 -0
  252. moriarty/assets/modules/social/snapchat.yaml +25 -0
  253. moriarty/assets/modules/social/telegram.yaml +35 -0
  254. moriarty/assets/modules/social/tiktok.yaml +35 -0
  255. moriarty/assets/modules/social/trakt.yaml +28 -0
  256. moriarty/assets/modules/social/wattpad.yaml +32 -0
  257. moriarty/assets/modules/social/wordpress-com.yaml +26 -0
  258. moriarty/assets/modules/sports/espn.yaml +26 -0
  259. moriarty/assets/modules/sports/untappd.yaml +32 -0
  260. moriarty/assets/modules/stackoverflow.yaml +47 -0
  261. moriarty/assets/modules/steam.yaml +47 -0
  262. moriarty/assets/modules/streaming/caffeine.yaml +25 -0
  263. moriarty/assets/modules/streaming/dlive.yaml +27 -0
  264. moriarty/assets/modules/streaming/trovo.yaml +25 -0
  265. moriarty/assets/modules/travel/airbnb.yaml +26 -0
  266. moriarty/assets/modules/travel/booking.yaml +26 -0
  267. moriarty/assets/modules/travel/couchsurfing.yaml +27 -0
  268. moriarty/assets/modules/travel/tripadvisor.yaml +32 -0
  269. moriarty/assets/modules/tumblr.yaml +40 -0
  270. moriarty/assets/modules/twitch.yaml +48 -0
  271. moriarty/assets/modules/twitter.yaml +39 -0
  272. moriarty/assets/modules/youtube.yaml +42 -0
  273. moriarty/assets/templates/cves/CVE-2017-5638.yaml +27 -0
  274. moriarty/assets/templates/cves/CVE-2018-7600.yaml +30 -0
  275. moriarty/assets/templates/cves/CVE-2019-11510.yaml +27 -0
  276. moriarty/assets/templates/cves/CVE-2019-19781.yaml +28 -0
  277. moriarty/assets/templates/cves/CVE-2020-14882.yaml +28 -0
  278. moriarty/assets/templates/cves/CVE-2020-14883.yaml +29 -0
  279. moriarty/assets/templates/cves/CVE-2020-3452.yaml +28 -0
  280. moriarty/assets/templates/cves/CVE-2020-5902.yaml +28 -0
  281. moriarty/assets/templates/cves/CVE-2021-21972.yaml +31 -0
  282. moriarty/assets/templates/cves/CVE-2021-21985.yaml +28 -0
  283. moriarty/assets/templates/cves/CVE-2021-26084.yaml +30 -0
  284. moriarty/assets/templates/cves/CVE-2021-41773.yaml +25 -0
  285. moriarty/assets/templates/cves/CVE-2021-42013.yaml +28 -0
  286. moriarty/assets/templates/cves/CVE-2021-44228.yaml +27 -0
  287. moriarty/assets/templates/cves/CVE-2022-0185.yaml +21 -0
  288. moriarty/assets/templates/cves/CVE-2022-1388.yaml +36 -0
  289. moriarty/assets/templates/cves/CVE-2022-22954.yaml +28 -0
  290. moriarty/assets/templates/cves/CVE-2022-22965.yaml +31 -0
  291. moriarty/assets/templates/cves/CVE-2022-26134.yaml +27 -0
  292. moriarty/assets/templates/cves/CVE-2023-22515.yaml +27 -0
  293. moriarty/assets/templates/cves/CVE-2023-22527.yaml +29 -0
  294. moriarty/assets/templates/cves/CVE-2023-23752.yaml +33 -0
  295. moriarty/assets/templates/cves/CVE-2023-27350.yaml +27 -0
  296. moriarty/assets/templates/cves/CVE-2023-2868.yaml +27 -0
  297. moriarty/assets/templates/cves/CVE-2023-34362.yaml +27 -0
  298. moriarty/assets/templates/cves/CVE-2023-3519.yaml +28 -0
  299. moriarty/assets/templates/cves/CVE-2023-4966.yaml +27 -0
  300. moriarty/assets/templates/default-logins/admin-weak.yaml +40 -0
  301. moriarty/assets/templates/default-logins/wordpress-default.yaml +38 -0
  302. moriarty/assets/templates/exposures/aws-credentials.yaml +35 -0
  303. moriarty/assets/templates/exposures/backup-files.yaml +36 -0
  304. moriarty/assets/templates/exposures/database-files.yaml +34 -0
  305. moriarty/assets/templates/exposures/docker-exposed.yaml +31 -0
  306. moriarty/assets/templates/exposures/env-exposed.yaml +41 -0
  307. moriarty/assets/templates/exposures/git-exposed.yaml +41 -0
  308. moriarty/assets/templates/exposures/phpinfo.yaml +36 -0
  309. moriarty/assets/templates/exposures/svn-exposed.yaml +28 -0
  310. moriarty/assets/templates/fuzzing/api-endpoints.yaml +39 -0
  311. moriarty/assets/templates/fuzzing/common-files.yaml +37 -0
  312. moriarty/assets/templates/fuzzing/open-redirect-fuzz.yaml +35 -0
  313. moriarty/assets/templates/fuzzing/xss-search-fuzz.yaml +29 -0
  314. moriarty/assets/templates/git-config.yaml +18 -0
  315. moriarty/assets/templates/misconfigurations/cors-misconfiguration.yaml +30 -0
  316. moriarty/assets/templates/misconfigurations/debug-enabled.yaml +29 -0
  317. moriarty/assets/templates/misconfigurations/directory-listing.yaml +33 -0
  318. moriarty/assets/templates/misconfigurations/jwt-none-algo.yaml +30 -0
  319. moriarty/assets/templates/misconfigurations/ssl-tls-weak.yaml +23 -0
  320. moriarty/assets/templates/vulnerabilities/lfi-basic.yaml +31 -0
  321. moriarty/assets/templates/vulnerabilities/open-redirect.yaml +31 -0
  322. moriarty/assets/templates/vulnerabilities/rce-basic.yaml +34 -0
  323. moriarty/assets/templates/vulnerabilities/sqli-error.yaml +39 -0
  324. moriarty/assets/templates/vulnerabilities/ssrf-basic.yaml +31 -0
  325. moriarty/assets/templates/vulnerabilities/xss-reflected.yaml +38 -0
  326. moriarty/assets/templates/vulnerabilities/xxe-basic.yaml +30 -0
  327. moriarty/assets/wordlists/subdomains-1000.txt +1063 -0
  328. moriarty/cli/__init__.py +3 -0
  329. moriarty/cli/app.py +120 -0
  330. moriarty/cli/async_utils.py +19 -0
  331. moriarty/cli/dns.py +83 -0
  332. moriarty/cli/domain_cmd.py +572 -0
  333. moriarty/cli/email.py +383 -0
  334. moriarty/cli/email_investigate.py +224 -0
  335. moriarty/cli/intelligence.py +329 -0
  336. moriarty/cli/output.py +62 -0
  337. moriarty/cli/rdap.py +94 -0
  338. moriarty/cli/state.py +38 -0
  339. moriarty/cli/tls.py +91 -0
  340. moriarty/cli/user.py +227 -0
  341. moriarty/core/cache_backend.py +223 -0
  342. moriarty/core/config_manager.py +303 -0
  343. moriarty/correlator/__init__.py +0 -0
  344. moriarty/data/__init__.py +81 -0
  345. moriarty/data/ioc/__init__.py +142 -0
  346. moriarty/data/ioc/matcher.py +254 -0
  347. moriarty/data/ioc/types.py +267 -0
  348. moriarty/data/local_intelligence.py +507 -0
  349. moriarty/data/signature_loaders/__init__.py +103 -0
  350. moriarty/data/signature_loaders/base.py +54 -0
  351. moriarty/data/signature_loaders/ioc_feed.py +356 -0
  352. moriarty/data/signature_loaders/wappalyzer.py +112 -0
  353. moriarty/dsl/__init__.py +0 -0
  354. moriarty/dsl/loader.py +99 -0
  355. moriarty/dsl/schema.py +47 -0
  356. moriarty/export/__init__.py +0 -0
  357. moriarty/intelligence/__init__.py +27 -0
  358. moriarty/intelligence/__main__.py +150 -0
  359. moriarty/intelligence/config.py +395 -0
  360. moriarty/intelligence/ioc.py +267 -0
  361. moriarty/intelligence/signatures.py +550 -0
  362. moriarty/intelligence/storage.py +501 -0
  363. moriarty/interop/__init__.py +0 -0
  364. moriarty/logging/__init__.py +0 -0
  365. moriarty/logging/config.py +47 -0
  366. moriarty/models/__init__.py +16 -0
  367. moriarty/models/assertion.py +24 -0
  368. moriarty/models/entity.py +22 -0
  369. moriarty/models/evidence.py +37 -0
  370. moriarty/models/relation.py +24 -0
  371. moriarty/models/types.py +28 -0
  372. moriarty/modules/__init__.py +0 -0
  373. moriarty/modules/avatar_hash.py +184 -0
  374. moriarty/modules/directory_fuzzer.py +322 -0
  375. moriarty/modules/dns_scan.py +40 -0
  376. moriarty/modules/domain_scanner.py +620 -0
  377. moriarty/modules/email_check.py +98 -0
  378. moriarty/modules/email_investigate.py +267 -0
  379. moriarty/modules/email_security.py +274 -0
  380. moriarty/modules/googlemaps_lookup.py +106 -0
  381. moriarty/modules/headless_executor.py +201 -0
  382. moriarty/modules/orchestrator.py +60 -0
  383. moriarty/modules/passive_recon.py +444 -0
  384. moriarty/modules/phone_extractor.py +151 -0
  385. moriarty/modules/pipeline_orchestrator.py +726 -0
  386. moriarty/modules/port_scanner.py +129 -0
  387. moriarty/modules/rdap.py +61 -0
  388. moriarty/modules/rdap_extended.py +188 -0
  389. moriarty/modules/stealth_mode.py +610 -0
  390. moriarty/modules/subdomain_discovery.py +595 -0
  391. moriarty/modules/technology_profiler.py +361 -0
  392. moriarty/modules/template_executor.py +239 -0
  393. moriarty/modules/template_scanner.py +1048 -0
  394. moriarty/modules/tls_scan.py +46 -0
  395. moriarty/modules/tls_validator.py +188 -0
  396. moriarty/modules/vuln_scanner.py +483 -0
  397. moriarty/modules/waf_detector.py +585 -0
  398. moriarty/modules/wayback_discovery.py +234 -0
  399. moriarty/modules/web_crawler.py +163 -0
  400. moriarty/net/__init__.py +0 -0
  401. moriarty/net/dns_cache.py +175 -0
  402. moriarty/net/dns_client.py +188 -0
  403. moriarty/net/rdap_client.py +52 -0
  404. moriarty/net/smtp_client.py +114 -0
  405. moriarty/net/tls_client.py +111 -0
  406. moriarty/parsers/__init__.py +0 -0
  407. moriarty/parsers/html_parser.py +136 -0
  408. moriarty/tests/__init__.py +0 -0
  409. moriarty/tests/test_email_service.py +17 -0
  410. moriarty/tests/test_models.py +46 -0
  411. moriarty/tests/test_orchestrator.py +30 -0
  412. moriarty/tests/test_tls_client.py +18 -0
  413. moriarty_project-0.1.6.dist-info/METADATA +388 -0
  414. moriarty_project-0.1.6.dist-info/RECORD +418 -0
  415. moriarty_project-0.1.6.dist-info/WHEEL +4 -0
  416. moriarty_project-0.1.6.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,550 @@
1
+ """Módulo de gerenciamento de assinaturas de ameaças."""
2
+
3
+ import re
4
+ import json
5
+ import yaml
6
+ import logging
7
+ from pathlib import Path
8
+ from typing import Dict, List, Any, Optional, Union, Pattern, Type, TypeVar, Set
9
+ from datetime import datetime
10
+ from abc import ABC, abstractmethod
11
+
12
+ from .ioc import IOC, IOCType, ThreatType
13
+ from .storage import get_storage, StorageError
14
+
15
+ # Configuração de logging
16
+ logger = logging.getLogger(__name__)
17
+
18
+ # Tipo genérico para documentação
19
+ T = TypeVar('T', bound='BaseSignature')
20
+
21
+ class SignatureError(Exception):
22
+ """Exceção base para erros de assinatura."""
23
+ pass
24
+
25
+ class BaseSignature(ABC):
26
+ """Classe base para assinaturas de ameaças."""
27
+
28
+ def __init__(self, name: str, signature_type: str, pattern: str,
29
+ description: str = None, threat_type: Union[str, ThreatType] = None,
30
+ source: str = None, confidence: int = 50,
31
+ metadata: Dict[str, Any] = None):
32
+ """Inicializa uma assinatura.
33
+
34
+ Args:
35
+ name: Nome da assinatura.
36
+ signature_type: Tipo da assinatura (ex: 'yara', 'snort', 'regex').
37
+ pattern: Padrão da assinatura.
38
+ description: Descrição da assinatura.
39
+ threat_type: Tipo de ameaça associada.
40
+ source: Fonte da assinatura.
41
+ confidence: Nível de confiança (0-100).
42
+ metadata: Metadados adicionais.
43
+ """
44
+ self.name = name
45
+ self.signature_type = signature_type.lower()
46
+ self.pattern = pattern
47
+ self.description = description or ""
48
+ self.threat_type = ThreatType(threat_type) if isinstance(threat_type, str) else (threat_type or ThreatType.UNKNOWN)
49
+ self.source = source or "unknown"
50
+ self.confidence = max(0, min(100, confidence)) # Garante que está entre 0 e 100
51
+ self.metadata = metadata or {}
52
+ self._compiled_pattern = None
53
+
54
+ def compile(self):
55
+ """Compila o padrão da assinatura para uso posterior.
56
+
57
+ Returns:
58
+ O padrão compilado.
59
+
60
+ Raises:
61
+ SignatureError: Se houver um erro ao compilar o padrão.
62
+ """
63
+ if self._compiled_pattern is None:
64
+ try:
65
+ self._compiled_pattern = self._compile_pattern()
66
+ except Exception as e:
67
+ raise SignatureError(f"Erro ao compilar assinatura '{self.name}': {e}")
68
+ return self._compiled_pattern
69
+
70
+ @abstractmethod
71
+ def _compile_pattern(self):
72
+ """Método abstrato para compilar o padrão da assinatura."""
73
+ pass
74
+
75
+ @abstractmethod
76
+ def match(self, data: Any) -> bool:
77
+ """Verifica se os dados correspondem à assinatura.
78
+
79
+ Args:
80
+ data: Dados a serem verificados.
81
+
82
+ Returns:
83
+ bool: True se houver correspondência, False caso contrário.
84
+ """
85
+ pass
86
+
87
+ def to_dict(self) -> Dict[str, Any]:
88
+ """Converte a assinatura para um dicionário."""
89
+ return {
90
+ 'name': self.name,
91
+ 'signature_type': self.signature_type,
92
+ 'pattern': self.pattern,
93
+ 'description': self.description,
94
+ 'threat_type': self.threat_type.value,
95
+ 'source': self.source,
96
+ 'confidence': self.confidence,
97
+ 'metadata': self.metadata
98
+ }
99
+
100
+ @classmethod
101
+ def from_dict(cls: Type[T], data: Dict[str, Any]) -> T:
102
+ """Cria uma assinatura a partir de um dicionário."""
103
+ return cls(
104
+ name=data['name'],
105
+ signature_type=data['signature_type'],
106
+ pattern=data['pattern'],
107
+ description=data.get('description'),
108
+ threat_type=data.get('threat_type'),
109
+ source=data.get('source'),
110
+ confidence=data.get('confidence', 50),
111
+ metadata=data.get('metadata', {})
112
+ )
113
+
114
+ def __str__(self) -> str:
115
+ return f"{self.name} ({self.signature_type}): {self.pattern}"
116
+
117
+ class RegexSignature(BaseSignature):
118
+ """Assinatura baseada em expressões regulares."""
119
+
120
+ def _compile_pattern(self) -> Pattern:
121
+ """Compila a expressão regular."""
122
+ return re.compile(self.pattern, re.IGNORECASE | re.DOTALL)
123
+
124
+ def match(self, data: str) -> bool:
125
+ """Verifica se a string corresponde ao padrão da assinatura."""
126
+ if not isinstance(data, str):
127
+ return False
128
+
129
+ try:
130
+ pattern = self.compile()
131
+ return bool(pattern.search(data))
132
+ except Exception as e:
133
+ logger.error(f"Erro ao verificar correspondência da assinatura {self.name}: {e}")
134
+ return False
135
+
136
+ class YaraSignature(BaseSignature):
137
+ """Assinatura no formato YARA."""
138
+
139
+ def _compile_pattern(self) -> Any:
140
+ """Compila a regra YARA."""
141
+ # Em uma implementação real, isso usaria o módulo yara
142
+ # Por enquanto, apenas retornamos o padrão como está
143
+ return self.pattern
144
+
145
+ def match(self, data: Any) -> bool:
146
+ """Verifica se os dados correspondem à regra YARA."""
147
+ # Em uma implementação real, isso usaria o módulo yara para compilar e verificar
148
+ # Por enquanto, apenas verificamos se o padrão está contido nos dados
149
+ if not isinstance(data, (str, bytes)):
150
+ return False
151
+
152
+ try:
153
+ # Verificação básica de correspondência de string
154
+ return self.pattern in str(data)
155
+ except Exception as e:
156
+ logger.error(f"Erro ao verificar correspondência da assinatura YARA {self.name}: {e}")
157
+ return False
158
+
159
+ class SnortSignature(BaseSignature):
160
+ """Assinatura no formato Snort."""
161
+
162
+ def _compile_pattern(self) -> Any:
163
+ """Processa a regra Snort."""
164
+ # Em uma implementação real, isso processaria a regra Snort
165
+ # Por enquanto, apenas retornamos o padrão como está
166
+ return self.pattern
167
+
168
+ def match(self, data: Any) -> bool:
169
+ """Verifica se os dados correspondem à regra Snort."""
170
+ # Em uma implementação real, isso usaria um analisador de regras Snort
171
+ # Por enquanto, apenas verificamos se o padrão está contido nos dados
172
+ if not isinstance(data, (str, bytes)):
173
+ return False
174
+
175
+ try:
176
+ # Extrai o conteúdo entre parênteses da regra Snort
177
+ content_match = re.search(r'content:"([^"]+)"', self.pattern)
178
+ if content_match:
179
+ content = content_match.group(1)
180
+ return content in str(data)
181
+ return False
182
+ except Exception as e:
183
+ logger.error(f"Erro ao verificar correspondência da assinatura Snort {self.name}: {e}")
184
+ return False
185
+
186
+ class SignatureManager:
187
+ """Gerenciador de assinaturas de ameaças."""
188
+
189
+ def __init__(self, storage=None):
190
+ """Inicializa o gerenciador de assinaturas.
191
+
192
+ Args:
193
+ storage: Instância de armazenamento para persistência (opcional).
194
+ """
195
+ self.storage = storage or get_storage()
196
+ self.signatures: Dict[str, Dict[str, BaseSignature]] = {}
197
+ self.signature_classes = {
198
+ 'regex': RegexSignature,
199
+ 'yara': YaraSignature,
200
+ 'snort': SnortSignature,
201
+ }
202
+
203
+ def register_signature_type(self, signature_type: str, signature_class: Type[BaseSignature]):
204
+ """Registra um novo tipo de assinatura.
205
+
206
+ Args:
207
+ signature_type: Nome do tipo de assinatura.
208
+ signature_class: Classe que implementa a assinatura.
209
+ """
210
+ if not issubclass(signature_class, BaseSignature):
211
+ raise TypeError(f"A classe de assinatura deve herdar de BaseSignature")
212
+ self.signature_classes[signature_type.lower()] = signature_class
213
+
214
+ def add_signature(self, signature: Union[BaseSignature, Dict[str, Any]],
215
+ signature_type: str = None) -> bool:
216
+ """Adiciona uma assinatura ao gerenciador.
217
+
218
+ Args:
219
+ signature: Instância de BaseSignature ou dicionário com os dados da assinatura.
220
+ signature_type: Tipo da assinatura (opcional, se não for fornecida, será obtido da assinatura).
221
+
222
+ Returns:
223
+ bool: True se a assinatura foi adicionada, False se já existir.
224
+
225
+ Raises:
226
+ SignatureError: Se houver um erro ao adicionar a assinatura.
227
+ """
228
+ if isinstance(signature, dict):
229
+ if signature_type is None:
230
+ signature_type = signature.get('signature_type')
231
+ if not signature_type:
232
+ raise SignatureError("Tipo de assinatura não especificado")
233
+
234
+ signature_cls = self.signature_classes.get(signature_type.lower())
235
+ if not signature_cls:
236
+ raise SignatureError(f"Tipo de assinatura não suportado: {signature_type}")
237
+
238
+ try:
239
+ signature = signature_cls.from_dict(signature)
240
+ except Exception as e:
241
+ raise SignatureError(f"Falha ao criar assinatura: {e}")
242
+
243
+ if not isinstance(signature, BaseSignature):
244
+ raise TypeError("A assinatura deve ser uma instância de BaseSignature ou um dicionário válido")
245
+
246
+ # Obtém o tipo da assinatura
247
+ sig_type = signature.signature_type.lower()
248
+
249
+ # Inicializa o dicionário para o tipo de assinatura, se necessário
250
+ if sig_type not in self.signatures:
251
+ self.signatures[sig_type] = {}
252
+
253
+ # Verifica se a assinatura já existe
254
+ if signature.name in self.signatures[sig_type]:
255
+ logger.warning(f"Assinatura '{signature.name}' do tipo '{sig_type}' já existe")
256
+ return False
257
+
258
+ # Compila a assinatura para verificar se é válida
259
+ try:
260
+ signature.compile()
261
+ except Exception as e:
262
+ raise SignatureError(f"Falha ao compilar assinatura '{signature.name}': {e}")
263
+
264
+ # Adiciona a assinatura ao gerenciador
265
+ self.signatures[sig_type][signature.name] = signature
266
+ logger.debug(f"Assinatura adicionada: {signature.name} ({sig_type})")
267
+
268
+ # Tenta salvar no armazenamento, se disponível
269
+ if self.storage:
270
+ try:
271
+ return self.storage.add_signature(
272
+ name=signature.name,
273
+ signature_type=sig_type,
274
+ pattern=signature.pattern,
275
+ description=signature.description,
276
+ threat_type=signature.threat_type.value,
277
+ source=signature.source,
278
+ confidence=signature.confidence,
279
+ metadata=signature.metadata
280
+ )
281
+ except Exception as e:
282
+ logger.error(f"Erro ao salvar assinatura no armazenamento: {e}")
283
+
284
+ return True
285
+
286
+ def load_from_file(self, file_path: Union[str, Path], signature_type: str = None) -> int:
287
+ """Carrega assinaturas de um arquivo.
288
+
289
+ Args:
290
+ file_path: Caminho para o arquivo de assinaturas.
291
+ signature_type: Tipo das assinaturas (opcional, tenta detectar automaticamente).
292
+
293
+ Returns:
294
+ int: Número de assinaturas carregadas.
295
+
296
+ Raises:
297
+ SignatureError: Se houver um erro ao carregar as assinaturas.
298
+ """
299
+ file_path = Path(file_path)
300
+ if not file_path.exists() or not file_path.is_file():
301
+ raise SignatureError(f"Arquivo não encontrado: {file_path}")
302
+
303
+ # Tenta detectar o tipo de assinatura com base na extensão do arquivo
304
+ if signature_type is None:
305
+ ext = file_path.suffix.lower()
306
+ if ext in ('.yar', '.yara'):
307
+ signature_type = 'yara'
308
+ elif ext in ('.rules', '.snort'):
309
+ signature_type = 'snort'
310
+ elif ext in ('.json', '.yaml', '.yml'):
311
+ # Para JSON/YAML, o tipo deve ser especificado
312
+ signature_type = 'regex' # Padrão
313
+ else:
314
+ signature_type = 'regex' # Padrão para arquivos de texto
315
+
316
+ # Carrega as assinaturas do arquivo
317
+ try:
318
+ if file_path.suffix.lower() in ('.json', '.yaml', '.yml'):
319
+ return self._load_from_structured_file(file_path, signature_type)
320
+ else:
321
+ return self._load_from_text_file(file_path, signature_type)
322
+ except Exception as e:
323
+ raise SignatureError(f"Erro ao carregar assinaturas de {file_path}: {e}")
324
+
325
+ def _load_from_structured_file(self, file_path: Path, signature_type: str) -> int:
326
+ """Carrega assinaturas de um arquivo estruturado (JSON/YAML)."""
327
+ with open(file_path, 'r', encoding='utf-8') as f:
328
+ if file_path.suffix.lower() == '.json':
329
+ data = json.load(f)
330
+ else: # YAML
331
+ data = yaml.safe_load(f)
332
+
333
+ # Verifica se é uma lista de assinaturas ou um dicionário com uma lista 'signatures'
334
+ if isinstance(data, list):
335
+ signatures = data
336
+ elif isinstance(data, dict) and 'signatures' in data:
337
+ signatures = data['signatures']
338
+ else:
339
+ signatures = [data] # Assume que é um único objeto de assinatura
340
+
341
+ # Adiciona cada assinatura
342
+ count = 0
343
+ for sig_data in signatures:
344
+ if not isinstance(sig_data, dict):
345
+ logger.warning(f"Formato de assinatura inválido: {sig_data}")
346
+ continue
347
+
348
+ # Define o tipo de assinatura, se não estiver definido
349
+ if 'signature_type' not in sig_data and signature_type:
350
+ sig_data['signature_type'] = signature_type
351
+
352
+ try:
353
+ if self.add_signature(sig_data):
354
+ count += 1
355
+ except Exception as e:
356
+ logger.error(f"Falha ao adicionar assinatura: {e}")
357
+
358
+ logger.info(f"Carregadas {count} assinaturas de {file_path}")
359
+ return count
360
+
361
+ def _load_from_text_file(self, file_path: Path, signature_type: str) -> int:
362
+ """Carrega assinaturas de um arquivo de texto."""
363
+ with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
364
+ lines = f.read().splitlines()
365
+
366
+ count = 0
367
+ current_sig = None
368
+
369
+ for line in lines:
370
+ line = line.strip()
371
+ if not line or line.startswith('#'):
372
+ continue
373
+
374
+ # Tenta detectar o tipo de assinatura com base no conteúdo
375
+ if signature_type == 'auto':
376
+ if line.startswith('rule '):
377
+ sig_type = 'yara'
378
+ elif 'content:' in line and 'sid:' in line:
379
+ sig_type = 'snort'
380
+ else:
381
+ sig_type = 'regex'
382
+ else:
383
+ sig_type = signature_type
384
+
385
+ # Cria uma assinatura para cada linha
386
+ try:
387
+ sig_name = f"{file_path.stem}_{count}"
388
+ sig = {
389
+ 'name': sig_name,
390
+ 'signature_type': sig_type,
391
+ 'pattern': line,
392
+ 'source': str(file_path)
393
+ }
394
+
395
+ if self.add_signature(sig):
396
+ count += 1
397
+ except Exception as e:
398
+ logger.error(f"Falha ao adicionar assinatura da linha: {line[:50]}...: {e}")
399
+
400
+ logger.info(f"Carregadas {count} assinaturas de {file_path}")
401
+ return count
402
+
403
+ def load_from_directory(self, directory: Union[str, Path],
404
+ recursive: bool = True,
405
+ signature_type: str = None) -> int:
406
+ """Carrega assinaturas de um diretório.
407
+
408
+ Args:
409
+ directory: Caminho para o diretório com arquivos de assinaturas.
410
+ recursive: Se deve carregar de subdiretórios também.
411
+ signature_type: Tipo das assinaturas (opcional, tenta detectar automaticamente).
412
+
413
+ Returns:
414
+ int: Número total de assinaturas carregadas.
415
+ """
416
+ directory = Path(directory)
417
+ if not directory.exists() or not directory.is_dir():
418
+ raise SignatureError(f"Diretório não encontrado: {directory}")
419
+
420
+ count = 0
421
+
422
+ # Extensões de arquivo suportadas
423
+ extensions = ['.json', '.yaml', '.yml', '.yar', '.yara', '.rules', '.snort', '.txt']
424
+
425
+ # Função para processar um arquivo
426
+ def process_file(file_path: Path):
427
+ nonlocal count
428
+ try:
429
+ count += self.load_from_file(file_path, signature_type)
430
+ except Exception as e:
431
+ logger.error(f"Erro ao carregar assinaturas de {file_path}: {e}")
432
+
433
+ # Processa os arquivos no diretório
434
+ for ext in extensions:
435
+ pattern = f"*{ext}"
436
+ for file_path in directory.glob(pattern):
437
+ if file_path.is_file():
438
+ process_file(file_path)
439
+
440
+ # Processa recursivamente os subdiretórios, se solicitado
441
+ if recursive:
442
+ for subdir in directory.iterdir():
443
+ if subdir.is_dir():
444
+ count += self.load_from_directory(subdir, recursive, signature_type)
445
+
446
+ logger.info(f"Total de {count} assinaturas carregadas de {directory}")
447
+ return count
448
+
449
+ def match(self, data: Any, signature_type: str = None) -> List[Dict[str, Any]]:
450
+ """Verifica se os dados correspondem a alguma assinatura.
451
+
452
+ Args:
453
+ data: Dados a serem verificados.
454
+ signature_type: Tipo de assinatura para verificar (opcional, verifica todos os tipos).
455
+
456
+ Returns:
457
+ Lista de dicionários com informações sobre as assinaturas que corresponderam.
458
+ """
459
+ matches = []
460
+
461
+ # Determina quais tipos de assinatura verificar
462
+ if signature_type:
463
+ signature_types = [signature_type.lower()]
464
+ else:
465
+ signature_types = list(self.signatures.keys())
466
+
467
+ # Verifica cada tipo de assinatura
468
+ for sig_type in signature_types:
469
+ if sig_type not in self.signatures:
470
+ continue
471
+
472
+ # Verifica cada assinatura do tipo
473
+ for name, signature in self.signatures[sig_type].items():
474
+ try:
475
+ if signature.match(data):
476
+ matches.append({
477
+ 'name': name,
478
+ 'signature_type': sig_type,
479
+ 'threat_type': signature.threat_type.value,
480
+ 'confidence': signature.confidence,
481
+ 'source': signature.source,
482
+ 'description': signature.description,
483
+ 'metadata': signature.metadata
484
+ })
485
+ except Exception as e:
486
+ logger.error(f"Erro ao verificar assinatura {name}: {e}")
487
+
488
+ # Ordena por confiança (maior primeiro) e depois por nome
489
+ matches.sort(key=lambda x: (-x['confidence'], x['name']))
490
+ return matches
491
+
492
+ def get_signatures(self, signature_type: str = None) -> List[Dict[str, Any]]:
493
+ """Obtém todas as assinaturas ou de um tipo específico.
494
+
495
+ Args:
496
+ signature_type: Tipo de assinatura (opcional, retorna todos os tipos se None).
497
+
498
+ Returns:
499
+ Lista de dicionários com informações sobre as assinaturas.
500
+ """
501
+ result = []
502
+
503
+ if signature_type:
504
+ signature_types = [signature_type.lower()]
505
+ else:
506
+ signature_types = list(self.signatures.keys())
507
+
508
+ for sig_type in signature_types:
509
+ if sig_type in self.signatures:
510
+ for name, signature in self.signatures[sig_type].items():
511
+ result.append({
512
+ 'name': name,
513
+ 'signature_type': sig_type,
514
+ 'threat_type': signature.threat_type.value,
515
+ 'confidence': signature.confidence,
516
+ 'source': signature.source,
517
+ 'description': signature.description,
518
+ 'pattern': signature.pattern,
519
+ 'metadata': signature.metadata
520
+ })
521
+
522
+ return result
523
+
524
+ def clear(self, signature_type: str = None):
525
+ """Remove todas as assinaturas ou de um tipo específico.
526
+
527
+ Args:
528
+ signature_type: Tipo de assinatura a ser removido (opcional, remove todas se None).
529
+ """
530
+ if signature_type:
531
+ if signature_type in self.signatures:
532
+ count = len(self.signatures[signature_type])
533
+ del self.signatures[signature_type]
534
+ logger.info(f"Removidas {count} assinaturas do tipo '{signature_type}'")
535
+ else:
536
+ count = sum(len(sigs) for sigs in self.signatures.values())
537
+ self.signatures.clear()
538
+ logger.info(f"Removidas todas as {count} assinaturas")
539
+
540
+ # Instância global para uso em todo o módulo
541
+ signature_manager = SignatureManager()
542
+
543
+ def get_signature_manager() -> SignatureManager:
544
+ """Obtém a instância global do gerenciador de assinaturas."""
545
+ return signature_manager
546
+
547
+ def set_signature_manager(manager: SignatureManager):
548
+ """Define a instância global do gerenciador de assinaturas."""
549
+ global signature_manager
550
+ signature_manager = manager