基于Arduino的TennsyBadUSB改良型共享云盾的设计与研究

2018-01-08 19:48赵司琦俞继伟王广田谢怡宁
电脑知识与技术 2017年36期

赵司琦 俞继伟 王广田 谢怡宁

摘要:在基于Arduino的平台下,通过深入了解BadUSB原理,基于原理进行改良,实现了共享云盾从整体到局部设计。设计过程中针对用户的基本使用需求,多方面考虑,提高了用户的体验,达到了节省远程文件下载时间,避免输入带来的密码泄露风险的目的。

关键词: BadUSB;共享云盾;人工输入设备;Arduino;智能外设

中图分类号:TP302.1 文献标识码:A 文章编号:1009-3044(2017)36-0036-03

Abstract: Under the Arduino platform, through deep understanding of BadUSB theory,to achieve the overall design that that the sharing of cloud.In the design process, the user's basic use demands are considered in many aspects, which improves the user experience, saves the remote file download time, and avoids the password leakage risk caused by the input.

Key words: BadUSB; shared cloud; Human Interface Device; Arduino; Intelligent peripherals

1 背景

在大型公司企业、高校教学基地中,大量的、不同类型的公共资源的共享已经成为工作的一类普遍需求。传统的消息通知机制通过人工传达讯息已不能满足当今用户对于及时、高效的需求,用户需要一种更为方便、直接、安全的共享消息机制。

大多数的企业、高校都会在其内网上传最新的通知资讯,相关人员需通过手动登录账户、搜索所需内容进行下载,而本文所述共享云盾(一款由BadUSB原理改良的迷你智能外设)的设计与研究,使服务器与迷你智能外设直接关联,达到省却冗余的人工操作,加强安全性的目的。

2 BadUSB的背景与原理

2.1 BadUSB的发现

2014年BlackHat大会[1]上,安全研究人员Karsten Nohl和Jakob Lell公布了BadUSB漏洞,并当场演示,展示出一系列利用该机制漏洞的恶意软件攻击效果,强调说明了USB设备长期以来的安全性机制被打破。会后与Black Hat大会关系紧密的多家媒体做了预热报道,使得该漏洞一跃成为计算机安全领域的热门话题。

2.2 BadUSB的危害性

BadUSB漏洞表明“USB目前的运行机制是有缺陷的,稍有技术的人便能制造含有恶意代码的USB芯片,设备一旦插入电脑,可控制电脑并传播事先准备好的USB病毒”[2],整个过程的危险之处在于——运用了teensy机制的BadUSB通过微处理器运行,使得系统中的防毒软件不能越层阻止恶意代码的运行。

“These problems cant be patched , Were exploiting the very way that USB is designed. In this new way of thinking, you have to consider a USB infected and throw it away as soon as it touches a non-trusted computer. ”[2]Nohl的发言表明BadUSB的危害性难以防范,通过逆向工程破解,基于BadUSB的恶意软件可以安装在USB设备上,完全控制个人电脑,以用户不可见的方式更改从记忆棒安装的文件,甚至重定向用户的互联网流量。

2.3 BadUSB的机制原理

关于BadUSB的原理,Nohl 曾说过“It can do whatever you can do with a keyboard, which is basically everything a computer does.”[3]。从传统意义来看,当电脑中插入一个USB设备时,通过自动播放运行,关闭该功能时,autorun.inf文件便无法自动执行设备文件。

HID[4]是Human Interface Device的缩写,由其名称可知HID设备是直接与人交互的设备,如键盘、鼠标与游戏杆等,但HID设备并非一定要有人机接口,事实上只要符合HID类别规范的设备都是HID设备。HID攻击[5]是指主要集中在键盘鼠标上的攻击,攻击者把攻击隐藏在正常的鼠标键盘中,当用户将其插入电脑时,恶意代码会被加载执行。

结合以上两点,若在USB设备中置入一个攻击芯片Teensy[6](一个小巧且功能完整的单片机开发系统),利用其模拟出键盘和鼠标。插入电脑,利用设备中的微处理器、存储空间、及预置的恶意代码可向主机发送控制命令,从而达到完全控制主机目的,无需通过自动播放的开启执行。具体实现如图1所示:

3 运用BadUSB原理的改良型云盾

若利用BadUSB漏洞,对轻携小巧的USB外设进行改造,对USB进行一次性的代码烧铸,把简单而繁琐的手工登录服务器、下载文件的过程转化为基于Arduino[7]平台的可执行代码,即能做出符合人们需求的共享云盾。

