Ik bin root. Understanding Linux OS Privilege Escalation

Ik haw it earste fearnsjier fan 2020 trochbrocht oan it tarieden op it OSCP-eksamen. It sykjen nei ynformaasje op Google en in protte "blinde" besykjen namen al myn frije tiid yn beslach. It wie benammen lestich om de meganismen te begripen foar it fergrutsjen fan privileezjes. De kursus PWK jout in soad omtinken oan dit ûnderwerp, mar it lesmateriaal is nea genôch. D'r binne in protte hantliedingen op it ynternet mei nuttige kommando's, mar ik bin gjin fan fan blyn folgje oanbefellings sûnder te begripen wat it sil liede ta.

Ik wol graach mei jo diele wat ik learde tidens de tarieding en it suksesfolle trochjaan fan it eksamen (ynklusyf periodike ynfallen yn Hack The Box). Ik fielde in sterk gefoel fan tankberens foar elk stikje ynformaasje dy't my holpen om it Try Harder-paad bewuster te rinnen, no is myn tiid om werom te jaan oan 'e mienskip.

Ik wol jo in hantlieding jaan oer hoe't jo privileezjes yn OS Linux eskalearje kinne, dy't in analyse omfettet fan 'e meast foarkommende fektors en relatearre funksjes dy't jo perfoarst nuttich sille wêze. Faak binne de meganismen foar it fergrutsjen fan privileezjes sels frij simpel swierrichheden by it strukturearjen en analysearjen fan ynformaasje. Dêrom besleat ik om te begjinnen mei in "sightseeing tour" en dan beskôgje elke vector yn in apart artikel. Ik hoopje dat ik jo wat tiid besparje by it ûndersykjen fan it ûnderwerp.

Ik bin root. Understanding Linux OS Privilege Escalation

Dus wêrom is eskalaasje fan privileezjes sels mooglik yn 2020 as de metoaden al in heul lange tiid bekend binne? Yn feite, as de brûker it systeem goed omgiet, sil it wirklik net mooglik wêze om privileezjes dêryn te fergrutsjen. De wichtichste globale probleem dat jout oanlieding ta sokke kânsen is ûnfeilige konfiguraasje. De oanwêzigens fan ferâldere softwareferzjes mei kwetsberens yn it systeem is ek in spesjaal gefal fan in ûnfeilige konfiguraasje.

Privilegeeskalaasje fia ûnfeilige konfiguraasje

Lit ús earst omgean mei ûnfeilige konfiguraasje. Litte wy begjinne mei IT-professionals brûke faak hânboeken en boarnen lykas stackoverflow, wêrfan in protte ûnfeilige kommando's en konfiguraasjes befetsje. In opfallend foarbyld - it nijs dat de koade meast kopiearre út stackoverflow befette in flater. In betûfte admin sil de jamb sjen, mar dit is yn in ideale wrâld. Sels foechhawwende spesjalisten ferhege wurkdruk by steat om flaters te meitsjen. Stel jo foar dat in behearder dokumintaasje foar de folgjende oanbesteging tariedt en koördinearret, tagelyk dûkt yn 'e nije technology dy't yn it folgjende fearnsjier ynfierd wurde moat, wylst se periodyk problemen mei brûkersstipe oplosse. En dan krijt hy de taak om fluch in pear firtuele masines yn te stellen en tsjinsten dêrop út te rollen. Wat tinke jo is de kâns dat de behearder de jamb gewoan net sil fernimme? Dan feroarje spesjalisten, mar de krukken bliuwe, wylst bedriuwen altyd stribje om de kosten te minimalisearjen, ek foar IT-meiwurkers.

Pseudo-shell en jailbreak

De systeemshell krigen tidens it eksploitaasjepoadium is faak beheind, foaral as jo it hawwe krigen troch in brûker fan 'e webtsjinner te hacken. Shell-beheinings kinne jo bygelyks foarkomme dat jo it sudo-kommando útfiere, in flater produsearje:

sudo: no tty present and no askpass program specified

As jo ​​ienris in shell hawwe, ried ik oan om in folsleine terminal te meitsjen, bygelyks Python te brûken.

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

Jo kinne freegje: "Wêrom haw ik tûzen kommando's nedich as ik ien kin brûke, bygelyks om bestannen oer te dragen?" It feit is dat systemen binne konfigurearre oars in opjûne host meie net hawwe Python ynstallearre, mar kin hawwe Perl. De feardigens is om bekende dingen yn it systeem te dwaan sûnder fertroude ark. In folsleine list mei funksjes kin fûn wurde hjir.

In leech-befoarrjochte shell kin wurde krigen mei help fan teams 1 и teams 2 (ferrassend, sels GIMP).

