BlueKeep on Microsoft Remote Desktop Protocol -toteutuksen tietokoneen haavoittuvuus , joka mahdollistaa koodin suorittamisen etänä . BlueKeep vaikuttaa kaikkiin Windows NT -linjan päivittämättömiin Windows-versioihin Windows 2000 : sta Windows Server 2008 R2 :een ja Windows 7 :ään . Syyskuussa 2019 BlueKeep- hyödyntäminen julkistettiin osana Metasploit -projektia [1] .
NSA :n ja Microsoftin mukaan tietokonemadot voivat hyödyntää BlueKeepiä , ja Microsoft väittää miljoonan haavoittuvan laitteen arvion perusteella, että tällainen hyökkäys voisi olla mittakaavassa verrattavissa EternalBlue- hyökkäyksiin, kuten NotPetya ja WannaCry. [2] [3] [2] [3] [ 4] .
Haavoittuvuuden korosti CVE -ID CVE-2019-0708 [5] .
BlueKeep-haavoittuvuus löydettiin RDP -protokollan toteutuksesta joissakin Windows - käyttöjärjestelmän versioissa toukokuussa 2019. RDP on patentoitu protokolla, joka tarjoaa etäyhteyden Windows-tietokoneisiin. BlueKeepillä ei ole mitään tekemistä itse protokollan mekanismin kanssa ja se vaikuttaa vain sen toteutukseen. Haavoittuvuus vaikuttaa erityisesti siihen koodin osaan, joka vastaa ns. virtuaalikanavien hallinnasta . RDP käyttää erilaisia virtuaalipiirejä kuljettamaan erityyppisiä tietoja. Esimerkiksi "rdpsnd"-kanava välittää ääntä, kun taas "cliprdr"-kanavaa käytetään välittämään leikepöydän sisältö . Muita virtuaalisia piirejä voidaan käyttää laajentamaan RDP-protokollaa käyttäjäsovellustasolla. Windows 2000 : ssa oli käytettävissä vain 32 staattista virtuaalikanavaa, ja siksi tämän rajoituksen kiertämiseksi ehdotettiin dynaamisten virtuaalikanavien mekanismia, joka mahdollistaa useiden dynaamisten kanavien lähettämisen yhdessä staattisessa kanavassa. Staattiset kanavat luodaan, kun RDP-istunto luodaan, ja ne ovat olemassa, kunnes se suljetaan, kun taas dynaamisia kanavia voidaan luoda ja poistaa asiakkaan pyynnöstä. Lisäksi toisin kuin staattiset kanavat, jotka on numeroitu kokonaisluvulla 0–31, dynaamiset kanavat tunnistetaan merkkijonon nimen perusteella. Windows sitoo dynaamiset kanavien nimet staattisiin kanavanumeroihin termdd.sys [6] -ohjaimen _IcaBindVirtualChannels- ja _IcaRebindVirtualChannels - funktioissa .
Oletusarvoisesti RDP varaa numeron 31 sisäiselle, ei-käyttäjäohjatulle virtuaaliselle piirille nimeltä "MS_T120". Ajuri ei kuitenkaan tarkista samannimisen mukautetun virtuaalikanavan olemassaoloa. Siten hyökkääjä voi luoda toisen dynaamisen kanavan nimeltä "MS_T120" ja sitoa sen staattiseen kanavaan, jolla on eri numero. Tässä tapauksessa osoitin dynaamisen kanavan "MS_T120" jo olemassa olevaan esiintymään liitetään uuteen numeroon. Kun hyökkääjän luoma kanava suljetaan, muisti vapautetaan , minkä jälkeen roikkuva osoitin numeroon 31 liittyvään “MS_T120”-kanavaan jää järjestelmään, mikä voi johtaa muistin käyttövirheisiin [6] . Tilannetta pahentaa se, että dynaamisten virtuaalikanavien luominen voi tapahtua ennen käyttäjän todennusvaihetta , jolloin tietokonemadot voivat käyttää BlueKeep-ohjelmaa . Tämä ongelma on osittain ratkaistu käyttämällä verkkotason todennusta (NLA) , joka ilmestyi Windows Vistassa , RDP-protokollan vaihtoehto, joka vaatii käyttäjän todennuksen ennen yhteyden muodostamista [7] .
Microsoft julkaisi tietoturvapäivityksen (mukaan lukien useille Windows-versioille, joiden tukikausi on päättynyt, erityisesti Windows XP :lle ) 14. toukokuuta 2019 [4] . Termdd.sys- ohjaimen korjattu versio ei salli muiden numeroiden kuin 31 osoittamista kanavalle nimeltä "MS_T120".
Tietoturvaasiantuntija Kevin Beaumont antoi tälle haavoittuvuudelle nimen "BlueKeep" Twitter - viestissään .
BlueKeepin mainitsi ensimmäisenä UK National Cybersecurity Center [8] , Microsoftin raportti julkaistiin 14. toukokuuta 2019 sekä tietoturvapäivitys, joka korjaa tämän haavoittuvuuden. Myöhemmin, 4. kesäkuuta 2019, NSA julkaisi turvallisuusohjeensa [3] .
Samana päivänä, kun NSA:n neuvonta julkaistiin, CERT-selvityskeskuksen tutkijaryhmä ilmoitti toisesta RDP -protokollaan liittyvästä haavoittuvuudesta Windows 10 :n toukokuuta 2019 päivityksessä ja Windows Server 2019 :ssä . Erityisesti tutkijat panivat merkille, että Network Level Authentication -tunnistetiedot tallennetaan asiakasjärjestelmän välimuistiin ja käyttäjä voi käyttää RDP-yhteyteensä automaattisesti uudelleen, jos se katkeaa. Microsoft on hylännyt tämän haavoittuvuuden tahallisena käyttäytymisenä väittäen, että se voidaan poistaa käytöstä ryhmäkäytäntömekanismin avulla [9] .
Kesäkuusta 2019 lähtien useita toimivia PoC :ita on lähetetty hyödyntämään tätä haavoittuvuutta. Erityisesti McAfee [6] ja Sophos [10] [11] esittelivät versionsa . 22. heinäkuuta 2019 kiinalaisen tietoturvayrityksen puhuja esitti konferenssissa lisää tietoa BlueKeepistä [12] . Asiantuntijat totesivat 25. heinäkuuta 2019, että hyväksikäytöstä olisi voinut olla tuolloin saatavilla kaupallinen versio [13] .
13. elokuuta 2019 raportoitiin DejaBlue , uusi ryhmä BlueKeepiin liittyviä haavoittuvuuksia. Vanhojen Windows-versioiden lisäksi DejaBlueen ovat vaikuttaneet myös uudemmat käyttöjärjestelmäversiot Windows 10 :een asti [14] .
6. syyskuuta 2019 BlueKeep -haavoittuvuuden hyväksikäyttö osana Metasploitia [1 ] ilmestyi julkisuuteen . Hyödynnyksen alkuperäinen versio osoittautui kuitenkin erittäin epäluotettavaksi, koska BSoD -virheitä esiintyi usein . Tarkistettu versio tuli saataville myöhemmin [15] .
2. marraskuuta 2019 raportoitiin ensimmäinen massiivinen BlueKeep-hakkerihyökkäys, joka liittyi Moneron kryptovaluuttaan [ 16] [17] . 8. marraskuuta 2019 Microsoft vahvisti hyökkäyksen ja kehotti käyttäjiä päivittämään Windows -versionsa mahdollisimman pian [18] .
Yksinkertaisin tapa hyödyntää BlueKeep-haavoittuvuutta on toteuttaa siihen perustuva DoS-hyökkäys . Kun asiakas muodostaa yhteyden, palvelimelle luodaan automaattisesti "MS_T120"-kanava, joka liittyy staattiseen numeroon 31. Käyttämällä MCS Connect Initial PDU:ta GCC Conference Create Request RDP-pyynnön kanssa asiakas voi luoda lisää dynaamisia kanavia haluamallaan tavalla, kun taas palvelin palauttaa RDP-vastausviestissä olevien staattisten kanavien lukumäärät. Koska tämä pyyntö tapahtuu ennen käyttäjän todennusvaihetta , hyökkääjällä ei tarvitse olla tiliä järjestelmässä suorittaakseen hyökkäyksen onnistuneesti. Jos asiakas määrittää kanavaluettelossa "MS_T120", palvelin, kutsumalla _IcaBindVirtualChannels- funktiota uudelleen, sitoo olemassa olevan kanavarakenteen esiintymän johonkin muuhun numeroon kuin 31. Kun istunto päättyy, palvelin vapauttaa ensin varattu muistia suljettaessa hyökkääjän luomaa kanavaa, minkä jälkeen se yrittää vapauttaa saman muistin itse yrittäessään sulkea kanavan numero 31. Näin ollen termdd.sys- ohjaimen sisällä on kaksinkertainen muistin vapautuminen . Koska virhe tapahtuu ydintilassa , se kaataa käyttöjärjestelmän BSoD :ssä [19] [20] .
Paljon vaarallisempaa on BlueKeepin käyttö koodin etäsuorittamiseen (RCE) . Tietorakenteet, joissa on tietoja dynaamisista kanavista, tallennetaan sivuttamattomaan pooliin . Muistia kanavajonoon tallennetuille viesteille on varattu myös sivuttamattomaan pooliin. Tietylle viestille varattu muisti vapautetaan vain silloin, kun se luetaan kanavalta, eli jos kanavaa ei lueta, muisti vapautuu vasta yhteyden sulkeutuessa [21] .
RCE:n suorittamiseksi hyökkääjän on osoitettava uudelleen ja ylikirjoitettava muisti osoitteessa, jossa "MS_T120"-kanavan rakenne sijaitsi ennen muistin vapauttamista. Haitallisen koodin suorittamisen suorittamiseksi riittää, että tässä rakenteessa virtuaalisen menetelmätaulukon osoittimen arvo muutetaan haluttuun arvoon. Tätä tehtävää helpottaa suuresti DEP (Data Execution Prevention) -mekanismin puuttuminen sivuttamattomasta poolista Windows 7 : ää vanhemmissa Windows-versioissa . Tämä tarkoittaa, että haitallinen koodi voidaan sijoittaa samaan osoitteeseen kuin väärennetty virtuaalinen menetelmätaulukko. Sekä osoittimen vaihtaminen että haitallisen koodin suora sijoittaminen voidaan tehdä edellä mainitulla mekanismilla viestien lähettämiseksi kanavassa, jota ei lueta [21] .