Sóc arrel. Entendre l'escalada de privilegis del sistema operatiu Linux

Vaig passar el primer trimestre del 2020 preparant-me per a l'examen OSCP. La recerca d'informació a Google i molts intents "cecs" em van ocupar tot el temps lliure. Va resultar especialment difícil entendre els mecanismes per augmentar els privilegis. El curs PWK presta molta atenció a aquest tema, però els materials metodològics sempre no són suficients. Hi ha molts manuals a Internet amb ordres útils, però no sóc partidari de seguir cegament les recomanacions sense entendre cap a on portarà això.

M'agradaria compartir amb vosaltres el que vaig aconseguir aprendre durant la preparació i la superació de l'examen (incloses les incursions periòdiques a Hack The Box). Vaig sentir un profund sentit d'agraïment per cada informació que m'ha ajudat a recórrer el camí Try Harder de manera més conscient, ara és el meu moment de retornar a la comunitat.

Vull donar-vos una guia sobre l'escalada de privilegis al sistema operatiu Linux, que inclou una anàlisi dels vectors més comuns i les funcions relacionades que definitivament necessitareu. Sovint, els propis mecanismes d'escalada de privilegis són bastant senzills, sorgeixen dificultats a l'hora d'estructurar i analitzar la informació. Per tant, vaig decidir començar amb una "visita turística" i després considerar cada vector en un article separat. Espero estalviar-vos temps per estudiar el tema.

Sóc arrel. Entendre l'escalada de privilegis del sistema operatiu Linux

Aleshores, per què és possible l'escalada de privilegis fins i tot el 2020 si els mètodes són coneguts des de fa molt de temps? De fet, si l'usuari gestiona correctament el sistema, realment no serà possible augmentar-hi els privilegis. El principal problema global que dóna lloc a aquestes oportunitats és configuració insegura. La presència de versions de programari obsoletes que contenen vulnerabilitats al sistema també és un cas especial d'una configuració insegura.

Escalada de privilegis mitjançant una configuració insegura

Primer de tot, tractarem la configuració insegura. Comencem amb Els professionals informàtics sovint utilitzen manuals i recursos com stackoverflow, molts dels quals contenen ordres i configuracions no segures. Un exemple cridaner és les notícies que el codi més copiat de stackoverflow contenia un error. Un administrador experimentat veurà el brancal, però això és en un món ideal. Fins i tot professionals competents augment de la càrrega de treball capaç de cometre errors. Imagineu que l'administrador està preparant i aprovant la documentació per a la propera licitació, alhora que aprofundeix en la nova tecnologia que s'introduirà el proper trimestre, alhora que resol periòdicament les tasques de suport als usuaris. I després se li encomana la tasca d'aixecar ràpidament un parell de màquines virtuals i desplegar-hi serveis. Què en penseu, quina és la probabilitat que l'administrador simplement no s'adoni del brancal? Aleshores els especialistes canvien, però les crosses es mantenen, mentre que les empreses sempre s'esforcen per minimitzar els costos, inclosos els dels especialistes informàtics.

Pseudoshell i jailbreak

L'intèrpret d'ordres del sistema obtingut durant la fase de producció sovint és limitat, sobretot si l'heu obtingut piratejant un usuari de servidor web. Per exemple, les restriccions de l'intèrpret d'ordres poden impedir que utilitzeu l'ordre sudo amb un error:

sudo: no tty present and no askpass program specified

Després d'aconseguir un shell, recomano crear un terminal complet, per exemple amb Python.

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

Et preguntes: "Per què necessito mil ordres, si en puc utilitzar una, per exemple, per transferir fitxers?" El fet és que els sistemes estan configurats de manera diferent, al següent host pot ser que no s'instal·li Python, però Perl pot estar disponible. L'habilitat és poder fer coses familiars al sistema sense eines conegudes. Es pot trobar una llista completa de funcions aquí.

Es pot obtenir un shell de privilegis baixos utilitzant equips 1 и equips 2 (sorprenentment fins i tot GIMP).

