Ek is wortel. Verstaan ​​Linux OS Privilege Escalation

Ek het die eerste kwartaal van 2020 bestee om vir die OSCP-eksamen voor te berei. Om inligting op Google te soek en baie “blinde” pogings het al my vrye tyd in beslag geneem. Dit blyk veral moeilik te wees om die meganismes vir eskalering van voorregte te verstaan. Die PWK-kursus gee groot aandag aan hierdie onderwerp, maar metodologiese materiaal is altyd nie genoeg nie. Daar is baie handleidings op die internet met nuttige opdragte, maar ek is nie 'n voorstander daarvan om die aanbevelings blindelings te volg sonder om te verstaan ​​waarheen dit sal lei nie.

Ek wil graag met jou deel wat ek daarin geslaag het om te leer tydens die voorbereiding en suksesvolle slaag van die eksamen (insluitend periodieke strooptogte op Hack The Box). Ek het 'n diep gevoel van dankbaarheid gevoel vir elke stukkie inligting wat my gehelp het om die Probeer Harder-pad meer bewustelik te stap, dit is nou my tyd om terug te gee aan die gemeenskap.

Ek wil vir jou 'n gids gee oor voorregte-eskalasie in OS Linux, wat 'n ontleding insluit van die mees algemene vektore en verwante kenmerke wat jy beslis sal benodig. Dikwels is die voorreg-eskalasiemeganismes self redelik eenvoudig, probleme ontstaan ​​wanneer inligting gestruktureer en ontleed word. Daarom het ek besluit om met 'n "besigtigingstoer" te begin en dan elke vektor in 'n aparte artikel te oorweeg. Ek hoop ek sal jou tyd spaar om die onderwerp te bestudeer.

Ek is wortel. Verstaan ​​Linux OS Privilege Escalation

So, hoekom is voorreg-eskalasie selfs moontlik in 2020 as die metodes al baie lank bekend is? Trouens, as die gebruiker die stelsel reg hanteer, sal dit regtig nie moontlik wees om voorregte daarin te verhoog nie. Die grootste globale probleem wat aanleiding gee tot sulke geleenthede is onveilige konfigurasie. Die teenwoordigheid van verouderde sagtewareweergawes wat kwesbaarhede in die stelsel bevat, is ook 'n spesiale geval van 'n onveilige opstelling.

Voorregte-eskalasie deur onveilige konfigurasie

Kom ons gaan eers met die onveilige konfigurasie. Kom ons begin met IT-professionals gebruik dikwels handleidings en hulpbronne soos stackoverflow, waarvan baie onveilige opdragte en konfigurasies bevat. 'n Treffende voorbeeld is die nuus dat die kode wat die meeste vanaf stackoverflow gekopieer is, 'n fout bevat het. 'n Ervare administrateur sal die deursteek sien, maar dit is in 'n ideale wêreld. Selfs bekwame professionele persone verhoogde werklading in staat is om foute te maak. Stel jou voor dat die administrateur besig is om dokumentasie vir die volgende tender voor te berei en goed te keur, terselfdertyd delf in die nuwe tegnologie wat in die volgende kwartaal bekendgestel sal word, terwyl dit periodiek gebruikersondersteuningstake oplos. En dan kry hy die taak om vinnig 'n paar virtuele masjiene te verhoog en dienste daarop uit te voer. Wat dink jy, wat is die waarskynlikheid dat die admin eenvoudig nie die jamb raaksien nie? Dan verander die spesialiste, maar die krukke bly, terwyl maatskappye altyd daarna streef om koste te minimaliseer, insluitend dié vir IT-spesialiste.

Pseudo-dop en jailbreak

Die stelseldop wat tydens die produksiefase verkry word, is dikwels beperk, veral as jy dit verkry het deur 'n webbedienergebruiker te hack. Skulpbeperkings kan byvoorbeeld verhoed dat u die sudo-opdrag met 'n fout gebruik:

sudo: no tty present and no askpass program specified

Sodra jy 'n dop het, beveel ek aan om 'n volwaardige terminaal te skep, byvoorbeeld deur Python te gebruik.

python -c 'import pty;pty.spawn("/bin/bash")'

Jy vra: "Hoekom het ek 'n duisend opdragte nodig, as ek een kan gebruik, byvoorbeeld om lêers oor te dra?" Die feit is dat stelsels anders gekonfigureer is, op die volgende gasheer is Python dalk nie geïnstalleer nie, maar Perl kan beskikbaar wees. Die vaardigheid is om bekende dinge in die stelsel te kan doen sonder bekende gereedskap. 'n Volledige lys kenmerke kan gevind word hier.

'n Lae voorreg dop kan verkry word deur gebruik te maak spanne 1 и spanne 2 (verbasend selfs GIMP).

