zoukankan      html  css  js  c++  java
  • 利用WHID为隔离主机建立隐秘通道

    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实施攻击,这种行为将会被视作非法活动。由本软件所造成的任何不良后果,作者将不承担任何责任,请各位谨慎使用。

  • 相关阅读:
    668. Kth Smallest Number in Multiplication Table
    658. Find K Closest Elements
    483. Smallest Good Base
    475. Heaters
    454. 4Sum II
    441. Arranging Coins
    436. Find Right Interval
    410. Split Array Largest Sum
    392. Is Subsequence
    378. Kth Smallest Element in a Sorted Matrix
  • 原文地址:https://www.cnblogs.com/xiaowuyi/p/7477779.html
Copyright © 2011-2022 走看看