Unë jam root. Të kuptojmë rritjen e privilegjeve në OS Linux

Gjatë tremujorit të parë të vitit 2020, unë kalova kohën duke u përgatitur për ekzaminimin OSCP. Kërkimi i informacionit në Google dhe shumë përpjekje të "verbër" më morën të gjithë kohën e lirë. Sidomos ishte e vështirë të kuptoje mekanizmat e rritjes së privilegjeve. Kursi PWK i kushton shumë vëmendje kësaj teme, por gjithmonë mungojnë materialet metodologjike. Në internet ka shumë manuale me komanda të dobishme, por nuk jam për ndjekjen verbalisht të rekomandimeve pa kuptuar se çfarë do të sjellin ato.

Dëshiroj të ndaj me ju atë që kam arritur të mësoj gjatë përgatitjes dhe kalimit të suksesshëm të ekzaminimit (duke përfshirë periudha të shkurtra në Hack The Box). Kam ndjerë një falenderim të thellë për çdo informacion të vogël që më ndihmoi të kaloj rrugën Try Harder më në mënyrë të vetëdijshme, tani është koha ime të nderoj komunitetin.

Dua t'ju ofroj një manual për rritjen e privilegjeve në OS Linux, i cili përfshin një analizë të vektorëve më të zakonshëm dhe tipareve përkatëse që do t'ju nevojiten patjetër. Shpesh, mekanizmat e rritjes së privilegjeve janë mjaft të thjeshtë, vështirësitë lindin gjatë strukturimit dhe analizës së informacionit. Prandaj, vendosa të filloj me një "tur eksplorues" dhe më pas të shqyrtoj çdo vektor në një artikull të veçantë. Shpresoj se do t'ju kursej kohë në studimin e temës.

Unë jam root. Të kuptojmë rritjen e privilegjeve në OS Linux

Pra, pse rritja e privilegjeve është e mundur në vitin 2020, nëse metodat janë të njohura për një kohë shumë të gjatë? Në të vërtetë, me një trajtim të mençur të sistemit nga përdoruesi, është vërtet e pamundur të rriten privilegjet në të. Problemi kryesor global që krijon këto mundësi është konfigurimi i pasigurt. Prania e versioneve të vjetra të softuerit në sistem, që përmbajnë vulnerabilitete, gjithashtu është një rast specifik i konfigurimit të pasigurt.

Rritja e privilegjeve përmes konfigurimit të pasigurt

Së pari, le të shqyrtojmë konfigurimin e pasigurt. Të fillojmë nga specialistët e IT shpesh përdorin manuale dhe burime si stackoverflow, shumë prej të cilave përmbajnë komanda dhe konfigurime të pasigurta. Një shembull i qartë është lajm fakti që kodi më i kopjuar nga stackoverflow përmbante një gabim. Një administrator i përvojshëm do ta shihte gabimin, por kjo është në një botë ideale. Edhe specialistët e mençur gjatë ngarkesës së rritur të punës kanë mundësi të bëjnë gabime. Imagjinoni se administratori është duke përgatitur dhe miratuar dokumentacionin për një tender të ri, njëkohësisht po merret me një teknologji të re që do të implementohet në tremujorin e ardhshëm, duke zgjidhur herë pas here problemet e mbështetjes për përdoruesit. Dhe papritmas i jepet një detyrë për të ngritur disa virtualizime dhe për të instaluar mbi to shërbimet. Si mendoni, sa është mundësia që administratori thjesht të mos e vë re gabimin? Më pas specialistët ndryshojnë, por “kosti” mbeten, ndërsa kompanitë gjithmonë përpiqen të minimizojnë shpenzimet, përfshirë atyre për IT-të.

Psevdoshkëll dhe jailbreak

Një shell sistemor, i marrë gjatë fazës së funksionimit, shpesh është i kufizuar, sidomos nëse e keni fituar atë përmes një shkeljeje të përdoruesit të serverit web. Për shembull, kufizimet e shell-it mund të pengojnë përdorimin e komandës sudo me daljen e gabimit:

