一例针对中国政府机构的准APT攻击中所使用的样本分析

SwordLea · 2015/05/28 15:43

作者:安天

微信公众号:Antiylab

博文地址:http://www.antiy.com/response/APT-TOCS.html

0x00 背景


安天近期发现一例针对中国政府机构的准APT攻击事件,在攻击场景中,攻击者依托自动化攻击测试平台Cobalt Strike生成的、使用信标(Beacon)模式进行通信的Shellcode,实现了对目标主机进行远程控制的能力。这种攻击模式在目标主机中体现为:无恶意代码实体文件、每60秒发送一次网络心跳数据包、使用Cookie字段发送数据信息等行为,这些行为在一定程度上可以躲避主机安全防护检测软件的查杀与防火墙的拦截。鉴于这个攻击与Cobalt Strike平台的关系,我们暂时将这一攻击事件命名为APT-TOCS(TOCS,取Threat on Cobalt Strike之意。)

APT-TOCS这一个攻击的核心步骤是:加载Shellcode的脚本功能,通过命令行调用powershell.exe将一段加密数据加载到内存中执行。解密后的数据是一段可执行的Shellcode,该Shellcode由Cobalt Strike(一个自动化攻击测试平台)所生成。安天分析小组根据加载Shellcode的脚本进行了关联,亦关联出一个可能在类似攻击中的作为脚本前导执行文件的PE程序,但由于相关脚本可以通过多种方式来执行,并不必然依赖前导PE程序加载,且其是Cobalt Strike所生成的标准攻击脚本,因此无法判定该前导PE文件与本例攻击的关联。

这种基于脚本+Shellcode的方式注入内存执行没有硬盘写入操作,使用信标(Beacon)模式进行通信,支持多信标通信,可以同时和多个信标工作。这种攻击方式可以不依赖载体文件进行攻击,而可以依靠网络投放能力和内网横向移动按需投放,这将会给取证工作带来极大的困难,而且目前的一些沙箱检测产品也对这种攻击无效。

APT-TOCS攻击尽管看起来已经接近APT水准的攻击能力,但并非更多依赖攻击团队自身的能力,而是依托商业的自动化攻击测试平台来达成。

0x01 事件样本分析


2.1 前导文件与样本加载


APT-TOCS是利用了"powershell.exe"执行Shellcode的脚本实现对目标系统的远程控制。安天分析人员认为攻击者掌握较多种最终可以达成多种脚本加载权限的远程注入手段,如利用安全缺陷或漏洞直接实现脚本在主机上执行。同时,通过关联分析,发现如下的二进制攻击前导文件(以下简称Sample A),曾被用于类似攻击:

病毒名称 Trojan/Win32.MSShell

原始文件名 ab.exe

MD5 44BCF2DD262F12222ADEAB6F59B2975B

处理器架构 X86

文件大小 72.0 KB (73,802 字节)

文件格式 BinExecute/Microsoft.EXE[:X86]

时间戳 2009-05-10 07:02:12

数字签名 NO

加壳类型 未知

编译语言 Microsoft Visual C++
复制代码

该PE样本中嵌入的脚本,与安天获取到的Shellcode脚本功能代码完全相同,但加密数据存在差异,该PE样本曾在2015年5月2日被首次上传到Virustotal。

图1 PE文件内嵌的使用powershell.exe加载加密数据

该PE样本使用WinExec运行嵌入的恶意代码:

图2使用WinExec函数调用powershell.exe加载加密数据

由此可以初步看到,这一"前导文件"可以被作为类似攻击的前导,依托系统和应用漏洞,不依赖类似文件,依然可以实现脚本的执行与最终的控制。 从目前来看,并不能确定这一前导样本与本起APT事件具有关联关系。

2.2 关键机理


APT-TOCS攻击远控的核心部分是依托PowerShell加载的加密数据脚本(以下简称Sample_B),图1为脚本各模块之间的衍生关系和模块主要功能:

2.3 APT-TOCS的主样本(SampleB)分析


Sample B文件的内容(base64的内容已经省略)如下:

图4 Sample B的内容

