原文地址:http://drops.wooyun.org/papers/5042

0x00 case study 1


美国最大的实体零售连锁店是如何在3个月内被窃取几百万笔信用卡资料的

[page 8]

这次攻击和2014年的多次针对零售业的攻击类似,都是通过利用合法的账号远程登录受害方的系统,内网渗透之后在POS机系统上装盗取信用卡的恶意软件.直到被美国政府部门通知后他们才发现自己已经被攻击了。

0x01 切入点


攻击者首先使用合法账号登录了零售商的虚拟应用服务器。这个虚拟服务器给了攻击者一个权限有限的虚拟化桌面环境(目测是Citrix,传说中的透明计算吗?)。我们没有发现失败登录的记录,说明攻击者在攻击之前就已经获得合法账号(当前证据没有显示攻击者是如何获取到账号的,不过很可能是社工,钓鱼等手段。)

之后黑客利用了虚拟桌面环境上的一个配置错误,提权得到系统权限的shell。之后通过FTP下载了一个密码导出工具,获取了本地管理员的密码。 这个本地管理员密码和这家公司其他系统的密码完全一样。这一切只用了几分钟就完成了。

在初始的入侵过程中,攻击者用了功能强大的开源渗透测试工具Metasploit Framework(MSF)在内网环境中游走。

利用MSF的psexec_command模块,攻击者通过之前获取到的管理员密码在内网系统上执行了很多命令,这个模块通过添加Windows服务来执行命令,所以在系统日志中留下了记录。

在渗透过程中,攻击者瞄准了企业网络的域控服务器。这个域控服务器的本地管理员密码和之前攻击者获得的虚拟桌面服务器的管理员密码一样……

攻击者之后通过MSF的ntdsgrab模块获取了域控的NTDS数据库和注册表hive数据。

域控的NTDS储存了AD里的用户名和密码hash。在破解了域管理员的密码hash后,攻击者通过他们在域中基本畅通无阻了。

此时,攻击者从MSF换到了更传统的后期渗透工具,比如微软的psexec,RDP等常用的管理工具。攻击者之后使用域管理员账号通过RDP登录到了其他系统。

psexec_command模块是如何工作的:

MSF的psexec_command模块把要执行的命令写入到一个批处理文件,执行后的结果会写入到一个文本文件。这两个文件名都是随机的16位字符串。之后该模块通过添加一个新的随机命名的windows服务来执行这个批处理程序。下面是这个服务被添加执行之后在windows系统日志中出现的内容:

A service was installed in the system.
Service Name: MRSWxwQmQxFGumEFsW
Service File Name: %COMSPEC% /C echo dir ^>
%SYSTEMDRIVE%\WINDOWS\Temp\TthwsVKvUhydrsNB.txt > \
WINDOWS\Temp\RbhRmgALAHcdyWXG.bat & %COMSPEC% /C
start %COMSPEC% /C \WINDOWS\Temp\RbhRmgALAHcdyWXG.bat
Service Type: user mode service
Service Start Type: demand start

0x02 后门


为了持久的控制已经拿下的系统,攻击者在多个机器中植入了后门,后门是针对win XP系统的驱动型木马。

植入的木马使用了很高级的免杀技术,和很多高级的常用恶意软件类似。植入的恶意驱动首先在内存中释放代码,然后生成一个新的系统线程。 原始的驱动加载后之后会提示系统加载错误,因为释放出来的代码是用另一个进程执行的,虽然windows并不认为这个驱动已经被加载了,但是恶意代码还是成功执行了。 这个技巧经常用来防止对恶意软件的逆向并且保护了后门的一些功能。

这个后门通过释放出的shellcode来在user space中实现它的功能(从内核加载后注入用户级进程). 这个shellcode通过向一个写在代码里的IP地址发送HTTP POST来获取一个XOR编码后嵌在HTML里的shellcode。

这个技巧让这个后门变的很万能,因为想增加新功能的话只要在服务端加个新的shellcode就行了。虽然这种通过shellcode实现的下载马已经出现很久了,但是通过和驱动级后门的结合说明这个后门很先进。

enter image description here