sudo: no tty present and no askpass program specified

Pas marrjes së shell-it, rekomandoj të krijoni një terminal të plotë, për shembull, me ndihmën e Python.

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

Do të pyesni: «Pse më duhen një mijë komanda, nëse mund të përdor një, për shembull, për transferimin e skedarëve?» Problemi është se sistemet mund të konfigurohen ndryshe, në serverin tjetër mund të mos jetë i instaluar Python-i, por të jetë Perl. Aftësia është të kesh mundësi të bësh në sistem gjëra të njohura pa instrumentet e zakonshme. Lista e plotë e mundësive mund të gjendet këtu.

Një shell me privilegje të ulëta mund të merrni duke përdorur komanda 1 dhe komanda 2 (e çuditshme, madje edhe GIMP).

Shikimi i historisë së komandave

Linux mblodhi historinë e të gjitha komandave të ekzekutuara në skedarin ~/bash_history. Nëse serveri përdoret aktivisht dhe historia e tij nuk është pastruar, ka një mundësi të madhe për të gjetur në këtë skedar akreditive. Të pastroni historinë është thjesht e pakëndshme. Nëse administratori është i detyruar të zgjedhë komanda të gjatë me dhjetëra nivele, sigurisht që do të ishte më e lehtë të thërriste këtë komandë nga historia sesa ta shkruante përsëri. Plus që shumë nuk e dinë këtë «hack». Nëse në sistem janë të pranishme shell-e alternative si Zsh ose Fish, ato mbajnë historinë e tyre. Për të shfaqur historinë e komandave në çdo shell, mjafton të shkruani komandën history.

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

Ekziston hosting i ndarë, ku serveri përdoret për hostimin e disa faqeve. Zakonisht, në këtë konfigurim, për çdo burim krijohet një përdorues i veçantë me një direktori shtëpiake të veçantë dhe një host virtual. Pra, nëse konfigurimi nuk është i saktë, në direktorine rrënjësore të burimeve web mund të zbuloni skedarin .bash_history.

Kërkimi i fjalëkalimeve në sistemin e skedarëve dhe sulmet ndaj sistemeve përreth

Skedaret e konfigurimit të shërbimeve të ndryshme mund të jenë të aksesueshëm për lexim nga përdoruesi juaj aktual. Atje mund të gjeni kredenciale të qarta — fjalëkalime për qasje në bazën e të dhënave ose shërbime të tjera. Një fjalëkalim i njëjtë mund të përdoret për qasje në bazën e të dhënave dhe për autorizimin e përdoruesit root (credential staffing).
Ndonjëherë, kredencialet e gjetura i përkasin shërbimeve në hoste të tjera. Zhvillimi i sulmit në infrastrukturë përmes një hosti të komprometuar nuk është më pak efikas se shfrytëzimi i hosteve të tjera. Sistemet përreth gjithashtu mund të gjenden duke kërkuar IP adresat në sistemin e skedarëve.

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Kërkoni fjalinë password (pa ndjeshmëri) në ato direktori
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 #IP-të brenda logjeve

Nëse në hostin e komprometuar ka një aplikacion web që është i aksesueshëm nga interneti, është më mirë ta ekskludoni logun e tij nga kërkimi i IP adresave. Adresat e përdoruesve të burimit në internet nuk do të jenë të dobishme, ndërsa adresat e rrjetit të brendshëm (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) dhe vendndodhjet e tyre nga logjet, mund të jenë të rëndësishme.

Sudo

Komanda sudo i jep përdoruesit mundësinë për të kryer një komandë në kontekstin e root me fjalëkalimin e tij ose madje pa e përdorur atë. Shumë operacione në Linux kërkojnë privilegje root, megjithatë punimi si root konsiderohet një praktikë shumë e gabuar. Në vend të kësaj, është më mirë të aplikoni leje selektive për ekzekutimin e komandave në kontekstin e root. Megjithatë, shumë mjete Linux, përfshirë ato standarde si vi, mund të përdoren për të rritur privilegjet në mënyra të ligjshme. Për të kërkuar një mënyrë të përshtatshme, rekomandoj të shqyrtoni. këtu.

