现有USB隐约测试手艺的总结(下) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

现有USB隐约测试手艺的总结(下)

申博_新闻事件 申博 21次浏览 未收录 0个评论

上文我们引见了USB协定栈和USB隐约测试的汗青,个中讲到了一些过去的常常运用手艺和东西,不过它们都存在着一些题目。本日,我们将引见最新的5种USB隐约测试的处置惩罚方案。

Syzkaller

不过荣幸的是,近来安德烈•科诺瓦洛夫(Andrey Konovalov)在Google上增添了Syzkaller USB隐约测试支撑,并证明了它能够发明更多破绽。 Andrey处置惩罚了运用Syzkaller 对USB举行隐约测试时的两个主要题目:

1.内核使命的代码掩盖率;

2.统一内核映像中的装备模仿。

由于USB事宜和操纵发作在IRQ或内核高低文,而不是历程高低文中(比方,旧内核中的khub内核使命中的USB插进去检测),因而基于体系挪用的跟踪和代码掩盖不起作用。为了能够在内核中的任何位置报告代码掩盖率,我们须要运用扩大的KCOV内核API来解释与USB相干的内核源代码(比方hub.c),以报告代码掩盖率。不过,Syzkaller不运用QEMU,而是运用gadgetfs将隐约测试东西的内核驱动程序暴露给用户空间,然后用户空间能够治理输入内容以举行隐约测试。经过历程在内核设置中启用USB主机协定栈和USB从机协定栈,并运用假造HCD和UDC驱动程序将它们衔接在一起。以下所示,Syakaller能够隐约USB主机装备驱动程序,如USB HID,海量存储等经过历程用户空间对USB隐约测试东西的内核驱动程序举行模仿。

现有USB隐约测试手艺的总结(下)

Syzkaller USB隐约测试东西多是第一个真正的基于掩盖的USB主机装备驱动隐约测试东西,不过这还要归功于现有的Syzkaller基础设施以及对USB主机和从机提议的黑客手艺。如今Syzkaller已被发明了大批的破绽和毛病,它的局限性最先展现,如今发明的大多数题目都在驱动程序的初始化阶段(比方探测)。在用户空间中,隐约测试东西能够经过历程探究USB从机描述符中的差别VID / PID组合,来设置隐约测试东西内核驱动程序,进而示意任何USB从机。一方面,Syzkaller能够触发险些一切USB主机装备驱动程序举行加载,因而代码掩盖功用迥殊壮大。另一方面,由于在用户空间隐约测试东西或隐约测试东西内核驱动程序内没有供应用于特定装备的实在模仿代码,因而大多数隐约测试在驱动程序初始化以后住手,因而仅掩盖驱动程序的一小部份。

最新的USB隐约测试手艺

如上所述,人人能够已注意到,一切这些隐约测试处置惩罚方案都集合在USB主机协定栈上,尤其是USB主机装备驱动程序上。别的,由于人们常常将USB引用到USB主机协定栈,而且这些装备驱动程序因包含比内核中的其他组件(比方Windows上的装备驱动程序)更多的破绽而著名。然则,以上讲的一切USB隐约测试东西所涵盖的部份都异常少。所以将来的USB隐约测试手艺必需处置惩罚这个题目。

以下是现有的5种处置惩罚方案:HCD驱动程序隐约测试、协定指导或状况隐约测试(Protocol-guided/Stateful fuzzing)、Android USB隐约测试、协定指导或状况隐约测试、Type-C/USBIP/WUSB隐约测试,下面我们就来细致相识一下。

HCD驱动程序隐约测试

假如我们老是将自身限定在USB主机协定栈中,那末HCD驱动程序就会被疏忽。与装备驱动程序差别,HCD驱动程序没法经过历程体系挪用在用户空间接见(不过能够运用sysfs调解某些参数)。相反,它们从上层(内部)的USB内核(比方,usb_submit_urb)和HCD层(外部)的DMA吸收输入内容。从平安角度来看,外部输入会比内部输入带来更多的要挟。

要直接对HCD驱动程序的内部输入举行隐约测试,我们须要能够修正暴露给USB内核的内核API的参数,并从HCD驱动程序猎取代码掩盖率。为了直接隐约HCD驱动程序的外部输入,我们须要对DMA缓冲区和事宜队列以及来自HCD驱动程序的代码掩盖率举行修正。请注意,由于TX和RX的代码途径差别,因而在这两种状况下代码掩盖率一般差别。因而,我们须要一个细粒度代码掩盖率报告来反应这一状况。对DMA缓冲区和事宜队列举行修正实际上是在构建具有隐约功用的HCD仿真器,关于诸如Intel XHCI之类的罕见HCD驱动程序,QEMU已供应了响应的HCD模仿(比方qemu / hw / usb / hcd-xhci.c),而且能够尝试在个中增添隐约测试功用。关于QEMU不供应HCD模仿的其他HCD驱动程序,须要从头最先构建HCD模仿。

一款名叫Slither的智能合约静态剖析东西

Slither是第一个开源的针对Solidity语言的静态分析框架。Slither速度非常快,准确性也非常高,它能够在不需要用户交互的情况下,在几秒钟之内找到真正的漏洞。该工具高度可配置,并且提供了多种API来帮助研究人员审计和分析Solidity代码。 最近有人发表了一篇关于Slither的学术论文,其中介绍了关于智能合约静态分析工具的框架。 该论文表明,Slither在检测智能合约漏洞时,其功能优于其他静态分析工具,在速度、检测准确性方面都有着先天优势。Slither包含了一整套针

USB从机协定栈隐约测试