Visualitza l'historial de comandes

Linux recopila un historial de totes les ordres executades en un fitxer ~ / .Bash_history. Si el servidor està en ús actiu i el seu historial no s'esborra, és molt probable que les credencials es trobin en aquest fitxer. Esborrar la història és banalment inconvenient. Si l'administrador es veu obligat a seleccionar ordres de deu nivells mitjançant , és clar, li serà més convenient cridar aquesta ordre des de l'historial que tornar-la a introduir. A més, molts no saben sobre aquest "pirateig". Si hi ha petxines alternatives com Zsh o Fish al sistema, tenen la seva pròpia història. Per mostrar l'historial d'ordres en qualsevol intèrpret d'ordres, només cal que escriviu l'historial d'ordres.

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

Hi ha allotjament compartit, en el qual el servidor s'utilitza per allotjar diversos llocs. Normalment, amb aquesta configuració, cada recurs té el seu propi usuari amb un directori d'inici separat i un host virtual. Per tant, si es configura incorrectament, podeu trobar el fitxer .bash_history al directori arrel del recurs web.

Trobar contrasenyes al sistema de fitxers i atacs a sistemes adjacents

Els fitxers de configuració de diversos serveis poden ser llegits pel vostre usuari actual. En ells, podeu trobar credencials en text clar: contrasenyes per accedir a la base de dades o serveis relacionats. La mateixa contrasenya es pot utilitzar tant per accedir a la base de dades com per autoritzar l'usuari root (personal de credencials).
Succeeix que les credencials trobades pertanyen a serveis d'altres amfitrions. El desenvolupament d'un atac a la infraestructura mitjançant un host compromès no és pitjor que l'explotació d'altres hosts. Els sistemes adjacents també es poden trobar cercant adreces IP al sistema de fitxers.

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

Si l'amfitrió compromès té una aplicació web accessible des d'Internet, és millor excloure els seus registres de la cerca d'adreces IP. És poc probable que les adreces dels usuaris de recursos d'Internet ens siguin útils, però les adreces de la xarxa interna (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) i on van, a jutjar pel registres, poden ser d'interès.

Sudo

L'ordre sudo permet a l'usuari executar una ordre en el context de root amb la seva pròpia contrasenya o sense utilitzar-la en absolut. Moltes operacions a Linux requereixen privilegis de root, però l'execució com a root es considera una pràctica molt dolenta. En canvi, és millor aplicar un permís selectiu per executar ordres en el context arrel. Tanmateix, moltes eines de Linux, incloses les estàndards com vi, es poden utilitzar per augmentar els privilegis de maneres legítimes. Per trobar el camí correcte, recomano mirar aquí.

