hunting APTs with yara
卡巴斯基的一个关于APT Hunting的研讨会,主要讲如何使用yara规则进行APT hunting的,会议录像B站可看
- 编写yara规则时推荐的工具
- 字符串工具(strings.exe)
- PE工具(CFF Explorer)
- HEX工具(WinHex,Hiew)
- 二进制对比工具(radiff2,bindiff)
- 逆向分析工具(IDA Pro,Ghidra)
简单介绍
- 基本规则
- 字符串
- 条件,定义触发yara规则的条件
- 条件
yara可以用来干什么
- 识别恶意软件并对其进行分类
- 根据恶意软件家族的特征寻找新的样本
- 发现0day漏洞及其利用
- 加快应急响应的速度
- 部署一些自定义规则增强企业防御能力
- 识别不同的文件格式并进行分类
- 过滤网络流量(YaraPcap)
- 构建私有的防病毒软件
如何设计yara规则
-
代码缩进,添加注释
-
包含某些联系信息,如名字,邮箱等
-
规则名具有某种规律
-
元数据提供丰富的关联信息
- 作者,可以选择加入联系信息
- 规则类型
- 文件类型
- 时间
- 版本,可以加入当前规则的版本以及所使用的yara程序的版本
- 参考
- hash值,可以使用md5/sha1/sha256
参考下图,参考和哈希都非常有用,如果规则被触发,有些人可能想要知道更多信息.
-
设计具有高质量的yara规则
- 规避规则产生过多的误报
- 首先在本地进行测试
- 如果字符串过段时,应使用修饰符"fullword"
- 避免创建基于常见的导入/导出函数的规则
- 设定文件大小
- 每次都需要检查文件头,以匹配特定样本
- 对于内存扫描,文件大小和文件头的检查可以省略
- 规则仅匹配到一个样本
- 避免使用运行时生成的字符串作为检测规则
- 不要将所有可能的字符串都作为必要条件
- 参考下图
- 好的规则:最好使用样本中的唯一字符串或特定数据
- 互斥体
- 事件名称或特定的用户名
- 注册表值
- 拼写错误(typos)
- PDB路径
- GUID
- 内部模块名
- 加密或编码的配置字符串
- 使用2-3组条件
- 一组是唯一特征
- 一组可能没有特定字符串
- 一组基于文件属性结构(section,入口点,时间戳)或熵
- 规避规则产生过多的误报
yara规则来源
- 公共规则集(Florian Roth)
- yara规则交流社群
- APT报告
- 直接公开的规则
- 间接公开的规则(IOCs)
- 字符串
- 文件名
- 注册表键值
- 互斥体
- C2
- 证书等
样例讲解
样例1:
- BlueTraveller
-
应急响应中发现两个样本
-
攻击政府实体的未知的APT组织
-
想要找到其他更多的样本
-
下图为.data部分的截图
-
有一些相同的字符串(james)
-
一些类似的字符串(c:\9.exe,c:\99.exe)
-
一些警告或输出信息
- PROXY_PROXY_PROXY_PROXY
- OROXY
-
最终的规则如下图
-
样例2:
- Equation's TripleFantasy
- 两个64位样本
- 两个样本的时间戳异常
- 一个为2000年6月3日
- 一个为1999年1月31日
- 微软2005年才发布了第一个支持AMD64的系统
- 意味着时间戳是伪造的
- 创建时间戳高于1990年1月1日(旧版本的delphi链接时不设置时间戳)
- 时间戳低于2004年1月1日(微软在2004年内已经开始编译x64二进制文件)
- 该规则不仅可以找到目标样本,还可以狩猎其他可疑文件
- 最终规则如下图
样例3和样例4
- 检测文件版本信息和imphash
样例5
- 0day
- Vitally Toropov 2013年公开过一个Microsoft Silverlight的0day
- 2015年时其在hackingteam泄露的邮件里声称其两年半之前还有一个Silverlight 0day
- 假设其两个0day都是在同一时间发现的
- 为第一个0day编写yara规则
- 狩猎到第二个0day
自动化生成yara规则
- yarGen
- 寻找异常点
- 修改的时间戳
- 假的签名(失效的签名)
- 连接已知的恶意动态DNS域
- 伪造合法程序
- 使用合法程序的PE信息但未签名
- 使用合法程序的资源,如图标
- 使用合法程序的元数据/代码页/导出函数等
- 具备横向移动功能
- 加密特征
- 对应文件类型的非典型操作(如WinRAR打包程序通常不会具有网络文件下载操作)