Kysymys:
Paluu käyttöjärjestelmän kuorikoodiin Windows-ytimestä (Win10)
Jaewon Min
2019-03-04 12:42:40 UTC
view on stackexchange narkive permalink

Olen kirjoittanut ytimen hyödyntämisen (uusimmalle Win10 64-bittiselle versiolle), joka suorittaa (tai palaa ytimestä) token varastavan shell-koodin, joka on sijoitettu käyttäjän maan VirtulAlloc-muistiin.

Ongelmana on, että kun järjestelmänvalvojan käyttäjä suorittaa hyödyntämisen, se toimii hyvin, mutta jos tavallinen käyttäjä suorittaa sen (keskitasoinen eheys), se kaatuu ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY (fc) -kohdassa. FFFF8500B7D94400 sisältää 8A000000269B1867 sisältää 0A0000001C4F2867 sisältää 0A0000002673C867 sisältää 0000000032E84025pfn 269b1 --- DA - UW-V pfn 1c4f2 --- DA - UWEV pfn 2673c --- DA - UWEV4 -

kun taas järjestelmänvalvojalla

  PXE at FFFF8944A2512028 PPE at FFFF8944A2405E48 PDE at FFFF894480BC9F28 PTE at FFFF8901793E5800contains 0A000000060BD867 tartalmaz 0A0000003535E867 - 0ab --DA - UWEV pfn fbab --- DA - UWEV pfn 1dff4 ---- A - UREV  

Ero on PXE-tasolla, ei ole E -bitti asetettu vakiokäyttäjälle, kun taas järjestelmänvalvojan käyttäjällä on käyttöoikeus usermode-kuorikoodiin.

Yritin ottaa komentotulkkikoodin käyttöön hyödyntämisen (.exe) toiminto, joten se sijoitetaan koodisegmenttiin (mikä sillä todennäköisesti on suoritusoikeus), mutta se on sama (Ei E -asetusta PXE-tasolla) ja kaatuu vaikka ! vad -komento tuottaa EXECUTE_WRITECOPY .

Olen tarkistanut, että ProcessMitigationPolicy : n ProhibitDynamicCode -arvoksi on asetettu 0, joten en usko, että tämä on ongelma.

Kuinka te suoritat shell-koodin kirjoittaessasi ytimen hyödyntämistä näinä päivinä? (FYI Olen poistanut käytöstä SMEP: n, SMAP: n ytimen ROP: n kautta).

Kiitos jo etukäteen!

Se saattaa olla ongelma SMEP: n kanssa normaalikäyttäjällä, vaikka CR4-rekisteri päivitetäänkin palaamalla mihinkään kelvolliseen userland-koodin tulosjärjestelmän kaatumiseen.
Miksi siinä mielessä SMEP ei ole poistettu käytöstä normaalikäyttäjältä, vaikka SMEP-bitti on tyhjennetty CR4-rekisterissä?
üks vastaus:
Jaewon Min
2019-03-26 19:50:58 UTC
view on stackexchange narkive permalink

Tähän asti sain selville, että vaikka Intel-käsikirjan mukaan SMEP -bitti on 0, jos jokin sivutaulukkojen läpi käyntiin tuleva merkintä on execute estä bit set, se ei toteudu. Tämä pätee, kun varataan RWX-muistia tavallisesta käyttäjästä (keskitason IL).

En selvittänyt, onko tämä ongelma testausympäristössäni tai jonkinlaisessa lieventämisessä, mutta onnistuin viimeistelemään hyödynnä kartoittamalla suoritettava muisti ytimessä ja kopioi shell-koodi sinne.



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 4.0-lisenssistä, jolla sitä jaetaan.
Loading...