Ik ben nog druk aan het onderzoeken, maar vond een interessante optie (bron:
http://www.howtofixcomputers.com/forums/xp-networking/prevent-windows-explorer-dll-searching-unc-home-folder-220406.html) die ik meteen wil noemen!
In
http://support.microsoft.com/kb/905890 beschrijft Microsoft een
optionele registerwaarde (deze bestaat niet op m'n XPSP3 systeem):
Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
Value:
SafeProcessSearchMode = 1 (type REG_DWORD)
Microsoft in KB905890When the value of this registry entry is set to "1," the computer first searches the folders that are specified in the system path, and then searches the current working folder.
In KB905890 stelt Microsoft dat je voor W2K3 en XP een
hotfix nodig hebt om SafeProcessSearchMode te ondersteunen (onder XP SP2 zou het alleen om Kernel32.dll gaan, zie de webpage welke DLL's het voor W2K3 betreft).
Echter ik heb op m'n XPSP3 een Kernel32.dll van veel latere datum dan 17-Dec-2005, daarin kan ik de (Unicode) tekst "SafeProcessSearchMode" terugvinden! Het is gebruikelijk dat hotfixes uiteindelijk in servicepacks (en latere patches) worden meegenomen, zeker als het om optionele registerwaarden gaat kan dit natuurlijk nooit kwaad.
Update 2010-09-12 23:56 - Voorlopige resultaten (XPSP3) van m'n onderzoek naar SafeProcessSearchMode=1(1) In tegenstelling tot wat
http://support.microsoft.com/kb/905890 doet vermoeden aan de hand van de opmerking "A program that does not have a Start in property searches for DLL files in the current working folder first, and then the folders that are specified in the system path" heeft deze registerwaarde (in elk geval onder XPSP3)
geen effect op de zoekvolgorde van DLL's.
(2) De claim in
http://support.microsoft.com/kb/905890 "When the value of this registry entry is set to "1," the computer first searches the folders that are specified
in the system path, and then searches the current working folder" is geheel onjuist (PATH komt
altijd op de laatste plaats).
Ik heb de invloed van SafeProcessSearchMode=1 op de WinAPI calls "CreateProcess" en "ShellExecute" onderzocht. Terwijl ik Process Monitor van SysInternals laat draaien probeer ik een niet bestaand programma "pipo.exe" op te starten (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\pipo.exe bestaat ook niet). Resultaten:
CreateProcess: hier heeft SafeProcessSearchMode=1
wel invloed op, de zoekvolgorde wordt:
1. Application directory
2. C:\Windows\System32\
3. C:\Windows\System\
4. C:\Windows\
5. CWD
6. PATH
LET OP: er lijkt NIET in App Paths (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\pipo.exe) te worden gezocht!
ShellExecute: hier heeft SafeProcessSearchMode=1
geen invloed op, de zoekvolgorde blijft:
1. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\pipo.exe
2. CWD
3. C:\Windows\System32\
4. C:\Windows\System\
5. C:\Windows\
6. PATH
LET OP: er wordt NIET in de Application Directory gezocht!
CMD.EXE lijkt geen van de standaard WinAPI calls te gebruiken en zoekt als volgt als ik
pipo.exe + enter intik:
1. CWD (dat is de drive en map waar de "commandprompt" actief is)
2. PATH
3. Melding dat pipo.exe niet gevonden is
LET OP: ook "App Paths" lijkt hierbij te worden genegeerd! CMD lijkt hier het klassieke DOS (of zelfs CP/M ;) gedrag te vertonen. Zoals in
http://blog.acrossecurity.com/2010/09/binary-planting-goes-exe.html staat aangegeven is dat vermoedelijk nooit gewijzigd om bergen bestaande batchfiles niet te slopen. Gewone gebruikers zullen CMD.EXE natuurlijk zelden of nooit gebruiken; de "DOT-issue" is echter des te gevaarlijker voor admins die in user-writable directories onbedoeld een trojan starten!
Explorer.exe lijkt gebruik te maken van ShellExecute voor het starten van processen. SafeProcessSearchMode lijkt hier dan ook geen enkele invloed op te hebben. Echter door het zetten van "App Paths" lijken mogelijke exploits wel te kunnen worden voorkomen.
Voorlopige conclusie: zolang er geen fix verschijnt van Microsoft vermoed ik dat PC's redelijk beschermd kunnen worden tegen EXE-hijacking attacks door SafeProcessSearchMode=1 te zetten, en door gangbare executables die, zonder absolute pad-aanduiding, vanuit andere processen (waaronder Explorer dus je desktop) worden gestart, zoveel mogelijk App Paths entries aan te maken (welke precies is een ander verhaal). Duidelijk is dat dit een ingewikkeld probleem is...