Google开源的BadUSB防御工具
由于按键注入工具(BadUSB)的实用性和低价格,USB按键注入攻击长期以来一直是一个不可忽视的安全问题。这类攻击能在人类眨眼之间内运行恶意命令,只要配合少许社会工程学,受害者实际上是完全意识不到攻击的发生。这类技术最初的目的是为了简化系统管理员的任务,但攻击者却将其用于恶意目的,破坏他人的系统。以下是一个攻击的例子,只需简单的payload即可完成(https://github.com/google/ukip):
视频地址:https://youtu.be/QfXcTwKHzNg
为了拦截这类攻击,我们开发出了一种工具,它可以监测按键输入的时间,并根据预定义的启发程序判断它是否是恶意攻击(不需要用户参与决策)。与上面成功的“攻击”视频相比,下面展示在相同的payload下,防御系统是如何工作的(在命令注入到一半时,后续动作被拦截):
视频地址:https://youtu.be/J0LSWsPHyJY
运行模式
该工具提供两种不同的操作模式:MONITOR
和HARDENING
。当它在监控模式下运行时,它不会拦截被识别为恶意设备的动作,但会向syslog
写入该设备的日志信息。如果它以强化模式运行,就会立即阻止被归类为恶意/攻击的设备。该工具默认是在强化模式下运行。
细节
如果该工具在监视模式下运行,它就会将信息记录到syslog
。你可以通过以下命令简单地读取日志数据:
journalctl -u ukip.service
日志更重要意义在于,如果将它部署到网络中的大量机器上,那么将每个syslog收集到一处进行研究是有很有意义的。
启发式
使用该工具时的一个挑战是如何正确选择两个主要的控制变量:KEYSTROKE_WINDOW
和ABNORMAL_TYPING
,这两个变量控制着该工具的行为及其检测能力。第一个是设定监测的击键次数,以确定它是否为恶意攻击。数字越低,阴性概率越高。如果数字为2,则该工具仅通过1个间隔时间(两次击键之间的时间)来判断是否为攻击。由于不少用户打字时某一刻都会同时按下两个键,这就导致误判概率大大增加。
根据我们的内部观察,5是一个比较合理的值,但也应根据不同的用户以及实践经验和行为进行调整。第二个变量代表多长的按键间隔应被归类为恶意。更长的间隔会出现更多的误报(正常的打字速度也会被归类为恶意),而较低的数字同样也会出现误报(即使是非常快的打字速度也会被归类为正常)。虽然工具在初始安装后预设了一个安全默认值50000,但是使用者应该根据用户的实际打字速度设置合适的阈值。这主要可以通过两种方式实现:1.通过使用各种工具计算打字速度;2.使用监控模式运行几天(或者几周),根据记录逐步提高正确率。
运行
Github上的README包含一个详细的指南,如何设置该工具,如何将该工具作为systemd daemon运行,如何在重新启动时自动运行。随着时间的推移,你可能需要修改该工具的变量,这时只需调整/usr/sbin/ukip
中的值,并重新启动守护进程:
sudo systemctl restart ukip.service
后续
需要说明的是,该工具并不是针对BadUSB攻击的灵丹妙药,因为攻击者如果可以接触受害者的机器,那这本身就是一件非常危险的事,也许会有更糟糕的事情发生。该工具只是能辅助防护短暂离开电脑而又忘记锁屏的用户,他们或许可以根据日志记录对某些恶意行为进行溯源。而且BadUSB攻击很难预防的原因之一是因为它们是通过USB(全球最广泛的计算机外围设备)进行的,日常的工作交流中离不开它。
该工具可以与其他Linux安全工具(如USBGuard之类的开源项目)相互补充,从而使攻击更难成功(该工具可定义可插入机器的设备以及USB生效的场景)。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://opensource.googleblog.com/2020/03/usb-keystroke-injection-protection.html
最新评论