• 基于二进制文件中包含的文本或二进制字符串的描述创建的
  • 各类yara
    • 识别各种壳、hash算法等
  • yara规则自动生成工具:yargen

    yara使用

  • rule silent_banker : banker是声明该规则用于检出banker类型的样本。

  • meta :后面的是一些描述信息,比如规则说明、作者信息等。
  • strings:$a $b $c 两个十六进制字符串(十六进制字符串用大括号括起来)和一个文本字符串(文本字符串直接用双引号括起来
  • condition :规定了匹配的条件
  • 修饰符
    • nocase:不匹配大小写
    • wide: 匹配2字节的宽字符
    • ascii: 匹配1字节的ascii字符
    • xor: 匹配异或后的字符串
    • fullword:匹配完整单词
    • private: 定义私有字符串
  • 正则
    • all of ($a*) // 匹配标识符以$a开头的所有字符串
    • any of ($a,$b,$c) // 匹配a, b,c中的任意一个字符串
    • a == 6 and #b > 10//a字符串出现6次,b字符串大于10次

    • @a[i]//获取字符串$a在文件或内存中,第i次出现的偏移或虚拟地址
    • !a[i] //获取字符串$a在文件或内存中,第i次出现时的字符串长度
    • $a in (0..100) and $b in (100..filesize)//在文件或内存的某个地址范围内匹配字符串
    • 2 of ($a,$b,$c) //3个字符串只需匹配任意2个
    • for all of ($a*) : (@[2] < 0x9) //所有以$a开头的字符串,在文件或内存中第2次出现的位置必须小于9
    • for all i in (1,2,3) : ( @a[i] + 10 == @b[i] ) //$b在文件或内存中出现的前3次偏移,必须与$a在文件或内存中出现的前3次偏移+10相同
    • for all i in (1..#a) : ( @a[i] < 100 ) //$a每次在文件或内存中出现位置,都必须都小于100
  • 从指定的文件或内存偏移处读取数据
    • uint16(0):取文件前两个字节(无符号小端)
    • int16(0):取文件前两个字节(有符号小端)
    • int16be(0):取文件前两个字节(有符号大端)
    • uint16be(0):取文件前两个字节(无符号大端)
  • 私有规则:private
    • 以避免规则匹配结果的混乱,即若使用私有规则进行匹配则YARA不会输出任何匹配信息。比如在规则文件Rule2引用规则文件Rule1时不希望Rule1的匹配信息输出
  • 标签规则:TagRule
    • 对规则匹配结果进行筛选,仅输出用户感兴趣的匹配结果
  • 全局规则:global rule
  • 导入模块:import
  1. //.yara
  2. //作用于C语言一样,可以包含其它规则到当前文件中
  3. include "other.yar"
  4. //相对路径
  5. include "./includes/other.yar"
  6. include "../includes/other.yar"
  7. //全路径
  8. include "/home/plusvic/yara/includes/other.yar"
  9. //使用“import”导入模块
  10. //你可以自己编写模块,也可以使用官方或其它第三方模块
  11. //导入模块后,就可以开始使用模块导出的变量或函数
  12. import "pe"
  13. import "cuckoo"
  14. pe.entry_point == 0x1000
  15. cuckoo.http_request(/someregexp/)
  16. //全局规则(global rule)可以在匹配其他规则前优先筛选,
  17. //比如在匹配目标文件之前需要先筛选出小于2MB的文件,在匹配其他规则
  18. global rule SizeLimit
  19. {
  20. condition:
  21. filesize < 2MB
  22. }
  23. private rule Rule1
  24. {
  25. strings:
  26. $a = "dummy1"
  27. $b = "dummy2"
  28. condition:
  29. $a and $b
  30. }
  31. rule TagRule : dummy1 dummy2
  32. {
  33. strings:
  34. $a = "dummy1"
  35. $b = "dummy2"
  36. condition:
  37. $a and $b
  38. }
  39. rule silent_banker : banker
  40. {
  41. //规则描述
  42. meta:
  43. description = "This is just an example"
  44. thread_level = 3
  45. in_the_wild = true
  46. //规则字符串
  47. strings:
  48. $a = {6A 40 68 00 30 00 00 6A 14 8D 91}
  49. $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
  50. $c = "UVODFRYSIHLNWPEJXQZAKCBGMT" nocase
  51. $name = {83 EC 0C C7}
  52. $hex_string2 = { 00 11 [0-2] 44 55 }
  53. $hex_string = { 00 11 ( 22 | 33 44 ) 55 }
  54. //条件表达式
  55. condition:
  56. $a or $b or $c
  57. filesize > 200KB
  58. pe.entry_point == 0x8b0 (偏移)
  59. $name at pe.entry_point
  60. uint16(0) == 0x5A4D
  61. $a and Rule1
  62. }

yara参数

-t 只打印标记为tag的规则
-i 只打印名为identifier的规则
-n 只打印不满足的规则
-D 打印模块数据
-g 打印标签
-m 打印元数据(详细信息)
-s 打印匹配字符串
-L 打印匹配字符串长度
-e 打印规则的命名空间
-p 使用指定的线程扫描目录
-r 递归递归搜索目录

CobaltStrike安装和使用

  • 简介

Cobalt Strike 一款以Metasploit为基础的GUI框架式渗透测试工具,集成了端口转发、服务扫描,自动化溢出,多模式端口监听,exe、powershell木马生成等。钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等。Cobalt Strike 主要用于团队作战,可谓是团队渗透神器,能让多个攻击者同时连接到团体服务器上,共享攻击资源与目标信息和sessions。

CobaltStrike样本查杀

PE马

  1. 通过uint16(0) 的方式取文件的前两个字节,判断是否等于0x5A4D 如果等于则说明是PE,这里用于过滤PE文件
  2. 判断程序的pe.entry_point是否等于0x8B0,这里是文件的file offset,这里也算是一个很好的过滤条件,可以直接过滤掉大部分的文件。
  3. 通过两个filesize的比较限制文件的大小
  4. 最后用一个关键的字符串来做最终的验证。

powershell马(ps1)

html_pe马

html_VBS马

Macro宏病毒

有效的yara特征

1、pdb路径

  • pdb文件名和对应的exe文件名相同
  • 类别
    • 普通pdb名,可完全匹配pdb,以pdb信息作为查杀条件。
    • pdb路径中的部分信息作为过滤条件,快速过滤掉不相干样本。
    • 无字面意义pdb,如文件名称为随机字符串,此类pdb最好不好选做特征,否则将会变成单杀特征
    • 带人名/盘符/路径/日期/等信息的有价值pdb,此类pdb有可能是攻击者不小心留下来的,价值较高。
    • 误导性pdb,有的pdb信息不仅无用,还会误导分析人员。

2、互斥体

  • 恶意代码常见互斥体
    1. 获取当前的计算机基本信息计算出一个ID,以该ID作为互斥体名
    2. 硬编码在代码中的互斥体名,如程序名、C2地址、地名、小说人物名、随机乱码名
    3. 仿冒正常程序的互斥体名。(迷惑项)
    4. 以请求域名作为互斥体名称,保证同一个C2通信的程序不会重复运行

3、信号量

  • 常见的通过信号量来防止多开的还是BITTER的样本。

4、路径名

  • 运行时检查的路径
  • 运行时释放文件的路径

5、网络地址

  • downloader下载地址
  • C2地址
  • 协议地址