Bekyk opdraggeskiedenis

Linux versamel 'n geskiedenis van alle uitgevoer opdragte in 'n lêer ~ / .bash_history. As die bediener aktief gebruik word en sy geskiedenis word nie uitgevee nie, is daar 'n hoë waarskynlikheid om geloofsbriewe in hierdie lêer te vind. Om geskiedenis skoon te maak is eenvoudig ongerieflik. As die administrateur gedwing word om opdragte van tien verdiepings deur te kies, sal dit natuurlik vir hom geriefliker wees om hierdie opdrag uit die geskiedenis te roep as om dit weer in te voer. Boonop weet baie mense nie van hierdie "hack" nie. As daar alternatiewe skulpe soos Zsh of Fish in die stelsel is, het hulle hul eie geskiedenis. Om die geskiedenis van opdragte in enige dop te vertoon, tik net die opdraggeskiedenis in.

cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_history

Daar is gedeelde hosting, waarin die bediener gebruik word om verskeie werwe te huisves. Tipies, met hierdie konfigurasie, het elke hulpbron sy eie gebruiker met 'n aparte tuisgids en 'n virtuele gasheer. Dus, as dit verkeerd gekonfigureer is, kan jy die .bash_history-lêer in die wortelgids van die webhulpbron vind.

Soek na wagwoorde in die lêerstelsel en aanvalle op aangrensende stelsels

Konfigurasielêers vir verskeie dienste kan deur jou huidige gebruiker leesbaar wees. Daarin kan u geloofsbriewe in duidelike teks vind - wagwoorde vir toegang tot die databasis of verwante dienste. Dieselfde wagwoord kan gebruik word om beide toegang tot die databasis te kry en om die wortelgebruiker te magtig (geloofsbemanning).
Dit gebeur dat die geloofsbriewe wat gevind is, aan dienste op ander gashere behoort. Die ontwikkeling van 'n aanval op die infrastruktuur deur 'n gekompromitteerde gasheer is nie erger as die uitbuiting van ander gashere nie. Aangrensende stelsels kan ook gevind word deur IP-adresse in die lêerstelsel op te soek.

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Find string password (no cs) in those directories
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IPs inside logs

As die gekompromitteerde gasheer 'n webtoepassing het wat vanaf die internet toeganklik is, is dit beter om sy logboeke uit te sluit van die soektog na IP-adresse. Die adresse van hulpbrongebruikers van die internet sal waarskynlik nie vir ons nuttig wees nie, maar die adresse van die interne netwerk (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) en waarheen hulle gaan, te oordeel aan die logs, kan van belang wees.

sudo

Die sudo-opdrag laat die gebruiker toe om 'n opdrag in die konteks van root uit te voer met hul eie wagwoord of sonder om dit enigsins te gebruik. Baie bedrywighede in Linux vereis wortelvoorregte, maar om as wortel te hardloop, word as baie slegte praktyk beskou. In plaas daarvan is dit beter om selektiewe toestemming toe te pas om opdragte in die wortelkonteks uit te voer. Baie Linux-nutsgoed, insluitend die standaard soos vi, kan egter gebruik word om voorregte op wettige maniere te eskaleer. Om die regte manier te vind, beveel ek aan om te kyk hier.

Die eerste ding om te doen nadat u toegang tot die stelsel verkry het, is om die sudo -l opdrag uit te voer. Dit sal toestemming vertoon om die sudo-opdrag te gebruik. As 'n gebruiker sonder 'n wagwoord verkry word (soos apache of www-data), is 'n sudo-voorregte-eskaleringsvektor onwaarskynlik. Wanneer sudo gebruik word, sal die stelsel vir 'n wagwoord vra. Die gebruik van die passwd-opdrag om 'n wagwoord in te stel sal ook nie werk nie, dit sal die huidige gebruikerwagwoord vra. Maar as sudo nog beskikbaar is, dan moet jy eintlik soek na:

  • enige tolke, enigiemand kan 'n dop skep (PHP, Python, Perl);
  • enige teksredigeerders (vim, vi, nano);
  • enige kykers (minder, meer);
  • enige moontlikhede om met die lêerstelsel te werk (cp, mv);
  • gereedskap wat uitvoer in bash het, hetsy interaktief of as 'n uitvoerbare opdrag (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Daar is baie handleidings op die internet wat aanbeveel om alle suid/sgid-opdragte te versamel, maar 'n seldsame artikel gee besonderhede oor wat om met hierdie programme te doen. Opsies om voorregte te eskaleer wat nie die gebruik van uitbuitings in ag neem nie, kan gevind word hier. Ook, 'n aantal uitvoerbare lêers het spesifieke kwesbaarhede vir die OS-weergawe, byvoorbeeld.

