Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
iocextract — 去毒化妥协指标(IOC)提取器。 | Kitploit
工具/GitHubGitHub/pedramamini/iocextract
危害指标 (IOC) 管理OSINT (开源情报)威胁源与聚合器取证分析信息收集恶意软件分析数字取证威胁情报
GitHubpedramamini/iocextract

iocextract

去毒化妥协指标(IOC)提取器。

查看仓库
584921年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

iocextract

InQuest 开发 构建状态 文档状态 PyPI 版本

入侵指标 (IOC) 提取器,用于提取一些最常见的入侵工件。

目录

  • 概述
    • 问题
    • 我们的解决方案
    • 使用示例
  • 安装
  • 使用
    • 库
    • 命令行界面
  • 有用的信息
    • 常见问题
    • 更多细节
    • 自定义正则表达式
    • 相关项目
    • 贡献

概述

iocextract 是一个库和命令行界面 (CLI),用于从文本语料中提取 URL、IP 地址、MD5/SHA 哈希、电子邮件地址和 YARA 规则。它允许提取编码和"去毒化"的 IOC,并可选地进行解码或复原。

问题

恶意软件分析师或端点软件通常会"去毒化" IOC(如 URL 和 IP 地址),以防止意外暴露于活跃的恶意内容。提取和聚合这些 IOC 对分析师来说通常很有价值。不幸的是,现有的"IOC 提取"工具常常会忽略它们,因为它们无法被标准正则表达式捕获。

例如,用括号包围句点的简单去毒化技术:

root@kitploit:~
127[.]0[.]0[.]1

使用简单 IP 地址正则表达式的现有工具将完全忽略这个 IOC。

我们的解决方案

通过将精心设计的正则表达式与一些自定义后处理相结合,我们能够检测并反混淆"去毒化"的 IOC。这为分析师节省了时间和精力,否则他们可能需要手动寻找并将 IOC 转换为机器可读格式。

使用示例

许多 Twitter 用户发布含有去毒化 URL 的 C2 或其他有价值的 IOC 信息。 例如,@InQuest 的这条推文:

root@kitploit:~
推荐阅读,来自 @unit42_intel 的优秀工作:
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/ ...
InQuest 客户自 2017 年 6 月 3 日起已检测到来自 hotfixmsupload[.]com 的威胁,
自 2018 年 2 月 1 日起检测到来自 cdnverify[.]net 的威胁。

如果我们通过提取器运行这段文本,我们可以轻松提取出 URL:

root@kitploit:~
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/
hotfixmsupload[.]com
cdnverify[.]net

在提取时传入 refang=True 会去除混淆,但由于这些是真实的 IOC,我们还是在文档中保留其去毒化形式。

安装

您可能需要安装 Python 开发头文件才能安装 regex 依赖。在基于 Ubuntu/Debian 的系统上,请尝试:

root@kitploit:~
sudo apt-get install python-dev

然后通过 pip 安装 iocextract:

root@kitploit:~
pip install iocextract

如果在 Windows 上安装遇到问题,请尝试直接安装 regex,方法是从 PyPI 下载相应版本的 wheel 并通过 pip 安装:

root@kitploit:~
pip install regex-2018.06.21-cp27-none-win_amd64.whl

使用

库

尝试提取一些去毒化的 URL:

root@kitploit:~
import iocextract

content = \
"""
我真的很喜欢 example[.]com!
现在所有机器人都访问 hxxp://example.com/bad/url。
C2: tcp://example[.]com:8989/bad
"""

for url in iocextract.extract_urls(content):
    print(url)

    # 输出

    # hxxp://example.com/bad/url
    # tcp://example[.]com:8989/bad
    # example[.]com
    # tcp://example[.]com:8989/bad

注意:某些 URL 可能会被多个正则表达式捕获,因而出现两次。

如果需要,您还可以"复原"或去除 IOC 中的常见混淆方法:

root@kitploit:~
import iocextract

for url in iocextract.extract_urls(content, refang=True):
    print(url)

    # 输出

    # http://example.com/bad/url
    # http://example.com:8989/bad
    # http://example.com
    # http://example.com:8989/bad

如果您在提取时完全不想去毒化提取到的 IOC,也可以禁用此功能:

root@kitploit:~
import iocextract

content = \
"""
http://example.com/bad/url
http://example.com:8989/bad
http://example.com
http://example.com:8989/bad
"""

for url in iocextract.extract_urls(content, defang=False):
    print(url)

    # 输出

    # http://example.com/bad/url
    # http://example.com:8989/bad
    # http://example.com
    # http://example.com:8989/bad