该部分脚本的功能是:将base64加密过的内容进行解密,再使用Gzip进行解压缩,得到模块1,并使用PowerShell来加载执行。

2.4 脚本1分析


脚本1的内容(base64的内容已经省略)如下:

图5脚本1的内容

此部分内容的功能是将经过base64加密的数据解密,得到模块1,写入到powershell.exe进程内,然后调用执行。

2.5 模块1分析


该模块的主要功能是调用wininet模块的函数,进行连接网络,下载模块2的操作;并加载到内存中执行。

图6HTTP GET请求

上图为使用HTTPGET请求,获取文件:http://146.0../hfYn。

2.6 模块2分析


模块2创建并挂起系统进程rundll32.exe:

图7创建挂起系统进程rundll32.exe

写入模块3的数据:

图8写入模块3的数据

模块3的数据虽然是以"MZ"开头,但并非为PE文件,而是具有后门功能的Shellcode。

图9以MZ(4D 5A)开头的Shellcode

2.7 模块3分析


该模块会连接两个地址,端口号为80:

146.0.***.***   (罗马尼亚) 

dc.******69.info (146.0.***.***)    (罗马尼亚)
复制代码

发送请求数据,接收返回数据。

图10发送请求数据

上述IP、域名和访问地址的解密方式是"异或0x69"。 从该模块的字符串与所调用的系统函数来判断,该模块为后门程序,会主动向指定的地址发送GET请求,使用Cookie字段来发送心跳包,间隔时间为60秒。心跳包数据包括校验码、进程ID、系统版本、IP地址、计算机名、用户名、是否为64位进程,并将该数据使用RSA、BASE64加密及编码。

图11心跳包原始数据

由于进程ID与校验码的不同,导致每次传输的心跳包数据不相同。校验码是使用进程ID和系统开机启动所经过的毫秒数进程计算得出的。算法如下:

图12校验码算法

加密后的心跳包使用Cookie字段进行传输:

图13数据包内容

0x03 攻击技术来源的验证分析


安天CERT分析人员关联的PE前导文件Sample_A和Sample B利用PowerShell的方法和完全相同,但正应为相关脚本高度的标准化,并不排除Sample_A与本次攻击没有必然联系。而基于其他的情况综合分析,我们依然判断是一个系列化的攻击事件,攻击者可能采用了社工邮件、文件捆绑、系统和应用漏洞利用、内网横向移动等方式实现对目标主机的控制。

而在分析"模块1"时,我们发现了"Beacon"等字符串,依托过往分析经验,怀疑该Shellcode与自动化攻击测试平台Cobalt Strike密切相关。于是,分析人员对使用Cobalt Strike生成的Beacon进行对比分析,验证两者之间的关系。 Cobalt Strike 是一款以metasploit(一个渗透测试平台)为基础的GUI的框架式渗透工具,Cobalt Strike的商业版,集成了服务扫描、自动化溢出、多模式端口监听、多种木马生成方式(dll木马、内存木马、office宏病毒和Beacon通信木马等)、钓鱼攻击、站点克隆、目标信息获取,浏览器自动攻击等。

3.1 模块1比较


我们将模块1与使用Beacon生成的Payload进行比较,发现只有三处数据不同,分别为:Get请求时所发送的Head数据、请求的文件名称和IP地址。

图14模块1对比

左侧为样本模块1,右侧为由Beacon所生成的模块,从图中对比来看,可以得出结论,模块1是由Beacon所生成。 在请求时的数据包截图如下:

图15模块1发包数据对比

3.2 模块2反汇编指令比较


分析人员将样本的模块2与Beacon相关的文件进行比较,发现两者的反汇编指令除了功能代码不同之外,其它指令完全一致,包括入口处的异或解密、加载系统DLL、获取函数地址、函数调用方式等,下面列举三处:

样本模块2

Beacon相关文件

入口处异或解密(使用x86/shikata_ga_nai变形)

解密后入口处代码

函数调用

3.3 模块3数据包对比分析


下面是样本模块3与Beacon所生成模块的Get请求比较,可以看出,两者都是使用Cookie来传输信息,该信息进行了加密,每间隔60秒主动发送请求,该数据为上线包/心跳包。

图16模块3数据包对比