In 'n ideale wêreld sal jy alle geïnstalleerde pakkette deur ten minste searchsploit laat loop. In die praktyk moet dit gedoen word met die gewildste programme soos sudo. Daar is ook altyd die opsie om die ontwikkeling van geoutomatiseerde nutsmiddels te gebruik en te ondersteun wat interessante, vanuit die oogpunt van voorregte-eskalasie, uitvoerbare lêers met die suid/sgid-bis-stel sal uitlig. Ek sal 'n lys van sulke instrumente in die ooreenstemmende afdeling van die artikel verskaf.

Skryfbare skrifte wat deur Cron of Init in Root-konteks bestuur word

Cron-take kan uitgevoer word in die konteks van verskillende gebruikers, insluitend root. As daar 'n taak in cron is met 'n skakel na 'n uitvoerbare lêer, en dit is beskikbaar vir jou om te skryf, kan jy dit maklik vervang met 'n kwaadwillige een en voorregte-eskalasie uitvoer. Terselfdertyd is lêers met cron-take by verstek beskikbaar vir lees aan enige gebruiker.

ls -la /etc/cron.d  # show cron jobs 

Soortgelyk is die geval met init. Die verskil is dat take in cron periodiek uitgevoer word, en in init - by die opstart van die stelsel. Vir werking sal jy die stelsel moet herlaai, terwyl sommige van die dienste dalk nie sal styg nie (as hulle nie in outolaai geregistreer is nie).

ls -la /etc/init.d/  # show init scripts 

Jy kan ook soek vir lêers wat deur enige gebruiker geskryf kan word.

find / -perm -2 -type f 2>/dev/null # find world writable files

Die metode is redelik bekend, ervare stelseladministrateurs gebruik die chmod-opdrag versigtig. Op die web beskryf die oorgrote meerderheid handleidings egter die opstel van maksimum regte. Die "maak dit net werk"-benadering van onervare stelseladministrateurs skep in beginsel geleenthede vir voorregte-eskalasie. Indien moontlik, is dit die beste om in die opdraggeskiedenis te kyk vir onveilige gebruike van chmod.

chmod +w /path 
chmod 777 /path

Kry doptoegang vir ander gebruikers

Ons kyk na die lys gebruikers in /etc/passwd. Ons gee aandag aan diegene wat 'n dop het. Jy kan hierdie gebruikers brute - dit is moontlik dat jy deur die gevolglike gebruiker uiteindelik in staat sal wees om voorregte te verhoog.

Om sekuriteit te verbeter, beveel ek aan dat jy altyd by die beginsel van minste voorreg hou. Dit maak ook sin om die tyd te neem om onveilige konfigurasies na te gaan wat kan oorbly na die probleemoplossing - dit is die "tegniese plig" van die stelseladministrateur.

Selfgeskrewe kode

Dit is die moeite werd om noukeurig na die uitvoerbare programme in die gebruiker en webbediener se tuisgids te kyk (/var/www/ tensy anders gespesifiseer). Hierdie lêers kan 'n heeltemal onsekere oplossing blyk te wees en bevat ongelooflike krukke. Natuurlik, as jy 'n raamwerk in jou webbedienergids het, maak dit nie sin om na nul-dag daarin te soek as deel van 'n pentest nie, maar dit word aanbeveel om pasgemaakte wysigings, plugins en komponente te vind en te bestudeer.

Om sekuriteit te verhoog, is dit beter om die gebruik van geloofsbriewe in selfgeskrewe skrifte te vermy, sowel as potensieel gevaarlike funksionaliteit, soos om /etc/shadow te lees of id_rsa te manipuleer, indien moontlik.

Verheffing van voorreg deur uitbuiting van kwesbaarhede

Voordat u probeer om voorregte deur uitbuiting te verhoog, is dit belangrik om die die oordrag van lêers na die teikengasheer. Benewens die gewone gereedskap soos ssh, ftp, http (wget, curl), is daar 'n geheel "dieretuin" van moontlikhede.

Om die sekuriteit van jou stelsel te verbeter, dateer dit gereeld op na die nuutste stabiel weergawes, en probeer ook om verspreidings te gebruik wat ontwerp is vir Enterprise. Andersins, selde, maar daar is situasies wanneer gepaste opgradering die stelsel onbruikbaar maak.

Ontgin dienste wat in die konteks van die wortelgebruiker loop

Sommige Linux-dienste loop as die bevoorregte gebruikerwortel. Hulle kan gevind word met behulp van die ps aux | grep wortel. In hierdie geval kan die diens nie op die web aangekondig word nie en plaaslik beskikbaar wees. As dit publieke misbruik het, kan dit veilig gebruik word: 'n diensongeluk in geval van mislukking is baie minder krities as 'n OS-ongeluk.