Besjoch kommando skiednis

Linux sammelet in skiednis fan alle útfierde kommando's yn in bestân ~/.bash_history. As de tsjinner aktyf brûkt wurdt en syn skiednis is net wiske, is d'r in hege kâns op it finen fan bewiisbrieven yn dit bestân. Skiednis wiskje is gewoan ûngemaklik. As de behearder twongen wurdt om kommando's fan tsien ferhaal te selektearjen fia , sil it fansels handiger wêze om dit kommando út 'e skiednis te neamen dan it opnij yn te fieren. Plus, in protte minsken witte net oer dizze "hack". As d'r alternative skulpen lykas Zsh of Fish yn it systeem binne, hawwe se har eigen skiednis. Om de skiednis fan kommando's yn elke shell wer te jaan, typ gewoan de kommandoskiednis.

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

D'r is dielde hosting, wêryn de tsjinner brûkt wurdt om ferskate websiden te hostjen. Typysk, mei dizze konfiguraasje hat elke boarne in eigen brûker mei in aparte thúsmap en in firtuele host. Dus, as jo ferkeard ynsteld binne, kinne jo it .bash_history-bestân fine yn 'e root-map fan' e webboarne.

Sykjen nei wachtwurden yn it bestânsysteem en oanfallen op neistlizzende systemen

Konfiguraasjebestannen foar ferskate tsjinsten kinne lêsber wêze foar jo hjoeddeistige brûker. Yn har kinne jo bewiisbrieven fine yn dúdlike tekst - wachtwurden foar tagong ta in databank of relatearre tsjinsten. Itselde wachtwurd kin brûkt wurde sawol om tagong te krijen ta de databank as om de root-brûker te autorisearjen (credential personiel).
It bart dat de fûnemintele gegevens hearre ta tsjinsten op oare hosts. It ûntwikkeljen fan in oanfal op ynfrastruktuer fia in kompromittearre host is net slimmer dan it eksploitearjen fan oare hosts. Neistlizzende systemen kinne ek fûn wurde troch it opsykjen fan IP-adressen yn it bestânsysteem.

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 de kompromittearre host in webapplikaasje hat tagonklik fan it ynternet, is it better om har logs út te sluten fan it sykjen nei IP-adressen. Adressen fan boarne brûkers fan it ynternet binne nei alle gedachten net nuttich foar ús, mar de adressen fan it ynterne netwurk (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) en wêr't se gean, beoardielje troch de logs , kin fan belang wêze.

Sudo

It kommando sudo jout de brûker de mooglikheid om in kommando yn 'e root-kontekst út te fieren mei har eigen wachtwurd of sûnder in wachtwurd te brûken. In protte operaasjes yn Linux fereaskje root-privileezjes, mar it rinnen as root wurdt beskôge as in heul minne praktyk. Ynstee dêrfan is it better om selektive tastimming oan te passen foar it útfieren fan kommando's yn 'e root-kontekst. In protte Linux-ark, ynklusyf standert lykas vi, kinne lykwols brûkt wurde om privileezjes op legitime manieren te eskalearjen. Om in gaadlike metoade te finen, advisearje ik te sykjen hjir.

It earste ding dat jo moatte dwaan as jo tagong krije ta it systeem is it kommando sudo -l út te fieren. It sil tastimming werjaan om it sudo-kommando te brûken. As in brûker sûnder wachtwurd wurdt krigen (lykas apache of www-data), is de privilege-eskalaasjevektor fia sudo net wierskynlik. By it brûken fan sudo sil it systeem om in wachtwurd freegje. Jo sille ek gjin wachtwurd ynstelle kinne mei it passwd-kommando it sil freegje om it aktuele wachtwurd fan de brûker. Mar as sudo noch beskikber is, dan moatte jo yn essinsje sykje:

  • eltse tolk, elkenien kin spawn in shell (PHP, Python, Perl);
  • alle tekstbewurkers (vim, vi, nano);
  • elke sjogger (minder, mear);
  • elke mooglikheid om te wurkjen mei it bestânsysteem (cp, mv);
  • Tools dy't útfier hawwe yn bash, ynteraktyf of as in útfierber kommando (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Súd/Sgid

D'r binne in protte hantliedingen op it ynternet dy't advisearje om alle suid / sgid-kommando's te sammeljen, mar in seldsum artikel jout spesifikaasjes oer wat te dwaan mei dizze programma's. Opsjes foar it eskalearjen fan privileezjes dy't gjin rekken hâlde mei it brûken fan eksploaten kinne fûn wurde hjir. Ek in oantal útfierbere bestannen hawwe spesifike kwetsberens foar de OS-ferzje, bygelyks.

