0 引言

从2014年BADUSB出现以后,USB-HID攻击就这一直被关注,且具争议。争议的焦点是USB-HID的实战效果过于“鸡肋”,无论从早期的BADUSB,还是到后来的各种USB-HID设备,对于目标机来说,都要通过弹出“运行框”来实现payload的植入,由于弹框过于明显,所以实战中效果就大打折扣。于是,围绕着如何提升实战效果,很多人提出了不同的想法,我也做过多次尝试,比如通过改善payload的存储位置,通过加入BLE模块等方法,目的只有两个,一是尽可能减少payload植入过程中的code字符数,二是控制payload的植入时间。再到后来,我也开始尝试引入wifi模块,通过wifi进行控制,如2017年5月,我在freebuf上发表了《利用micropython快速实现Badusb及手机摇控扩展》,当时第一次通过wifi来控制usb-hid,实现与演示了远程关机的操作

WIFI与HID相结合国外有个更专业的名字就是WHID。WHID在当前的众多文章和应用中,多是把它作为一个控制模块,通过伪装,控制HID攻击的效果,更多呈现的是手机或者其它wifi下设备如何利用WHID对目标机进行攻击控制。但实际上,WHID完全可以在目标机上形成一个自定义的通道实现目标机与手机或者wifi下其它攻击设备的通讯,相当于给目标机安装了一个自定义网卡。这一方法,对于隔离主机的信息获取具有一定的应用效果。

1 WHID及其构成

一个传统的USB-HID设备,常常是用来虚拟或者仿真键盘、鼠标等usb外设来完成恶意代码的植入。最常见的就是通过仿真键盘来完成,主要流程是当USB-HID设备插入PC后,会仿真出一个虚拟键盘,然后通过输入win+R,调出系统的运行框,在运行框内输入code。这里常用的方法是,输入cmd等命令,调出最小布局的cmd(也可以改变颜色,目的就是让这个cmd不易察觉),再通过上下键把cmd拖出窗外,让被攻击者无法看到。这时,开始在cmd里输入code。如遍历磁盘,找到payload的存储位置,植入payload。

在植入的这个过程中,又会面临权限、免杀、过UAC等工作,如果你有足够的时间,都可以通过这个仿真键盘事前写好代码或者批处理命令,逐个解决。从这一点看,USB-HID还是很实用的,但是实际上,在插入后需要输入的code量过大,这期间如果被攻击机器的键盘操作过,或者鼠标动过,就会影响到仿真键盘的工作,从而使实现效果不尽人意。于是,有人通过在目标机器上启动Empire或Meterpreter会话,将输入的2670个字符压缩到116个字符,输入时间从38秒压缩到3秒。还有人通过修改padload存储位置,如存储在A盘,可以将输入的字符压缩到8个(如a:\m.exe),输入时间压缩到不足1秒,但这些方法都无法控制弹出运行框的时间,WHID可以说是解决了这个问题。

WHID就是在USB-HID上加入了wifi模块。你可以把wifi配置成AP,也可以配置成STA,然后利用你的PC或者手机来控制USB-HID的动作及动作时间。例如,我在《利用micropython快速实现Badusb及手机摇控扩展》一文中写到的,通过手机遥控关机。

那么WHID由哪几部分构成呢?

第一,易于使用的USB-HID攻击模块,我们常见的就是teensy、arduino等。这里我选用的是支持micropython的模块Tpyboard V102,其采用python来进行硬件控制,代码写起来比较简单、方便,而且这个模块有6个串口,足够我们进行扩展与使用。其缺点也很明显,体积略大,不易伪装,不像arduino nano、arduino pro、teensy、arduino lenorado那样可以很容易的伪装为U盘。对我来说,我觉得这不是大的缺点,因为TPYBoard也属开源硬件,原理图都是开放的,完全可以自己再画成适合伪装的形态。

第二,合适的WIFI模块。我最初在尝试时,使用的是MT7681模块,具体可见《利用micropython快速实现Badusb及手机摇控扩展》一文。后来,在学习micropython的过程中,发现利用TPYBoard v202(ESP8266芯片)更加方便,可以直接形成一个AP,并建立一个WEB服务器。于是,选定用这个模块来完成。

第三,WIFI与USB-HID的连接。连接的接口也有很多种,可以通过I2C、SPI等接口。这里我选用的是串口,只需要将TPYBoardV102与TPYBoardV202两个板子上的TX、RX相互交叉接线就可以了,操作非常简单。

WHID示意图如下:

利用micropython完成WHID的简易拼装:

