插入U盘自动攻击:BadUSB原理与实现

 
 
 

漏洞背景

“BadUSB”是今年计算机安全领域的热门话题之一,该漏洞由Karsten Nohl和Jakob Lell共同发现,并在今年的BlackHat安全大会上公布。BadUSB号称是世界上最邪恶的USB外设。

笔者使用他们的代码做了个类似的U盘,用户插入U盘,就会自动执行预置在固件中的恶意代码,下载服务器上恶意文件,执行恶意操作。注意,这里的U盘自动运行可不是以前的autorun.inf自动运行程序哦,具体的技术细节可以参考后文内容。

BadUSB最可怕的一点是恶意代码存在于U盘的固件中,由于PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法应对BadUSB进行攻击。

BadUSB原理

在介绍BadUSB的原理之前,笔者在这里先介绍下BadUSB出现之前,利用HID(Human InterfaceDevice,是计算机直接与人交互的设备,例如键盘、鼠标等)进行攻击的两种类型。分别是"USB RUBBERDUCKY"和"Teensy"。

TEENSY介绍

攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫TEENSY。通过 TEENSY你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代 码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。

关于TEENSY,可以参考天融信阿尔法实验室的《HID攻击之TEENSY实战

USB RUBBER DUCKY介绍

简称USB橡皮鸭,是最早的按键注入工具,通过嵌入式开发板实现,后来发展成为一个完全成熟的商业化按键注入攻击平台。它的原理同样是将USB设备模拟成为键盘,让电脑识别成为键盘,然后进行脚本模拟按键进行攻击。

这两种攻击方式,是在BadUSB公布之前,比较流行的两种HID攻击方式,缺陷在于要定制硬件设备,通用性比较差。但是BadUSB就不一样了,它是在“USB RUBBER DUCKY”和“Teensy”攻击方式的基础上用通用的USB设备(比如U盘)。

U盘的内部构造

 

 

U盘由芯片控制器和闪存两部分组成,芯片控制器负责与PC的通讯和识别,闪存用来做数据存储;闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互;固件无法通过普通手段进行读取。

BadUSB就是通过对U盘的固件进行逆向重新编程,相当于改写了U盘的操作系统而进行攻击的。

USB协议漏洞

为什么要重写固件呢?下面我们可以看看USB协议中存在的安全漏洞。

现在的USB设备很多,比如音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱;所以在设计USB标准的时候没有要求每个USB设备像 网络设备那样占有一个唯一可识别的MAC地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。这样就可以通过重写U盘固件,伪装成一 个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码而进行攻击。

BadUSB利用代码分析

笔者对KarstenNohl和Jakob Lell公布的代码进行简单的一个流程解析。

这样一个带有恶意代码的U盘就产生了,更详细的可以搜索Karsten Nohl 和 Jakob Lell公布的代码。

总结

“USB RUBBER DUCKY”、“TEENSY”、“BadUSB”三种最终都是利用了USB协议的漏洞而进行攻击的,“BadUSB”和另外两者的区别在于:BadUSB可以利用普通的USB设备,而不需要进行硬件定制,更具有普遍性。

HID攻击方式有很多种,BadUSB作为其中一种是通过伪装成键盘设备来实现的,同时HID攻击也可以通过伪装成网卡进行DNS劫持攻击。BadUSB的危害目前局限于单向感染,即USB设备感染PC,暂无发现从PC感染USB设备案例。

为了预防此类安全风险,需要我们在日常使用USB设备时,不要使用陌生的USB设备,避免USB存在恶意代码导致安全风险。

延伸:更多的USB接口攻击

通过USB接口攻击的案例很多,BadUSB只是一类,还有通过USB接口横跨PC和Mobile平台进行攻击的案例。

比如今年爆发的WireLurker蠕虫,感染病毒的电脑系统会通过USB接口去间接感染iOS设备,即使是未越狱的设备也无法避免;还有前段时间发现的电子香烟通过USB传播恶意软件到PC;最近央视也报道了充电宝盗取手机隐私的案例

对于愈演愈烈的USB风险,应用层还没有见到好的解决方案。倒是硬件层面比较容易解决。比如360无线安全研究团队的SecUSB,还有我们腾讯安全应急响应中心的SecLine。原理都是将USB中的两根数据线去掉,具体细节可以参考《揭秘:充电宝是如何盗取你的个人隐私的》。