3.1 Arduino平台

Arduino是目前较为流行的电子互动平台,基于单片机系统开发,具有使用簡单、功能多样、价格低廉等优点,广泛应用于电子系统设计和互动产品开发方面[8]。它构建于开放原始码simple I/O介面版,具有Processing/Wiring开发环境,分为硬件部分和Arduino IDE,在IDE中编写相关代码,传至单片机电路板,便可运行。

3.2 Teensy USB

Teensy USB开发板(鼠标键盘ISP),它运用AVR处理器,支持16 MHz,单个按键编程,具有免费软件开发工具,兼容Mac OS X,Linux和Windows系统,易于使用的Teensy Loader应用程序[9]。

选用Teensy开发板,与Arduino IDE安装Teensy开发环境配合,相当于内置了虚拟键盘鼠标,无需安装驱动,便可轻松实现伪装成为HID设备的目的。实物如下图所示:

3.3 改良型共享云盾

共享云盾,是一种采用了源码烧铸确保数据安全,通过USB接口与电脑连接,实现即插即用的适用于局域网范围内提高文件传输效率、实现共享的外部设备。

3.3.1 改良型共享云盾的部分实现代码

大多数的公司、高校的服务器中都会开放FTP或NFS进行文件的传输与下载,故将实现FTP下载作为改良型共享云盾的一项基本功能。基于BadUSB的实现原理,选用Teensy3.1开发板,在Arduino开发环境下,用如下代码实现FTP的默认下载功能,证明改良型共享云盾实现简单易行,其功能的改善存在可能。

上述代码及注释展示了连接ftp并下载指定文件的过程,而结合《msdn开发者手册》[10]中记载,winexec函数可实现cmd窗口的隐藏,二者配合使用,可以实现对用户的透明化效果。

4 共享云盾系统的设计

共享云盾系统是为实现扩充区域服务器功能,给用户带来快速批量安全下载的良好体验而设计的,它能运用于公司或学校,方便使用者下载近期内与某一类群体或是部门有关的公告通知类及时、重要的文件,让使用者省却繁琐手工输入过程,同时烧铸不可修改的验证与加密,也在一定程度上避免密码泄露风险以及用户可能遗忘密码不便。

4.1 共享云盾系统的基本特性

共享云盾系统的基本特性有方便性、及时性、安全性。

1) 方便性。共享云盾外型小巧,使用者能随身携带,云盾一旦插入PC端,便会自动执行代码,实现相应功能,使用者无需在进行其他操作。共享云盾系统能根据使用者身份将讯息进行分类整合,方便不同身边的用户进行下载,避免冗余下载。

2) 及时性。共享云盾系统能定时更新相关公共资源文件,既防止因消息阻滞带来不必要性的工作失误,又可通过删除过期无效文件提高服务器端的空间资源利用率。

3) 安全性。共享云盾的使用者无需在公共设备上输入用户信息,降低了密码泄露的风险。共享云盾本身对烧铸的代码进行加密压缩处理。

4.2 共享云盾系统的高校运用实例说明

为了形象生动说明共享云盾的构思设计、整体模式、后期维护等具体问题,下面以任一高校为例,具体进行分析。共享云盾系统的架构图如下:

基于学校的教务在线系统进行设计与开发的共享云盾,将针对教务系统的功能进行扩充与细化。

服务器端上按不同的院、系级别对原始的通知信息进行大体分类编号,再进一步根据使用者的角度将讯息分为教工、学生、职工、后勤类,教工类有教学计划通知、教学会议安排、竞赛指导说明等,学生类有考务公示、竞赛参与通知、文娱活动开展等,职工类下分招生办、财务等部门的业务通知,后勤类停水、停电、网络维护通知等。而发放给用户的云盾根据其身份的不同,嵌入不同的代码,连接服务器端的不同文件区域进行下载,验证用户身份的主要方法是识别教工号、学号等唯一标志性信息。

服务器端在下载完文件后,将会按照下载量、时间等反馈信息来进一步调整对文件内容的分类排序,且在文档内设置了生存时间的机制,如某一文件已被大部分IP访问下载过,其紧急度等级将会下降;当所有IP都进行下载后,该文件的生存时间清零,随即被自动删除。时间紧迫的通知的紧急度等级高,将会被置于首要级默认下载文件中,确保可能的最大通知范围。采取该种机制更新讯息,是为了防止大量阅读过的或不必要的文件长时间存在,过多占用空间资源。