Yn in ideale wrâld soene jo alle ynstalleare pakketten útfiere fia op syn minst searchsploit. Yn 'e praktyk moat dit dien wurde mei de populêrste programma's lykas sudo. D'r is ek altyd de opsje om de ûntwikkeling fan automatisearre ark te brûken en te stypjen dy't ynteressant markearje, út it eachpunt fan privileezje-eskalaasje, útfierbere triemmen mei de suid/sgid-bits set. Ik sil in list fan sokke ark leverje yn 'e oerienkommende seksje fan it artikel.

Skriuwbere skripts rinne troch Cron of Init yn 'e kontekst fan Root

Cron-banen kinne wurde útfierd ûnder ferskate brûkerskonteksten, ynklusyf root. As in cron-taak is ynsteld mei in keppeling nei in útfierber bestân, en it is beskikber foar jo om te skriuwen, kin it maklik wurde ferfongen troch in kweade en privileezje-eskalaasje. Standert binne bestannen mei cron-taken lykwols lêsber foar elke brûker.

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

De situaasje is fergelykber mei init. It ferskil is dat taken yn cron periodyk wurde útfierd, en yn init - by it opstarten fan it systeem. Operaasje sil fereaskje in systeem trochstart, en guon tsjinsten meie net starte (as se waarden net registrearre yn opstarten).

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

Jo kinne ek sykje nei bestannen dy't skriuwber binne foar elke brûker.

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

De metoade is frij goed bekend. Erfarne systeembehearders brûke it kommando chmod foarsichtich. Op it ynternet beskriuwt de grutte mearderheid fan hantliedingen lykwols it ynstellen fan maksimale rjochten. De "as it allinich wurket" oanpak fan sûnder ûnderfining systeembehearders makket mooglikheden foar eskalaasje fan privileezjes yn prinsipe. As it mooglik is, is it better om te sjen yn 'e kommandoskiednis foar ûnfeilich gebrûk fan chmod.

chmod +w /path 
chmod 777 /path

Shell tagong krije ta oare brûkers

Wy sjogge nei de list mei brûkers yn /etc/passwd. Wy jouwe oandacht oan dyjingen dy't in shell hawwe. Jo kinne dizze brûkers brute - it is mooglik dat troch de resultearjende brûker it úteinlik mooglik is om privileezjes te fergrutsjen.

Om feiligens te ferbetterjen, ried ik oan dat jo altyd folgje oan it prinsipe fan minste privileezje. It makket ek sin om tiid te besteegjen oan it kontrolearjen fan ûnfeilige konfiguraasjes dy't kinne bliuwe nei it oplossen fan problemen - dit is de "technyske plicht" fan 'e systeembehearder.

Self-skreaune koade

It is it wurdich om de útfierbere bestannen yn 'e thúsmap fan' e brûker en de webtsjinner (/var/www/, útsein as oars oantsjutte) goed te besjen. Dizze bestannen kinne blike te wêzen in folslein ûnfeilige oplossing en befetsje ongelooflijke krukken. Fansels, as jo in soarte fan ramt hawwe yn 'e webserver-map, makket it gjin sin om te sykjen nei nul-dei yn it as ûnderdiel fan in pentest, mar it is oan te rieden om oanpaste oanpassingen, plugins en komponinten te finen en te studearjen.

Om de feiligens te fergrutsjen, is it better, as it mooglik is, om te foarkommen fan it brûken fan bewiisbrieven yn selsskreaune skripts, lykas ek mooglik gefaarlike funksjonaliteit, lykas it lêzen fan /etc/shadow of it manipulearjen fan id_rsa.

Ferheging fan privileezjes troch eksploitaasje fan kwetsberens

Foardat jo besykje privileezjes te eskalearjen troch eksploitaasje, is it wichtich om te begripen it oerdragen fan bestannen nei de doelhost. Neist de gewoane ark lykas ssh, ftp, http (wget, curl) is d'r in gehiel "zoo" fan mooglikheden.

Om systeemfeiligens te ferbetterjen, update it regelmjittich nei de lêste stâl ferzjes, en besykje ek distribúsjes te brûken ûntworpen foar Enterprise. Oars is it seldsum, mar d'r binne situaasjes wêr't apt upgrade it systeem net wurket.

It benutten fan tsjinsten dy't rinne ûnder de root-brûkerskontekst

Guon Linux-tsjinsten rinne as root. Se kinne fûn wurde mei it kommando ps aux | grep root. Yn dit gefal kin de tsjinst net op it ynternet advertearre wurde en lokaal beskikber wêze. As it iepenbiere eksploaten hat, kinne se feilich brûkt wurde: in tsjinstûngelok yn gefal fan mislearring is folle minder kritysk as in crash fan it OS.