El primer que cal fer després d'obtenir accés al sistema és executar l'ordre sudo -l. Mostrarà permís per utilitzar l'ordre sudo. Si s'obté un usuari sense contrasenya (com ara apache o www-data), és poc probable un vector d'escalada de privilegis sudo. Quan utilitzeu sudo, el sistema demanarà una contrasenya. L'ús de l'ordre passwd per establir una contrasenya tampoc no funcionarà, es demanarà la contrasenya actual de l'usuari. Però si sudo encara està disponible, de fet, heu de buscar:

  • qualsevol intèrpret, qualsevol pot generar un shell (PHP, Python, Perl);
  • qualsevol editor de text (vim, vi, nano);
  • qualsevol espectador (menys, més);
  • qualsevol possibilitat de treballar amb el sistema de fitxers (cp, mv);
  • eines que tenen sortida a bash, ja sigui de manera interactiva o com a ordre executable (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Hi ha molts manuals a Internet que aconsellen crear totes les ordres suid / sgid, però un article rar ofereix detalls sobre què fer amb aquests programes. Es poden trobar opcions d'escalada de privilegis que no tenen en compte l'ús d'explotacions aquí. A més, diversos fitxers executables tenen vulnerabilitats específiques per a la versió del sistema operatiu, per exemple.

En un món ideal, hauríeu d'executar tots els paquets instal·lats almenys mitjançant searchsploit. A la pràctica, això s'ha de fer amb els programes més populars com sudo. També sempre és una opció per utilitzar i donar suport al desenvolupament d'eines automatitzades que posaran en relleu interessants, des del punt de vista de l'escalada de privilegis, executables amb bits suid/sgid configurats. Donaré una llista d'aquestes eines a la secció corresponent de l'article.

Scripts que es poden escriure executats per Cron o Init en el context arrel

Els treballs Cron es poden executar en el context de diferents usuaris, inclòs l'arrel. Si hi ha una tasca a cron amb un enllaç a un fitxer executable i està disponible per escriure-la, podeu substituir-la fàcilment per una de maliciosa i fer una escalada de privilegis. Al mateix temps, per defecte, els fitxers amb tasques cron estan disponibles per a la seva lectura per qualsevol usuari.

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

Similar és el cas amb init. La diferència és que les tasques a cron s'executen periòdicament i a init - a l'inici del sistema. Per funcionar, haureu de reiniciar el sistema, mentre que alguns dels serveis poden no augmentar (si no estaven registrats a la càrrega automàtica).

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

També podeu cercar fitxers que qualsevol usuari pugui escriure.

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

El mètode és força conegut, els administradors de sistemes experimentats utilitzen acuradament l'ordre chmod. Tanmateix, a la web, la gran majoria de manuals descriuen la configuració de drets màxims. L'enfocament "només que funcioni" dels administradors de sistemes sense experiència crea oportunitats per a l'escalada de privilegis en principi. Si és possible, el millor és buscar a l'historial d'ordres els usos no segurs de chmod.

chmod +w /path 
chmod 777 /path

Aconseguint accés de shell per a altres usuaris

Mirem la llista d'usuaris a /etc/passwd. Prestem atenció als que tenen closca. Podeu eliminar aquests usuaris; és possible que, a través de l'usuari resultant, eventualment pugueu augmentar els privilegis.

Per millorar la seguretat, us recomano que sempre seguiu el principi del mínim privilegi. També té sentit prendre-se el temps per comprovar les configuracions insegures que podrien quedar després de la resolució de problemes: aquesta és la "obligació tècnica" de l'administrador del sistema.

Codi escrit per si mateix

Val la pena mirar de prop els executables del directori inicial de l'usuari i del servidor web (/var/www/ tret que s'especifiqui el contrari). Aquests fitxers poden resultar ser una solució completament insegura i contenir crosses increïbles. Per descomptat, si teniu algun marc al directori del vostre servidor web, no té sentit cercar-hi el dia zero com a part d'un pentest, però es recomana trobar i estudiar modificacions, complements i components personalitzats.

Per augmentar la seguretat, és millor evitar l'ús de credencials en scripts escrits per si mateix, així com funcionalitats potencialment perilloses, com ara llegir /etc/shadow o manipular id_rsa, si és possible.

Elevació de privilegis mitjançant l'explotació de vulnerabilitats

Abans d'intentar elevar els privilegis mitjançant l'explotació, és important entendre transferir fitxers a l'amfitrió de destinació. A més de les eines habituals com ssh, ftp, http (wget, curl), hi ha un tot "zoològic" de possibilitats.

Per millorar la seguretat del vostre sistema, actualitzeu-lo regularment a l'última estable versions, i també intenteu utilitzar distribucions dissenyades per a Enterprise. En cas contrari, rarament, però hi ha situacions en què l'actualització d'apt fa que el sistema sigui inutilitzable.

Explotació de serveis que s'executen en el context de l'usuari arrel

Alguns serveis de Linux s'executen com a root d'usuari privilegiat. Es poden trobar utilitzant el ps aux | arrel grep. En aquest cas, és possible que el servei no s'anunciï a la Web i estigui disponible localment. Si té exploits públics, es poden utilitzar amb seguretat: una fallada del servei en cas d'error és molt menys crítica que una fallada del sistema operatiu.