从客户端来看,当使用者将云盾插入主机后,在其自动连接服务器后,根据ID匹配对应区域,检查默认下载路径下的文件,读取当前文件效验码与服务器中下载文件的校验码进行匹配,若匹配成功,说明该文件此用户已下载,则在下载时跳过当前文件,若匹配失败,云盾将下载该文件,以此避免实时更新中的数据冗余的问题。

在安全性方面,云盾的内嵌代码均为加密压缩后烧铸在硬件层的,代码实现过程也会调用后台函数隐藏显示效果,即达到对用户层的完全透明。如此设计能防止不良用户恶意篡改代码造成损失,或一些误操作而带来的问題,云盾的内存访问是受限访问。受限主要体现在两个方面:限制专属局域网的ip访问,防止因云盾丢失带来的信息泄露问题;云盾的内容更改需要root最高权限。

4.3 共享云盾的高校应用效果

共享云盾系统在高校应用效果可从如下方面进行分析:

1) 从使用者角度分析,共享云盾使用后的感知效果仅仅为云盾插入主机后,等待一段时间,默认下载路径中会更新出现最新的文件通知等,使有效信息的传递变得及时简单,方便师生的学习、工作生活。

2) 从维护管理者角度分析,教务系统服务器端与共享云盾相结合,管理工作需要在原有基础上增加一定量,如对服务器的定期检查,进行必要文件调整;观察有无异常登录等情况,需及时处理。但整体上来说,完善了服务器的文件分类功能,相关管理也会变得高效。

3) 从开发者角度分析,开放云盾系统的最高权限,根据云盾在高校使用情况反馈,调整完善相应功能,做长期的维护开发工作。

5 结束语

本文基于BadUSB的原理结合当下人们对讯息及时性的需求,提出了共享云盾的设计思想和整体框架,具一定实用意义。将共享云盾实践运用在高校的教学生活中,对高校的教务工作有明显辅助作用,应用效果显著。

但文中用于举例的共享云盾的ftp下载文件过程,代码显繁琐,灵活性不足,故在下一步优化过程中,追求更大程度上地简化管理,提升灵活性,对此有一思路:利用一个中间服务器做跳板去操作含有下载文件的网站,共享云盾仅连接中间服务器下载脚本并运行,核心代码均加密放在中间服务器内。该设想可借助powershell的指令实现,如powershell.exe -nop -w hidden -c “IEX((new-object net.webclient).downloadstring('http://IP_address:port/file'))”。

對于共享云盾在应用实践上的优化,必然存在更好的方案,如何进一步简化共享云盾的内置代码,提高其安全性、操作灵活性,带来更好的使用效果将是笔者下一步要研究的问题。

参考文献:

[1] ANGELA WATERCUTTER.SHOOTING BLACKHAT[J]. Wired, 2015(1):29-31.

[2] KarstenNohl,JakobLell.Badusb on accessories that turn evil[EB/OL].https://www.blackhat.com/us-14/briefings.html#badusb-on-accessories-that-turn-evil.

[3] SimonCohen.Why you can no longer trust any USB device plugged into your PC [EB/OL] https://venturebeat.com/2014/07/31/why-you-can-no-longer-trust-any-usb-device-plugged-into-your-pc/.

[4] Hidcomments.Device Class Definition for Human Interface Devices(HID)[EB/OL].http://www.usb.org/developers/hidpage/HID1_11.pdf,2001.06.27/2017.10.25.

[5] 姜建国, 常子敬, 吕志强, 等. USB HID攻击与防护技术综述[J]. 信息安全研究, 2017(2):129-138.

[6] GEAR[J]. European car, 2009(10):22-24.

[7] Michael Margolis. Arduino权威指南[M]. 杨昆云, 译. 2版. 北京: 人民邮电出版社, 2015.

[8] 蔡睿妍. Arduino的原理及应用[J]. 电子设计工程, 2012, 20(16):155-157.

[9] 维克斯. 利用Arduino快速制作Teensy BadUSB[EB/OL]. http://ju.outofmemory.cn/entry/267002, 2016.06.23/2017.10.25.

[10] kaneboy. MSDN Magazine 2005年第10月刊内容精选[J]. MSDN开发精选, 2005(6):4-5.