ja som root. Pochopenie eskalácie privilégií operačného systému Linux

Prvý štvrťrok 2020 som strávil prípravou na skúšku OSCP. Hľadanie informácií na Googli a množstvo „slepých“ pokusov mi zabrali všetok voľný čas. Obzvlášť ťažké bolo pochopiť mechanizmy zvyšovania privilégií. V kurze PWK sa tejto téme venuje veľká pozornosť, no učebných materiálov nie je nikdy dosť. Na internete je veľa príručiek s užitočnými príkazmi, ale nie som zástancom slepého dodržiavania odporúčaní bez toho, aby som pochopil, k čomu to povedie.

Rád by som sa s vami podelil o to, čo som sa naučil počas prípravy a úspešného absolvovania skúšky (vrátane periodických nájazdov do Hack The Box). Cítil som silný pocit vďačnosti za každú informáciu, ktorá mi pomohla kráčať po ceste Skús tvrdšie vedomejšie, teraz je môj čas vrátiť to komunite.

Chcem vám dať manuál, ako eskalovať privilégiá v OS Linux, ktorý obsahuje analýzu najbežnejších vektorov a súvisiacich funkcií, ktoré sa vám určite budú hodiť. Samotné mechanizmy zvyšovania privilégií sú často pomerne jednoduché, ťažkosti vznikajú pri štruktúrovaní a analýze informácií. Preto som sa rozhodol začať s „prehliadkou“ a potom zvážiť každý vektor v samostatnom článku. Dúfam, že vám ušetrím čas skúmaním témy.

ja som root. Pochopenie eskalácie privilégií operačného systému Linux

Prečo je teda eskalácia privilégií vôbec možná v roku 2020, ak sú metódy dobre známe už veľmi dlho? V skutočnosti, ak používateľ správne narába so systémom, naozaj nebude možné zvýšiť privilégiá v ňom. Hlavným globálnym problémom, ktorý vyvoláva takéto príležitosti, je nezabezpečená konfigurácia. Prítomnosť zastaraných verzií softvéru, ktoré obsahujú zraniteľné miesta v systéme, je tiež špeciálnym prípadom nebezpečnej konfigurácie.

Eskalácia privilégií prostredníctvom nezabezpečenej konfigurácie

Po prvé, poďme sa vysporiadať s nezabezpečenou konfiguráciou. Začnime s IT odborníci často používajú príručky a zdroje, ako je stackoverflow, z ktorých mnohé obsahujú nebezpečné príkazy a konfigurácie. Pozoruhodný príklad - správy že kód najviac skopírovaný zo stackoverflow obsahoval chybu. Skúsený admin uvidí zárubňu, ale toto je v ideálnom svete. Dokonca aj kompetentní špecialisti zvýšené pracovné zaťaženie schopný robiť chyby. Predstavte si, že správca pripravuje a koordinuje dokumentáciu pre ďalší tender a zároveň sa ponára do novej technológie, ktorá má byť implementovaná v nasledujúcom štvrťroku, pričom pravidelne rieši problémy s užívateľskou podporou. A potom dostane za úlohu rýchlo nastaviť pár virtuálnych strojov a nasadiť na nich služby. Aká je podľa vás pravdepodobnosť, že si admin jednoducho nevšimne zásek? Potom sa zmenia špecialisti, ale barličky zostávajú, zatiaľ čo spoločnosti sa vždy snažia minimalizovať náklady, a to aj na IT personál.

Pseudoshell a útek z väzenia

Systémový shell získaný vo fáze využívania je často obmedzený, najmä ak ste ho získali hacknutím používateľa webového servera. Napríklad obmedzenia shellu vám môžu zabrániť spustiť príkaz sudo a spôsobiť chybu:

sudo: no tty present and no askpass program specified

Keď už máte shell, odporúčam vytvoriť si plnohodnotný terminál, napríklad pomocou Pythonu.

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

Môžete sa spýtať: „Načo potrebujem tisíc príkazov, keď jeden môžem použiť napríklad na prenos súborov? Faktom je, že systémy sú nakonfigurované inak, daný hostiteľ nemusí mať nainštalovaný Python, ale môže mať Perl. Zručnosťou je vedieť robiť známe veci v systéme bez známych nástrojov. Kompletný zoznam funkcií nájdete tu.

Nízkoprivilegovaný shell možno získať pomocou tímy 1 и tímy 2 (prekvapivo aj GIMP).