或许未来SecUSB或者SecLine将成为USB接口标配。

我扔个U盘你敢捡么?一种防不胜防的USB攻击方式

作者:一尺

在踏入安全圈之前,我的日子平静如水。

自从入了安全圈,我就成朋友眼中计算机怪人,自此以后,修电脑、求资源之类的事儿都不会忘了我...

“我真不会这些。”看着朋友们期待而来,失望而归的表情,我想,我大概是个假黑客吧。

一天,一个朋友找到我。朋友是一个在圈里小有名气的设计师,已经很久没联系了,突然发信息过来,开始还以为是这哥们儿要结婚,又该准备份子钱了。

“你是在搞网络安全吗?有个事儿想请你帮个忙。”

没等我推辞,朋友就跟我说了,他电脑里的文件被加密了。里面有他最近在做的一个很重要的项目,准备很长时间,现在文件却突然打不开了,自己也没有备份。眼看着要交付了,万般无奈下才来向我求助。

电脑出现了中毒的症状,希望我可以帮他把电脑救回来。

朋友表示,自己用电脑也是有常识的,从来不会去点击来源不明的链接,也没上过什么“不该上”的网站,杀毒软件也装了,所以没那么容易中毒。

我看了一下,打不开文件是因为文件被加密了(AES算法),采用这种算法加密文件,必须用其对应的密钥才能解开,这样看来我也爱莫能助。

我决定帮他找出问题的来源。经过排查,我在C盘的某个目录下发现了一个powershell脚本。

(红框部分就是一个powershell脚本)

脚本里的代码是从指定服务器里下载文件,这很可能是个攻击脚本。不仅如此,这个powershell脚本还做过免杀处理,所以杀软也无法检测。从过往经验来看,这种攻击脚本大多都是靠U盘等外接设备传播。

“最近电脑有没有借给别人用过,或者有没有用过陌生的U盘?”我问他。

“有过一次,就在前几天,有个同事拿他的U盘过来找我拷资料,奇怪的是明显示装了驱动,却读不出内容,我以为是U盘的问题,就让他换个U盘。但之后再拷文件时,却发现都打不开了,之后重启几次也没用。”

问题应该就在这个“U盘”上,听起来很像是类似rubber ducky(业界称为橡皮鸭)的设备给他的电脑植入了一段恶意代码,这段代码会自动下载一个木马,木马再对其文件进行加密,之后木马会执行把自己删掉,所以用杀软扫描也是一无所获。

橡皮鸭可通过USB接口连接电脑,且体型小巧,所以适合伪装成U盘进行攻击。

“所以是那个U盘的问题吗?那他是怎么把病毒弄到我电脑来的?”朋友突然醒悟过来。被一起工作的同事暗算,他又惊又恼。

问了下他被暗算的原因。朋友犹豫了一下,没讲什么,不过看得出他现在心里跟明镜似的。

相比二流国产剧的情节,我更想去自己去验证下这种攻击方式。虽然理论上可行,不过在我所知的案例中,还没有出现过这种攻击实例。

其实这个问题并不复杂,所有的USB设备都有一个微控制器芯片,作为设备与计算机之间的接口。而这个芯片上的固件可以被重新编程甚至植入病毒。而且,BadUSB可以轻松绕过防病毒软件,所以极难被查觉。

这只是一种攻击的途径,目的可以有很多种,危害的程度也可大可小,危害完全取决于攻击者。

我决定以一包辣条的代价,请老师傅出山,为大家复原一次用USB设备植入病毒的过程。

首先,作案前需要有一个可以被重新编程的USB设备,在某宝上,几十块钱就买到一个,简直是居家旅行黑人电脑的利器。

我在网上找了张图,简单给大家介绍一下这个设备。在蓝色的板子上,一面是存储器,一面就是控制器固件,也就是被写入恶意代码的地方。恶意代码会在电 脑安装该USB驱动的时候自动运行,这时它会模拟键盘或鼠标操作,自己编写powershell,这个过程可能转瞬即逝,整个过程都不会被杀软报警,所以 极难察觉。

货到手后,老师傅先生自编一段powershell代码,然后将这段代码植入设备,插入电脑后,就可以自动执行指令,将病毒植入到电脑。