该库中的所有 extract_* 函数返回的是迭代器,而不是列表。这种行为的优点在于 iocextract 可以处理极大的输入,并且开销非常低。但是,如果您由于某些原因需要多次迭代 IOC,则必须将结果保存为列表:

root@kitploit:~
import iocextract

content = \
"""
我真的很喜欢 example[.]com!
现在所有机器人都访问 hxxp://example.com/bad/url。
C2: tcp://example[.]com:8989/bad
"""

print(list(iocextract.extract_urls(content)))
# ['hxxp://example.com/bad/url', 'tcp://example[.]com:8989/bad', 'example[.]com', 'tcp://example[.]com:8989/bad']

命令行界面

还包含一个命令行工具:

root@kitploit:~
$ iocextract -h
    usage: iocextract [-h] [--input INPUT] [--output OUTPUT] [--extract-emails]
                  [--extract-ips] [--extract-ipv4s] [--extract-ipv6s]
                  [--extract-urls] [--extract-yara-rules] [--extract-hashes]
                  [--custom-regex REGEX_FILE] [--refang] [--strip-urls]
                  [--wide]

    高级入侵指标 (IOC) 提取器。如果未指定任何参数,默认行为是提取所有 IOC。

    可选参数:
      -h, --help            显示此帮助信息并退出
      --input INPUT         默认值:stdin
      --output OUTPUT       默认值:stdout
      --extract-emails
      --extract-ips
      --extract-ipv4s
      --extract-ipv6s
      --extract-urls
      --extract-yara-rules
      --extract-hashes
      --custom-regex REGEX_FILE 包含自定义正则表达式字符串的文件,每行一个,每个包含一个捕获组
      --refang              默认值:否
      --strip-urls          移除 URL 末尾可能的垃圾字符。默认值:否
      --wide                预处理输入以允许宽编码字符匹配。默认值:否

注意:只有 URL、电子邮件和 IPv4 地址才能被"复原"。

有用的信息

常见问题

问:你是在提取纯文本(例如推文或博客文章内容)中可能去毒化的 IOC 吗?

答:是的!这正是 iocextract 的设计目的,也是其表现最好的场景。想更进一步,实现自动化提取和存储吗?请查看 ThreatIngestor。

问:你是在提取经过 hex 或 base64 编码的 URL 吗?

答:是的,但 CLI 可能无法给出最佳结果。请尝试编写 Python 脚本并直接调用 iocextract.extract_encoded_urls。

注意:URL 末尾很可能会有额外的垃圾字符。

问:你是在从未去毒化的 HTML/XML/RTF 中提取 IOC 吗?

答:可能可以,但建议使用 --strip-urls CLI 标志(或库中的 strip=True 参数),并且输出中仍可能包含一些额外垃圾。如果是从 HTML 中提取,请考虑使用类似 Beautiful Soup 的工具先提取文本内容,再将其传递给 iocextract,就像这样。

问:你是在从二进制数据(如可执行文件)或非常大的输入中提取未去毒化的 IOC 吗?

答:以库的形式运行时有一个非常简单的版本可用,但需要 defang=False 参数,并且可能会错过一些 IOC。iocextract 中的正则表达式旨在灵活地捕获去毒化的 IOC。如果您无法收集所需信息,请考虑使用 Cacador 等替代方案。

更多细节

该库当前支持以下 IOC:

  • IP 地址
    • 完全支持 IPv4
    • 部分支持 IPv6
  • URL
    • 带协议说明符:http, https, tcp, udp, ftp, sftp, ftps
    • 带 [.] 锚点,即使没有协议说明符
    • 支持 IPv4 和 IPv6 (RFC2732) URL
    • 带协议说明符的 hex 编码 URL:http, https, ftp
    • 带协议说明符的 URL 编码 URL:http, https, ftp, ftps, sftp
    • 带协议说明符的 Base64 编码 URL:http, https, ftp
  • 电子邮件
    • 部分支持,以 @ 或 at 为锚点
  • YARA 规则
    • 包含 imports、includes 和 comments
  • 哈希
    • MD5
    • SHA1
    • SHA256
    • SHA512
  • 电话号码
  • 自定义正则表达式
    • 仅一个捕获组

对于 IPv4 地址,支持以下去毒化技术:

对于电子邮件地址,支持以下去毒化技术:

对于 URL,支持以下去毒化技术:

注意:上表并非详尽无遗,其他 URL/去毒化模式也可能被正确提取。如果您发现缺少或工作不正常的内容,请随时通过 GitHub Issues 告知我们。

