Crawlector(名称 Crawlector 是 Crawler(爬虫)与 Detector(检测器)的组合)是一个威胁狩猎框架,专门用于扫描网站中的恶意对象。
注意-1:该框架于 2022 年 10 月 22 日在意大利贝加莫的 No Hat 会议上首次展示(幻灯片,YouTube 录像)。此外,它于 2022 年 12 月 2 日在新加坡的 AVAR 会议上第二次展示。
注意-2:演讲中提到的配套工具 EKFiddle2Yara(该工具可将 EKFiddle 规则转换为 Yara 规则)也同时在这两次会议上发布。
注意-3:2.0 版本(Photoid Build:180923)是一个里程碑版本,于 2023 年 9 月 18 日发布。
注意-4:2.1 版本(Universe-647 Build:031023)于 2023 年 10 月 3 日发布。主要新增功能是 Slack 警报通知功能。
注意-5:2.2 版本(Hallstatt Build:051123)于 2023 年 11 月 5 日发布。主要新增功能是 Slack 远程控制功能。
注意-6:2.3 版本(Munich Build:241123)于 2023 年 11 月 24 日发布。主要新增功能是 DNS 名称服务器功能。
注意-6:2.3.1 版本(Nero Build:131225)于 2025 年 12 月 13 日发布。这是一个维护版本。
此功能用于针对每个被扫描页面检查恶意 URL。框架可以从 URLHaus 服务器查询恶意 URL 列表(配置项:url_list_web),或者从磁盘上的文件查询(配置项:url_list_file);如果指定了后者,则后者优先。
其工作原理是将每个页面的内容与 url_list_web 或 url_list_file 中的所有 URL 条目进行匹配,检查所有出现的位置。此外,如果匹配成功,且配置选项 check_url_api 设置为 true,Crawlector 将向 url_api 配置选项中设置的 API URL 发送 POST 请求,该请求返回一个包含匹配 URL 额外信息的 JSON 对象。此类信息包括 urlh_status(例如 online、offline、unknown)、urlh_threat(例如 malware_download)、urlh_tags(例如 elf、Mozi)和 urlh_reference(例如 https://urlhaus.abuse.ch/url/1116455/)。仅当 check_url_api 设置为 true 时,这些信息才会包含在日志文件 cl_mlog_<当前日期><当前时间><(上午|下午)>.csv(见下文)中。否则,日志文件将包含列 urlh_url(匹配的恶意 URL 列表)和 urlh_hit(每个匹配恶意 URL 的出现次数),前提是 check_url 设置为 true。
通过将配置选项 check_url 设置为 false,可以完全禁用 URLHaus 功能。
需要指出的是,考虑到需要检查的恶意 URL数量巨大(在撰写本文时约有 1.3 亿条),以及从 URLHaus 服务器获取额外信息所需的时间(如果选项 check_url_api 设置为 true),此功能可能会拖慢扫描速度。
在运行任何会话之前,您必须熟悉配置文件 cl_config.ini。所有部分和参数均在配置文件中提供了文档。
Yara 离线扫描功能是一个独立选项,意味着如果启用,Crawlector 将仅执行此功能,而不管其他已启用的功能。同样,爬取域名/站点数字证书的功能也是如此。无论如何,建议您在配置文件中禁用所有未使用的功能。
log_to_file 或 log_to_cons),如果 Yara 规则仅引用模块的属性(例如 PE、ELF、Hash 等),则 Crawlector 在匹配时将仅显示规则名称,不包含偏移量和长度数据。注意:对于任何需要路径的选项,请始终提供绝对路径。
要访问/扫描一个网站,URL 列表必须存储在“cl_sites”目录下的文本文件中。
Crawlector 接受三种类型的 URL:
[a-zA-Z0-9_-]{1,128} = <url><id>[depth:<0|1>-><\d+>,total:<\d+>,sleep:<\d+>] = <url>
例如:
mfmokbel[depth:1->3,total:10,sleep:0] = https://www.mfmokbel.com
这等价于:
mfmokbel[d:1->3,t:10,s:0] = https://www.mfmokbel.com
其中,<id> := [a-zA-Z0-9_-]{1,128}
depth、total 和 sleep 也可以分别用其缩写形式 d、t 和 s 代替。
40 (10 + (10*3)) 个 URL。注意 1:通过将配置文件 [spider] 部分中的配置参数 live_crawler 设置为 false,可以将类型 3 的 URL 转换为类型 1 的 URL。
注意 2:空行以及以“;”、“#”或“//”开头的行将被忽略。
爬虫功能赋予 Crawlector 在目标页面上查找额外链接的能力。爬虫支持以下功能:
Type 3 才能使爬虫功能生效。exclude_url 配置选项指定一个通配符模式列表(以竖线分隔),以防止爬取匹配的 URL。例如:*.zip|*.exe|*.rar|*.zip|*.7z|*.pdf|.*bat|*.db。include_url 配置选项指定一个通配符模式列表(以竖线分隔),以仅爬取匹配该模式的 URL。例如:*/checkout/*|*/products/*。exclude_https 配置选项排除 HTTPS URL。add_ext_links 配置选项将出站/外部链接也纳入考虑(仅限主页面)。该功能遵循 exclude_url 和 include_url 配置选项。ext_links_only 配置选项仅考虑主页面的出站/外部链接,排除所有其他 URL。该功能遵循 exclude_url 和 include_url 配置选项。在 2.0 版本中,ID 通过将以下类型之一附加到 ID 本身来显式分配其类型:
| id_postfix (类型) | 描述 |
|---|---|
| _t1_p | 类型 1,无 ID 的普通 URL |
| _sd | 子域名子类型 |
| _tld | TLD 子类型 |
| _t2_p | 类型 2,有 ID 的普通 URL |
| _t3_s | 类型 3,爬取到的域名 |
| _t3_sc | 类型 3,带子节点的爬取到的域名 |
| _t3_ss | 类型 3,当类型 3(_t3_s)URL 转换为类型 1 URL |
| _t3_s_e | 类型 3,爬取到的域名外部链接 |
| _obj_ | 用于深度扫描和对象提取 |
| _t4_ru | 用于重定向 URL(适用于所有类型) |
每个 ID 都携带其类型,使得浏览和过滤结果更加容易。此外,此信息在内部出于各种原因使用。
site_ranking 部分提供了一些选项,用于更改 CSV 文件的读取方式。