3.4 Cobalt Strike特点


利用Cobalt Strike的攻击可以在目标系统中执行多种操作,如:下载文件、上传文件、执行指定程序、注入键盘记录器、通过PowerShell执行命令、导入PowerShell脚本、通过CMD执行命令、利用mimikatz抓取系统密码等。 Cobalt Strike具有以下特点:

  • 穿透沙箱
  • 躲避白名单机制与云检测
  • 内网渗透
  • 持久化攻击
  • 攻击多种平台

0x04 总结


使用自动化攻击测试平台Cobalt Strike进行攻击渗透方式具有穿透防火墙的能力,其控制目标主机的方式非常隐蔽,难以被发现;同时具备攻击多种平台,如Windows、Linux、Mac等;同时与可信计算环境、云检测、沙箱检测等安全环节和手段均有对抗能力。从安天过去的跟踪来看,这种威胁已经存在近五年之久,但依然却缺乏有效检测类似威胁的产品和手段。

安天CERT分析小组之所以将APT-TOCS事件定位为准APT事件,是因为该攻击事件一方面符合APT攻击针对高度定向目标作业的特点,同时隐蔽性较强、具有多种反侦测手段。但同时,与我们过去所熟悉的很多APT事件中,进攻方具备极高的成本承担能力与巨大的能力储备不同,其成本门槛并不高,事件的恶意代码并非由攻击者自身进行编写构造,商业攻击平台使事件的攻击者不再需要高昂的恶意代码的开发成本,相关攻击平台亦为攻击者提供了大量可选注入手段,为恶意代码的加载和持久化提供了配套方法,这种方式降低了攻击的成本,使得缺少雄厚资金、也没有精英黑客的国家和组织依托现即有商业攻击平台提供的服务即可进行接近APT级攻击水准,而这种高度"模式化"攻击也会让攻击缺少鲜明的基因特点,从而更难追溯。

我们不仅要再次引用信息安全前辈Bruce Schiner的观点"一些重大的信息安全攻击事件时,都认为它们是网络战的例子。我认为这是无稽之谈。我认为目前正在发生而且真正重要的趋势是:越来越多战争中的战术行为扩散到更广泛的网络空间环境中。这一点非常重要。通过技术可以实现能力的传播,特别是计算机技术可以使攻击行为和攻击能力变得自动化。"显然,高度自动化的商业攻击平台使这种能力扩散速度已经超出了我们的预测。

我们需要提醒各方关注的是,鉴于网络攻击技术具有极低的复制成本的特点,当前已经存在严峻的网络军备扩散风险。商业渗透攻击测试平台的出现,一方面成为高效检验系统安全的有利工具,但对于缺少足够的安全预算、难以承担更多安全成本的国家、行业和机构来说,会成为一场噩梦。在这个问题上,一方面需要各方面建立更多的沟通和共识;而另一方面毫无疑问的是当前在攻防两端均拥有全球最顶级能力的超级大国,对于有效控制这种武器级攻击手段的扩散,应该负起更多的责任。

同时,APT-TOCS与我们之前所发现的诸多事件一样,体现了一个拥有十三亿人口、正在进行大规模信息化建设的国家,所面对的严峻的网络安全挑战;当然,也见证着中国用户与安全企业为应对这种挑战所做的努力。

附录一:关于Cobalt Strike及其作者的参考资料


Cobalt Strike是Armitage的商业版本。Armitage是一款Java写的Metasploit图形界面的渗透测试软件,可以用它结合Metasploit已知的exploit来针对存在的漏洞自动化攻击。bt5、kali linx下集成免费版本Armitage,最强大的功能是多了个Beacon的Payload。

Cobalt Strike作者:Raphael Mudge(美国),他是Strategic Cyber LLC(战略网络有限责任公司)创始人,基于华盛顿的公司为RED TEAM开发软件,他为Metaslpoit创造了Armitage,sleep程序语言和IRC客户端jIRCii。此前作为美国空军的安全研究员,渗透实验的测试者。他设置发明了一个语法检测器卖给了Automattic。发表多篇文章,定期进行安全话题的演讲。给许多网络防御竞赛提供RED TEAM,参加2012-2014年黑客大会。

