从RTF文件中提取可能唯一的字符串以进行威胁搜索
rtfsig的Python项目详细描述
简介
此工具旨在使签名RTF文件的潜在独特部分变得容易。在
它由davidcannings(@edeca)编写,由pwcuk根据apache2.0许可发布。在
要安装,您需要Python3和一些基本库。如果使用pip
安装,则会自动处理这些问题:
$ pip install rtfsig
然后像这样跑:
^{pr2}$这将扫描文件以查找可能唯一的RTF标记,将详细信息打印到屏幕,并将Yara规则保存到output.yar
。在
请提出作为Github问题的错误,并注意这个工具是测试版。在
输出
控制台
基本输出显示在控制台上,可用于搜索VirusTotal(尝试类似content:rsid7043998
)的搜索。在
-> % rtfsig -f 0b06052d3b5954594cf0e28bd9c50d9110eb8fb78cb78c9a99686eb4ba3391df.hostile
INFO:root:Starting to parse file 0b06052d3b5954594cf0e28bd9c50d9110eb8fb78cb78c9a99686eb4ba3391df.hostile
INFO:root:Non-standard RTF magic marker, should be {\rtf1, often a sign of malicious docs
INFO:root:Found an RSID table in this document
INFO:root:Found 1 embedded image(s) with set height/width
INFO:root:Found 2 document information group tags
INFO:root:Interesting strings (higher chance of FP): \rsid7043998, \rsid7476075, insrsid7043998, \rsid10243744, \rsid7604251, insrsid10243744, {\author blue}, rsidroot10243744, \rsid9200135, tblrsid10243744, charrsid10243744, \picw1\pich1\picwgoal1\pichgoal1 , pararsid10243744, \rsid7238080, insrsid7476075, \rsid11666446, insrsid12343406, \rsid12343406, {\operator blue}
INFO:root:Found some unique strings! Consider using vtgrep or deploying Yara rules
调试输出可以使用-v
生成,这在报告错误时很有用。在
雅拉规则
如果传递了-y
选项,该工具将自动生成Yara规则。创建了两个Yara规则,一个应该生成低误报(strict_rule
),另一个可能具有较高的假阳性率(loose_rule
)。在
建议仔细检查字符串并将any of them
更改为一个合理的数字,例如3 of them
。在
从0b06052d3b5954594cf0e28bd9c50d9110eb8fb78cb78c9a99686eb4ba3391df
生成的规则示例如下:
rule loose_rule {
meta:
description = "RTF file matching known unique identifiers (higher chance of FP, adjust 'any of them' if required)"
generated_by = "rtfsig version 0.0.2"
strings:
$ = "{\\author blue}" ascii
$ = "\\rsid7238080" ascii
$ = "pararsid10243744" ascii
$ = "insrsid7043998" ascii
$ = "\\rsid7043998" ascii
$ = "rsidroot10243744" ascii
$ = "\\rsid9200135" ascii
$ = "\\rsid7604251" ascii
$ = "insrsid7476075" ascii
$ = "\\rsid10243744" ascii
$ = "insrsid12343406" ascii
$ = "{\\operator blue}" ascii
$ = "insrsid10243744" ascii
$ = "charrsid10243744" ascii
$ = "\\rsid11666446" ascii
$ = "\\rsid12343406" ascii
$ = "\\picw1\\pich1\\picwgoal1\\pichgoal1 " ascii
$ = "tblrsid10243744" ascii
$ = "\\rsid7476075" ascii
condition:
uint32be(0) == 0x7b5c7274 and any of them
}
rule strict_rule {
meta:
description = "RTF file matching known unique identifiers (lower chance of FP)"
generated_by = "rtfsig version 0.0.2"
strings:
$ = "\\rsid7043998\\rsid7238080\\rsid7476075\\rsid7604251\\rsid9200135\\rsid10243744\\rsid11666446\\rsid12343406" ascii
condition:
uint32be(0) == 0x7b5c7274 and any of them
}
已知限制
- 目前,包含大量混淆的文档(例如控制字与其值之间的注释)可能 未正确解析。请提出一个样本文件的问题,以便进一步检查。在
贡献
要设置开发环境,请克隆git存储库并在virtualenv中运行以下命令:
$ pip install -e ".[dev]"
在提交拉取请求之前,请检查所有测试是否通过,核心模块是否100%覆盖。在
这就像运行tox并检查输出一样简单:
$ tox
.. tool output ..
py37: commands succeeded
congratulations :)
版本历史记录
- v0.0.1(2019年10月18日)-初始版本,支持RSID控制字并生成Yara规则
- v0.0.2(2019年10月23日)-第二个测试版,增加了对唯一图像标识符和文档信息的支持
- v0.0.3(2019年10月23日)-第三个测试版,增加了对图片大小的支持
- v0.1.0(2020年9月19日)-第一个公开发行版,打包为PyPI的Python模块
- 项目
标签: