更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)
一 背 景
本文将对近期针对我国政企行业的部分网络钓鱼攻击活动进行追踪和分析,包括攻击手法、隐藏手段、对抗方式等技术特点和共性特征,并以其中一个典型攻击案例进行具体分析。此外,本文不再对此次攻击木马做详细的技术分析,详细技术分析见我们此前的专题分析文章《渗透利器Cobalt Strike在野利用情况专题分析》,该文中针对CobaltStrike木马做了深入全面的分析和研究。
二 攻击活动分析
2.1 钓鱼邮件
本次发现的攻击基本都以精心构造的邮件钓鱼攻击为主,攻击形式多样,例如伪装成企业网络安全部门或信息管理中心向员工发送漏洞排查通知、终端加固通知、漏洞补丁措施、办公网络联通测试等紧急工作事项。相关钓鱼邮件示例如下所示:
钓鱼邮件一:伪装成某金融机构信息安全与风险管理处向员工发送漏洞排查通知
图1 漏洞排查通知邮件
图2 附件内容
钓鱼邮件二:伪装成某通信公司安全部向员工发送终端加固通知
图4 附件内容
钓鱼邮件三:伪装成某交通部门的安全技术部给员工发送漏洞补丁通知
图6 附件内容
钓鱼邮件四:伪装成某金融机构安全技术部给员工发送安全补丁更新
图7 安全补丁更新邮件
钓鱼邮件五:伪装成某企业信息中心向员工发送办公网络联通性测试
图8 办公网络联通性测试邮件
图9 邮件报毒情况
以上所列只是黑客攻击的“冰山一角”,这一系列的钓鱼攻击还有很多,涉及的攻击诱饵除安全补丁类之外,还包括举报材料、求职简历、问题咨询、红蓝对抗情报、疫情疏散演练计划等等多种形式,其中部分攻击载荷应该属于护网行动的攻击测试。这些恶意程序可能通过邮件、下载站、USB设备、社交软件等多种方式投递给目标用户以实施钓鱼活动,需要引起相关政企人员的高度警惕。
在本次工作中,启明星辰ADLab捕获到数封以“补丁”,“更新”等为诱饵内容攻击我国企业的邮件。经过对捕获到的邮件进行深入的分析和关联,我们发现这些活动的攻击手法大致相似,使用加载器加载CS木马的shellcode,从而执行后续的黑客攻击。下面将以其中一封攻击我国公共设施的邮件展开分析。
在此次攻击中,攻击者伪装为某交通部门的安全技术部工作人员,向集团公司内部员工发送以《【紧急】Windows-MS驱动漏洞补丁措施》为主题带有恶意攻击载荷的钓鱼邮件。
钓鱼邮件附件为被加密的“IE11-Mfc补丁压缩包.zip”压缩包,受害者通过邮件内容中提供的密码进行解压,能够得到两个文件。其中一个是名为“IE11-Mfc.exe”的恶意文件,另一个是使用说明。使用说明的内容将诱导受害者使用管理员权限运行恶意文件,使恶意木马即使不通过提权操作,也能轻易在管理员权限中运行。并且攻击者使用加密附件的方式,将解密密码留在邮件内容中,能够有效地规避杀软的检测,这将大大提高攻击者攻击成功的可能性。
当恶意文件“IE11-Mfc.exe”在管理员权限中运行,首先会解密函数名称字符串并通过动态获取函数的方式来获取关键函数的地址。攻击者使用这种方式获取关键函数,更能有效规避杀软对敏感函数的检查,以便提高攻击的成功概率。
成功获取到关键函数后,恶意木马会将数据段中硬编码的数据使用BASE64算法解码。攻击者在恶意木马中大量使用了代码膨胀技术,从而将程序的控制流复杂化,以加大分析人员分析的难度。例如,在BASE64算法中加入了许多条件判断来改变程序控制流。
随后,恶意木马使用变形的TEA算法对BASE64解码后的数据进行解密从而得到后续攻击的shellcode并执行,其中解码后的数据前16个字节为变形TEA算法的密钥,剩余字节为shellcode的密文。
值得一提的是,为了避免分析人员在分析的过程中识别出TEA算法中常用的Delta值: 0×9E3779B9,攻击者还将该值取反为0x61C88647。
经过分析,发现该恶意shellcode实则为CS的stager shellcode,恶意木马将使用该shellcode从黑客服务器中下载运行CS木马,展开后续的黑客攻击。一旦受害者按照使用说明运行恶意文件,受害者的电脑将被攻击者使用CS木马轻易掌控,实施横向移动,机密文件窃取等恶意行为。
关于CS木马,我们曾在《渗透利器Cobalt Strike在野利用情况专题分析》一文中进行过详细的分析。CS全称Cobalt Strike,是一款基于Java编写的全平台多方协同后渗透攻击框架,其支持多种通信协议,包括http、https、dns、smb等,同时集成了提权、凭据导出、端口转发、端口扫描、横向移动、Socks代理、钓鱼攻击等功能,且支持丰富的扩展插件,几乎可以覆盖APT攻击链所需的各个技术环节。木马生成方面也涵盖了大多数的平台和攻击场景,包括PE木马、ELF木马、网页木马、Office宏病毒木马等,木马功能及指令详见附录所示。在该文中,我们曾提到多种CS隐匿流量的方式,包括域名仿造、CDN,流量伪装等。而在本次攻击中,攻击者则是利用云函数来隐匿流量。云函数,顾名思义就是云服务器上的函数,是将代码运行在云服务器上的一种方法。通常,攻击者会在云服务器上添加CS流量转发的函数,包括处理http-get请求、http-post请求以及用于下载后续CS木马的http-stager请求,即可有效隐匿CS流量。在本次攻击的样本中,则是向service-gk8t2t63-1308736846[.]bj[.]apigw[.]****[.]com/bootstrap-2.min.js请求下载下一阶段的CS木马,从而执行后续的恶意行动。
启明星辰ADLab安全研究人员通过长期追踪,采集和分析了大量的关联CS木马样本,发现在CS中使用云函数隐匿流量是近年来较为常见的一种方法。这是由于相较于其他隐匿流量方法的不足,如:域前置需要厂商CDN功能验证缺陷、CDN技术需要创建域名从而增加暴露的风险,使用免费的云函数隐匿流量更具便利性。攻击者仅需购买云服务器并在云厂商提供的功能面板中配置用于转发CS流量的云函数,即可实现CS流量的隐匿。而分析人员在分析后门的过程中,只能追溯出攻击者使用的云函数服务器域名和ip。并且由于云函数服务器通常是自带CDN服务,使得分析人员将更难找出攻击者真实的C2服务器。由此可见,使用云函数隐匿CS流量无疑大大提高攻击者在攻击过程中的便利性。在本次发现的数封邮件中,大部分CS样本也同样使用云函数隐匿流量,部分样本如下表:
表2 样本详情
Hash |
云函数 |
4f6860729ad3eb983ddb5d002ba0eebc |
service-gk8t2t63-1308736846.bj.apigw.****.com |
68c09a1bb4b3d85d95367d2a2d6b69af |
service-2ctd0kna-1257232926.gz.apigw.****.com |
3758f7c11a4026b5f3f6554e15c6fb0b |
service-ma764yyz-1307089681.sh.apigw.****.com |
ecb8ed2cf386f5ce43407697cb3b3b13 |
service-0ci24vb8-1252281553.gz.apigw.****.com |
cc10f3d7f3f8ecd85cea95709c554d97 |
service-e21y06jw-1252281553.gz.apigw.****.com |
三 总 结
本文披露了近期针对我国企业的多起网络攻击活动,涉及到我国金融机构、交通部门、通信公司、手机厂商等企业。政企行业中,尤其是涉及到关键信息基础设施的部门,对国家安全、经济安全、社会稳定、公众健康和安全至关重要,一旦遭到网络攻击可能给社会带来巨大的危害。从攻击手法来看,这批攻击大多是以常见的钓鱼邮件为攻击入口,辅以高度仿真且迷惑性极强的诱饵内容进行钓鱼,并通过加密压缩附件的形式来对抗邮件安全检测。投递木马主要为CobaltStrike,且大量样本是通过云函数来隐匿通信流量,以对抗溯源追踪和安全分析。类似的云服务应用可能是把利弊兼具的双刃剑,如何更好地服务公众,又能避免合法应用被恶意活动滥用,还需要相关企业引起更多的关注。
鱼叉式钓鱼具有定制化、精准化的特性,且具有很强的迷惑性,一旦企业内部存在安全意识薄弱的员工不慎点击了钓鱼邮件,就可能会对企业带来严重的后果。黑客可以将窃取到的敏感信息和重要文件转售谋利,或者利用这些信息做更进一步的攻击。除此之外,攻击者还可以使用鱼叉式钓鱼攻击部署恶意软件来劫持计算机,将目标计算机所在的网络变成可用于DoS攻击的庞大僵尸网络或者投掷勒索病毒实施经济勒索,给企业造成不可估量的损失。建议企事业单位不定期为员工举办安全教育培训,提升员工的安全防范意识。务必注意不要随意打开未知来源的电子邮件,特别是带有附件的电子邮件。如有需要,可通过打开office文档中的:文件-选项-信任中心-信任中心设置-宏设置,来禁用一切宏代码执行。并做好邮件系统的防护工作,督促员工及时更新系统和office应用补丁。如果发现系统或服务器出现异常,应当及时报告并请专业人员进行排查,以消除安全隐患。
命令 |
描述 |
argue |
Spoof arguments for matching processes |
browserpivot |
Setup a browser pivot session |
bypassuac |
Spawn a session in a high integrity process |
cancel |
Cancel a download that’s in-progress |
cd |
Change directory |
checkin |
Call home and post data |
clear |
Clear beacon queue |
connect |
Connect to a Beacon peer over TCP |
covertvpn |
Deploy Covert VPN client |
cp |
Copy a file |
dcsync |
Extract a password hash from a DC |
desktop |
View and interact with target’s desktop |
dllinject |
Inject a Reflective DLL into a process |
dllload |
Load DLL into a process with LoadLibrary() |
download |
Download a file |
downloads |
Lists file downloads in progress |
drives |
List drives on target |
elevate |
Try to elevate privileges |
execute |
Execute a program on target (no output) |
execute-assembly |
Execute a local .NET program in-memory on target |
exit |
Terminate the beacon session |
getprivs |
Enable system privileges on current token |
getsystem |
Attempt to get SYSTEM |
getuid |
Get User ID |
hashdump |
Dump password hashes |
help |
Help menu |
inject |
Spawn a session in a specific process |
jobkill |
Kill a long-running post-exploitation task |
jobs |
List long-running post-exploitation tasks |
kerberos_ccache_use |
Apply kerberos ticket from cache to this session |
kerberos_ticket_purge |
Purge kerberos tickets from this session |
kerberos_ticket_use |
Apply kerberos ticket to this session |
keylogger |
Inject a keystroke logger into a process |
kill |
Kill a process |
link |
Connect to a Beacon peer over a named pipe |
logonpasswords |
Dump credentials and hashes with mimikatz |
ls |
List files |
make_token |
Create a token to pass credentials |
mimikatz |
Runs a mimikatz command |
mkdir |
Make a directory |
mode dns |
Use DNS A as data channel (DNS beacon only) |
mode dns-txt |
Use DNS TXT as data channel (DNS beacon only) |
mode dns6 |
Use DNS AAAA as data channel (DNS beacon only) |
mode http |
Use HTTP as data channel |
mv |
Move a file |
net |
Network and host enumeration tool |
note |
Assign a note to this Beacon |
portscan |
Scan a network for open services |
powerpick |
Execute a command via Unmanaged PowerShell |
powershell |
Execute a command via powershell.exe |
powershell-import |
Import a powershell script |
ppid |
Set parent PID for spawned post-ex jobs |
ps |
Show process list |
psexec |
Use a service to spawn a session on a host |
psexec_psh |
Use PowerShell to spawn a session on a host |
psinject |
Execute PowerShell command in specific process |
pth |
Pass-the-hash using Mimikatz |
pwd |
Print current directory |
reg |
Query the registry |
rev2self |
Revert to original token |
rm |
Remove a file or folder |
rportfwd |
Setup a reverse port forward |
run |
Execute a program on target (returns output) |
runas |
Execute a program as another user |
runasadmin |
Execute a program in a high-integrity context |
runu |
Execute a program under another PID |
screenshot |
Take a screenshot |
setenv |
Set an environment variable |
shell |
Execute a command via cmd.exe |
shinject |
Inject shellcode into a process |
shspawn |
Spawn process and inject shellcode into it |
sleep |
Set beacon sleep time |
socks |
Start SOCKS4a server to relay traffic |
socks stop |
Stop SOCKS4a server |
spawn |
Spawn a session |
spawnas |
Spawn a session as another user |
spawnto |
Set executable to spawn processes into |
spawnu |
Spawn a session under another PID |
ssh |
Use SSH to spawn an SSH session on a host |
ssh-key |
Use SSH to spawn an SSH session on a host |
steal_token |
Steal access token from a process |
timestomp |
Apply timestamps from one file to another |
unlink |
Disconnect from parent Beacon |
upload |
Upload a file |
wdigest |
Dump plaintext credentials with mimikatz |
winrm |
Use WinRM to spawn a session on a host |
wmi |
Use WMI to spawn a session on a host |
启明星辰积极防御实验室(ADLab)
ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞近1100个,通过 CNVD/CNNVD累计发布安全漏洞2000余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。
原文始发于微信公众号(ADLab):警惕伪装成“企业网络安全部门”的网络攻击活动