• 工具 | Windows 功能猎手 (WFH)


    前言

    项目地址: https://github.com/ConsciousHacker/WFH

    Windows Feature Hunter (WFH) 是一个概念验证 python 脚本,它使用动态检测工具包Frida来帮助潜在地识别 Windows 可执行文件中的常见“漏洞”或“功能”。WFH 目前能够大规模自动识别潜在的动态链接库 (DLL) 侧载和组件对象模型 (COM) 劫持机会。

    DLL 旁加载利用 Windows 并排 (WinSXS) 程序集从并排 (SXS) 列表中加载恶意 DLL。COM 劫持允许攻击者通过劫持 COM 引用和关系插入可以代替合法软件执行的恶意代码。WFH 将打印潜在漏洞并写入包含目标 Windows 可执行文件中潜在漏洞的 CSV 文件。

    目录

    • Windows 功能猎手 (WFH)

      • 本机 Windows 签名二进制文件

      • WFH DLL 侧载识别

      • WFH COM劫持识别

      • WFH 安装

      • WFH 帮助

      • WFH 用法

      • WFH 用例

    • Windows 功能猎人 Dridex (WFH Dridex)

      • WFH 与 WFH Dridex 结果

      • WFH Dridex DLL 侧载识别

      • WFH Dridex 安装

      • WFH Dridex 依赖项

      • WFH Dridex 用法

      • 来自 System32 的 WFH Dridex DLL 侧载

    • HijackLibs 贡献

    WFH 安装

    pip install -r requirements.txt
    

    WFH 帮助

    1. PS C:\Tools\WFH > python .\wfh.py -h
    2. usage: wfh.py [-h] -t T [T ...] -m {dll,com} [-v] [-timeout TIMEOUT]
    3. Windows Feature Hunter
    4. optional arguments:
    5.   -h, --help            show this help message and exit
    6.   -t T [T ...], -targets T [T ...]
    7.                         list of target windows executables
    8.   -m {dll,com}, -mode {dll,com}
    9.                         vulnerabilities to potentially identify
    10.   -v, -verbose          verbose output from Frida instrumentation
    11.   -timeout TIMEOUT      timeout value for Frida instrumentation
    12. EXAMPLE USAGE
    13.     NOTE: It is recommended to copy target binaries to the same directory as wfh for identifying DLL Sideloading
    14.     DLL Sideloading Identification (Single):        python wfh.py -t .\mspaint.exe -m dll
    15.     DLL Sideloading Identification (Verbose):       python wfh.py -t .\mspaint.exe -m dll -v
    16.     DLL Sideloading Identification (Timeout 30s):   python wfh.py -t .\mspaint.exe -m dll -timeout 30
    17.     DLL Sideloading Identification (Wildcard):      python wfh.py -t * -m dll
    18.     DLL Sideloading Identification (List):          python wfh.py -t .\mspaint.exe .\charmap.exe -m dll
    19.     COM Hijacking Identification (Single):          python wfh.py -t "C:\Program Files\Internet Explorer\iexplore.exe" -m com
    20.     COM Hijacking Identification (Verbose):         python wfh.py -t "C:\Program Files\Internet Explorer\iexplore.exe" -m com -v
    21.     COM Hijacking Identification (Timeout 60s):     python wfh.py -t "C:\Program Files\Internet Explorer\iexplore.exe" -m com -timeout 60
    22.     COM Hijacking Identification (Wildcard):        python wfh.py -t * -m com -v
    23.     COM Hijacking Identification (List):            python wfh.py -t "C:\Program Files\Internet Explorer\iexplore.exe" "C:\Windows\System32\notepad.exe" -m com -v

    WFH 用法

    WFH DLL 侧载识别

    首先,您需要将要分析的二进制文件复制到与 WFH 相同的目录中

    1. PS C:\Tools\WFH > copy C:\Windows\System32\mspaint.exe .
    2. PS C:\Tools\WFH > copy C:\Windows\System32\charmap.exe .
    3. PS C:\Tools\WFH > dir
    4.     Directory: C:\Tools\WFH
    5. Mode                 LastWriteTime         Length Name
    6. ----                 -------------         ------ ----
    7. d-----         5/14/2021   2:12 PM                .vscode
    8. -a----          5/6/2021   2:39 PM           1928 .gitignore
    9. -a----         12/7/2019   2:09 AM         198656 charmap.exe
    10. -a----         5/18/2021   7:39 AM           6603 loadlibrary.js
    11. -a----          4/7/2021  12:48 PM         988160 mspaint.exe
    12. -a----         5/18/2021   7:53 AM           8705 README.md
    13. -a----         5/17/2021  11:27 AM           5948 registry.js
    14. -a----          5/6/2021   2:41 PM             11 requirements.txt
    15. -a----         5/18/2021   8:35 AM          10623 wfh.py

    现在您可以针对二进制文件运行 wfh 来识别 dll 侧载机会

    1. PS C:\Tools\WFH > python .\wfh.py -t * -m dll
    2. ==================================================
    3. Running Frida against charmap.exe
    4. --------------------------------------------------
    5.         [+] Potential DllMain Sideloading: LoadLibraryW,LPCWSTR: MSFTEDIT.DLL
    6.         [+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE
    7. [*] Writing raw Frida instrumentation to charmap.exe-raw.log
    8. [*] Writing Potential DLL Sideloading to charmap.exe-sideload.log
    9. --------------------------------------------------
    10. ==================================================
    11. Running Frida against mspaint.exe
    12. --------------------------------------------------
    13.         [+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : gdiplus.dll, dwFlags : NONE
    14.         [-] Potential DllExport Sideloading: GetProcAddress,hModule : C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.789_none_faf0a7e97612e7bb\gdiplus.dll, LPCSTR: GdiplusStartup
    15.         [+] Potential DllMain Sideloading: LoadLibraryW,LPCWSTR: MSFTEDIT.DLL
    16.         [+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE
    17. [*] Writing raw Frida instrumentation to mspaint.exe-raw.log
    18. [*] Writing Potential DLL Sideloading to mspaint.exe-sideload.log
    19. --------------------------------------------------
    20. ==================================================
    21. [*] Writing dll results to dll_results.csv
    22. PS C:\Tools\WFH > type .\dll_results.csv
    23. Executable,WinAPI,DLL,EntryPoint / WinAPI Args
    24. charmap.exe,LoadLibraryW,LPCWSTR: MSFTEDIT.DLL
    25. charmap.exe,LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE
    26. mspaint.exe,LoadLibraryExW,LPCWSTR : gdiplus.dll, dwFlags : NONE
    27. mspaint.exe,GetProcAddress,hModule : C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.789_none_faf0a7e97612e7bb\gdiplus.dll, LPCSTR: GdiplusStartup
    28. mspaint.exe,LoadLibraryW,LPCWSTR: MSFTEDIT.DLL
    29. mspaint.exe,LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE

    如果您喜欢更详细的输出,可以使用“-v”查看来自 Frida 检测 Windows API 调用的每条消息。您还可以在原始日志文件中查看此输出。

    1. PS C:\Tools\WFH > python .\wfh.py -t * -m dll -v
    2. ==================================================
    3. Running Frida against charmap.exe
    4. {'type''send''payload''LoadLibraryW,LPCWSTR: MSFTEDIT.DLL'}
    5. {'type''send''payload''LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE'}
    6. --------------------------------------------------
    7.         [+] Potential DllMain Sideloading: LoadLibraryW,LPCWSTR: MSFTEDIT.DLL
    8.         [+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE
    9. [*] Writing raw Frida instrumentation to charmap.exe-raw.log
    10. [*] Writing Potential DLL Sideloading to charmap.exe-sideload.log
    11. --------------------------------------------------
    12. ==================================================
    13. Running Frida against mspaint.exe
    14. {'type''send''payload''LoadLibraryExW,LPCWSTR : gdiplus.dll, dwFlags : NONE'}
    15. {'type''send''payload''GetProcAddress,hModule : C:\\WINDOWS\\WinSxS\\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.789_none_faf0a7e97612e7bb\\gdiplus.dll, LPCSTR: GdiplusStartup'}
    16. {'type''send''payload''LoadLibraryW,LPCWSTR: MSFTEDIT.DLL'}
    17. {'type''send''payload''LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE'}
    18. --------------------------------------------------
    19.         [+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : gdiplus.dll, dwFlags : NONE
    20.         [-] Potential DllExport Sideloading: GetProcAddress,hModule : C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.789_none_faf0a7e97612e7bb\gdiplus.dll, LPCSTR: GdiplusStartup
    21.         [+] Potential DllMain Sideloading: LoadLibraryW,LPCWSTR: MSFTEDIT.DLL
    22.         [+] Potential DllMain Sideloading: LoadLibraryExW,LPCWSTR : MSFTEDIT.DLL, dwFlags : NONE
    23. [*] Writing raw Frida instrumentation to mspaint.exe-raw.log
    24. [*] Writing Potential DLL Sideloading to mspaint.exe-sideload.log
    25. --------------------------------------------------
    26. ==================================================
    27. [*] Writing dll results to dll_results.csv

    WFH COM劫持识别

    1. PS C:\Tools\WFH > python .\wfh.py -t "C:\Program Files\Internet Explorer\iexplore.exe" -m com
    2. ==================================================
    3. Running Frida against C:\Program Files\Internet Explorer\iexplore.exe
    4. --------------------------------------------------
    5.         [+] Potential COM Hijack: Path : HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{0E5AAE11-A475-4C5B-AB00-C66DE400274E}\InProcServer32,lpValueName : null,Type : REG_EXPAND_SZ, Value : %SystemRoot%\system32\Windows.Storage.dll
    6.         [+] Potential COM Hijack: Path : HKEY_CLASSES_ROOT\CLSID\{1FD49718-1D00-4B19-AF5F-070AF6D5D54C}\InProcServer32,lpValueName : null,Type : REG_SZ, Value : C:\Program Files (x86)\Microsoft\Edge\Application\90.0.818.62\BHO\ie_to_edge_bho_64.dll
    7. [*] Writing raw Frida instrumentation to .\iexplore.exe-raw.log
    8. [*] Writing Potential COM Hijack to .\iexplore.exe-comhijack.log
    9. --------------------------------------------------
    10. ==================================================
    11. [*] Writing dll results to comhijack_results.csv

    WFH 用例

    本机 Windows 签名二进制文件

    将所有本机 Windows 签名的二进制文件复制到 wfh 目录

    Get-ChildItem c:\ -File | ForEach-Object { if($_ -match '.+?exe$') {Get-AuthenticodeSignature $_.fullname} } | where {$_.IsOSBinary} | ForEach-Object {Copy-Item $_.path . }
    

    寻找 DLL 侧载机会

    python wfh.py -t * -m dll
    

    寻找 COM 劫持机会

    python wfh.py -t * -m com
    

    Windows 功能猎人 Dridex (WFH Dridex)

    Windows Feature Hunter Dridex (WFH Dridex) 是受Dridex loader启发的概念验证 python 脚本。WFH Dridex 分析目标可执行文件的导入地址表 (IAT),为可执行文件的 IAT 中的每个条目编译一个 DLL,并验证是否识别了 DLL 旁加载。

    最初的 WFH 版本确定了大约 96 个潜在的 DLL 侧载机会。WFH Dridex 确定了大约 966 个经过验证的 DLL 侧载机会。

    WFH Dridex 安装

    pip install -r requirements.txt
    

    WFH Dridex 依赖项

    MingW G++(64 位)

    g++.exe安装后必须将其添加到 PATH 环境变量中,WFH Dridex 才能正常运行。

    WFH Dridex 用法

    WFH Dridex DLL 侧载识别

    首先,您需要将要分析的二进制文件复制到与 WFH Dridex 相同的目录中

    1. ❯ cp C:\Windows\System32\mspaint.exe .
    2. ❯ cp C:\Windows\System32\charmap.exe .
    3. ❯ python .\wfh_dridex.py
    4. [*] Creating a payload for charmap.exe with GetUName.dll
    5.     |_ Compiling with: g++.exe -s -Os -static -shared -fpermissive -oGetUName.dll dllmain.c
    6.     |_ Testing charmap.exe with GetUName.dll for DLL sideloading opportunity
    7.     |_ PID: 8936
    8. [>] Listing working DLL sideloads
    9.     |_ charmap.exe GetUName.dll
    10. [*] Creating a payload for mspaint.exe with MFC42u.dll
    11.     |_ Compiling with: g++.exe -s -Os -static -shared -fpermissive testaroo.def -oMFC42u.dll dllmain.c
    12.     |_ Testing mspaint.exe with MFC42u.dll for DLL sideloading opportunity
    13.     |_ PID: 9472
    14. [*] Creating a payload for mspaint.exe with PROPSYS.dll
    15.     |_ Compiling with: g++.exe -s -Os -static -shared -fpermissive -oPROPSYS.dll dllmain.c
    16.     |_ Testing mspaint.exe with PROPSYS.dll for DLL sideloading opportunity
    17.     |_ PID: 11308
    18. [*] Creating a payload for mspaint.exe with WINMM.dll
    19.     |_ Compiling with: g++.exe -s -Os -static -shared -fpermissive -oWINMM.dll dllmain.c
    20.     |_ Testing mspaint.exe with WINMM.dll for DLL sideloading opportunity
    21.     |_ PID: 180
    22. [>] Listing working DLL sideloads
    23.     |_ mspaint.exe MFC42u.dll
    24.     |_ mspaint.exe PROPSYS.dll
    25.     |_ mspaint.exe WINMM.dll

    现在您可以针对二进制文件运行 WFH Dridex 来识别 DLL 侧载机会

    1. ❯ gc .\results.csv
    2. Executable,DllName
    3. charmap.exe,GetUName.dll
    4. mspaint.exe,MFC42u.dll
    5. mspaint.exe,PROPSYS.dll
    6. mspaint.exe,WINMM.dll

    来自 System32 的 WFH Dridex DLL 侧载

    C:\Windows\System32可以在此处查看来自 WFH Dridex 的示例 CSV 输出。

    WFH 与 WFH Dridex 结果

    最初的 WFH 版本确定了大约 96 个潜在的 DLL 侧载机会。WFH Dridex 确定了大约 966 个经过验证的 DLL 侧载机会。

    HijackLibs 贡献

    作为 WFH Dridex 版本的一部分,向Wietze 的HijackLibs项目提交了一个拉取请求,其中包括该项目的 507 个新条目。

    译文申明

    • 文章来源为近期阅读文章,质量尚可的,大部分较新,但也可能有老文章。

    • 开卷有益,不求甚解,不需面面俱到,能学到一个小技巧就赚了。

    • 译文仅供参考,具体内容表达以及含义, 以原文为准 (译文来自自动翻译)

    • 如英文不错的,尽量阅读原文。(点击原文跳转)

    • 每日早读基本自动化发布(不定期删除),这是一项测试

       

  • 相关阅读:
    c++视觉处理----分水岭算法
    【Nginx】nginx隐藏版本号
    感受 OpenDNS
    图像质量指标:PSNR、SSIM、MSE
    【实践篇MySQL执行计划详解
    Sentinel 流量控制框架
    编译原理—计算三地址码、布尔语句翻译
    点云数据集ShapeNet
    什么是拦截器?拦截器如何配置?
    再谈基于Ocelot API网关和IdentityServer的API认证与授权
  • 原文地址:https://blog.csdn.net/biyusr/article/details/126785906