E para e parë që duhet të bëni, sapo të keni qasje në sistem, është të ekzekutoni komandën sudo -l. Kjo do të tregojë lejet për përdorimin e komandës sudo. Nëse merrni një përdorues pa fjalëkalim (p.sh., apache ose www-data), mundësia për të rritur privilegjet përmes sudo është e pamundur. Kur përdorni sudo, sistemi do të kërkojë fjalëkalimin. Me komandën passwd, vendosja e një fjalëkalimi gjithashtu nuk do të funksionojë, pasi ajo do të kërkojë fjalëkalimin aktual të përdoruesit. Por nëse sudo është megjithatë e arritshme, në thelb duhet të kërkoni:

  • çdo interpreter, çdo njeri mund të spavtojë shell (PHP, Python, Perl);
  • çdo redaktues teksti (vim, vi, nano);
  • çdo shikues (less, more);
  • çdo mundësi për të punuar me sistemin e skedarëve (cp, mv);
  • tool që kanë dalje në bash, interaktive ose në formën e komandave ekzekutivë (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Në Internet ka shumë manuale që rekomandojnë që të mblidhen të gjitha komandat suid/sgid, por artikujt e rrallë japin konkretësi se çfarë të bëjmë me këto programe. Mundësi për rritjen e privilegjeve, që nuk llogarisin aplikimin e eksploitëve, mund të gjenden këtu. Gjithashtu disa skedarë ekzekutivë kanë vulnerabilitete specifike për versionin e OS-it, për shembull.

Në një botë ideale, duhet të kaloni të gjitha paketat e instaluara të paktën përmes searchsploit. Në praktikë, kjo duhet bërë me programet më të njohura si sudo. Gjithashtu gjithmonë ka mundësinë për të përdorur dhe mbështetur zhvillimin e veglave automatizuar që do të ndriçojnë skedarët ekzekutivë interesantë, nga pikëpamja e rritjes së privilegjeve, me bitet e vendosura suid/sgid. Lista e këtyre veglave do të paraqitet në seksionin përkatës të artikullit.

Skripte të disponueshme për të shkruar, të ekzekutuara nga Cron ose Init, në kontekstin e Root

Detyrat cron mund të ekzekutohen në kontekstin e përdoruesve të ndryshëm, përfshirë root. Nëse në cron është vendosur një detyrë me një lidhje në skedarin ekzekutiv, dhe ai është i disponueshëm për ju për të shkruar, lehtë mund të zëvendësohet me një të dëmshme dhe të ekzekutohet rritja e privilegjeve. Në këtë rast, skedarët me detyrat cron janë në dispozicion për lexim nga çdo përdorues.

ls -la /etc/cron.d  # tregoni detyrat cron 

Përllogjikisht, situata është e ngjashme me init. Dallimi është se detyrat në cron ekzekutohen periodikisht, ndërsa në init — gjatë startit të sistemit. Për shfrytëzimin e tij do të nevojitet rinisja e sistemit, dhe një pjesë e shërbimeve mund të mos ngrihen (nëse ato nuk janë regjistruar në fillimin automatik).

ls -la /etc/init.d/  # trego scripts e init-it 

Gjithashtu mund të kërkoni për skedarë që janë të shkruashëm për çdo përdorues.

find / -perm -2 -type f 2>/dev/null # gjej skedarë që mund të shkruhen nga të gjithë

Metoda është mjaft e njohur, administratoret e sistemeve me përvojë e përdorin me kujdes komandën chmod. Megjithatë, në rrjetin e gjerë, në shumicën dërrmuese të manueleve përshkruhet caktimi i privilegjeve maksimale. Qasja e administratoreve të paekspertuar "mjafton që të funksionojë" krijon mundësi për rritje privilegjesh në parim. Nëse ka mundësi, është më mirë të kërkoni në historinë e komandave përdorim të pasigurt të chmod.

chmod +w /path 
chmod 777 /path

Marrja e aksesit në shell-in e përdoruesve të tjerë

Shikoni listën e përdoruesve në /etc/passwd. Kushtoni vëmendje atyre që kanë shell. Mund të provoni të thyejnë këta përdorues — nuk përjashtohet që përmes përdoruesit të fituar në fund të mund të arrini rritjen e privilegjeve.

Për të rritur sigurinë, rekomandoj të respektoni gjithmonë parimin e privilegjeve minimale. Ka kuptim gjithashtu të investoni kohë në kontrollimin e konfigurimeve të pasigurta që mund të kenë mbetur pas zgjidhjeve të problemeve — kjo është "borxhi teknik" i administratorit të sistemit.

Kod i shkruar vetë

Është thelbësore të shikoni me kujdes skedarët e ekzekutueshëm në direktorinë e shtëpisë së përdoruesit dhe serverit të uebit (/var/www/, nëse nuk është caktuar ndryshe). Këta skedarë mund të rezultojnë zgjidhje të pasigurta dhe të përmbajnë defekte të rrezikshme. Natyrisht, nëse keni ndonjë framework në direktorinë e serverit të uebit, nuk ka shumë kuptim të kërkoni për zero-day në kuadër të një testimi të depërtimit, megjithatë, është e rekomandueshme të gjeni dhe të studioni përmirësimet e zakoneshme, plugin-at dhe komponentët.

Për të rritur sigurinë, është më mirë të shmangni përdorimin e të dhënave të autentikimit në skedarët e shkruar vetë, si dhe funksionalitetet potencialisht të rrezikshme, për shembull leximi i /etc/shadow ose manipulimi me id_rsa.

Rritja e privilegjeve përmes shfrytëzimit të vulnerabiliteteve

Para se të provoni të rrisni privilegjet përmes shfrytëzimit, është e rëndësishme të kuptoni transferimin e skedarëve në hostin e targetuar. Përveç mjeteve të zakonshme si ssh, ftp, http (wget, curl) ekziston një "zoo" mundësish.

Për të rritur sigurinë e sistemit, përditësoni atë rregullisht në versionet stabilë versioneve dhe përpiquni të përdorni distribucione që janë të dizajnuara për Enterprise. Ndryshe, gjithsesi, ndodhin raste të rralla kur "apt upgrade" e bën sistemin jo funksional.

Eksplorimi i shërbimeve të nisura në kontekstin e përdoruesit root

Disa shërbime Linux funksionojnë nga përdoruesi me privilegje root. Ato mund të gjenden me komandën ps aux | grep root. Duke për këtë, shërbimi mund të mos shpallet në internet dhe të jetë i aksesueshëm vetëm lokal. Nëse ka exploit publik, mund të aplikoni ato pa frikë: rënia e shërbimit në rast dështimi është shumë më pak kritike sesa rënia e OS-së.

ps -aux | grep root # Linux

Rasti më i suksesshëm do të ishte funksionimi i një shërbimi të sulmuar në kontekstin e përdoruesit root. Eksplorimi i shërbimit SMB ofron akses privilegjuar SYSTEM në sistemet Windows (p.sh. përmes ms17-010). Megjithatë, në sistemet Linux kjo ndodh rrallë, kështu që mund të kaloni shumë kohë në rritjen e privilegjeve.

Eksplorimi i dobësive të bërthamës Linux

Ky është një rrugë që duhet ndjekur në fund të fundit. Një dështim i eksploitimit mund të çojë në rënien e sistemit dhe në rast të ribashkimit disa shërbime (duke përfshirë ato përmes të cilave u arrit inicialisht shell-in) mund të mos ngrihen. Ndonjëherë ndodh që administratori thjesht e harroi të aplikojë komandën systemctl enable. Po ashtu, kjo do të shkaktojë pakënaqësi nga puna juaj, nëse eksplorimi nuk ishte miratuar.
Nëse vendosni të përdorni kodet burimore nga exploitdb, sigurohuni që të lexoni komentet në fillim të skriptit. Poshtë, zakonisht shkruhet se si duhet të kompilohet saktë ky exploit. Nëse jeni të lodhur ose keni afate të shkurtër, mund të kërkoni depo që kanë eksploitë të kompiluara në mënyrë tashmë. për shembull. Megjithatë, duhet të kuptoni se në këtë rast do të merrni një "macë në çantë". Nga ana tjetër, nëse programuesi do të dinte deri në bajt si është ndërtuar kompjuteri dhe softi që përdor, ai do të kishte shkruar një linjë kodi gjatë gjithë jetës së tij.

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

Metasploit

Për të kapur dhe përpunuar një lidhje, gjithmonë është më mirë të përdorni modulit exploit/multi/handler. E rëndësishme është të vendosni payload-in e duhur, për shembull, generic/shell/reverse_tcp ose generic/shell/bind_tcp. Shell-in e marrë në Metasploit mund ta përmirësoni në Meterpreter duke përdorur modulit post/multi/manage/shell_to_meterpreter. Duke pasur Meterpreter, mund të automatizoni procesin e post-ekspoitimit. Për shembull, moduli post/multi/recon/local_exploit_suggester kontrollon platformën, arkitekturën dhe entitetet e nevojshme për shfrytëzim dhe sugjeron modulet Metasploit për rritjen e privilegjeve në sistemin target. Falë Meterpreter, rritja e privilegjeve ndonjëherë reduktohet në ekzekutimin e modulit të duhur, megjithatë, thyerja pa kuptuar se çfarë ndodh nën kapak nuk është "trues" (ju ende duhet të shkruani një raport).

Mjetet

Mjetet e automatizimit për mbledhjen e informacionit lokal do t'ju kursejnë shumë energji dhe kohë, megjithatë vetë ato nuk janë të afta të zbulojnë plotësisht rrugën e rritjes së privilegjeve, sidomos në rastin e shfrytëzimit të dobësive të bërthamës. Mjetet e automatizimit do të ekzekutojnë për ju të gjitha komandat e nevojshme për mbledhjen e informacionit rreth sistemit, por gjithashtu është e rëndësishme të jeni në gjendje të analizoni të dhënat e marra. Shpresoj që artikulli im do t'ju jetë i dobishëm në këtë. Sigurisht, ka shumë më tepër mjete sesa ato që do përmend më poshtë, megjithatë të gjitha bëjnë më shumë ose më pak të njëjtën gjë - këtu, më tepër është çështje shijesh.

Linpeas

Një mjet mjaft i ri, komiti i parë është datuar në janar 2019. Deri tani, është mjeti im i preferuar. Qëllimi është që ai të theksojë vektorët më interesantë të rritjes së privilegjeve. Pranojeni, është më e lehtë të merrni një vlerësim ekspert menjëherë, sesa të shqyrtoni të dhëna të pakontrolluara.

LinEnum

Mjeti im i dytë i preferuar, gjithashtu mbledh dhe sistematizon të dhënat e marra nga enumerimi lokal.

Linux-exploit-suggester (1,2)

Ky eksploit do të analizoje sistemin për kushtet e përshtatshme për eksploitë. Në thelb, do të bëjë një punë të ngjashme me modulit Metasploit local_exploit_suggester, por do të sugjerojë jo modulet Metasploit, por lidhje me kodet burimore në exploit-db.

Linuxprivchecker

Ky skript do të mbledhë dhe sistematizojë shumë informacion të dobishëm të ndarë në seksione, që mund të jetë e dobishme për formimin e një vektori rritjeje të privilegjeve.

Një herë tjetër do ta shqyrtoj detajisht rritjen e privilegjeve në sistemin operativ Linux përmes suid/sgid.

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster