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规则的条件
  • 条件

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打包程序通常不会具有网络文件下载操作)