USB(Universal Serial Bus)原意是指通用串行总线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,这套标准在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出,提出之后经过一个快速的发展成功替代串口和并口等标准,成为一个世界认可的统一标准,被当代的海量设备使用,而我们口中常说的USB其实是指采用USB接口标准的可移动存储介质,那么以下为了叙述方便我们便用USB或U盘指代采用USB接口标准的可移动存储介质来详细介绍常见的三种利用该类型设备的渗透手法。
一、autorun.inf自动播放
在早期的互联网发展中,计算机之间的数据交换受限于网络带宽,因此可移动存储介质(软盘、U盘等)受到人们的追捧,人们也在想方设法使这些设备能够更加方便快捷的帮助人们完成某些数据的转移使用,而自动播放功能就是在这个背景下被工程师们开发出来,原本的自动播放主要是针对CD/DVD多媒体光盘,使这类设备能够实现插入即播放的功能,而针对Windows安装介质,插入就能立即弹出安装程序,在可移动存储介质的根目录下的autorun.inf文件就负责自动播放的功能,如图1所示:
图1 autorun.inf文件示例
相比如插入光盘的操作,USB的可操作性更好,能够在不经意间便安放到指定的设备中去,因此如果这里的autorun.inf文件是存放在USB根目录中,并且在根目录下同样存放一个名为setup.exe的病毒文件,那么将该USB插到指定的设备上便可以自动运行病毒使主机在不知不觉中便被病毒感染。
当然,攻击者能够使用此类方式进行有效的攻击的同时,微软也给出了相对应的解决方案,早在2011年2月8日,微软就提供了名为KB967940的补丁,该补丁限定Windows XP、Windows Server 2003、Vista和Windows Server 2008平台上的自动运行功能,不过由于是可选补丁,由用户自主选择进行安装,因此没有达到微软预期的目的,因此后续由提供了补丁KB971029通过自动更新功能推送至用户系统,彻底阻断了USB的自动运行,对利用该手法进行传播的病毒进行了有效的抑制。
那么USB利用autorun.inf进行攻击的手法是否到此就截止了呢?答案是否定的,技术的发展永远是具有两面性,在带给人们方便快捷的同时,也在人们头顶上安放了一柄达摩克利斯之剑。由于该问题的本质是自动播放导致的问题,至此的解决措施并不是针对自动播放进行的,而是针对USB进行的禁止操作,那么毫无疑问刻录到光盘内的病毒还是会被自动执行,但在前面我们也已经考虑过插入光盘的操作非常麻烦,很难在别人不经意间完成攻击,那么我们重新思考能否在USB上做一些操作。
比较容易想到的方法就是让USB被系统识别为光盘,那么写在USB中的病毒文件便能像写在光盘中一样被自动执行,操作其实也很简单,主要分为两个步骤:1. 使用量产工具将USB量产为CD-ROM光驱;2. 将autorun.inf文件和病毒文件制作成ISO文件写入U盘。使用该方法即可成功骗过操作系统,使USB的autorun攻击依旧有效。
图2 量产工具分配静态CDROM空间
图3 将autorun.inf文件和病毒文件制作成ISO文件
图4 将ISO文件写入CDROM空间
图5 插入USB设备后自动运行示例程序
演示视频
看不到?点这里
至此,将制作好的USB插入设置有光盘自动播放的主机上便会自动运行该USB中的exe文件,这个原理就是将USB伪装成一个光盘从而能够实现autorun的功能,当然,在人们逐渐意识到这个问题并全部关闭自动播放功能时,此类攻击也就完全失效,我们也不得不承认USB的autorun的时代确实已经过去。
二、USB or Keyboard
在谈论这类攻击手法时我们先了解一下什么是HID协议,HID(Human Interface Device)是一种计算机协议,约定了计算机在完成通讯过程时所要遵守规则,HID协议使得设备之间无需安装驱动就能进行交互,基于HID协议的USB设备有USB键盘、鼠标等。
通过以上我们也可以思考既然键盘、鼠标这些设备都是通过USB接口与计算机进行通讯的,那么我们使用的U盘可不可以模拟成鼠标或者键盘,BadUSB就是通过对U盘的固件进行逆向重新编程,使U盘伪装成一个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码进行攻击,插入U盘后便有一个无形的键盘输入指令进行恶意操作。
那么我们通过某宝购买的一个固件可编程的USB模拟攻击者的操作使大家对这种攻击方式有一个大体了解:
1. 首先我们需要下载开发软件,这里我使用的是Arduino。
图6 开发软件主界面
2. 自己编写payload或者到指定的网站下载现成的payload,在此我们编写一个窃取wifi密码然后发送到指定ftp服务器的程序。
图7 代码部分展示
3. 写好代码后在工具选项里配置好开发板型号和端口号,然后验证并上传程序到USB设备中,当上传完成后BadUSB便开始了它的恶意行为(模拟成键盘去执行相关的恶意操作),为了展示效果因此没有将命令行隐藏。
图8 badusb模拟键盘进行命令行操作
图9 窃取的wifi名和密码文件
演示视频
看不到?点这里
通过此类型的攻击手法可以成功攻陷win10主机并窃取wifi密码发送至指定的ftp服务器,只需要插上攻击者特制的u盘还可以实现其他更为恶意的操作行为,比如植入木马等,由于该类攻击是伪装USB为键盘设备实现,同时该手法也可以使USB伪装成网卡进行DNS劫持攻击,这类型的攻击主要就是利用了系统对于兼容性的要求,所以在设计USB标准时没有要求每个USB设备像网络设备一样可以被唯一识别,因此才让攻击者有机可乘。
三、 终极武器:漏洞
如果说前面两种攻击手法有什么相似之处,那么可以说之前的手法中U盘总是在伪装成其他设备进行攻击。那么利用漏洞可以让USB设备不再进行任何伪装,其中在USB设备上运用最著名的三个漏洞ms10-046,ms15-020和cve-2017-8464,也是微软最危险的三个快捷方式漏洞,下面我们以ms10-046漏洞为例介绍该类漏洞在USB设备上运用手法,从而使大家对此类攻击手法有一定的了解。
首先我们来熟悉一下ms10-046漏洞,谈到这个漏洞那么我们不得不提及一下为了反对伊朗的核武器项目而出现的震网病毒计划,震网病毒使用了多个0day漏洞来攻击windows系统,以破坏伊朗的核试验的离心机。直到2015年2月,卡巴斯基全球研究与分析团队才发布了在08年震网病毒攻击的技术细节。而震网病毒正是通过USB驱动器进行感染从而渗透入伊朗的关键内网环境中,而USB的感染过程正是利用了ms10-046漏洞,微软在2010年8月发布了补丁以显示白名单的机制来防御此类攻击,然而根据数据显示在发布补丁的4年时间内该补丁是失败的,所有的windows系统还是能被震网病毒所攻击。既然漏洞是快捷方式文件漏洞,那么我们就先了解一下快捷方式文件的格式:
图10 快捷方式文件格式
根据官方资料我们知道了触发该漏洞的数据保存在Shell Item Id List段中,所以我们先了解一下该段的具体数据结构:
typedef struct _SHITEMID
{
unsigned short int cb;
unsigned char adID[0];
}SHITEMID, *LPSHITEMID;
该段为一个可选段,有头文件中的字段决定文件中是否有该段,cb标识该字段的大小,abID是可变结构,存储具体数据,里面具体含义并未公开,但第0项里的数据是不能修改的,否则.lnk文件无法运行。触发该漏洞的原理就是shell32.dll会根据Shell Item Id加载快捷方式图标未对被加载的项目进行有效性校验,造成了攻击者可以构造特殊的Shell Item Id来加载这个恶意DLL,而由于触发该漏洞需要CPL加载机制,因此并不是所有快捷方式文件都能触发这个漏洞,只有指向控制面板下面功能的快捷方式才能触发这个漏洞。下面我们就来构造一个该漏洞文件并执行我们想要执行的任意文件:
1. 创建任意一个控制面板程序的快捷方式并使用二进制编辑工具编辑好指定字段的内容,此次我们使用键盘的快捷方式为例进行文件构造,将偏移为0x7A到0x7D的二进制数据xx FF FF FF修改为00 00 00 00,再将偏移为0x8E处的文件路径改写为我们想要执行的dll文件路径。
图11 修改正常的指向控制面板快捷方式示意图
2. 因为我们在插入USB设备之前并不知道系统将会给我们分配的驱动器号是多少,根据原有系统的磁盘数量的不同分配给我们USB的驱动器号也不同,因此我们需要将构造的LNK文件拷贝多份,并在每一份填入不同的驱动器号,到达USB设备对不同主机都具有攻击性。
图12 解决分配不同驱动器号的执行问题
3. 至此我们构造的恶意USB就完成了,该USB在插入主机后便会自动运行存放在USB中的恶意dll文件,用户点进USB查看内容时便会将dll文件自动执行起来了。
图13 查看USB内容时自动执行了内部的DLL文件
演示视频
看不到?点这里
至此,利用ms10-046漏洞构造的恶意USB已经完成,使用该USB插入主机便可以执行任意dll程序,不过由于本次利用的漏洞比较久远因此试验是在windows xp sp2环境下进行的,如果利用后续的ms15-020或者cve-2017-8464构造出的恶意USB则可以使现今大部分没有打补丁的主机中招,该恶意USB的构造旨在让大家了解USB利用漏洞攻击的手法。而对于该漏洞产生的原因在网上也有十分详尽的分析资料,在此笔者不再赘述。
总结
在互联网刚刚发展时数据在网络上的交换受限于带宽,因此USB存储介质得到了飞速的发展,在为人们带来方便的同时也给人们带来了对于技术安全运用的思考,在未来随着网络带宽的不断发展,U盘的重要性可能也会逐渐降低,但过去使用U盘进行攻击的种种手法却给了我们一个又一个深刻的教训,希望人们能够在吸取这些教训之后能够重新审视技术的发展,也更加重视对于技术的安全运用,使科技能够朝着更加健康安全的方向稳健的发展。