Figure 2 后门和C2服务器的通信方式

这个零售店所有的结账系统都是连接到域服务器的,也就是说任何人如果控制了域控就可以控制所有的结账机器。

在拿下企业域环境之后,黑客开始渗透零售系统的内网。

零售系统的内网环境是这样的:

零售域和企业域是双向信任的。 每个零售店的结账平台运行的是WinXP 零售平台的XP系统加入了零售域

这样的内网环境在零售行业中很常见,这给了攻击者两个优势。

首先,因为双向信任的关系,只要拿了一个域的管理员权限就拥有了另一个域的权限。

其次,零售域是企业域的子域,这要求企业域和子域的域控必须打开特地的端口。这些开放的端口绕过了零售域的防火墙。攻击者使用这些开放的端口进入了零售域的域控,然后通过零售域的域控作为跳板进入零售域的其他机器。

攻击者把一个windows脚本用域控推送到所有结账平台,之后脚本下载了专门用来收集POS机刷卡记录的恶意软件。

之后攻击者通过Windows计划任务执行了恶意软件。这个收集刷卡信息的软件会收集信用卡的磁道数据,包括信用卡号,过期时间等信息。这些信息在刷卡的时候会存在POS应用程序的内存里,攻击者会把这些数据卖给做假卡的人。

这个攻击POS机的恶意软件使用了OSQL,一个预装在所有结账平台上的软件,用来把收集到的信用卡信息写入一个MSSQL的临时数据库 tempdb,tempdb中的数据在MSSQL重启的时候会清空。每天攻击者都会把tempdb中的数据导出成文本文件,然后复制到域控服务器上。

之后攻击者把收集到的数据打包然后发送到零售内网的一台有外网连接的工作站,之后传到自己控制的FTP服务器上

enter image description here

Figure 3

1. 攻击者通过合法账号远程登录受害者的虚拟化应用服务器。 
2.攻击者从虚拟环境中逃出,然后逐渐进入企业内网环境。从那里开始收集企业内网环境的账号。 
3.攻击者通过零售域的域控服务器作为跳板进入了POS机的主机。之后在上面通过脚本下载执行了收集信用卡资料的恶意软件。 
4. 攻击者把收集到的信用卡资料传输到域控,然后再到有互联网连接的工作站,之后通过FTP传到了自己控制的FTP服务器

0x03 意见与建议


面对这样的攻击,应该怎么防御呢? 你没法阻止每次进攻,也没法保证自己无法被黑,但是下面的一些基本规则可以阻止攻击者在你的内网畅通无阻的行动。 通过使用正确的工具和高度警惕的安全团队,你可以减缓攻击者的速度,给你足够的时间在最坏的情况发生前,去发现,分析和应对攻击。

1.远程登录安全


分析和检查员工,临时工还有供货商等如何远程连接到你的网络环境。确保远程连接一切可控,比如远程连接方式,可以远程连接的用户,密码要求等等。全部可以远程登录的账号都应该使用双因素认证。 确保积极监控远程登录日志,尽早发现任何可疑活动。

2. 确保支付卡PCI环境的安全


按照Payment Card Industry(PCI)和相关的安全认证PCIDSS的标准来规划你的内网环境。一切进入到PCI环境的登录和连接都要通过一个安全的堡垒机进行。登录堡垒机需要使用双因素认证。如果可能的话,把企业域环境和零售域环境分开,尽量减少和零售域以外的连接。另外,最好在零售域使用白名单,只有列表内的机器和地址才能被零售域内的系统访问。

3. 在核心系统上使用应用程序白名单


在所有核心系统上都应该通过应用程序白名单的方式,减少恶意软件执行的机会。核心系统包括任何能接触到信用卡资料的系统,堡垒机服务器,域控服务器等等。

4.管理好高权限账号


攻击者会瞄准高权限账号比如本地管理员,域管理员还有服务账号等等。减少高权限账号的数量,并且确保每个本地管理员账号的密码不同,最好是随机的。 使用密码管理工具来管理账号,最好每次使用这些账号后自动重新生成新密码。这些技术可以更好的控制高权限账号的使用。