ps -aux | grep root # Linux

It meast súksesfolle gefal kin beskôge wurde as de wurking fan in hacked tsjinst yn 'e kontekst fan' e root-brûker. Operaasje fan 'e SMB-tsjinst jout befoarrjochte SYSTEM tagong op Windows-systemen (bygelyks fia ms17-010). Dit is lykwols net gewoan op Linux-systemen, dus jo kinne in protte tiid besteegje oan it eskalearjen fan privileezjes.

It benutten fan Linux Kernel-kwetsberheden

Dit is it paad dat jo as lêste moatte nimme. Mislearre operaasje kin liede ta in systeemcrash, en yn it gefal fan in trochstart kinne guon tsjinsten (ynklusyf dyjingen wêrmei't de earste shell waard krigen) miskien net opstarte. It bart dat de behearder gewoan fergeat it kommando systemctl ynskeakelje te brûken. Plus it sil in soad ûntefredenens mei jo wurk feroarsaakje as de operaasje net ôfpraat waard.
As jo ​​​​beslute om de boarnekoades fan exploitdb te brûken, wês dan wis dat jo de opmerkingen lêze oan it begjin fan it skript. Under oare dingen stiet meastal hoe't jo in opjûne eksploit korrekt kompilearje. As jo ​​​​te lui binne of it "juster" moatte dwaan fanwege deadlines, kinne jo sykje nei repositories mei al gearstalde eksploaten, bygelyks. Jo moatte lykwols begripe dat jo yn dit gefal in baarch yn 'e poke krije. Oan 'e oare kant, as in programmeur oant de byte begriep hoe't in kompjûter wurket en de software dy't it brûkt, soe hy yn syn heule libben gjin inkele rigel koade skriuwe.

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

Metasploit

Om de ferbining te fangen en te behanneljen, is it altyd better om de exploit / multi / handler module te brûken. It wichtichste is om de juste lading yn te stellen, bygelyks generic/shell/reverse_tcp of generic/shell/bind_tcp. De shell produsearre troch Metasploit kin opwurdearre wurde nei Meterpreter mei de post/multi/manage/shell_to_meterpreter module. Mei Meterpreter kinne jo it post-eksploitaasjeproses automatisearje. Bygelyks, de post/multi/recon/local_exploit_suggester-module kontrolearret it platfoarm, arsjitektuer en entiteiten dy't nedich binne foar eksploitaasje en suggerearret Metasploit-modules om privileezjes op it doelsysteem te eskalearjen. Mei tank oan Meterpreter komt eskalearjende privileezjes soms del op it starten fan de fereaske module, mar hacking sûnder te begripen wat der ûnder de kap bart is net "wier" (jo moatte noch in rapport skriuwe).

tools

Tools foar it automatisearjen fan lokale ynformaasjekolleksje sille jo in protte muoite en tiid besparje, mar se kinne it paad nei eskalaasje fan privileezjes net folslein identifisearje, benammen yn it gefal fan eksploitaasje fan kernel-kwetsberheden. Automatisearringsynstruminten sille alle nedige kommando's foar jo útfiere om ynformaasje oer it systeem te sammeljen, mar it is ek wichtich om te kinnen analysearje ûntfongen gegevens. Ik hoopje dat myn artikel sil nuttich wêze foar jo yn dit ferbân. Fansels binne d'r folle mear ark dan ik hjirûnder sil listje, mar se dogge allegear sawat itselde ding - dit is earder in kwestje fan smaak.

Linpeas

Hiel resinte Tula, de earste commit datearret út jannewaris 2019. Myn favorite ark op it stuit. It punt is dat it de meast nijsgjirrige vectoren fan privileezje-eskalaasje markearret. Iens, it is handiger om in saakkundige beoardieling op dit nivo te krijen dan monolityske rauwe gegevens te parsearjen.

LinEnum

Myn twadde favorite ark, it sammelet en organisearret ek gegevens krigen as gefolch fan lokale enumeraasje.

Linux-exploit-suggester (1,2)

Dizze eksploitaasje sil it systeem analysearje foar passende eksploitaasjebetingsten. Yn feite, it sil dwaan it wurk identyk oan de Metasploit module local_exploit_suggester, mar sil biede keppelings nei exploit-db boarne koades ynstee fan Metasploit modules.

Linuxprivchecker

Dit skript sil in grutte hoemannichte ynformaasje sammelje en organisearje yn seksjes dy't nuttich kin wêze foar it foarmjen fan in fektor foar it fergrutsjen fan privileezjes.

In oare kear gean ik yn detail yn ferheging fan privileezjes yn Linux OS fia suid/sgid.

Boarne: www.habr.com

Add a comment