base64 正则表达式是使用 @deadpixi 的 base64 正则表达式工具 生成的。

自定义正则表达式

如果您想使用 CLI 通过自己的自定义正则表达式提取 IOC,请创建一个纯文本文件,每行一个正则表达式字符串,然后使用 --custom-regex 标志传入。请确保每个正则表达式字符串恰好包含一个捕获组。

例如:

root@kitploit:~
http://(example\.com)/
(?:https|ftp)://(example\.com)/

这个自定义正则表达式文件将从匹配的 URL 中提取域名 example.com。(?: ) 非捕获组不会包含在匹配结果中。

如果您想提取整个匹配项,只需将整个正则表达式字符串用括号括起来,如下所示:

root@kitploit:~
(https?://.*?.com)

如果您的正则表达式无效,您将看到如下错误信息:

root@kitploit:~
Error in custom regex: missing ) at position 5

如果您的正则表达式不包含捕获组,您将看到如下错误信息:

root@kitploit:~
Error in custom regex: no such group

使用自定义正则表达式时,请始终使用单个捕获组。以下是一个快速示例:

root@kitploit:~
[
    r'(my regex)',  # 如果模式匹配,则返回 'my regex'
    r'my (re)gex',  # 如果模式匹配,则返回 're'
]

使用多于一个捕获组可能会导致意外结果。请查看以下示例:

root@kitploit:~
[
    r'my regex',  # 不返回任何内容
    r'(my) (re)gex',  # 如果模式匹配,则返回 'my'
]

为什么?因为结果始终只返回每个正则表达式的第一个组匹配。

对于更复杂的正则表达式查询,您可以像这样组合捕获组和非捕获组:

root@kitploit:~
[
    r'(?:my|your) (re)gex',  # 如果模式匹配,则返回 're'
]

您现在可以比较用于非捕获组的 (?: ) 语法和用于捕获组的 ( ) 语法。

相关项目

如果 iocextract 不符合您的用例,还有一些类似的项目。请查看 GitHub 上的 defang 和 indicators-of-compromise 标签,以及:

  • Go 语言的 Cacador
  • JavaScript 语言的 ioc-extractor
  • Python 语言的 Cyobstract

如果您想自动化 IOC 提取、丰富、导出等操作,请查看 ThreatIngestor。

如果您正在使用 YARA 规则,您可能对 plyara 感兴趣。

贡献

如果您有一种无法被提取器处理的去毒化技术,或者发现了任何错误,欢迎提交 Pull Requests 和 Issues。该库使用 GPL-2.0 许可证。

谁在使用 iocextract?

  • InQuest
  • PacketTotal

您也在使用它吗?希望在此列出您的网站?请告诉我们!

下载工具
技术去毒化复原
. -> [.]1[.]1[.]1[.]11.1.1.1
. -> (.)1(.)1(.)1(.)11.1.1.1
. -> \.1.1.1.11.1.1.1
部分去毒1[.1[.1.]11.1.1.1
任意组合1.)1[.1.)11.1.1.1
技术去毒化复原
. -> [.]me@example[.]com[email protected]
. -> (.)me@example(.)com[email protected]
. -> {.}me@example{.}com[email protected]
. -> _dot_me@example dot com[email protected]
@ -> [@]me[@]example.com[email protected]
@ -> (@)me(@)example.com[email protected]
@ -> {@}me{@}example.com[email protected]
@ -> _at_me at example.com[email protected]
部分去毒me@} example[.com[email protected]
添加空格me@example [.] com[email protected]
任意组合me @example [.)com[email protected]
技术去毒化复原
. -> [.]example[.]com/pathhttp://example.com/path
. -> (.)example(.)com/pathhttp://example.com/path
. -> \.example\.com/pathhttp://example.com/path
部分去毒http://example[.com/pathhttp://example.com/path
/ -> [/]http://example.com[/]pathhttp://example.com/path
Cisco ESAhttp:// example .com /pathhttp://example.com/path
:// -> __http__example.com/pathhttp://example.com/path
:// -> :\\http:\\example.com/pathhttp://example.com/path
: -> [:]http[:]//example.com/pathhttp://example.com/path
hxxphxxp://example.com/pathhttp://example.com/path
任意组合hxxp__ example( .com[/]pathhttp://example.com/path
Hex 编码687474703a2f2f6578616d706c652e636f6d2f70617468http://example.com/path
URL 编码http%3A%2F%2fexample%2Ecom%2Fpathhttp://example.com/path
Base64 编码aHR0cDovL2V4YW1wbGUuY29tL3BhdGgKhttp://example.com/path