停止如今,我们还没有对USB从机协定栈举行体系的隐约测试。这类做法在过去是没题目的,由于我们常常假定USB从机不会发作歹意进击。但是,在嵌入式体系(比方Android装备)中普遍运用的USB OTG和DRD控制器,已将包含USB从机在内的装备也当作了进击目的。比方,我们如今常常会用USB接口对手机举行充电,而没有人愿望他们的手机在充电时期被黑客进击。在架构上,Syzkaller USB 隐约测试东西设想了一种隐约USB从机协定栈的要领,以下所示:

现有USB隐约测试手艺的总结(下)

用户空间隐约测试东西不会让用户空间隐约测试东西与USB隐约内核驱动程序举行通讯,而是与USB主机装备驱动程序举行通讯。如许,隐约测试东西运动将经过历程USB主机协定栈传播到USB从机协定栈。因而,我们须要设置内核,以便在统一个内核映像中启用一切差别的gadget函数,以及代码掩盖率报告。然后,我们能够模仿USB从机内核和USB从机功用驱动程序(UDC驱动程序除外)。

Linux-USB Gadget 驱动框架(简称 Gadget )完成了 USB 协定定义的装备端的软件功用。相关于 Linux USB 主机驱动而言。Gadget 框架提出了一套规范API, 在底层, USB 装备控制器 (USB Device Controller, UDC) 驱动则完成这一套 API, 差别的 UDC (一般是 SOC 的一部份) 须要差别的驱动, 以至基于一样的 UDC 的差别板子也须要举行代码修正,这一层我们能够称之为平台相干层。

请注意,Syzkaller设想了一种对USB从机协定栈举行隐约测试的要领,这是由于Syzkaller的架构和限定而发生的天然效果。由于Syzkaller是一个体系挪用隐约测试东西,这意味着输入突变发作在体系挪用参数中。但这并不意味着我们必需在体系挪用层(比方用户空间)举行隐约测试。假如再次检察上图,我们能够找到一条从隐约测试东西到隐约测试目的的途径(比方,USB主机装备驱动程序或USB从机驱动程序)。那末,我们怎样才晓得一切隐约输入是不是都被胜利传播到目的而不是被中心层过滤?这就要看基于体系挪用的隐约测试是不是合适内核中的USB隐约测试。一样,Syzkaller USB隐约测试东西能够顺应Syzkaller自身的限定,而不是斟酌从头最先构建USB隐约测试东西(比方,USB主机或从机协定栈)。

所以,收缩隐约测试途径将处置惩罚以上存在的题目。比方,我们能够经过历程在QEMU中构建USB UDC模仿东西/隐约测试东西来挣脱全部USB主机协定栈,直接启用UDC驱动程序隐约测试。然则,这并不意味着任何DMA写入都能够转换为对上层USB从机驱动程序的有用USB要求。因而,收缩隐约测试途径只是临时的处置惩罚办法。所以终究的处置惩罚方案照样经过历程修正算法和代码掩盖粒度。末了,我们能够须要在协定栈中的差别层上运用差别的隐约测试东西,以确保一切隐约输入都被传播到目的中而不举行过滤。比方,我们能够须要构建一个USB主机模仿东西/隐约测试东西,直接向差别的USB从机驱动程序发送USB要求。

Android USB隐约测试

经过历程保护自身的内核分支并完成分外的USB从机功用驱动程序(比方MTP),Android多是USB从机协定栈的主要运用用户。与典范的USB主机比拟,Android装备中的OTG/DRD支撑也使进击面增添了一倍。不过最大的应战是运转一个Android内核映像,个中包含运用QEMU的实在Android装备运用的响应UDC/DRD驱动程序。由于SoC能够自定义,在QEMU中运转非AOSP内核会带来分外的难题。这就是为何很多Android隐约测试仍须要借助物理装备来举行。

协定指导或状况隐约测试

在USB从机协定栈隐约测试中,我们议论了为何我们能够想收缩隐约测试途径,由于我们想要防止隐约输入内容在抵达目的之前被过滤。事实证明,要想完成途径的收缩,历程要比设想的庞杂很多。假如我们再次检察上图(Syzkaller中USB从机隐约测试),则隐约测试东西输入的历程是从体系挪用最先,并在终究传送到USB从机协定栈之前通报差别的USB主机装备驱动程序。虽然隐约途径很长,而且能够在此历程当中过滤隐约输入。但同时,中心的这些分外层保证发出的任何隐约输入都是正当的USB要求,其照顾由准确的驱动程序状况触发的响应协定的有用载荷。比方,隐约测试东西经过USB大容量存储驱动程序天生的终究USB要求能够包含一个正当的SCSI敕令(比方read),该敕令由USB主机装备驱动程序的内核逻辑而不是初始化部份触发。

这就是我称之为“协定指导或状况”的隐约测试。能够看出,在一个层中垂直“深切”是很主要的,比方,在初始化或探测阶段以后探究内核驱动程序的其他部份。简朴地说,要对USB主机或从机驱动程序举行隐约测试,我们须要与目的竖立假造衔接(比方,确保内核驱动程序已初始化并准备好处置惩罚输入内容),并指导隐约测试东西进修输入内容(比方USB大容量存储中的SCSI协定)。末了,在包含其他层以重用现有协定和状况控件之间举行衡量,从而增添隐约途径和庞杂性,并在隐约测试东西中直接完成轻量级协定指导或状况隐约测试,以削减隐约测试途径。

Type-C/USBIP/WUSB隐约测试

除了USB主机和USB从机以外,USB中另有更多东西,包含USB Type-C,USBIP,WUSB等。虽然我们能够重用USB隐约测试中学到的一些经验教训,但这些手艺引入了差别的软件协定栈。 须要差别的注意力来处置惩罚他们的怪癖。

原文地点: https://www.4hou.com/info/news/19413.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明现有USB隐约测试手艺的总结(下)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址