Security Advisory 2269637 - DLL-kirjastojen lataaminen
Microsoft on viime yönä julkaissut uuden Security Advisoryn numeroltaan 2269637 ja otsikoltaan Insecure Library Loading Could Allow Remote Code Execution. Advisory koskee Windows-sovelluksia ja sovellusten tarvitsemien DLL-kirjastojen lataamista. Kun sovellus tarvitsee jossakin DLL-kirjastossa olevaa toiminnallisuutta, se pyytää käyttöjärjestelmää lataamaan kirjaston sovelluksen muistiavaruuteen. Jos DLL-kirjaston tarkkaa polkua ei määritetä latauspyynnössä, käyttöjärjestelmä etsii kirjastoa tietyssä järjestyksessä ennalta määritetyistä hakemistoista (hakemisto, josta sovellus on käynnistetty, nykyinen hakemisto, System-hakemisto, jne.).
Vihamielinen hyökkääjä voi hyödyntää tätä ominaisuutta esimerkiksi niin, että hän sijoittaa samaan hakemistoon avattavan tiedoston kanssa itse tekemänsä DLL-kirjaston, joka on samanniminen kuin jokin sovelluksen käyttämä DLL-kirjasto. Jos sovelluksessa ei määritetä DLL-kirjaston tarkkaa polkua, voi käydä niin, että käyttöjärjstelmä lataakin avattavan tiedoston hakemistosta hyökkääjän haluaman DLL-kirjaston, ja sitä kautta hyökkääjä pääsee ujuttamaan sovellukseen haluamaansa ohjelmakoodia. Tämäntyyppisestä hyökkäyksestä käytetään nimitystä "DLL Preloading Attack".
Hyökkääjä voi hyödyntää haavoittuvuutta konkreettisesti esimerkiksi niin, että hän sijoittaa avattavan tiedoston ja haluamansa DLL-kirjaston johonkin Web-hakemistoon tai verkossa jaettavaan tiedostoresurssiin. Windowsiin kuuluu Web Client -niminen palvelu, jonka avulla tiedostoja voidaan hakea myös web-palvelimelta HTTP-protokollan avulla huolimatta siitä, että tiedoston polku määritetään UNC-muodossa (\\palvelin\resurssi). Tämän jälkeen hyöökkääjä houkuttelee käyttäjän avaamaan tiedoston ko. hakemistosta, ja jos sovellus on tehty normaalien ohjelmointikäytäntöjen vastaisesti, ladataan ja suoritetaan hyökkääjän haluama DLL-kirjasto sovelluksen olettaman DLL-kirjaston sijasta.
Lisätietoja aiheesta ja DLL-kirjastojen latauskäytännöstä löytyy seuraavista osoitteista:
- MSRC:n blogi - https://blogs.technet.com/b/msrc/archive/2010/08/21/microsoft-security-advisory-2269637-released.aspx
- Security Research and Defense -blogi: https://blogs.technet.com/b/srd/archive/2010/08/23/more-information-about-dll-preloading-remote-attack-vector.aspx ja https://blogs.technet.com/b/srd/archive/2009/04/14/ms09-014-addressing-the-safari-carpet-bomb-vulnerability.aspx
- Security Advisory 2269637: https://www.microsoft.com/technet/security/advisory/2269637.mspx
- David LeBlancin blogi: https://blogs.msdn.com/b/david_leblanc/archive/2008/02/20/dll-preloading-attacks.aspx
Kyseessä ei siis ole haavoittuvuus Windowsissa, vaan ohjelmointivirhe sovelluksissa. Jos sovellus on tehty Microsoftin ohjelmointiohjeiden mukaisesti, ei ongelmaa DLL-kirjastojen latauksessa ole. Microsoft tekee yhteistyötä sovellustoimittajien kanssa sovellusten korjaamiseksi. Tämän lisäksi haavoittuvuuden aiheuttamaa riskiä voidaan pienentää mm. seuraavien keinojen avulla, joista löytyy myös lisätietoja englanninkielisen Security Advisoryn Workarounds-kohdasta:
- Estetään DLL-kirjastojen lataaminen WebDAVin välityksellä tai verkon tiedostoresursseista. Tämä tapahtuu käytännössä muuttamalla DLL-kirjastojen oletushakujärjestystä. Microsoft on tehnyt tätä varten työkalun, josta löytyy lisätietoja KB-artikkelista 2264107 osoitteessa https://support.microsoft.com/kb/2264107.
- Poistetaan Web Client -palvelu käytöstä.
Lisätietoja aiheesta päivitetään tänne tietoturvablogiin.