极客DIY实例自动按YubiKeys虫

极客精神的第一法则是遇到问题自己解决,不管硬件还是软件都要自己动手DIY来解决问题。很多人可能对这个可能有些好奇,实际上这也是一个平常探索的过程。今天我们就通过一个实例来学习该过程——打造一个自动按YubiKeys机。

缘起

从事技术工作的小伙伴们可能很多人都知道YubiKey,比如下面的这个YubiKey5CNano。

YubiKeys主要用来充当两因素身份验证。在以前的文章中,虫虫曾经介绍过用YubiKeys来认证以及SSH登陆的文章。这Web双因子认证过程中使用用户名和密码登录到系统后,系统还需要以额外的第二种方式进行授权。这样,如果账号密码泄露,攻击者也将无法得到第二种身份验证形式,这样防止账号被盗保障安全。两因子验证有多种形式一种常见的形式是网站会要求使用手机上的谷歌Authenticator应用程序(或类似程序,比如FreeOTP)扫描QR码,该代码会生成6位数字的验证码。服务器和应用程序都有一个共享的机密。手机会根据密钥和当前时间戳生成代码,服务器会生成相同的代码并验证两者是否匹配。

还有基于短信的的双因子认证:服务器会生成一个代码,并通过短信将其发送到的手机。由于存在SIM劫持的攻击,诱骗手机运营商将号码移植到新的SIM卡上,从而可以所有SMS流量引向他们的手。所以被认为是不太安全的双因子认证方式。

YubiKeys是插入计算机USB端口并模拟键盘的小型设备。轻按后,它们会发出一次性密码(OTP),然后可以由验证服务器进行验证。YubiKeys上保存着用于签名信息的私钥,而且该私钥无法被复制和窃取,所以保证了安全。

本案例中,Bertrand使用的YubiKey始终插在笔记本电脑上,所以,不论将笔记本电脑从办公桌上带到会议室或其他办公室,保证就始终可用。但是他的笔记本不打算移动使用,并且还外部显示器并节省了一些桌面空间,笔记本翻盖垂直放置在架子上。这样一来,按下YubiKey会非常麻烦而且触发率不高。

由于YubiKey5CNano的触发目标区域非常小,如下面的黄色线部分。

YubiKey的功能之一是,黄色小金属条防止由于将笔记本电脑撞到某物而意外触发它,尝试触发它的5次中有1次。确保不能从计算机本身的软件触发YubiKey的想法已经很多。

如果远程攻击者要破坏的笔记本电脑,则可以从计算机上的软件触发YubiKey,这将使无法使用YubiKey。但是在安全性和便利性之间进行权衡:例如,通常不必在每次访问系统时都输入YubiKey,某些系统只会询问一次,而在以后的某个登录中不再询问多少时间。

Bertrand本次Hack的目标是是如何使用软件自动触发YubiKey——Finger。

硬件设计

首先,需要某种方式让计算机与TheFinger对话。有一堆这些IZOKEED1Mini开发板,它们是使用许多IoT设备中ESP芯片的较小版本的板。

可以将其连接到笔记本电脑并通过USB串行与之对话,但是由于它具有WiFi,也可以在其上运行网络服务器并发送HTTP请求。

接下来,需要一些方法将Finger推向Yubikey。Bertrand谷歌后,发现了28BYJ-48步进电机可以与D1Mini板配合使用。

步进电机将电脉冲转换为机械旋转,而D1Mini具有用于发送电脉冲的引脚。

但是步进电机会旋转,通常只需要沿直线方向戳一下即可。因此搜索了28BYJ-48,发现了这一点:28BYJ-48MotorHalter。

这将齿轮连接到电动机,该齿轮可以前后引导长齿条。要向YubiKey推一个长的塑料东西,它看起来就像一根手指。在Fusion中打开了这两个模型,并使用了一种称为smooshing的高级CAD技术,结果就是:

接下来,导出了污损的STL,并在PrusamentPLALipstickRed将其用3D打印出来了。然后,用塑料手指触摸了YubiKey,结果没有按照预期成功触发工作。但是用桌上的金属螺丝测试,可以成功触发YubiKey,立即发出OTP。

知道原因后Bertrand对该塑料Fingle进行了改造:用虎钳将其固定在办公桌上,并在其中钻了一个小孔,然后将金属螺钉拧入其中,然后将其与YubiKey碰触,结果还是不行!

后来他发现将金属螺钉触摸到Yubikey时,它只是将电荷从身体传输到金属螺钉,然后将其传输到YubiKey上的电容式触摸传感器。那么,如何欺骗电容式触摸传感器以为它是真正的手指呢?

据猜想电容式触摸传感器的工作方式是它们通过测量人体对地面的电容,因此,如果直接将传感器连接到地面,它会认为其真正导电或至少对人体足够导电手指要介于两者之间。因此,拿了一根绝缘电线,稍微拧开金属螺钉,将其缠绕在螺钉上,然后再次拧紧。然后,将另一端连接到D1Mini板上的GND端口,将其触摸到YubiKey,然后它起作用了!

现在,步进电机的驱动器板已经连接到D1Mini上的5V和GND,所以可能需要剥开GND线,然后将其同时连接到驱动器板和螺钉上。后来将金属丝的一端从步进电机的金属本体(假设金属本体的外壳已接地)和塑料外壳之间的金属螺钉上楔入即可。

一旦确认手指会触发YubiKey,就需要一种将YubiKey安装在手指附近的方法,因此使用了数字卡尺来测量USB-C扩展电缆的尺寸,并在Fusion中设计了一个支架。

USB-C扩展电缆将插入左侧的孔中,而电动机将安装在右侧。

此时,必须将步进电机驱动器板连接到D1Mini。这可以通过将一些接头焊接到D1Mini上,然后在它们之间连接一些跨接线来完成。

将步进电机放入外壳并将所有零件拧在一起后:

软件设计

该系统软件部分更加简单。可以使用ArduinoIDE对D1Mini进行编程。首先,进入首选项,然后package_esp


转载请注明:http://www.aierlanlan.com/rzdk/4664.html