王东海,张 昊
(苏州工业职业技术学院,江苏 苏州 215104)
随着计算机技术的飞速发展和网络的普及,给人们的生活带来极大便捷的同时,网络攻击也日益增多,大量的企业和个人都面临被攻击和入侵的风险。在2014年DerbyCon的黑客大会上[1],柏林的安全研究人员公布了Badusb的危害,这种漏洞会危及大部分带有USB接口的主机,而现在使用USB接口的设备越来越多[2],含有恶意代码的USB设备一旦插入电脑,可控制电脑并传播事先准备好的USB病毒[3]。因此,Badusb的攻击手段引起了各个企业和研究人员的重视,研究其防范措施也变得十分重要。
Arduino是一款操作方便、易于学习的开源电子平台。电子板上的微处理器可以通过Arduino的编程语言进行程序编写,生成编译出的hex文件烧录进电子板,就可以通过微处理器来控制电路板上的各种硬件。
Cobalt Strike是一款用来进行渗透测试的工具,可以控制木马,主要功能有端口转发、端口扫描、生成木马、克隆站点等。
Arduino Leonardo芯片是Atmel ATmega32u4型微控制器,可以提供20个数字IO(其中7个可以用来PWM输出,12个用作模拟输入)、一个16 MHz晶体振荡器、一个微型USB连接、一个电源插孔、一个ICSP接头盒和一个复位开关。ATmega32U4 MCU内置了USB的通信模块,不需要辅助处理器,允许Leonardo作为HID设备连接计算机[4]。
一般情况下,普通的木马都是通过互联网进入目标主机,但要入侵主机,需要满足的条件比较苛刻,主要有以下几个因素:
(1)需要在互联网上伪装成正常软件,诱导用户下载。
(2)需要通过浏览器的安全检测。
(3)需要通过杀毒软件的安全检测。
(4)在运行时,需要通过杀毒软件的行为侦查检测。
可以看出,普通木马想要大展身手,最关键的就是如何进入被控制的主机,这种攻击手法无法针对某台特定主机进行攻击。因此,通过具有社会工程学性的攻击(即直接对物理设备)是一种比较好的选择,将Shellcode放在服务器上,利用Badusb触发下载Shellcode,并运行Shellcode,由于这个过程没有文件落地,目标主机即使发现了入侵行为,也无法将木马清除。
本设计选择采用病毒免杀技术,即通过修改源码,避免杀毒软件通过检测MD5值进行查杀。具体步骤如下:
(1)将主要函数内容复制出来。
(2)将内容加密成Base64编码。
(3)将编码分别赋值给函数$a1-$a5。
(4)设置函数$a6,即将$a1-$a5赋值给它,base64解码并运行。
2.2.1 中文输入法绕过
Badusb搭载Arduino驱动,通过Arduino IDE接收到Arduino代码后,调用Arduino官方的键盘库,进行模拟键盘操作控制主机,调用Keyboard.h库后,启动键盘模拟,用Keyboard.println函数对主机发送键盘的指令。
Keyboard.println函数向连接的主机发送一个键盘按键动作,以换行符和回车符结束。但在仿真环境测试中,由于中文输入法的原因,影响到该函数的回车符,回车会变成中文输入法,从而导致运行失败。为了防止这种情况发生,用Keyboard.press(KEY_CAPS_LOCK)函数调用KEY_CAPS_LOCK后,可以打开大写状态,绕过中文输入法,在输入完成后再将大写状态关闭。实现的关键代码如下:
Keyboard.press(KEY_CAPS_LOCK);//利用打开大写绕过输入法
Keyboard.release(KEY_CAPS_LOCK);
2.2.2 敏感程序绕过
由于杀毒软件会对某些函数进行行为探测,例如火绒、360安全卫士、腾讯管家等,他们会对-w hidden隐藏窗口进行检测。因此,设计过程中使用CMD窗口打开PowerShell,并将CMD的窗口大小cols设置为15,lines设置为1,命令为:CMD/t:01/k @ECHO OFF &&MODE CON:cols=15 lines=1。使用这种方法可以有效避免弹出警告窗口。
2.2.3 云木马攻击设计
主机一般都安装了杀毒软件,木马存放在磁盘里非常容易被查杀,因此将木马放置在云服务器上,在本地下载执行,可以避免被杀毒软件查杀。云木马攻击实现的关键代码如下:
Delay(1000)
Keyboard.begin();
delay(1500);
Keyboard.press(KEY_LEFT_GUI);
delay(500);
Keyboard.press(‘r’)
delay(500);
Keyboard.release(KEY_LEFT_GUI);
Keyboard.release(‘r’);
delay(500);
Keyboard.press(KEY_CAPS_LOCK);
Keyboard.release(KEY_CAPS_LOCK);
Keyboard.println(“CMD/t:01/k @ECHO OFF &&MODE CON:cols=15 lines=1”);
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
由于云木马需要存放在公网服务器上,所以必须先搭建一台公网服务器。在公网服务器上安装Java环境,使用CS框架实现云木马攻击。
搭建公网服务器的具体步骤如下:
(1)在阿里云上购买一台主机。
(2)选择轻量级服务器。
(3)将系统配置为Centos7。
(4)远程连接设置服务器密码。
(5)使用SSH连接工具登录服务器。
(1)在安装Java环境之前需要先更新Yum源,Yum源是Centos的软件包管理器,主要功能是自动升级。只有更新完Yum源之后,安装的Java环境才会是最新的。执行命令如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]# yum install update。
(2)安装Java库。
执行命令如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]# yum-y list java*。
(3)安装Java11。
执行命令如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]#yum-y install java-11-openjdk.x86_64。
(4)查看Java版本。
安装好Java后,测试Java命令是否可以使用,执行命令如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]# java-version。
(1)使用FTP工具将Cobalt strike上传到阿里云服务器。
(2)给Teamserver增加执行权限。
具体操作步骤如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]# cd/cobaltstrike4.0-cracked/
[root@iZ2ze1e64qek16ztlp1f3tZ cobaltstrike4.0-cracked]# chmod +x teamserver
(3)执行Teamserver服务。
设置阿里云的服务器IP地址和密码。
(4)使用Cobalt Strike 客户端连接服务端。
在阿里云的安全组中打开50050端口,在Windows上打开Start-cn.bat,然后在主机上输入服务器IP地址,使用默认端口号,输入用户名和服务器的密码,单击连接按钮即可登录。配置界面如图1所示。
图1 CS登录界面
对设计的木马通过常用的杀毒软件进行测试,主要包括360安全卫士、腾讯管家和火绒。
目前测试方式主要有两种,一种是静态扫描,将木马存放在磁盘中,用杀毒软件进行扫描,看能否识别;另一种是动态扫描,即木马运行时,用杀毒软件进行扫描,看是否检测到。在此采用静态扫描的方式,测试结果如表1所示。
表1 杀毒软件测试结果
通过对测试结果进行比较,木马的设计选择采用PowerShell绕过的方式。
烧录是对一次性可编程只读存储器进行一次写入操作。烧录时需要注意以下几个方面:
(1)芯片类型的选择。若芯片类型选错,烧录时会对存储器造成不可逆的伤害。
(2)烧录指令。若不小心给Badusb烧录了一个关机的指令,插入Badusb就会关机,无法对Badusb再进行编程,从而进入一种死循环。因此,在烧录的时候必须仔细检查代码,确认代码无误后,再进行烧录。
烧录的具体步骤如下:
(1)在Arduino IDE的工具栏中,选择项目,编译二进制文件后,编译器会要求再次编译,编译后会产生2个hex文件。编译后界面如图2所示,其中powershell_360.ino.with_bootloader.leonardo.hex文件带有bootloader固件,包含有引导装载程序,会在操作系统运行内核之前运行,初始化系统的软硬件,Badusb不需要这个功能,所以选择不携带bootloade固件的powershell_360.ino.leonardo.hex文件。
图2 hex文件生成界面
(2)在Progisp中,主控选择Atmega32U4,在Parogisp的右侧选中“调入flash”,在弹出的窗口中,选择hex文件。设置好之后单击“自动”按钮,进入自动烧录状态。
Badusb是一种渗透能力非常强的攻击方式,对安全防范不到位的主机威胁非常大。本文设计了一种改良型的木马,在设计Arduino程序和Cobaltstrike木马过程中,将木马的特征码进行分割加密,再组合起来解密,用Shellcode编译器对文件进行编译,将改良的木马通过杀毒软件进行测试,结果表明,Arduino增加了Badusb的执行能力,可以绕过更多杀毒软件的安全防护,达到了设计的预期效果。但本测试也有一些不足,主要是选择的杀毒软件种类偏少。