Zobraziť históriu príkazov

Linux zhromažďuje históriu všetkých vykonaných príkazov do súboru ~ / .bash_history. Ak sa server aktívne používa a jeho história nie je vymazaná, existuje vysoká pravdepodobnosť nájdenia poverení v tomto súbore. Vymazanie histórie je jednoducho nepohodlné. Ak je administrátor nútený vyberať desaťposchodové príkazy cez , bude pre neho samozrejme pohodlnejšie volať tento príkaz z histórie, ako ho zadávať znova. Navyše veľa ľudí o tomto „hacknutí“ nevie. Ak sú v systéme alternatívne mušle ako Zsh alebo Fish, majú svoju vlastnú históriu. Ak chcete zobraziť históriu príkazov v ľubovoľnom prostredí, stačí zadať históriu príkazov.

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

Existuje zdieľaný hosting, pri ktorom sa server používa na hosťovanie niekoľkých webových stránok. Pri tejto konfigurácii má každý prostriedok zvyčajne vlastného používateľa so samostatným domovským adresárom a virtuálnym hostiteľom. Takže, ak je nakonfigurovaný nesprávne, môžete nájsť súbor .bash_history v koreňovom adresári webového zdroja.

Hľadanie hesiel v súborovom systéme a útoky na susedné systémy

Váš aktuálny používateľ môže čítať konfiguračné súbory pre rôzne služby. V nich môžete nájsť prihlasovacie údaje vo forme čistého textu - heslá pre prístup k databáze alebo súvisiacim službám. Rovnaké heslo možno použiť na prístup k databáze aj na autorizáciu používateľa root (obsadzovanie poverení).
Stáva sa, že nájdené poverenia patria službám na iných hostiteľoch. Vyvinutie útoku na infraštruktúru prostredníctvom kompromitovaného hostiteľa nie je o nič horšie ako zneužívanie iných hostiteľov. Susedné systémy je možné nájsť aj vyhľadaním IP adries v súborovom systéme.

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

Ak má napadnutý hostiteľ webovú aplikáciu prístupnú z internetu, je lepšie vylúčiť jej protokoly z hľadania IP adries. Adresy používateľov zdrojov z internetu pre nás pravdepodobne nebudú užitočné, ale adresy internej siete (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) a kam idú, súdiac podľa protokolov , môže byť zaujímavé.

sudo

Príkaz sudo dáva používateľovi možnosť vykonať príkaz v koreňovom kontexte pomocou vlastného hesla alebo bez použitia hesla. Mnoho operácií v Linuxe vyžaduje oprávnenia root, ale spustenie ako root sa považuje za veľmi zlý postup. Namiesto toho je lepšie použiť selektívne povolenie na vykonávanie príkazov v koreňovom kontexte. Mnoho nástrojov Linuxu, vrátane štandardných nástrojov, ako je vi, však možno použiť na eskaláciu privilégií legitímnym spôsobom. Pre nájdenie vhodnej metódy odporúčam hľadať tu.

