Door René V: Voor problemen met programma's die ontstaan indien je de veiligste waarde 0xFFFFFFFF gebruikt
maak je zin eens af ;-)
Okay dan: (essentieel om DLL-wormen op USB memory-sticks te voorkomen)
zie http://www.security.nl/artikel/34260/1/Problemen_na_DLL-lek-patch_KB2264107_en_CWDIllegalInDllSearch%3DFFFFFFFF.html.
Da's hetzelfde als er al stond, behalve dan dat er helemaal op het einde van de zin een afsluitende ronde haak te veel stond. Een mooie zin is het niet, maar het was laat...
Overigens heeft Peter V op 1 punt gelijk: ik noem KB2264107 steeds een "patch" maar dat is wellicht een onjuiste benaming: uitsluitend het installeren daarvan verhelpt het probleem niet en ten tweede is er geen sprake van een een buffer overflow o.i.d. in de betrokken bestanden die "gepatched" wordt.
bovendien, als de patch niets doet, wat heeft het dan voor toegevoegde waarde om deze te installeren indien je de aanpassing al in het register maakt. Of betekent het dat juist de patch ervoor zorgt dat je zonder (of iig minder) problemen de register entry aan kan maken?
Nee, zolang KB2264107 niet hebt gedraaid zal ntdll.dll niet zijn vervangen door een nieuwe versie, en alleen die nieuwe versie kijkt naar "CWDIllegalInDllSearch" in het register, en dat doet ie elke keer als je een programma start dat vervolgens 1 of meer DLL's probeert te laden
zonder daarbij een volledig pad te specificeren.
Voorbeeld: Als je Solitaire start (C:\Windows\System32\sol.exe), zal deze "Cards.dll", met daarin bitmaps van speelkaarten, proberen te laden (dus niet expliciet "C:\Windows\System32\Cards.dll"). 1 van de taken van ntdll.dll is om in zo'n situatie Cards.dll te vinden op je systeem, volgens een vaststaand zoekpatroon.
Onder de volgende omstandigheden:
- ofwel KB2264107 is
nog niet geinstalleerd
- ofwel KB2264107 is wel geinstalleerd maar de registervariabele "CWDIllegalInDllSearch" bestaat (nog) niet
- ofwel KB2264107 is wel geinstalleerd, de registervariabele "CWDIllegalInDllSearch" bestaat wel, maar heeft als waarde 0
Dan geldt de volgende zoekvolgorde voor DLL's, uit
http://support.microsoft.com/?scid=kb%3Bnl%3B2264107 (door mij aangevuld met de paden die in default installaties gelden):
1. De map van waaruit de toepassing is geladen (vaak een submap van C:\Program Files\)
2. De systeemmap (meestal C:\Windows\System32\)
3. De 16-bits systeemmap (meestal C:\Windows\System\)
4. De Windows-map (meestal C:\Windows\)
5. De huidige werkmap (CWD, dat staat voor Current Working Directory)
6. De mappen die worden vermeld in de omgevingsvariabele PATH
Let op: update KB2264107 heeft
uitsluitend effect op punt 5, en
alleen als je (met de hand) de registerwaarde "CWDIllegalInDllSearch" aanmaakt en een waarde ongelijk 0 geeft.
De waardes 1 en 2 zijn door Microsoft in het leven geroepen omdat ze bij het testen natuurlijk al hadden ontdekt dat de waarde 0xFFFFFFFF allerlei problemen oplevert (schandalig dat ze trouwens niet zelf gewaarschuwd hebben dat Outlook niet meer werkt na deze update, zouden ze bij Microsoft zelf Thunderbird gebruiken of zo?).
Probleem is dat de waardes 1 en 2 geen bescherming bieden tegen bijv. een besmette USB stick of een door verschillende personen gebruikt werkstation waarbij een kwaadwillende gebruiker "iets achter laat" op een lokale drive voor andere gebruikers, denk daarbij bijv. aan de map All Users\Documents\ (die Explorer overigens meestal als "Shared Documents" laat zien).
In de volgende bijdrage werk ik het voorbeeld van Solitaire verder uit.