macOS .Net Applications Injection
Hierdie is 'n opsomming van die berig https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/. Kyk daarvoor vir verdere besonderhede!
.NET Core-afstelwerk
Vestiging van 'n afstel-sessie
Die hantering van kommunikasie tussen die afsteler en die afstelobjek in .NET word bestuur deur dbgtransportsession.cpp. Hierdie komponent stel twee genoemde pype per .NET-proses op soos gesien in dbgtransportsession.cpp#L127, wat geïnisieer word via twowaypipe.cpp#L27. Hierdie pype word gesuffix met -in
en -out
.
Deur die gebruiker se $TMPDIR
te besoek, kan daar afstelpype gevind word wat beskikbaar is vir die afstel van .Net-toepassings.
DbgTransportSession::TransportWorker is verantwoordelik vir die bestuur van kommunikasie vanaf 'n afsteler. Om 'n nuwe afstel-sessie te begin, moet 'n afsteler 'n boodskap stuur via die out
-pyp wat begin met 'n MessageHeader
-struktuur, wat in die .NET-bronkode in detail beskryf word:
Om 'n nuwe sessie aan te vra, word hierdie struktuur soos volg gevul, deur die boodskap tipe te stel as MT_SessionRequest
en die protokol weergawe as die huidige weergawe:
Hierdie kop is dan oorgestuur na die teiken deur die write
syscall, gevolg deur die sessionRequestData
struktuur wat 'n GUID vir die sessie bevat:
'n Leesoperasie op die out
pyp bevestig die sukses of mislukking van die opsporingsessie vestiging:
Lees van Geheue
Sodra 'n foutopsporingsessie tot stand gebring is, kan geheue gelees word deur die MT_ReadMemory
boodskapstipe te gebruik. Die funksie readMemory word in detail beskryf en voer die nodige stappe uit om 'n leesversoek te stuur en die antwoord te ontvang:
Die volledige bewys van konsep (POC) is beskikbaar hier.
Skryf van Geheue
Op dieselfde manier kan geheue geskryf word met behulp van die writeMemory
-funksie. Die proses behels die instelling van die boodskap tipe na MT_WriteMemory
, die spesifisering van die adres en lengte van die data, en dan die stuur van die data:
Die betrokke POC is beskikbaar hier.
.NET Core Kode-uitvoering
Om kode uit te voer, moet 'n geheuegebied met rwx-permissies geïdentifiseer word, wat gedoen kan word deur gebruik te maak van vmmap -pages:
Die opsporing van 'n plek om 'n funksie-aanwyservariabele te oorskryf, is noodsaaklik, en in .NET Core kan dit gedoen word deur die Dinamiese Funksie Tabel (DFT) te teiken. Hierdie tabel, wat in jithelpers.h
beskryf word, word deur die uitvoeringstyd gebruik vir JIT-samestellingshulpfunksies.
Vir x64-stelsels kan handtekeningsoektog gebruik word om 'n verwysing na die simbool _hlpDynamicFuncTable
in libcorclr.dll
te vind.
Die MT_GetDCB
-ontlederfunksie verskaf nuttige inligting, insluitend die adres van 'n hulpfunksie, m_helperRemoteStartAddr
, wat die ligging van libcorclr.dll
in die prosesgeheue aandui. Hierdie adres word dan gebruik om 'n soektog na die DFT te begin en 'n funksie-aanwyser met die adres van die skulpkode te oorskryf.
Die volledige POC-kode vir inspuiting in PowerShell is beskikbaar hier.
Verwysings
Last updated