ps -aux | grep root # Linux

Die suksesvolste geval kan beskou word as die werking van 'n gehackte diens in die konteks van die wortelgebruiker. Die werking van die SMB-diens gee STELSEL bevoorregte toegang op Windows-stelsels (bv. via ms17-010). Dit is egter nie algemeen op Linux-stelsels nie, so jy kan baie tyd spandeer aan voorregte-eskalasie.

Ontgin Linux-kern-kwesbaarhede

Dit is die pad wat jy laaste moet neem. Onsuksesvolle werking kan lei tot 'n stelselongeluk, en in die geval van 'n herselflaai, sal sommige dienste (insluitend dié waardeur die aanvanklike dop verkry is) dalk nie begin nie. Dit gebeur dat die administrateur eenvoudig vergeet het om die systemctl enable-opdrag te gebruik. Boonop sal dit baie ontevredenheid met jou werk veroorsaak as daar nie oor die operasie ooreengekom is nie.
As jy besluit om die bronne van exploitdb te gebruik, maak seker dat jy die opmerkings aan die begin van die skrif lees. Daar staan ​​gewoonlik onder meer hoe om hierdie ontginning korrek saam te stel. As jy te lui was of "gister" nodig gehad het as gevolg van sperdatums, kan jy soek na bewaarplekke met reeds saamgestelde ontginnings, byvoorbeeld. Dit moet egter verstaan ​​word dat jy in hierdie geval 'n vark in 'n pok sal kry. Aan die ander kant, as 'n programmeerder vir die greep verstaan ​​het hoe 'n rekenaar werk en die sagteware wat dit gebruik, sou hy nie in sy hele lewe 'n reël kode geskryf het nie.

cat /proc/version
uname -a
searchsploit "Linux Kernel" 

metasploit

Om 'n verbinding te vang en te hanteer, is dit altyd beter om die ontginning/multi/hanteerder-module te gebruik. Die belangrikste ding is om die korrekte loonvrag in te stel, byvoorbeeld generic/shell/reverce_tcp of generic/shell/bind_tcp. Die dop wat in Metasploit verkry is, kan opgegradeer word na Meterpreter deur die post/multi/manage/shell_to_meterpreter module te gebruik. Met Meterpreter kan jy die na-uitbuitingsproses outomatiseer. Byvoorbeeld, die post/multi/recon/local_exploit_suggester-module kontroleer die platform, argitektuur en ontginbare entiteite en stel Metasploit-modules voor vir voorregte-eskalasie op die teikenstelsel. Danksy Meterpreter kom voorregte-eskalasie soms daarop neer dat die regte module bestuur word, maar om te kap sonder om te verstaan ​​wat onder die enjinkap gebeur, is nie waar nie (jy moet steeds 'n verslag skryf).

Gereedskap

Gereedskap om plaaslike versameling van inligting te outomatiseer, sal jou baie moeite en tyd bespaar, maar op sigself kan nie die voorregte-eskalasiepad ten volle identifiseer nie, veral in die geval van die ontginning van kernkwesbaarhede. Outomatiseringsnutsmiddels sal al die nodige opdragte vir jou uitvoer om inligting oor die stelsel in te samel, maar dit is ook belangrik om te kan ontleed data ontvang. Ek hoop dat my artikel hierin vir u nuttig sal wees. Natuurlik is daar baie meer gereedskap as wat ek hieronder sal lys, maar hulle doen almal omtrent dieselfde ding - dit is meer 'n kwessie van smaak.

Linertjies

'N Redelik vars hulpmiddel, die eerste commit is gedateer Januarie 2019. Tans my gunsteling instrument. Die slotsom is dat dit die interessantste voorregte-eskaleringsvektore uitlig. Stem saam, dit is geriefliker om 'n deskundige assessering op hierdie vlak te kry as om monolitiese rou data te ontleed.

LinEnum

My tweede gunsteling hulpmiddel, dit versamel en organiseer ook die data wat ontvang word as gevolg van plaaslike opsomming.

linux-exploit-suggester (1,2)

Hierdie ontginning sal die stelsel ontleed vir geskikte toestande vir uitbuiting. Trouens, dit sal 'n werk doen wat identies is aan die Metasploit local_exploit_suggester-module, maar sal skakels bied na exploit-db-bronkodes eerder as Metasploit-modules.

Linuxprivchecker

Hierdie skrif sal 'n groot hoeveelheid inligting versamel en volgens afdelings organiseer wat nuttig kan wees vir die vorming van 'n voorregte-eskaleringsvektor.

'n Ander keer sal ek uitwei verhoging van voorregte in Linux OS via suid/sgid.

Bron: will.com

Voeg 'n opmerking