Prvá vec, ktorú musíte urobiť, keď získate prístup do systému, je spustiť príkaz sudo -l. Zobrazí sa povolenie na použitie príkazu sudo. Ak sa získa používateľ bez hesla (napríklad apache alebo www-data), vektor eskalácie privilégií cez sudo je nepravdepodobný. Pri použití sudo si systém vypýta heslo. Heslo nebude možné nastaviť ani príkazom passwd, ktorý si vyžiada aktuálne heslo používateľa. Ale ak je sudo stále k dispozícii, potom v podstate musíte hľadať:

  • akýkoľvek tlmočník, ktokoľvek môže vytvoriť shell (PHP, Python, Perl);
  • akékoľvek textové editory (vim, vi, nano);
  • ľubovoľní diváci (menej, viac);
  • akákoľvek schopnosť pracovať so súborovým systémom (cp, mv);
  • Nástroje, ktoré majú výstup v bash, interaktívne alebo ako spustiteľný príkaz (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Na internete je veľa príručiek, ktoré odporúčajú zhromažďovať všetky príkazy suid/sgid, ale vzácny článok uvádza podrobnosti o tom, čo robiť s týmito programami. Možnosti eskalácie privilégií, ktoré nezohľadňujú používanie exploitov, možno nájsť tu. Množstvo spustiteľných súborov má tiež špecifické chyby zabezpečenia pre verziu operačného systému, napríklad.

V ideálnom svete by ste všetky nainštalované balíky spúšťali aspoň cez searchsploit. V praxi by sa to malo robiť pomocou najpopulárnejších programov, ako je sudo. Vždy je tu tiež možnosť využiť a podporiť vývoj automatizovaných nástrojov, ktoré zvýraznia zaujímavé, z pohľadu eskalácie privilégií, spustiteľné súbory s nastavenými bitmi suid/sgid. Zoznam takýchto nástrojov poskytnem v príslušnej časti článku.

Zapisovateľné skripty spúšťané Cron alebo Init v kontexte Root

Cron úlohy môžu byť spustené v rôznych užívateľských kontextoch, vrátane root. Ak je úloha cron nastavená s odkazom na spustiteľný súbor a môžete ju zapisovať, možno ju ľahko nahradiť škodlivou úlohou a eskalovať privilégiá. V predvolenom nastavení sú však súbory s úlohami cron čitateľné všetkým používateľom.

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

Podobná situácia je aj s init. Rozdiel je v tom, že úlohy v crone sa vykonávajú pravidelne a v init - pri štarte systému. Operácia bude vyžadovať reštart systému a niektoré služby sa nemusia spustiť (ak neboli zaregistrované pri spustení).

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

Môžete tiež vyhľadávať súbory, do ktorých môže zapisovať ktorýkoľvek používateľ.

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

Metóda je pomerne dobre známa, skúsení správcovia systému opatrne používajú príkaz chmod. Na internete však prevažná väčšina príručiek popisuje nastavenie maximálnych práv. Prístup neskúsených systémových administrátorov „len aby to fungovalo“ v zásade vytvára príležitosti na eskaláciu privilégií. Ak je to možné, je lepšie vyhľadať v histórii príkazov nebezpečné použitie chmod.

chmod +w /path 
chmod 777 /path

Získanie prístupu k shellu pre ostatných používateľov

Pozeráme sa na zoznam používateľov v /etc/passwd. Venujeme pozornosť tým, ktorí majú škrupinu. Týchto používateľov môžete brutálne ohroziť – je možné, že prostredníctvom výsledného používateľa bude nakoniec možné zvýšiť privilégiá.

Na zlepšenie bezpečnosti vám odporúčam, aby ste vždy dodržiavali zásadu najmenšieho privilégia. Má tiež zmysel tráviť čas kontrolou nebezpečných konfigurácií, ktoré by mohli zostať po odstránení problémov - to je „technická povinnosť“ správcu systému.

Vlastnoručne napísaný kód

Stojí za to sa bližšie pozrieť na spustiteľné súbory v domovskom adresári používateľa a na webovom serveri (/var/www/, pokiaľ nie je uvedené inak). Tieto súbory sa môžu ukázať ako úplne nebezpečné riešenie a môžu obsahovať neuveriteľné barličky. Samozrejme, ak máte v adresári web servera nejaký framework, nemá zmysel v ňom hľadať zero-day ako súčasť pentestu, ale odporúča sa nájsť a preštudovať si vlastné modifikácie, pluginy a komponenty.

Pre zvýšenie bezpečnosti je lepšie, ak je to možné, vyhnúť sa používaniu prihlasovacích údajov v skriptoch, ktoré si sami napíšu, ako aj potenciálne nebezpečným funkciám, ako je čítanie /etc/shadow alebo manipulácia s id_rsa.

Zvýšenie privilégií prostredníctvom využívania slabých miest

Pred pokusom o eskaláciu privilégií prostredníctvom vykorisťovania je dôležité pochopiť prenos súborov do cieľového hostiteľa. Okrem bežných nástrojov ako ssh, ftp, http (wget, curl) existuje aj celok „zoo“ možností.

Ak chcete zlepšiť bezpečnosť systému, pravidelne ho aktualizujte na najnovšiu verziu stabilný verzie a tiež skúste použiť distribúcie určené pre Enterprise. V opačnom prípade je to zriedkavé, ale existujú situácie, keď aktualizácia apt spôsobí nefunkčnosť systému.

Využívanie služieb spustených v kontexte užívateľa typu root

Niektoré služby Linuxu bežia ako root. Možno ich nájsť pomocou príkazu ps aux | koreň grepu. V tomto prípade nemusí byť služba inzerovaná na internete a môže byť dostupná lokálne. Ak má verejné exploity, môžu sa bezpečne používať: zlyhanie služby v prípade zlyhania je oveľa menej kritické ako zlyhanie operačného systému.

ps -aux | grep root # Linux

Za najúspešnejší prípad možno považovať fungovanie hacknutej služby v kontexte užívateľa root. Prevádzka služby SMB poskytuje privilegovaný prístup SYSTEM na systémoch Windows (napríklad cez ms17-010). V systémoch Linux to však nie je bežné, takže môžete stráviť veľa času eskaláciou privilégií.

Využívanie zraniteľností jadra Linuxu

Toto je cesta, ktorou by ste sa mali vydať ako posledný. Neúspešná operácia môže viesť k zrúteniu systému a v prípade reštartu sa nemusia spustiť niektoré služby (vrátane tých, cez ktoré bol získaný prvotný shell). Stáva sa, že administrátor jednoducho zabudol použiť príkaz systemctl enable. Navyše spôsobí veľkú nespokojnosť s vašou prácou, ak operácia nebola dohodnutá.
Ak sa rozhodnete použiť zdrojové kódy z exploitdb, určite si prečítajte komentáre na začiatku skriptu. Okrem iného zvyčajne hovorí, ako správne skompilovať daný exploit. Ak ste príliš leniví alebo ste to museli urobiť „včera“ kvôli termínom, môžete hľadať úložiská s už skompilovanými exploitmi, napríklad. Mali by ste však pochopiť, že v tomto prípade dostanete prasa v žite. Na druhej strane, ak by programátor do bajtov chápal, ako počítač funguje a aký softvér používa, za celý život by nenapísal ani riadok kódu.

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

Metasploit

Aby ste zachytili a zvládli spojenie, je vždy lepšie použiť modul exploit/multi/handler. Hlavná vec je nastaviť správne užitočné zaťaženie, napríklad generic/shell/reverse_tcp alebo generic/shell/bind_tcp. Shell produkovaný Metasploit je možné upgradovať na Meterpreter pomocou modulu post/multi/manage/shell_to_meterpreter. S Meterpreter môžete automatizovať proces po exploatácii. Napríklad modul post/multi/recon/local_exploit_suggester kontroluje platformu, architektúru a entity potrebné na využitie a navrhuje modulom Metasploit zvýšiť privilégiá v cieľovom systéme. Vďaka Meterpreter sa eskalácia privilégií niekedy zníži až na spustenie požadovaného modulu, ale hackovanie bez pochopenia toho, čo sa deje pod kapotou, nie je „pravda“ (stále musíte napísať správu).

náradie

Nástroje na automatizáciu lokálneho zberu informácií vám ušetria veľa úsilia a času, ale samy o sebe nedokážu úplne identifikovať cestu k eskalácii privilégií, najmä v prípade zneužitia zraniteľností jadra. Automatizačné nástroje vykonajú všetky potrebné príkazy na zhromažďovanie informácií o systéme, ale je tiež dôležité vedieť analyzovať prijaté dáta. Dúfam, že môj článok bude pre vás v tomto smere užitočný. Samozrejme, existuje oveľa viac nástrojov, ako uvediem nižšie, ale všetky robia približne to isté - je to skôr vec vkusu.

Linpeas

Pomerne nedávna Tula, prvý záväzok sa datuje do januára 2019. Momentálne môj obľúbený nástroj. Ide o to, že vyzdvihuje najzaujímavejšie vektory eskalácie privilégií. Súhlasíte, že je vhodnejšie získať odborné posúdenie na tejto úrovni, než analyzovať monolitické nespracované údaje.

LineEnum

Môj druhý obľúbený nástroj, tiež zhromažďuje a organizuje údaje získané v dôsledku lokálneho sčítania.

Linux-exploit-suggester (1,2)

Toto využitie bude analyzovať systém pre vhodné podmienky využitia. V skutočnosti bude vykonávať rovnakú prácu ako modul Metasploit local_exploit_suggester, ale namiesto modulov Metasploit ponúkne odkazy na zdrojové kódy exploit-db.

Linuxprivchecker

Tento skript bude zhromažďovať a organizovať do sekcií veľké množstvo informácií, ktoré môžu byť užitočné na vytvorenie vektora na zvýšenie privilégií.

Inokedy prejdem do detailov zvýšenie oprávnení v OS Linux cez suid/sgid.

Zdroj: hab.com

Pridať komentár