攻防演练过程中,往往会遇到红队的钓鱼样本,也有可能遇到黑灰产组织,apt团伙的恶意后门,在拿到这些样本后,就需要我们对其进行分析,从而获取相关情报。
而在日常中,恶意软件分析可以了解恶意软件如何运作以及恶意软件影响的过程,知道恶意软件可以具有许多功能是必要的。恶意程序可能以病毒,蠕虫,间谍软件和特洛伊木马的形式出现。每种类型的恶意软件都在用户不知情或未授权的情况下收集有关受感染设备的信息。
1、自动化分析
利用网上在线沙箱,能够快速评估恶意软件渗入系统时的能力。此分析能够生成有关网络流量,文件活动和注册表项的详细报告,同时还能关联已有的IOC情报,可以帮助我们快速的获取相关信息。
2、静态分析
通过静态分析的方式,我们可以查看程序的静态属性,包括哈希,嵌入字符串,嵌入式资源和标头信息。在恶意程序未加保护的情况下,还能直观的看到程序逻辑。
3、交互式分析
采用真实主机,并使用工具对进程、网络、文件、注册表、行为等进行监控,实时性的运行,观察记录相关情况,最关键的是可以观察主机与控制端连接后的行为,这部分自动化分析往往效果不理想。
4、逆向调试
采用手动的方式,对恶意程序进行反编译,破壳等操作,获取其源码中的关键信息,如加密逻辑、行为逻辑、秘钥等信息。
在拿到一个恶意软件后,一般来讲我们会直接丢到在线沙箱去跑,这样有助于我们快速获取所需要的信息。一般我们会关注以下信息。
1、恶意行为
2、执行流
3、对外连接
4、字符串
这些都是最基本的信息指标,而完善的分析报告则需要更为详细的检测
检测恶意软件用来逃避自动分析的反调试和反虚拟化技术
检测恶意软件实现的主要功能
检测恶意软件所利用的CVE漏洞
检测恶意软件所用的加密混淆方式
检测恶意软件中所用的邮件
检测恶意软件所用的加壳程序
Yara是一个开源的恶意软件归类工具,用于在杜鹃分析后根据文本或二进制模式对恶意软件样本进行分类。利用Yara,研究人员根据模式编写恶意软件家族的描述。这些描述被称为规则,因此命名为Yara规则。它允许研究人员识别和分类看似相似的恶意软件的变种
规则集:https://github.com/Yara-Rules/rules
通过规则匹配可以帮助我们去分类归类相关恶意软件。
rule APT01
{
strings:
$my_text_string = "text"
$my_hex_string = { E2 34 A1 C8 23 FB }
condition:
$my_text_string or $my_hex_string
}
// 规则匹配到text字符串或者E2 34 A1 C8 23 FB这段16进制代码,就会将恶意程序归类到text
windwos 下载地址:https://github.com/VirusTotal/yara/releases/latest
工具+规则文件+被扫描文件即可,匹配到则会输出相配的结果
这种静态的扫描提取很依赖规则库,其次如果如果恶意程序进行了混淆,那么结果也无法识别。这时候就需要其他工具来辅助了。
对于在线沙箱,有些只能在线查看,无法下载。这个时候就需要联动我们自己沙箱。推荐使用开源沙箱cuckoo,当然也可以使用其他沙箱,不过需要自己写yara的联动处理模块。
cuckoo沙箱是一款开源的恶意软件分析系统,可以自动分析Windows、macOS、Linux和Android下的任何恶意文件。 可以产生以下结果 由恶意软件产生的所有进程执行的调用跟踪。 恶意软件在执行期间创建、删除和下载的文件。 恶意软件进程的内存转储。 PCAP 格式的网络流量跟踪。 恶意软件执行过程中截取的屏幕截图。 机器的完整内存转储。
当cuckoo产生一份报告后,我们可以提取报告中的参数来生成我们的规则。
例如恶意程序去请求了:http://hacker.com 这个域名在恶意程序中很可能是混淆加密的,那么静态扫描是完全无用的,这时我们可以利用yara的cuckoo模块进行处理
import "cuckoo"
rule evil_doer
{
condition:
cuckoo.network.http_request(/http:\/\/hacker\.com/)
}
这个时候使用-x参数即可
yara -x cuckoo=behavior_report_file rules_file pe_file
// behavior_report_file cuckoo的扫描结果文件
// rules_file 规则文件
// pe_file 待检测程序
在cuckoo 沙箱进行检测过程中,也可以使用ProcMemory
模块。此模块主要是对进程内存转储分析。同时该模块可以处理用户的yara规则。规则文件保存在data/yara/memory/index_memory.yar
,只需编辑此文件即可添加自己的yara规则。
cuckoo默认yara规则目录
在后续版本中,cuckoo删除了yara的规则库,允许用户自定义规则。这里就需要我们去收集VT、InQuest等公开规则的安全厂商,例如一个APT组织Bluetermite(蓝白蚁),同时需要自身建立相关情报网,交叉验证情报。
rule Emdivi_SFX
{
meta:
description = "Detects Emdivi malware in SFX Archive"
author = "Florian Roth @Cyber0ps"
reference = "https://securelist.com/blog/research/71876/new-activity-of-the-blue-termite-apt/"
date = "2015-08-20"
score = 70
strings:
$x1 = "Setup=unsecess.exe" fullword ascii
$x2 = "Setup=leassnp.exe" fullword ascii
$s1 = "&Enter password for the encrypted file:" fullword wide
$s2 = ";The comment below contains SFX script commands" fullword ascii
$s3 = "Path=%temp%" fullword ascii
condition:
uint16(0) == 0x5a4d and filesize < 740KB and (1 of ($x*) and all of ($s*))
}
rule Emdivi_Gen1
{
meta:
description = "Detects Emdivi Malware"
author = "Florian Roth @Cyber0ps"
reference = "https://securelist.com/blog/research/71876/new-activity-of-the-blue-termite-apt/"
date = "2015-08-20"
score = 80
super_rule = 1
strings:
$x1 = "wmic nteventlog where filename=\"SecEvent\" call cleareventlog" fullword wide
$s0 = "del %Temp%\\*.exe %Temp%\\*.dll %Temp%\\*.bat %Temp%\\*.ps1 %Temp%\\*.cmd /f /q" fullword wide
$x3 = "userControl-v80.exe" fullword ascii
$s1 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727.42)" fullword wide
$s2 = "http://www.msftncsi.com" fullword wide
$s3 = "net use | find /i \"c$\"" fullword wide
$s4 = " /del /y & " fullword wide
$s5 = "\\auto.cfg" fullword wide
$s6 = "/ncsi.txt" fullword wide
$s7 = "Dcmd /c" fullword wide
$s8 = "/PROXY" fullword wide
condition:
uint16(0) == 0x5a4d and filesize < 800KB and all of them
}
最后呢,对于现阶段攻防演练中,恶意样本多为网上已存在的蠕虫病毒,简单对病毒中访问的域名,发送的攻击请求进行搜索,就能定位相关分析的文章及报导的新闻,仅仅用时记录,过后抛弃,其价值意义并不太大。恶意分析的重点工作还是来源于情报库建设,依托于情报搜集、积累,这样在捕获相关样本才能去归类是新样本还是旧病毒,查阅相关记录并将其与APT组织关联,进而可评估相关APT组织对相关单位的入侵手段及危害程度。