Lyhyt vastaus
"Suojattu työpöytä" -nimelle on kolme erillistä ongelmaa:
- Windowsin sisäänrakennetut toiminnot, kuten GINA ja Credential Provider -malli.
- Samana käyttäjänä toimivien etuoikeutettujen ja käyttöoikeuksien ulkopuolisten sovellusten erottaminen (estä nimellisesti etuoikeuden laajentuminen), mikä saattaa liittyä seuraaviin:
-
SwitchDesktop ()
, jota KeePass käyttää ja saattaa olla (tai en ole varma) vastustaa DLL-injektiota.
Yksityiskohtainen vastaus
Nopeana alustana Windows-käyttöliittymien rakentamiseen pohjimmiltaan kaikki kulkee funktion nimeltä CreateWindow ()
(tarkoitan kaikkea, jokainen painike) , jokainen valikko, kaikki) ja sille annetaan hWnd
tai Window Handle. Näiden Windowsin muokkaaminen tapahtuu toisella toiminnolla, SendMessage()
.
Tässä on saalis. Käyttäjätilasovelluksena oikeiden API-puhelujen tekeminen voin melko helposti lähettää viestejä toiseen Windowsiin. On melko triviaalia saada painikkeet katoamaan muiden ihmisten muodoista. On hieman vaikeampi suorittaa DLL-injektio ja kytkeä viestisilmukka, joka vastaanottaa viestejä (käyttöjärjestelmä lähettää Windows-viestejä, kun heille tapahtuu asioita), mutta ei niin paljon vaikeampi. Jos pystyn kiinnittämään nuo tapahtumat, voisin lähettää automaattisesti "kyllä / ei" -lomakkeesi. Tai voisin vaihtaa tunnisteen ReallyDodgyVirus.exe
-kohdasta explorer.exe
-kohtaan ja et olisi kukaan viisaampi.
Lisää : Todella hyvä artikkeli eri tekniikoista, joilla koodi viedään käynnissä olevan prosessin osoiteavaruuteen.
Mitä KeePass tekee nyt?
Lähteen hyvin lyhyt tarkastelu osoittaa, että he käyttävät toisen koodin luomiseen CreateDesktop ()
, SwitchDesktop ()
ja CloseDesktop ()
. työpöytä on yhdistetty fyysiseen katselulaitteeseen, jossa olet. Englanniksi he pyytävät ydintä luomaan heille eristetyn työpöydän, jonka hWnd
-objektit ovat muiden sovellusten SendMessage ()
-alueen löydettävissä olevan alueen ulkopuolella.
Haluan huomauttaa, että SwitchDesktop
keskeyttää oletustyöpöydän käyttöliittymän päivityksen. En ole varma, onko myös viestisilmukat jäädytetty - epäilen, ettei työpöytä ole luotu uudeksi ketjuksi.
Tässä tapauksessa KeePass piirtää käyttöliittymää, Joten suoritus ei , kuten ymmärrän, NT AUTHORITY / SYSTEM
. Sen sijaan uusi työpöytä luodaan erillään pohjimmiltaan nykyisestä työpöydästä, mikä suojaa sitä. Olen iloinen, että minua korjataan siinä. Katso kuitenkin MSDN for SwitchDesktop:
SwitchDesktop-toiminto epäonnistuu, jos työpöytä kuuluu näkymättömään ikkuna-asemaan. SwitchDesktop epäonnistuu myös, kun sitä kutsutaan prosessista, joka liittyy suojattuun työpöytään, kuten WinLogon- ja ScreenSaver-työpöytiin. Suojattuun työpöytään liittyvät prosessit sisältävät mukautettuja UserInit-prosesseja. Tällaiset puhelut epäonnistuvat tyypillisesti "pääsy estetty" -virheellä.
Uskon, että tämä tarkoittaa, että nämä valintaikkunat (näytönsäästäjät, Windows-sisäänkirjautuminen) on rakennettu syvemmälle Windowsiin siten, että ne suoritetaan aina koodina > NT AUTHORITY \ JÄRJESTELMÄ ja UserInit
-prosessi luovat aliprosessit kelvollisella todennuksella vaaditulla käyttöoikeustasolla.
Tämän tuon esiin siksi, että uskon on kaksi asiaa: erilaiset työpöydät ja etuoikeuksien erottaminen. Mark Russinovichin keskustelusta suojatusta työpöydästä:
Windowsin eheysmekanismi ja UIPI on suunniteltu luomaan suojaeste kohotettujen sovellusten ympärille. Yksi sen alkuperäisistä tavoitteista oli estää ohjelmistokehittäjiä tekemästä pikakuvakkeita ja hyödyntämällä jo korotettuja sovelluksia hallinnollisten tehtävien suorittamiseen. Tavallisilla käyttöoikeuksilla toimiva sovellus ei voi lähettää synteettisiä hiiri- tai näppäimistötuloja kohotettuun sovellukseen saadakseen sen tekemään tarjouksensa tai syöttämään koodia kohotettuun sovellukseen hallinnollisten toimintojen suorittamiseksi.
Kuten SteveS sanoo , UAC suorittaa erillisen työpöytäprosessin nimellä NT AUTHORITY / SYSTEM
. Jos pystyt saamaan UAC: n toimintaan ( hozzájáru.exe
) prosessinhallinnan kautta, se näyttää tältä:
Oikeuksien laajentaminen prosessina Minulla ei ole sen yksityiskohtia, mutta tässä mielestäni ymmärrän: Uskon, että etuoikeuksien eskaloituminen Windows-sovellusliittymässä saa prosessin käymään nimellä NT AUTHORITY / SYSTEM
(kykenee siis suorittamaan uusi prosessi millä tahansa oikeuksilla, joita se haluaa, tässä tapauksessa järjestelmänvalvoja). Kun sovellus pyytää suurempia käyttöoikeuksia, kyseinen kysymys kysytään uudelta työpöydältä paikallisesti, jolle mikään sovelluksistasi ei voi saada työpöydän kahvaa tai mitään GUI-elementin kahva. Kun annat suostumuksesi, hozzájáru.exe
luo prosessin etuoikeutetuksi käyttäjäksi. Siten prosessi, joka toimii nimellä NT AUTHORITY \ SYSTEM
, on seurausta uuden etuoikeutetun prosessin luomisen tarpeesta, ei menetelmänä suojatun työpöydän luomiseen. Se, että työpöytä eroaa oletusasetuksista, lisää molemmissa tapauksissa turvallisuutta.
Uskon, että Mark tarkoittaa yllä, että näiden suojattujen työasemien lisäksi on kaksi asiaa: tapahtuu:
- Oletusjärjestelmänvalvojan työpöydälläsi on tosiasiallisesti käyttöoikeuksia, toisin kuin Windows XP: ssä ja aiemmissa.
- Etuoikeutetut ja etuoikeutetut sovellukset ovat nyt erillisillä työpöydillä (vastuuvapauslauseke: voi olla vain ACL-luettelo muistissa olevista kohteista, en ole varma), mikä varmistaa, että käyttöoikeuksettomat koodit eivät voi käyttää etuoikeutettuja objekteja.
Windows-kirjautumiskäyttöliittymä on jälleen erilainen Vista / 7-käyttöjärjestelmässä.
Selvästi mikään näistä menetelmistä ei suojaa sinua ydintilan juuripaketeilta, mutta ne estävät käyttöoikeuksien laajentumisen ja käyttöliittymän eheys vaarantuu eristämällä etuoikeutetut sovellukset tai KeePassin tapauksessa arkaluontoinen valintaikkuna.
Muokkaa
Tarkastellessasi KeePass-koodia kovemmin, Näin tämän kätevän osan C #:
Bitmap bmpBack = UIUtil.CreateScreenshot (); if (bmpBack! = Null) UIUtil.DimImage (bmpBack); / * ... * / SecureThreadParams stp = new SecureThreadParams (); stp.BackgroundBitmap = bmpBack; stp.ThreadDesktop = pNewDesktop;
Tästä näet, että KeePass ottaa kuvakaappauksen suostumuksensa jäljentämiseksi .exe taustan, himmentää sen ja luo uuden työpöydän vanhan työpöydän taustalla. Siksi epäilen, että vanha työpöytä jatkuu, vaikka sitä ei renderöidä. Mielestäni tämä vahvistaa, että mitään maagista NT AUTHORITY \ SYSTEM
-toimintoa ei tapahdu sekä KeePass- että confidence.exe
-tietojen kanssa (epäilen, että nõusime.exe tekee samaa asiaa käyttöliittymällä, se käynnistetään vain NT AUTHORITY \ SYSTEM
) -yhteydessä.
Muokkaa 2
Kun sanon DLL Injektio, ajattelen erityisesti DLL-injektiota vioittamaan käyttöliittymää. DLL-injektio on edelleen mahdollista KeePassissa prosessina, en vain ole varma, voidaanko sitä käyttää vaikuttamaan suojattuun käyttöliittymään. Sitä voidaan kuitenkin käyttää pääsemään prosessin muistiin ja sen säikeisiin tarttumalla täten syötettyyn salasanan esisalaukseen. Vaikea, mutta mielestäni mahdollista. Arvostan sitä, että joku neuvoo asiaa, jos hän tietää.