从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模块

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener