康云川,代 彦
(1.重庆三峡学院 计算机科学与工程学院,重庆 404000;2.重庆市文化信息中心,重庆 401121)
计算机现有的USB接口给广大用户提供了相应的便利,例如移动存储设备数据的存取、移动设备的充电、输入设备的连接等。由于人们对信息安全意识的不足,即使有相应的了解或认知,关注点也仅限于计算机操作系统或应用软件安全,很少关注USB层面的安全问题。而USB接口提供了多条入侵路径[1],当外置设备插入USB接口时,操作系统会自动识别、配置并为接口加载独立的驱动程序,这也使得USB接口成为了不法分子入侵、窃取数据的途径之一,给用户带来了严重的安全威胁[2]。
据统计,全球数十亿台USB设备遭受过USB Bomb、BadUSB等攻击,例如Stuxnet蠕虫利用USB操纵伊朗核电站的离心机,最终破坏了伊朗核计划的关键部分[3]。国外有一款名为USB Kill Stick的设备,当用户将该设备插入任何一部计算机或者含有USB接口的电子产品,该设备会马上破坏整部计算机或电子设备,USB Kill Stick没有病毒,破坏的原理是当用户插入USB Kill Stick后USB会通过信号线发送一道220 V的高压冲击波并摧毁设备。还有2013年的“棱镜门”事件,斯诺登通过U盘把机密带从安全局带了出来[4],可见USB安全问题防不胜防。
USB攻击是一种新兴的技术,相比传统的攻击更为隐蔽,产生的安全威胁更大。由于其技术实现相比传统攻击更具有复杂性和危害性,文中对目前USB设备常见入侵攻击方式,Keylogger与BadUSB设备软硬件原理进行深度剖析,并利用可编程USB设备进行恶意代码的烧录,实现对计算机键盘记录的监听,操作系统的远程控制及用户权限的获取,对攻击的防护提出相应的解决方案。这对于保障用户信息安全具有一定的重要意义。
常见的恶意USB设备有Keylogger,BadUSB,其特点具有高度的隐蔽性、伪装性、跨平台特性并且能逃避安全软件的探测。攻击方法主要是通过可编程USB接口设备,对USB设备中的单片机逆向工程编程,烧录恶意程序,编程后的USB设备不受操作系统限制,具备窃取键盘记录、攻击计算机操作系统的功能。Keylogger与计算机主机,键盘连接,监听用户键盘按键行为记录,实现计算机终端数据自动窃取,而BadUSB设备直接连接计算机主机USB接口,向终端发起攻击,实现创建操作系统超级管理员账号,开启远程访问端口,自动进行脚本程序远程下载并执行,自动创建免杀木马后门等,实现对计算机终端的远程控制[5]。
Keylogger硬件采用可编程的USB接口硬件进行逆向编程,烧录窃听程序,Keylogger用于监听用户在使用计算机过程中的键盘按键记录,安装监听设备或监听软件后的计算机。用户在操作系统界面输入管理员的权限信息,在线购物网站输入银行卡凭证,聊天工具产生的交流记录,登录社交系统的社交账号密码等,都将会被监听工具所窃取记录[6]。键盘按键监听也是计算机取证、信息收集最为流行的手段之一。该技术虽然给计算机取证信息收集带来了方便,但也常被不法分子所利用,常见的监听工具有监听软件与监听硬件,软件有Keystroke、键盘记录者等[7]。由于软件监听不是文章所研究的对象,故不再赘述。
(1)隐蔽性强。
监听设备体积较小,可以藏匿于USB延长线、键盘中,整个监听过程并未对计算机操作系统带来任何影响,设备中并无恶意程序,只记录用户的按键信息,防病毒软件也很难探测与阻止该恶意行为,从而逃避防病毒软件的监控与评估。且监听过程不影响用户对计算机的任何操作,整个监听过程非常隐蔽,用户很难察觉,如图1和图2所示。
图1 Keylogger连接示意
图2 Keylogger
(2)跨平台性。
这种设备具有良好的跨平台性,不受计算机操作系统的影响,对于Linux、Unix、Windows、MacOS等操作系统,只要终端具有外置键盘都无法摆脱Keylogger的监听。
(3)免驱动。
设备连接后运行于计算机底层,且计算机不需要安装额外的驱动,即插即用,实时性运行,只要计算机通电后设备就开始监听键盘的记录信息。
1.1.1 硬件原理
硬件部分是Keylogger的基础载体,是数据窃取的物理实现,其电路原理如图3所示。硬件主要由微控芯片(MCU)与存储芯片(EEPROM)等构成,MCU完成计算机键盘记录的窃取,存储芯片则保存MCU窃取的记录数据,更高级的Keylogger还具有无线网络传输单元,监听者可以对目标主机的键盘记录通过网络进行实时监听。
从图3可知,整个窃取单元的设计并未改变USB原始的供电及数据传输模式,只是在接口的中间增加了单片机系统,与主机键盘形成旁路。VCC、GND分别为USB电源与地线,D+与D-为USB数据线。USB接口连接了单片机控制系统,并对MCU 8位RISC单片机与EEPROM存储芯片的针脚VCC与GND供电,MCU的RA0针脚与RA2针脚开始窃取从USB接口的D+与D-数据线上传输的数据,数据通过MCU整理后保存至EEPROM实现数据的窃取,而PS/2转USB的对应接线方式为VCC->VCC,GND->GND,D+->CLK,D-->DAT[8]。
图3 Keylogger硬件电路
1.1.2 硬件程序
程序部分是Keylogger的系统核心,也是数据窃取与数据重放过程的逻辑实现。Keylogger可以采用C#语言或Arduino语言开发。以Arduino语言开发的代码为例,单片机采用AVR ATMega32u4-AU芯片为主控芯片,采用PS2Keyboard、SD等内置函数库[9],PS2Keyboard库主要用于与键盘外围设备的通信,SD库为SD内存卡提供读写操作,用于键盘监听记录的存储。整个键盘记录监听与存取程序代码如图4所示。
图4 键盘记录存取程序代码
当用户敲击键盘后,Keylogger收到数据,keyboard.begin()函数初始化键盘,SD.begin函数初始化SD卡,keyboard.read()函数为读取用户的键盘行为操作,函数SD.open()以可写的模式打开SD卡,函数file.print()将数据保存至SD卡,最终实现键盘记录的监听与保存。
BadUSB也采用可编程的USB接口硬件进行逆向编程,烧录攻击载荷程序,当攻击者向计算机或带有USB接口的终端插入BadUSB,BadUSB就会在用户不知情的情况下,模拟键盘输入行为,向终端数据接口发送恶意指令,几秒就可完成木马执行,完成操作系统漏洞提权、0Day漏洞攻击等恶意行为操作;且整个攻击设备本身不带任何病毒或木马,攻击过程是通过模拟用户对计算机的正常操作,防病毒软件也很难探测与阻止该恶意行为,从而逃避防病毒软件的监控与评估。这种攻击行为给计算机信息安全带来了巨大的安全隐患[10]。
(1)隐蔽性强。
BadUSB设备体积较小,可以藏匿于任何具有USB接口的设备中,整个攻击过程非常隐蔽,因恶意软件是固化在硬件芯片内,防病毒软件无法清除恶意代码,攻击速度非常快,用户很难察觉,外观如图5所示。
图5 BadUSB
(2)跨平台性。
BadUSB具有良好的跨平台性,不受计算机操作系统的影响,对于Linux、Unix、Windows、MacOS等操作系统,只要终端具备USB接口都无法逃脱BadUSB的攻击。
(3)免驱动。
设备连接后计算机操作系统会自动识别,不需要安装额外的驱动,即插即用,实时性运行,只要计算机通电后设备就可以对计算机实施攻击。
(4)传播性。
把病毒植入在USB设备的固件里,当用户插入BadUSB后,病毒可以在计算机磁盘里传播或复制,而传统的防病毒软件发现后无法清理病毒,即使用户对设备进行整体格式化清理,但仍不能清除它。
1.2.1 硬件原理
BadUSB可采用ATMega32u4-AU为单片机主控芯片,该芯片是一款基于AVR的低功耗8位CMOS微控制器,并且支持USB-HID,可用于模拟用户键盘,鼠标操作行为。BadUSB硬件部分主要分为单片机控制单元(MCU)与存储(SD卡)两部分,MCU主要用于计算机USB接口的通信与终端指令的发送[11],SD卡用于保存对计算机恶意攻击的脚本命令,其硬件电路如图6所示。其中D1和D2二极管限制数据线上的电平,电阻R1与R2阻值均为68 Ω,防止电流过载保护计算机终端USB接口与单片机电路,上拉电阻R3阻值为2.2 kΩ,用于分辨总线状态。
图6 硬件电路
1.2.2 硬件程序
基于ATMega32u4-AU芯片构建的BadUSB设备,可使用Arduino IDE环境开发,Arduino IDE封装了ATMega32u4-AU芯片常用的USB通信库、模拟键盘行为的Keyboard库、SD卡库等[12]。模拟键盘输入主要采用Keyboard.press()、Keyboard.releaseAll()、Keyboard.println()等函数,Keyboard.press()函数为模拟键盘按键操作,按下后并未释放操作,Keyboard.releaseAll()函数为释放按键,Keyboard.println()函数为模拟键盘敲出字符并换行,其中硬件恶意攻击程序示例代码如图7所示。
图7 BadUSB攻击程序示例代码
图7中的第13行、14行、15行代码,模拟了同时按下键盘上的win+r键组合,弹出Windows操作系统的程序运行窗口;第17行代码自动在运行窗口输入cmd命令,弹出Windows操作系统命令行窗口;第21行与第22行代码,为Windows系统下创建用户权限的命令;第23行代码为添加防Windows防火墙规则,开启远程访问端口3389;第24行代码为添加注册表允许计算机被远程访问规则。当把编写有以上的程序BadUSB设备插入至Windows计算机的USB接口后,该设备就会在数秒内完成权限的创建,完成远程访问端口的开启,实现对计算机的远程控制,实验结果,如图8所示。
图8 BadUSB攻击实验
在攻击Windows 7及以上版本的操作系统时,BadUSB还可以执行超级终端powershell(new-objectSystem.Net.WebClient).DownloadFile()、Start-Process命令,攻击设备自动进行恶意程序的远程下载与执行,实现对计算机操作系统进行的非法操作。
由于Keylogger设备体积较小、隐蔽性强,可藏匿于键盘,键盘延长线中,插在计算机主机上也不需要安装额外的驱动程序,插上后甚至计算机操作系统也无相应的提示信息,即插即用,这些特点使得用户很难防护Keylogger的监听。但只要用户意识到Keylogger的危害性,提高相应的安全意识,经常检查主机与键盘之间的连接是否安全可靠,中间是否存在可疑的设备,不使用不明来源的键盘,主机与键盘禁止任意插拔,在输入用户名、密码等敏感信息时,可采用软键盘输入信息,也可使用蓝牙键盘替代有线键盘,还可对键盘键值进行加密处理等,这些都可避免Keylogger设备对键盘记录的监听[13]。
用户的按键信息经过加密处理,计算机操作系统根据解密算法对键值进行解密获得真实的键值,键值加密原理如图9所示。以键盘上的字母“E”为例,“E”的键盘编码为00_00_08_00_00_00_00_00,【引文】,如果对字母“E”的键盘编码加密,加密后的密文为##_127_##_##_##_##_##_##,用户在敲打按键“E”时,键值始终以密文的方式传送至计算机主机,在计算机主机接收端,通过系统底层过滤驱动对密文的键值信息进行解密操作,还原“E”的正常键盘编码。这样一来监听工具所监听的按键信息是加密后的密文,攻击者无法获得用户真实的记录,有效地避免了键盘按键被监听的风险,也避免了数据被窃取。
图9 键值加密与解密过程
键值加密算法可采用RSA公钥加密方式。假设C为密文,M为明文,发送端和接收端都必须知道n和e的值,d为私钥由接收端保存不对外公开,公钥KU={e,n},私钥KR={d,n},加密解密中的模数n=pq,p,q为任意选择的两个素数,分别为23和7[14],n=pq=161。使用欧拉函数计算出整数数量φ(n)=(p-1) (q-1)=132。选择φ(n)互素的数,并且小于φ(n)的数7为e的值,e=7。根据demod132=1,d<φ(n),求出d=19。求出公钥KU={7, 161},私钥KR={19, 161}。
键盘键值采用RSA公钥加密算法,公式如下:
C=Memodn
键值密文解密算法的公式如下:
M=Cdmodn=(Me)dmodn=Medmodn
发送端对键盘按键“E”明文编码8进行加密处理,如下:
C=Memodn=87mod 161=127
其中127为按键“E”的密文。
接收端对发送端的密文进行解密处理,如下:
M=Cdmodn=(Me)dmodn=Medmodn·12719mod 161=8
BadUSB设备可隐藏于任何USB接口类型的设备中,其伪装性极强,使得用户很难防范来源BadUSB的攻击,而主要防护措施有以下六点:
(1)通过限制计算机USB接口的使用,不使用陌生的USB设备。
(2)开发相应的USB防护软件防止BadUSB设备对主机的直接操作,当USB设备插入计算机USB接口时,操作系统底层预先阻止USB设备对接口的任何行为,防护软件提示用户设备是否受信任,用户需输入相应的口令接受USB设备,避免BadUSB直接模拟键盘、鼠标行为,有效降低被攻击的几率。
(3)可采用USB硬件防火墙,计算机所有的USB接口不直接向用户开放,与USB硬件防火墙连接,防火墙向用户开放接口供用户使用,防火墙的内部具备USB设备枚举、内容检测等,USB设备必须通过防火墙安全检测后才能接入使用[15]。防火墙原理如图10所示。
图10 USB硬件防火墙原理
(4)计算机USB外围设备采用固件签名算法、区块链等技术以确保固件不被篡改,防止对USB接口外围设备逆向编程,植入BadUSB恶意程序。
(5)建立USB设备白名单机制,操作系统底层判断USB设备固件ID是否已在白名单内,以防止非法USB设备的插入,从而保护计算机免受到底层的攻击。
(6)调整操作系统设备安装策略,例如在Windows操作系统中设置计算机本地策略组,建立基于GUID的可信HID设备的组策略,对USB设备加载进行严格限制,禁止操作系统CMD命令。
分析了常见的Keylogger,BadUSB设备软硬件原理,提出了应对安全风险的措施,可有效解决键盘记录监听,BadUSB攻击等USB层面的安全问题,但这些措施在实际运用中还需对相关算法不断优化,安全策略进行调整。只有当外围设备被视为主机不可信的数据源时,USB安全协议才会被创新,被访问设备的主动认证才能得到补充,才能从根本上消除恶意USB攻击。USB层面的安全问题也是用户自身的问题,与用户的安全意识紧密相连,对信息系统安全性要求较高的用户应该提高使用USB设备的安全性意识,应该谨慎使用来自未知来源的USB设备,定期检查设备管理器,检查USB设备访问记录,以及制定合理的USB设备访问策略,才能将安全风险降到最低。