2 WHID通道搭建原理

对于一个WHID来说,由于其带有的WIFI模块,构建了一个无线网络,所以我们完全可以考虑利用这个WIFI网络实现与PC之间的隐蔽通讯,从而建立一套自定义的无线网卡。如果说,对于互联网主机,USB-HID可以实现payload的植入,利用payload反弹一个shell的话,那么对于隔离主机,WHID一样可以反弹一个shell给攻击者,实现对隔离主机的攻击。从原理来说,就是WHID通过HID在隔离主机内植入一个payload,也可以认为是WHID自定义网卡的驱动,然后隔离主机会通过串口等接口与WHID进行交互,WHID再将交互内容通过WIFI模块传递给远端的控制者。

第一,实现USB-HID设备与隔离主机的通讯。其实,USB-HID负责与PC进行通讯的就是一个单片机,其与PC的通讯方式有很多种,最为常见的就是串口通讯,往往在单片机与pc之间会有一个TTL转USB的芯片,如CH340等。一般串口通讯的最大速度为115200bps,约相当于每秒14KB。如果在通讯中觉得这个速度过于有限,那也可以尝试使用SPI转USB,这样速度可以达到每秒10MB以上。TPYBoard v102开发板自带了TTL转USB模块,所以本文中的研究过程全部采用串口通讯。

第二,实现USB-HID与WIFI模块之前的通讯,由于TPYBoard v102本身带有SD卡存储,可以作为缓存存放,这样在速度上要求不是很高,所以TPYBoard v102与TPYBoard v202(ESP8266)之间完全可以采用串口通讯,连接简单,操控方便。

第三,实现WIFI模块与控制终端之间的通讯,这一点对于WIFI来说一定是通过无线网络。本研究中,利用TPYBoard v202建立了一个AP及web服务器,提供WEB网页服务做为控制平台。

于是,WHID与隔离主机之间的通道传输如下图所识:

3 利用隔离主机WHID通道读取文件

为了说明如何利用WHID从隔离主机中获取信息,这里我们以获取文件为例进行讲解。命题为获取D盘根目录下test.txt的内容。具体步骤为:

(1)准备一套可供使用的Payload代码。根据命题,payload需要解决两个问题,一是类似上位机,获取WHID所在串口,并通过握手包来确认其工作正常;二是读取D盘下的test.txt文件内容,并通过串口向WHID进行传送。

(2)利用WHID完成payload植入。植入是打通通道的最关键一步,第一步中准备的payload相当于给WHID安装了驱动,从而保障PC与WHID的通讯畅通。这里的植入过程,依然还是依赖于HID。常见的使用方法为将Payload存在特定存储位置,HID仿真键盘运行payload。

(3)payload运行后,查找WHID所在的串口,与WHID进行握手,确认通讯正常,然后读取D盘根目录下的test.txt文件,将内容通过串口传送给WHID设备。

(4)WHID实现一个AP,并建立一个WEB服务器,将获取到的串口数据在自身实现的web上进行呈现。此时手机或者其它终端连接到这个AP上,通过Web就能查看结果。

实现的攻击效果为,通过手机连入WHID建立的无线网络,然后输入WHID预定的web地址,会呈现上图中的WEB控制页面,当点击“植入”后,电脑中会闪过“运行”框,从而完成payload植入,然后点击“查看”,就能获取到文件内容。如下图:

如果攻击者,把WHID与一个USB设备进行伪装,其攻击就很具有迷惑性。如与USB小音箱封装到一个盒子里,从外表看,就是一个略大点的USB音箱,但实际上已经可以进行WHID攻击了。当然攻击者也完成可以通过payload从隔离主机中反弹出一个shell,从而再进行进一步的渗透。

【效果视频】

http://v.youku.com/v_show/id_XMzAwMjA1MzgxMg==.html?spm=a2hzp.8244740.0.0

【部分代码】

仅包含硬件固件,未包含Payload。

http://pan.baidu.com/s/1qXVhfWg

【免责声明】

请不要在非合法情况下利用TPYboard实施攻击,这种行为将会被视作非法活动。由本软件所造成的任何不良后果,作者将不承担任何责任,请各位谨慎使用。

