TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化( 四 )


本文的概念验证页面只是向nxKey应用程序发送随机生成的许可字符串 。这足以在几秒钟内使应用程序崩溃 。连接调试器显示了内存攻击的明显证据:应用程序崩溃是因为它试图使用虚假内存位置读取或写入数据 。
现代操作系统有一些机制,可以使像这样的缓冲区溢出更难转化为代码执行漏洞 。但这些机制只有在实际使用时才有帮助 。然而,nxKey开发人员在应用程序加载的两个DLL上关闭了地址空间布局随机化,在四个DLL上禁用了数据执行阻止 。
滥用助手应用程序
到目前为止,这一切都是基于网络的攻击 。但是,如果恶意软件应用程序已经将其管理到系统中,并且正在寻找扩展其权限的方法,情况又会如何呢?对于一个旨在帮助对抗此类恶意软件的应用程序,TouchEn nxKey在保持其自身功能方面表现得非常糟糕 。
例如,只要nxKey拦截键盘输入,CKAgentNXE.exe helper应用程序就会启动 。其目的是当nxKey不想处理某个密钥时,确保它被传递到正确的目标应用程序 。主应用程序使用的TKAppm.dll库中的逻辑大致如下:

TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化

文章插图
由于nxKey应用程序是以用户的权限运行的,所以它将在每个合理的设置中运行CKAgentNXE.exe 。助手应用程序在收到命令代码2后,将调用SendInput() 。
研究人员注意到CKAgentNXE.exe为其IPC对象设置了一个安全描述符,以允许从完整性级别为低的进程进行访问 。我还注意到,安装程序在HKEY_LOCAL_macHINESOFTWAREMicrosoftInte.NET ExplorerLow RightsElevationPolicy下创建注册表项,以允许自动提升CKAgentNXE.exe 。这就是它点击的位置,这都是因为Internet Explorer沙盒 。
因此,当TouchEn Key在Internet Explorer中作为ActiveX运行时,其完整性级别为Low 。以这种方式被沙盒有效地使得无法使用SendInput() 。通过允许从Internet Explorer沙箱中运行和自动提升CKAgentNXE.exe,可以绕过这个限制 。一旦helper应用程序开始运行,沙盒ActiveX控件就可以连接到它并要求它执行某些操作,比如调用SendInput() 。
除了Internet Explorer,这种方法没有任何意义,然而TouchEn nxKey也将某些任务委托给CKAgentNXE.exe,这无疑会对安全产生影响 。
假设我们有一个恶意软件,运行在完整性级别低 。它很可能是通过利用浏览器漏洞到达那里的,但现在它被困在了那个沙箱中 。唯一能做的就是等待CKAgentNXE.exe启动(迟早会发生)并使用它来发起攻击 。
本文的概念验证应用程序要求CKAgentNXE.exe为它生成虚假的键盘输入:Win键,然后是C、M、D和Enter键 。这导致打开一个命令行提示符,该提示符以中等完整性级别(默认级别)运行 。然后,真正恶意的应用程序可以输入任意命令,在沙盒外运行代码 。
并不是说一个真正恶意的应用程序会以这种可见的方式做事 。CKAgentNXE.exe还接受命令代码5,例如,它将把任意DLL加载到任何进程中 。这是一种更好的感染系统的方法 。
至少这一次,一个强制性安全应用程序决定让自己变得有用,并标记为威胁:
TouchEn nxKey键盘加密应用程序出现的许多漏洞很容易使其被黑化

文章插图
恶意软件开发者可能会找出触发此警告的原因并绕过它 。或者他们可以启动一个web套接字连接,以确保CKAgentNXE.exe启动,而不需要像真正的银行网站那样激活AhnLab应用程序 。当用户点击删除恶意应用程序时,为时已晚,攻击已经成功 。
直接访问驱动程序的键盘记录功能
如上所述,TouchEn nxKey应用程序(它从驱动程序接收的加密键盘输入)以用户权限运行,它不是一个高级应用程序,它没有特殊权限,也就无法限制对驱动程序功能的访问 。系统上的任何应用程序都可以访问这个功能 。它只需要知道nxKey如何与它的驱动程序通信,但这个通信协议并不复杂 。
TKAppm.dll是执行驱动程序通信的库,它使用Themida进行了模糊处理,Themida背后的供应商承诺:Themida®使用SecureEngine®保护技术,当以最高优先级运行时,该技术实施了前所未有的保护技术,以保护应用程序免受高级软件破解 。
也许nxKey开发人员认为这将提供足够的保护,防止逆向工程 。然而,在运行时连接调试器允许保存已解密的TKAppm.dll内存,并将结果加载到Ghidra中进行分析 。


推荐阅读