教育背景:Syracuse University 美国雪城大学,密歇根科技大学

目前就职:Strategic Cyber LLC(战略网络有限责任公司);特拉华州空军国民警卫队

技能:软件开发信息安全面向对象的设计分布式系统图形界面计算机网络设计博客系统社会工程学安全研究等等

支持的组织机构:

大学网络防御竞赛(CCDC)
东北North East CCDC 2008-2015
东部地区Mid Atlantic CCDC 2011-2015
环太平洋Pacific Rim CCDC 2012, 2014
东南South East CCDC - 2014
西部Western Regional CCDC - 2013
国家National CCDC 2012-2014
复制代码

所做项目:

Sleep脚本语言(可扩展的通用语言,使用受JAVA平台启发的Perl语言)sleep是开源的,受LGPL许可。
jIRCii(可编写脚本的多人在线聊天系统客户端,Windows, MacOS X, and Linux平台,开源)
复制代码

出版作品:

《使用Armitage 和Metasploit的实弹安全测试(Live-fire Security Testing with Armitage and Metasploit)》linux杂志
《通过后门入侵:使用Armitage的实施漏洞利用》(Get in through the backdoor: Post exploitation with Armitage)Hakin9杂志
《教程:用Armitage进行黑客攻击Linux》(Tutorial: Hacking Linux with Armitage)ethicalhacker.net
《校对软件服务设计》(The Design of a Proofreading Software Service)NAACL HLT2010计算机的语言学和写作研讨会
《基于代理的流量生成》(Agent-based Traffic Generation)Hakin9杂志等
复制代码

贡献:

cortana-scripts
metasploit-loader
malleable-c2-profiles
layer2-privoting-client
armitage
项目:
商业合资企业类
After the Deadline 
Feedback Army 
Cobalt Strike
开源软件
Armitage
Far East 
jIRCii
Moconti
One Hand Army Man s
phPERL Same Game
Sleep
复制代码

信息参考链接:

https://plus.google.com/116899857642591292745/posts (google+)
https://github.com/rsmudge (GitHub)
https://www.youtube.com/channel/UCJU2r634VNPeCRug7Y7qdcw (youtube)
http://www.oldschoolirc.com/
https://twitter.com/rsmudge
http://www.hick.org/~raffi/index.html 
http://www.blackhat.com/html/bh-us-12/speakers/Raphael-Mudge.html
http://www.linkedin.com/in/rsmudge
复制代码