利用WHID为隔离主机建立隐秘通道的更多相关文章

  1. TPYBoard实例之利用WHID为隔离主机建立隐秘通道

    本文作者:xiaowuyi,来自FreeBuf.COM(MicroPythonQQ交流群:157816561,公众号:MicroPython玩家汇) 0引言 从2014年BADUSB出现以后,USB- ...

  2. 利用Ossim系统进行主机漏洞扫描

    利用Ossim系统进行主机漏洞扫描 企业中查找漏洞要付出很大的努力,不能简单的在服务器上安装一个漏洞扫描软件那么简单,那样起不了多大作用.这并不是因为企业中拥有大量服务器和主机设备,这些服务器和设备又 ...

  3. windows环境利用apache 配置虚拟主机

    windows环境利用apache 配置虚拟主机 1.改动http.host #LoadModule vhost_alias_module modules/mod_vhost_alias.so #In ...

  4. Docker容器利用weave实现跨主机互联

    Docker容器利用weave实现跨主机互联 环境: 实现目的:实现主机A中容器1与主机B中容器1的网络互联 主机A步骤: ①下载复制weave二进制执行文件(需要internet)[root@192 ...

  5. 如何利用webmin在Linux主机中添加网站

    Linux系统因其高效稳定而受到广大用户的推崇与青睐,然后其管理的复杂性也使很多用户望而却步,动弹不得.为了降低 Linux系统的管理难度,更有效方便的使用该系统,我司所有Linux主机或VPS系统均 ...

  6. 基于Wi-Fi的HID注射器,利用WHID攻击实验

    WHID代表基于 Wi-Fi 的 HID 注射器,即对 HID 攻击进行无线化攻击的一种注入工具. 实验攻击原理如下图: 攻击者使用ESP8266作为AP,在自己的电脑创建客户端连接AP.在客户端键入 ...

  7. httpd 虚拟主机建立之访问机制及其日志定义

    注:关闭防火墙,selinux VirtualHost定义: 基于IP地址VirtualHost: 编辑httpd.conf文件: #DocumentRoot "/web/html" ...

  8. IDC机房与阿里云vpc网络建立高速通道

    本操作以下图所示的场景为例,演示如何通过高速通道建立本地数据中心与VPC之间的私网通信. 前提条件 已提交工单获取接入点的地理位置. 步骤一: 申请物理专线并完成专线接入 登录高速通道管理控制台. 在 ...

  9. ssh两台主机建立信任关系

    A主机(10.104.11.107)   B主机(10.104.11.128) A: ssh-keygen -t rsa [root@H0f .ssh]# ssh-keygen -t rsa Gene ...

随机推荐

  1. php+sqlserver实现分页效果

    找了一些实现的代码,都或多或少有点问题. 主要问题在于: 在进行一页数据查询时的sql语句格式问题, 开始尝试使用limit关键字查询,错误,limit用于mysql: 接着使用ROWNUM.row_ ...

  2. 【Mysql】复制表结构+数据(转)

    1:复制表结构及数据到新表 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from ...

  3. ASP.NET WebAPI Get和Post 传参总结

    这里我使用Jquery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jque ...

  4. Java 程序员技能导图 1.0

    做Java开发已经一年,并非科班出身,在毕业工作三年后毅然决然辞职,参加培训机构从零开始.在这期间迷茫.失望.绝望时常伴我左右,但是在不断自我提高与努力中渐渐看到一些小小的成果使我不断坚信自己的选择并 ...

  5. IntelliJ idea学习资源

    工作需要, 最近得从Eclipse转战到Idea, 找了些不错的学习资料: 1, 从eclipse上迁移过来的用户说明: https://www.jetbrains.com/help/idea/201 ...

  6. mybatis入门介绍一

    首先介绍一下Mybatis是什么?mybatis是Java的持久层框架, JAVA操作数据库是通过jdbc来操作的,而mybatis是对jdbc的封装. 使用mybatis之后,开发者只需要关注sql ...

  7. Nginx配置抵御DDOS或CC攻击

    防攻击的思路我们都明白,比如限制IP啊,过滤攻击字符串啊,识别攻击指纹啦.可是要如何去实现它呢?用守护脚本吗?用PHP在外面包一层过滤?还是直接加防火墙吗?这些都是防御手段.不过本文将要介绍的是直接通 ...

  8. 3.commonjs模块

    1.首先建一个math.js exports.add = function(a, b){ return a + b; } exports.sub = function(a, b){ return a ...

  9. numastat的理解

    numa的统计数据及理解如下, [root@localhost kernel]# numastat                     node0           node1numa_hit ...

  10. yii gridview 时间段筛选(一个输入框,自动提交,高清大图)

    yii gridview功能强大,但是时间筛选比较麻烦,与数据库的存储格式有关,本文的时间格式是date类型 那么问题来了,yii只提供关于时间的text搜索格式,就是只能查找精确日期比如2017-8 ...