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盘进行攻击的种种手法却给了我们一个又一个深刻的教训,希望人们能够在吸取这些教训之后能够重新审视技术的发展,也更加重视对于技术的安全运用,使科技能够朝着更加健康安全的方向稳健的发展。

穿透内网防线,USB自动渗透手法总结的更多相关文章

  1. FtpServer穿透内网访问配置踩笔记

    FtpServer穿透内网访问配置踩笔记 引言 FtpServer是服务器文件远程管理常用方式. 以前在局域网配置Ftp服务器以及使用公网上的Ftp服务均未碰到问题,固未对Ftp传输进行深入了解. 然 ...

  2. C#用UPnP穿透内网

    参考了网上的一篇文章,由于时间长了,具体地址不知道了. 引入了一个DLL: Interop.NATUPNPLib.dll,实现穿透局域网,进行Socket通信. using System; using ...

  3. n2n网络穿透内网

    目录 前言 配置 网络拓扑: 公网服务器的配置 公司电脑的配置 家里笔记本的配置 注意事项 使用n2n网络 n2n的各edge之间传输数据 补充:NAT类型 后记 前言 在家里的时候比较经常需要对公司 ...

  4. 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理(转)

    源: 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理

  5. 1.使用frp穿透内网

    1.前因后果 1.1弃用ngrok 为节约服务器成本,花了500多块买了一个华为云得1G 1核心 5M得云服务器.然后用ngrok来穿透内网.一直用得还  但是今天在弄nginx得时候发现 ngrok ...

  6. centos7下使用n grok编译服务端和客户端穿透内网

    (发现博客园会屏蔽一些标题中的关键词,比如ngrok.内网穿透,原因不知,所以改了标题才能正常访问,) 有时候想在自己电脑.路由器或者树莓派上搭建一些web.vpn等服务让自己用,但是自己的电脑一般没 ...

  7. frp端口映射穿透内网

    前言 frp 是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持 TCP.UDP.HTTP.HTTPS 等协议类型,并且 web 服务支持根据域名进行路由转发. Github: ...

  8. frp穿透内网使用vsftpd服务

    本篇文章将会介绍如何使用frp穿透内网以及如何在centos8环境下安装和使用vsftpd,最后在公网通过frp穿透内网使用ftp. 一.内网穿透神器frp frp 是一个专注于内网穿透的高性能的反向 ...

  9. QQ通信原理及QQ是怎么穿透内网进行通信的? (转)

    原:http://f543711700.iteye.com/blog/978044#bc2344608 QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~ ...

随机推荐

  1. [报错处理]Could not find a version that satisfies the requirement xml (from versions)

    安装xml库发生报错 pip3 install xml Collecting xml Could not find a version that satisfies the requirement x ...

  2. Redis实现缓存,你应该懂的哪些思路!

    场景一:类似于微博,实现关注和被关注功能. 思路: 对每个用户使用两个集合类型键,用来存储关注别人的用户和被该用户关注的用户.当用户A关注用户B的时候,执行两步操作: sadd user:A B sa ...

  3. BZOJ-1043 [HAOI2008]下落的圆盘

    几何题... 先把所有圆储存起来,然后对于每个圆我们求得之后放下的圆挡住了的部分,求个并集,并把没被挡到的周长加进答案. #include <cstdlib> #include <c ...

  4. e.keyCode和e.which使用

    1. 不使用jquery获取keyCode var key = 'which' in e ? e.which : e.keyCode;//或者var key = e.which || e.keyCod ...

  5. php合并图片

    <?php class image{ /** * @param string $backgroundImage 背景图 * @param string $smallImage 小图 * @par ...

  6. vue中echarts 在element-ui的tab 切换时 width 为100px 时的解决方式

    最近在项目中遇到了这种情况,需要在tab控件上渲染多个echart图标,然后切换查看时,发现图表的宽度不正确 原因:在页面进行加载时,隐藏的图表找不到对应的div大小,所以默认给了一个大小.所以要做的 ...

  7. Flex布局--必然的选择

    这篇文章是我在阮一峰老师的flex布局教程下,按照自己的理解重写写一遍,以便增强理解.如果你来到这里最好去看一下阮一峰大神的Flex布局教程 正式开始自己的. 说起布局方式,大家首先要了解css3有哪 ...

  8. Swift实战-单例模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 整个应用生命 ...

  9. HH去散步(bzoj 1875)

    Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因 ...

  10. socket介绍(webService适用场景)

    1.使用场景         - 不同的移动客户端访问      - 需要访问第三方的项目 2.访问第三方应用的方式      ISO的七层模型  : 物理层.数据链路层.网络层.传输层.表示层.会话 ...