本以为一插就怀孕,结果什么也没发生。。。

“不应该啊!”老师傅没想到,自己也有翻车的一天。

“卧槽!我怎么没想到这茬!”老师傅一阵苦笑。

其实是电脑的输入法默认输入中文,所以没能完成植入。原来老师傅的克星,不是杀软是输入法!

既然找到了症结所在,那就问题也就迎刃而解了,只要在前面设置一个大写锁定的指令,后面的指令就可以进行正常操作了。

植入代码后,老师傅就可以对这台电脑为所欲为了。

利用外部连接的硬件设备进行病毒传播的手段并不新颖,早在软驱时代,这就是传播病毒的主要方法。随着互联网的发展,利用网络传播才渐成主流,以至于很多人逐渐淡忘了USB可以传播病毒,所以会放松警惕。

我们来做个实验,看有多少人会中招。

我就近在星巴克和kfc放了五个已经植入攻击代码并伪装成了U盘的设备,一旦被人插入电脑,可以在短短几秒内植入木马,远程操控、实时监控也就不在话下了。

(太小的U盘是不行的,图片就是意思一下)

结果是有三个人中招,电脑感染木马后,我们可以监控屏幕、操纵摄像头等操作。

屏幕监控

可以看出对方应该是个财务,我们完全可以获取这些资料并且掌握该公司的人事和财务状况。

和男友很直白的交流。。。

通过监控屏幕和记录键盘敲击,经过分析后我获取了对方的对方的微博账号和密码,并登录了她的微博,发现这个微博账号关联了淘宝、知乎等账号。所以登 陆了微博就可以“快捷登录”其他关联的账户。如果她还是那种“一个密码走天下”的人,那么她的个人信息和财产就完全没有安全可言了。

还好,她遇上的是我们这些有(mei)良(dan)知(zi)的黑客,实验点到为止,没有再往下挖了。

讽刺的是,我发现这三个人里还有一个是科技公司的运维,可见即使是有计算机常识的工程师也缺乏必要的安全意识。一个早已被用烂的病毒木马传播方式,依然能让不少人中招。

键盘、鼠标、充电宝等,都可以被植入恶意代码,加上计算机外高度依赖USB外接设备,以至于这种攻击方式成功率极高。也许就是上个洗手间的工夫,电脑就可能被人入侵,一举一动完全暴露在别人的眼皮子地下。

黑客从来只黑有价值的人,如果你觉得自己很安全,那只是你缺乏被黑的价值,这句话毫不夸张。在商业领域,矛与盾的较量从未间断。

在科技领域,为保密或窃取研发资料所产生的博弈从未停止。例如华为这种极重研发的公司,投入重金的研发资料一旦泄密,其造成的影响是不可估量的。

在巨大利益的诱惑下,不少猎手都对其跃跃欲试,让华为不管是网络层还是硬件层,都投入了极高的防护成本。

所以,大家一定要注意信息安全,不要让攻击者有机可乘。

