
Simule le chargeur PE de Windows pour identifier les vulnérabilités de détournement de DLL, génère des DLL armées avec des charges utiles shellcode et détecte les contournements de l'élévation automatique de l'UAC.
Siofra est un outil conçu pour identifier et exploiter les vulnérabilités de détournement de DLL dans les programmes Windows. Il est capable de simuler le chargeur Windows afin de donner une visibilité sur toutes les dépendances (et les vulnérabilités correspondantes) d'un PE sur disque, ou alternativement d'une image mémoire correspondant à un processus actif. Plus important encore, l'outil a la capacité de générer facilement des DLL pour exploiter ce type de vulnérabilités via une infection de PE avec création dynamique de shellcode. Ces DLL infectées conservent le code (DllMain, fonctions exportées) ainsi que les ressources d'une DLL pour préserver de manière transparente la fonctionnalité de l'application qui les charge, tout en permettant au chercheur de spécifier une charge utile exécutable à lancer soit comme processus séparé, soit chargée dans la cible comme module. De plus, l'outil contient des méthodes automatisées de combinaison des critères d'auto-élévation UAC avec la fonctionnalité susmentionnée afin de rechercher les vulnérabilités de contournement de l'UAC.
À l'heure actuelle, il existe un très grand nombre de vulnérabilités que cet outil expose. Lors des tests de cet outil, je n'ai rencontré que quelques applications qui n'étaient pas vulnérables parmi des centaines que j'ai testées. Notez que ces vulnérabilités peuvent être exploitées malgré SafeDllSearchMode. Une idée fausse courante résulte de la confusion entre le « répertoire courant » (corrigé avec SafeDllSearchMode) et le « répertoire de l'application » (le dossier contenant le .exe lui-même). La grande majorité des vulnérabilités de détournement de DLL actuellement présentes dans les programmes Windows proviennent du répertoire de l'application (qui vient en premier dans l'ordre de recherche Windows). Quelques points saillants sont énumérés ci-dessous dans la sortie produite par le scanner de l'outil. La dernière fois que ces vulnérabilités ont été testées, c'était à la mi-juillet 2017.
Siofra64.exe --mode file-scan -f "c:\Program Files\Internet Explorer\iexplore.exe" --enum-dependency --dll-hijack
======== c:\Program Files\Internet Explorer\iexplore.exe [64-bit PE] ======== iexplore.exe USER32.dll [KnownDLL] win32u.dll [Base] api-ms-win-core-privateprofile-l1-1-1.dll [API set] kernel32.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] msvcrt.dll [KnownDLL] api-ms-win-downlevel-shell32-l1-1-0.dll [API set] shcore.dll [KnownDLL] RPCRT4.dll [KnownDLL] combase.dll [KnownDLL] bcryptPrimitives.dll [Base] ADVAPI32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] iertutil.dll [!]
[!] Module iertutil.dll vulnérable à c:\Program Files\Internet Explorer\iertutil.dll (chemin réel : C:\WINDOWS\system32\iertutil.dll)
Siofra64.exe --mode file-scan -f "c:\Program Files\Windows Defender\MpCmdRun.exe" --enum-dependency --dll-hijack
======== c:\Program Files\Windows Defender\MpCmdRun.exe [64-bit PE] ======== MpCmdRun.exe msvcrt.dll [KnownDLL] KERNEL32.dll [KnownDLL] OLEAUT32.dll [KnownDLL] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] combase.dll [KnownDLL] RPCRT4.dll [KnownDLL] bcryptPrimitives.dll [Base] ADVAPI32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] OLE32.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] USER32.dll [KnownDLL] win32u.dll [Base] SspiCli.dll [!] mpclient.dll [!] CRYPT32.dll [Base] MSASN1.dll [Base] WINTRUST.dll [Base]
[!] Module SspiCli.dll vulnérable à c:\Program Files\Windows Defender\SspiCli.dll (chemin réel : C:\WINDOWS\system32\SspiCli.dll)
Siofra64.exe --mode file-scan -f "c:\WINDOWS\System32\wbem\wmiprvse.exe" --enum-dependency --dll-hijack
======== c:\WINDOWS\System32\wbem\wmiprvse.exe [64-bit PE] ======== wmiprvse.exe msvcrt.dll [KnownDLL] FastProx.dll [!] wbemcomn.dll [!] bcrypt.dll [!] WS2_32.dll [KnownDLL] api-ms-win-eventing-obsolete-l1-1-0.dll [API set] sechost.dll [KnownDLL] RPCRT4.dll [KnownDLL] api-ms-win-core-heap-obsolete-l1-1-0.dll [API set] kernel32.dll [KnownDLL] NCObjAPI.DLL [!]
[!] Module wbemcomn.dll vulnérable à c:\WINDOWS\System32\wbem\wbemcomn.dll (chemin réel : C:\WINDOWS\system32\wbemcomn.dll) [!] Module bcrypt.dll vulnérable à c:\WINDOWS\System32\wbem\bcrypt.dll (chemin réel : C:\WINDOWS\system32\bcrypt.dll) [!] Module NCObjAPI.DLL vulnérable à c:\WINDOWS\System32\wbem\NCObjAPI.DLL (chemin réel : C:\WINDOWS\system32\NCObjAPI.DLL)
Siofra64.exe --mode file-scan -f "c:\WINDOWS\System32\SearchProtocolHost.exe" --enum-dependency --dll-hijack --explicit-loadlibrary
======== c:\WINDOWS\System32\SearchProtocolHost.exe [64-bit PE] ======== SearchProtocolHost.exe msvcrt.dll [KnownDLL] TQUERY.DLL [!] OLEAUT32.dll [KnownDLL] msvcp_win.dll [Base] api-ms-win-crt-string-l1-1-0.dll [API set] ucrtbase.dll [Base] combase.dll [KnownDLL] RPCRT4.dll [KnownDLL] api-ms-win-core-heap-obsolete-l1-1-0.dll [API set] kernel32.dll [KnownDLL] bcryptPrimitives.dll [Base] cryptdll.dll [!] api-ms-win-security-lsalookup-l2-1-1.dll [API set] advapi32.dll [KnownDLL] api-ms-win-eventing-controller-l1-1-0.dll [API set] sechost.dll [KnownDLL] api-ms-win-shell-namespace-l1-1-0.dll [API set] windows.storage.dll [Base] api-ms-win-shlwapi-winrt-storage-l1-1-1.dll [API set] shlwapi.dll [KnownDLL] GDI32.dll [KnownDLL] api-ms-win-gdi-internal-uap-l1-1-0.dll [API set] gdi32full.dll [Base] USER32.dll [KnownDLL] win32u.dll [Base] api-ms-win-appmodel-state-l1-2-0.dll [API set] kernel.appcore.dll [Base] api-ms-win-shcore-path-l1-1-0.dll [API set] shcore.dll [KnownDLL] api-ms-win-power-base-l1-1-0.dll [API set] powrprof.dll [Base] profapi.dll [Base] msfte.dll [Potential explicit Unicode] [!] msTracer.dll [Potential explicit Unicode] [!] Msidle.dll [Potential explicit Unicode] [!] winhttp.dll [Potential explicit Unicode] [!]
[!] Module msfte.dll vulnérable à C:\WINDOWS\system32\msfte.dll (chemin réel : Inconnu) [!] Module msTracer.dll vulnérable à C:\WINDOWS\system32\msTracer.dll (chemin réel : Inconnu)
Les capacités de cet outil peuvent être divisées en 3 catégories distinctes, chacune correspondant à l'un des modes d'exécution de cet outil.