穿透内网防线,USB自动渗透手法总结
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自动渗透手法总结的更多相关文章
- FtpServer穿透内网访问配置踩笔记
FtpServer穿透内网访问配置踩笔记 引言 FtpServer是服务器文件远程管理常用方式. 以前在局域网配置Ftp服务器以及使用公网上的Ftp服务均未碰到问题,固未对Ftp传输进行深入了解. 然 ...
- C#用UPnP穿透内网
参考了网上的一篇文章,由于时间长了,具体地址不知道了. 引入了一个DLL: Interop.NATUPNPLib.dll,实现穿透局域网,进行Socket通信. using System; using ...
- n2n网络穿透内网
目录 前言 配置 网络拓扑: 公网服务器的配置 公司电脑的配置 家里笔记本的配置 注意事项 使用n2n网络 n2n的各edge之间传输数据 补充:NAT类型 后记 前言 在家里的时候比较经常需要对公司 ...
- 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理(转)
源: 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理
- 1.使用frp穿透内网
1.前因后果 1.1弃用ngrok 为节约服务器成本,花了500多块买了一个华为云得1G 1核心 5M得云服务器.然后用ngrok来穿透内网.一直用得还 但是今天在弄nginx得时候发现 ngrok ...
- centos7下使用n grok编译服务端和客户端穿透内网
(发现博客园会屏蔽一些标题中的关键词,比如ngrok.内网穿透,原因不知,所以改了标题才能正常访问,) 有时候想在自己电脑.路由器或者树莓派上搭建一些web.vpn等服务让自己用,但是自己的电脑一般没 ...
- frp端口映射穿透内网
前言 frp 是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持 TCP.UDP.HTTP.HTTPS 等协议类型,并且 web 服务支持根据域名进行路由转发. Github: ...
- frp穿透内网使用vsftpd服务
本篇文章将会介绍如何使用frp穿透内网以及如何在centos8环境下安装和使用vsftpd,最后在公网通过frp穿透内网使用ftp. 一.内网穿透神器frp frp 是一个专注于内网穿透的高性能的反向 ...
- QQ通信原理及QQ是怎么穿透内网进行通信的? (转)
原:http://f543711700.iteye.com/blog/978044#bc2344608 QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~ ...
随机推荐
- 201621123034 《Java程序设计》第4周学习总结
Week04-面向对象设计与继承 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:对象.重载.继承.多态 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需 ...
- 【bzoj2406】矩阵 二分+有上下界可行流
题目描述 输入 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. 输出 第一行,输出最小的答案: 样例输入 2 2 0 1 2 1 0 1 样例输出 1 ...
- 【Luogu】P4159迷路(矩阵优化)
题目链接 将每个点拆成时刻1~9,然后根据题目要求连边,比如i-j有一条权为x的边就从点i-x向点j-1连一条边,表示经过x次之后可以到达. 然后就矩阵快速幂乱搞就好了. #include<cs ...
- [LOJ#2330]「清华集训 2017」榕树之心
[LOJ#2330]「清华集训 2017」榕树之心 试题描述 深秋.冷风吹散了最后一丝夏日的暑气,也吹落了榕树脚下灌木丛的叶子.相识数年的Evan和Lyra再次回到了小时候见面的茂盛榕树之下.小溪依旧 ...
- Java接口对Hadoop集群的操作
Java接口对Hadoop集群的操作 首先要有一个配置好的Hadoop集群 这里是我在SSM框架搭建的项目的测试类中实现的 一.windows下配置环境变量 下载文件并解压到C盘或者其他目录. 链接: ...
- POJ2749 Building roads 【2-sat】
题目 Farmer John's farm has N barns, and there are some cows that live in each barn. The cows like to ...
- BestCoder 2nd Anniversary/HDU 5719 姿势
Arrange Accepts: 221 Submissions: 1401 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/2 ...
- express中放置静态文件
不使用模版引擎的话要直接添加html,可以使用express.static()中间件设定静态文件目录,然后将html文件放在里面,如:express默认静态文件目录为 app.use(express. ...
- Scrapy安装报错 Microsoft Visual C++ 14.0 is required 解决办法
Scrapy安装报错 Microsoft Visual C++ 14.0 is required 解决办法原因:Scrapy需要的组 twisted 需要 C++环境编译. 方法一:根据错误提示去对应 ...
- DB迁移:从SQL Server 2005到MySQL
一.工具选择 依工作需要进行老产品升级,其中一项重要工作就是将SQL Server数据库改为MySQL数据库,故而在对<各种主流 SQLServer 迁移到 MySQL 工具对比>文章学习 ...