ps -aux | grep root # Linux

El cas més reeixit es pot considerar el funcionament d'un servei piratejat en el context de l'usuari root. L'explotació del servei SMB dóna accés privilegiat a SYSTEM als sistemes Windows (p. ex. mitjançant ms17-010). Tanmateix, això no és comú als sistemes Linux, de manera que podeu dedicar molt de temps a l'escalada de privilegis.

Explotació de les vulnerabilitats del nucli de Linux

Aquest és l'últim camí a seguir. L'operació sense èxit pot provocar un error del sistema i, en cas de reiniciar, alguns serveis (inclosos aquells a través dels quals era possible obtenir l'intèrpret d'ordres original) poden no augmentar. Succeeix que l'administrador simplement s'ha oblidat d'utilitzar l'ordre systemctl enable. A més, provocarà molta insatisfacció amb el vostre treball si no s'ha acordat l'explotació.
Si decidiu utilitzar les fonts d'exploitdb, assegureu-vos de llegir els comentaris al començament de l'script. Entre altres coses, normalment s'indica com compilar aquesta explotació correctament. Si vau ser massa mandrós o necessiteu "ahir" a causa dels terminis, podeu buscar dipòsits amb exploits ja compilats, per exemple. No obstant això, s'ha d'entendre que en aquest cas tindreu un porc en una picada. D'altra banda, si un programador entengués al byte com funciona un ordinador i el programari que utilitza, no hauria escrit una línia de codi en tota la seva vida.

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

metasploit

Per capturar i gestionar una connexió, sempre és millor utilitzar el mòdul exploit/multi/handler. El més important és establir la càrrega útil correcta, per exemple, generic/shell/reverce_tcp o generic/shell/bind_tcp. El shell obtingut a Metasploit es pot actualitzar a Meterpreter mitjançant el mòdul post/multi/manage/shell_to_meterpreter. Amb Meterpreter, podeu automatitzar el procés de post-explotació. Per exemple, el mòdul post/multi/recon/local_exploit_suggester comprova la plataforma, l'arquitectura i les entitats explotables i suggereix mòduls Metasploit per a l'escalada de privilegis al sistema objectiu. Gràcies a Meterpreter, l'escalada de privilegis de vegades es redueix a executar el mòdul adequat, però la pirateria sense entendre el que passa sota el capó no és cert (encara cal escriure un informe).

instruments

Les eines per automatitzar la recollida local d'informació us estalviaran molt d'esforç i temps, però per si soles no són capaços d'identificar completament el camí d'escalada de privilegis, especialment en el cas d'explotar les vulnerabilitats del nucli. Les eines d'automatització realitzaran totes les ordres necessàries perquè pugueu recopilar informació sobre el sistema, però també és important poder analitzar dades rebudes. Espero que el meu article us sigui útil en això. Per descomptat, hi ha moltes més eines de les que enumeraré a continuació, però totes fan el mateix: és més una qüestió de gustos.

Linpeas

Una eina força nova, el primer compromís té data de gener de 2019. Actualment el meu instrument preferit. La conclusió és que destaca els vectors d'escalada de privilegis més interessants. D'acord, és més convenient obtenir una avaluació experta en aquest nivell que analitzar dades brutes monolítices.

LinEnum

La meva segona eina preferida, també recull i organitza les dades rebudes com a resultat de l'enumeració local.

linux-exploit-suggester(1,2)

Aquest exploit analitzarà el sistema per a les condicions adequades per a les explotacions. De fet, farà una feina idèntica al mòdul local_exploit_suggester de Metasploit, però oferirà enllaços a codis font d'exploit-db en lloc de mòduls de Metasploit.

Linuxprivchecker

Aquest script recopilarà i organitzarà per seccions una gran quantitat d'informació que pot ser útil per a la formació d'un vector d'escalada de privilegis.

Una altra vegada ho explicaré Escalada de privilegis de Linux mitjançant suid/sgid.

Font: www.habr.com

Afegeix comentari