火绒安全软件

标题: [翻译]规避技术:用户界面伪装 [打印本页]

作者: 梦幻的彼岸    时间: 2021-5-20 10:48
标题: [翻译]规避技术:用户界面伪装
本帖最后由 梦幻的彼岸 于 2021-5-20 10:54 编辑

备注
原文地址:https://evasions.checkpoint.com/techniques/ui-artifacts.html
原文标题:Evasions: UI artifacts
更新日期:2021年5月20日
此文后期:根据自身所学进行内容扩充
因自身技术有限,只能尽自身所能翻译国外技术文章,供大家学习,若有不当或可完善的地方,希望可以指出,用于共同完善这篇文章。

目录

用户界面伪装检测方法
这一组描述的技术滥用了这样一个事实:一些窗口的名称只存在于虚拟环境中,而不是通常的主机操作系统。此外,主机操作系统包含大量的窗口,而虚拟机和沙盒则倾向于将打开的窗口保持在最低水平。它们的数量被检查出来,并得出结论,这是否是一个虚拟机。
1.检查操作系统中是否存在具有特定类名的窗口
检测表
检查操作系统中是否存在具有以下类别名称的窗口:
检测
类别名称
VirtualBox
VBoxTrayToolWndClass
VBoxTrayToolWnd

代码样本
  1. BOOL vbox_window_class()
  2. {
  3.   HWND hClass = FindWindow(_T("VBoxTrayToolWndClass"), NULL);
  4.   HWND hWindow = FindWindow(NULL, _T("VBoxTrayToolWnd"));

  5.   if (hClass || hWindow)
  6.     return TRUE;
  7.   else
  8.     return FALSE;
  9. }
复制代码

该代码样本的作者:al-khaser project
2.检查顶层窗口数量是否过少
如上所述,主机操作系统包含大量的窗口,而虚拟机和沙盒则努力将打开的窗口保持在可能的最低限度。窗口数量被测量,并得出结论,这是否是一个虚拟机。
如果操作系统中的窗口太少,这可能是虚拟环境的一个迹象。常规的主机有很多(>10)顶级窗口。
代码样本
  1. BOOL CALLBACK enumProc(HWND, LPARAM lParam)
  2. {
  3.     if (LPDWORD pCnt = reinterpret_cast<LPDWORD>(lParam))
  4.         *pCnt++;
  5.     return TRUE;
  6. }

  7. bool enumWindowsCheck(bool& detected)
  8. {
  9.     DWORD winCnt = 0;

  10.     if (!EnumWindows(enumProc,LPARAM(&winCnt))) {
  11.         std::cerr << "EnumWindows() failed\n";
  12.         return false;
  13.     }

  14.     return winCnt < 10;
  15. }
复制代码

识别标志
没有为这个规避技术提供识别标志,因为很难说代码的目的是执行某种规避技术而不是 "合法 "行动。
反制措施

归功于
归功于开源项目,代码样本来自该项目:
尽管Check Point工具InviZzzible已经实现了所有这些功能,但由于代码的模块化结构,需要更多的空间来展示这个工具的代码样本,以达到相同的目的。这就是为什么我们决定在整个百科全书中使用其他伟大的开源项目作为例子。




欢迎光临 火绒安全软件 (https://bbs.huorong.cn/) Powered by Discuz! X3.4