【360图书馆】插入U盘自动攻击:BadUSB原理与实现的更多相关文章

  1. 树莓派插入U盘自动拷贝系统日志到U盘或通过U盘升级程序

    注意,U盘用Fat32格式,NTFS格式的话,需要在Linux另外安装相应驱动. 可通过udev实现如题的功能. 在/etc/udev/rules.d/目录下新建规则文件98-logcopy.rule ...

  2. linux下插入U盘自动挂载后,用C获取其挂载点(cat /proc/mounts)

    现在已经能够通过libudev获取U盘插入时它的节点名(通过函数udev_device_get_devnode()),是/dev/sdb1 我现在的做法是读取/proc/mounts文件,找到有/de ...

  3. 33.Linux-实现U盘自动挂载(详解)

    1.当我们每次插入u盘后,都会自动创键U盘的设备节点/dev/sda%d 这是因为里面调用了device_create()实现的, busybox的mdev机制就会根据主次设备号等信息,在/dev下创 ...

  4. U盘自动拷贝

    描述:启动该程序后,自动检测U盘是否存在,若存在,将U盘中所有的文件拷贝到电脑的指定目录下. 注:本篇博文仅支持技术讨论,不用于数据的盗取之类的黑科技. 本程序基于Win32开发,主要是利用Win32 ...

  5. hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

    1.接入U盘,看输出打印信息并分析 (1)输出信息 自动创建设备节点 (2)用ls命令查看 这里/dev/sda表示整个U盘,/dev/sda1表示这个U盘的第一个分区. (3)手动挂载,查看文件,手 ...

  6. linux 实现U盘自动挂载

    某些场景下,服务器可能没有必要的键盘等输入设备.屏幕等输出设备.此时需要在没有人为干预的情况下实现当插入U盘或者硬盘后自动挂载,并执行某些脚本动作.以下是我的实践过程. 必要组件 udev,udisk ...

  7. [转]初探Metasploit的自动攻击

    1. 科普Metasploit   以前只是个Back Track操作系统(简称:BT) 下的攻击框架,自成继承了后攻击渗透模块,隐隐有成为攻击平台的趋势. 我们都戏称它为美少妇,很简单,msf. 它 ...

  8. qq2440启动linux后插入u盘出现usb 1-1: device descriptor read/64, error -110,usb 1-1: device not accepting address 8, error -110

    上位机:ubuntu14.04 64bit 下位机:qq2440 交叉编译器:arm-linux-gcc 3.4.1 下位机使用的linux内核版本:kernel2.6.13 1.插入u盘时错误信息如 ...

  9. Metasploit自动攻击和选择模块攻击详解

    Author:魔术@Freebuf.com 0×1自动攻击 终端启动Metasploit,因为我现在Source Code,所以这样启动! 连接数据库 安装方法,执行以下命令即可(请用ROOT执行). ...

随机推荐

  1. 【Teradata】gtwglobal查看

    使用root登录TD数据库节点 cnsterm 6 start gtwglobal cnsterm 3 //上一个命令的window编号 h //帮助 QUIT //退出

  2. postgresql 按日期范围查询

    Timestamp without timezone 方法一: select * from user_info where create_date >= '2015-07-01' and cre ...

  3. (转)Spring Boot 2 (九):【重磅】Spring Boot 2.1.0 权威发布

    http://www.ityouknow.com/springboot/2018/11/03/spring-boot-2.1.html 如果这两天登录 https://start.spring.io/ ...

  4. 微服务框架surging学习之路——序列化 (转载https://www.cnblogs.com/alangur/p/10407727.html)

    微服务框架surging学习之路——序列化   1.对微服务的理解 之前看到在群里的朋友门都在讨论微服务,看到他们的讨论,我也有了一些自己的理解,所谓微服务就是系统里的每个服务都 可以自由组合.自由组 ...

  5. Spring Security(七):2.4 Getting Spring Security

    You can get hold of Spring Security in several ways. You can download a packaged distribution from t ...

  6. P2251 质量检测--洛谷luogu

    传送门 题目描述 为了检测生产流水线上总共N件产品的质量,我们首先给每一件产品打一个分数A表示其品质,然后统计前M件产品中质量最差的产品的分值Q[m] = min{A1, A2, ... Am},以及 ...

  7. 【LOJ 2144】「SHOI2017」摧毁「树状图」

    LOJ 2144 84pts 首先\(op2\)很简单.直接并查集一搞就好了(话说我现在什么东西都要写个并查集有点...) 然后\(op0\)我不会,就直接\(O(n^2)\)枚举一下\(P\)这个人 ...

  8. Codechef SUMCUBE Sum of Cubes 组合、三元环计数

    传送门 好久没有做过图论题了-- 考虑\(k\)次方的组合意义,实际上,要求的所有方案中导出子图边数的\(k\)次方,等价于有顺序地选出其中\(k\)条边,计算它们在哪一些图中出现过,将所有方案计算出 ...

  9. 扒一扒: Java 中的枚举

    目录 1. 枚举的定义 1.1 传统的非枚举方法 1.2 枚举方法 1.3 定义总结 2 枚举的本质 2.1 继承 java.lang.Enum 2.2 final 类型 2.3 枚举常量本身就是该类 ...

  10. mskitten

    简介 一个普普通通的Java程序员,在某制造业外企工作. 技术栈 主要是Core Java,准备向Java Web挺进. 非计算机专业学生,在努力提升计算机基本素养(操作系统.算法).有好书好资源欢迎 ...