<think>我们正在使用决策树算法在Linux系统中实现网络攻击类型识别。根据引用[1]和[3],我们可以利用机器学习技术(如决策树)来检测异常网络行为。决策树是一种简单且高效的分类算法,适合用于分类网络攻击类型。 实现步骤大致如下: 1. **数据收集与预处理**:收集网络流量数据(如KDD Cup 99或NSL-KDD数据集)。这些数据包含正常连接和多种攻击类型(如DoS、Probe、R2L、U2R)。然后进行数据预处理,包括数据清洗、特征选择(如引用[3]中提到的特征选择)和特征缩放。 2. **特征工程**:根据引用[3],特征选择非常重要,可以减少特征数量,提高模型效率。我们可以使用相关性分析、特征重要性等方法选择重要特征。 3. **模型训练**:使用决策树算法训练分类模型。在Python中,我们可以使用scikit-learn库中的`DecisionTreeClassifier`。 4. **模型评估**:使用测试集评估模型性能,计算确率、召回率、F1值等指标。 5. **部署模型**:将训练好的模型部署到Linux系统中,用于实时或离线检测网络攻击类型。 下面是一个简单的代码示例,展示如何使用决策树训练一个网络攻击分类模型: ```python # 导入必要的库 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report # 1. 加载数据集(这里以KDD数据集为例,实际使用时需要替换为实际数据路径) data = pd.read_csv("kdd_data.csv") # 2. 数据预处理:特征选择和标签编码 # 假设我们已经选择了特征列,并且将攻击类型标签编码为数字 features = data[['feature1', 'feature2', ...]] # 替换为实际特征列 labels = data['attack_type'] # 替换为标签列 # 3. 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42) # 4. 创建决策树模型 clf = DecisionTreeClassifier(max_depth=10, random_state=42) # 设置树的最大深度,避免过拟合 # 5. 训练模型 clf.fit(X_train, y_train) # 6. 预测 y_pred = clf.predict(X_test) # 7. 评估模型 print(classification_report(y_test, y_pred)) ``` 在Linux系统中,我们可以将上述代码保存为Python脚本(如`train_dt.py`)并运行。同时,我们可以将训练好的模型保存为文件,以便在检测系统中加载使用。 ```python # 保存模型 import joblib joblib.dump(clf, 'dt_model.pkl') # 加载模型进行预测 model = joblib.load('dt_model.pkl') new_data = ... # 新数据 prediction = model.predict(new_data) ``` 此外,引用[3]中提到,使用优化的库(如oneDAL)可以提升性能。在资源允许的情况下,可以考虑使用这些优化库。 §§相关问题§§ 1. 决策树算法在网络攻击检测中有哪些优缺点? 2. 除了决策树,还有哪些机器学习算法适合用于网络攻击检测? 3. 如何提高决策树模型在网络攻击检测中的确率?</think>### Linux 系统下基于决策树算法检测网络攻击类型的实现步骤 #### 1. **环境备** - **安装Python**:Linux系统通常预装Python,可通过终端确认版本: ```bash python3 --version ``` 若需安装:`sudo apt install python3` - **安装机器学习库**: ```bash pip install scikit-learn pandas numpy matplotlib ``` #### 2. **数据备与预处理** - **获取数据集**:使用网络攻击数据集(如NSL-KDD[^1]或UNSW-NB15[^3]) - **数据预处理**: ```python import pandas as pd from sklearn.preprocessing import LabelEncoder # 加载数据 data = pd.read_csv("network_data.csv") # 处理分类特征(如协议类型、服务类型) le = LabelEncoder() data['protocol_type'] = le.fit_transform(data['protocol_type']) # 特征选择(参考引用[3]的特征选择方法) selected_features = ['duration', 'src_bytes', 'dst_bytes', 'protocol_type', 'flag'] X = data[selected_features] y = data['attack_type'] # 攻击类型标签 ``` #### 3. **构建决策树模型** ```python from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split # 划分训练集/测试集 (70%/30%) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建决策树模型(优化参数参考引用[3]) dt_model = DecisionTreeClassifier( max_depth=10, # 控制树深度防止过拟合 min_samples_split=5, # 节点最小样本数 criterion='gini' # 分裂标 ) # 训练模型 dt_model.fit(X_train, y_train) ``` #### 4. **模型评估与优化** ```python from sklearn.metrics import classification_report # 预测测试集 y_pred = dt_model.predict(X_test) # 生成评估报告 print(classification_report(y_test, y_pred)) # 可视化决策树(需安装graphviz) from sklearn.tree import plot_tree import matplotlib.pyplot as plt plt.figure(figsize=(20,10)) plot_tree(dt_model, feature_names=selected_features, class_names=dt_model.classes_, filled=True) plt.savefig('attack_decision_tree.png') ``` #### 5. **实时检测实现** ```python # 保存模型(部署用) import joblib joblib.dump(dt_model, 'attack_detection_model.pkl') # 实时检测示例 def detect_attack(packet_features): loaded_model = joblib.load('attack_detection_model.pkl') prediction = loaded_model.predict([packet_features]) return prediction[0] # 示例调用(需传入预处理后的特征数组) # print(detect_attack([0.5, 150, 3000, 2, 7])) ``` #### 6. **部署优化建议** - **性能优化**:参考引用[3]的树规模优化方法(小规模高精度) - **实时处理**:结合Linux的`libpcap`捕获网络流量 - **持续训练**:定期用新数据更新模型 - **安全加固**:部署在容器环境(如Docker)隔离风险 > **关键注意事项**: > 1. 特征工程质量直接影响效果(参考引用[3]特征选择方法) > 2. 决策树对新型攻击泛化能力有限,需结合异常检测技术[^1] > 3. 生产环境需考虑计算资源限制(树深度控制在10层内[^3])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值