Ako ay ugat. Pag-unawa sa Linux OS Privilege Escalation

Ginugol ko ang unang quarter ng 2020 sa paghahanda para sa pagsusulit sa OSCP. Ang paghahanap ng impormasyon sa Google at maraming "bulag" na pagtatangka ay kinuha ang lahat ng aking libreng oras. Ito ay naging lalong mahirap na maunawaan ang mga mekanismo para sa pagtaas ng mga pribilehiyo. Ang kursong PWK ay binibigyang pansin ang paksang ito, ngunit ang mga materyales sa pamamaraan ay palaging hindi sapat. Mayroong maraming mga manual sa Internet na may kapaki-pakinabang na mga utos, ngunit hindi ako isang tagasuporta ng walang taros na pagsunod sa mga rekomendasyon nang hindi nauunawaan kung saan ito hahantong.

Nais kong ibahagi sa iyo kung ano ang aking natutunan sa panahon ng paghahanda at matagumpay na pagpasa sa pagsusulit (kabilang ang mga pana-panahong pagsalakay sa Hack The Box). Nakaramdam ako ng matinding pasasalamat sa bawat piraso ng impormasyon na nakatulong sa akin na tahakin ang Try Harder path nang mas may kamalayan, ngayon na ang oras ko para magbigay muli sa komunidad.

Gusto kong bigyan ka ng gabay sa pagdami ng pribilehiyo sa OS Linux, na kinabibilangan ng pagsusuri sa mga pinakakaraniwang vector at kaugnay na feature na tiyak na kakailanganin mo. Kadalasan, ang mga mekanismo ng pagtaas ng pribilehiyo sa kanilang sarili ay medyo simple, ang mga paghihirap ay lumitaw kapag nag-istruktura at nagsusuri ng impormasyon. Samakatuwid, nagpasya akong magsimula sa isang "sightseeing tour" at pagkatapos ay isaalang-alang ang bawat vector sa isang hiwalay na artikulo. Sana ay makatipid ako ng oras para pag-aralan ang paksa.

Ako ay ugat. Pag-unawa sa Linux OS Privilege Escalation

Kaya, bakit posible ang pagtaas ng pribilehiyo sa 2020 kung ang mga pamamaraan ay kilala sa napakatagal na panahon? Sa katunayan, kung pinangangasiwaan ng gumagamit ang system nang tama, talagang hindi posible na madagdagan ang mga pribilehiyo dito. Ang pangunahing suliraning pandaigdig na nagdudulot ng ganitong mga pagkakataon ay hindi secure na configuration. Ang pagkakaroon ng mga lumang bersyon ng software na naglalaman ng mga kahinaan sa system ay isa ring espesyal na kaso ng hindi ligtas na pagsasaayos.

Pagtaas ng pribilehiyo sa pamamagitan ng hindi secure na configuration

Una sa lahat, harapin natin ang hindi secure na configuration. Magsimula tayo sa Ang mga propesyonal sa IT ay madalas na gumagamit ng mga manual at mapagkukunan tulad ng stackoverflow, marami sa mga ito ay naglalaman ng mga hindi ligtas na command at config. Ang isang kapansin-pansing halimbawa ay ang balita na ang code na pinakakopya mula sa stackoverflow ay naglalaman ng isang error. Makikita ng isang makaranasang admin ang hamba, ngunit ito ay nasa perpektong mundo. Kahit na mga karampatang propesyonal nadagdagan ang workload kayang magkamali. Isipin na ang tagapangasiwa ay naghahanda at nag-aapruba ng dokumentasyon para sa susunod na tender, kasabay ng pag-aaral sa bagong teknolohiya na ipapakilala sa susunod na quarter, habang pana-panahong nilulutas ang mga gawain sa suporta ng user. At pagkatapos ay binibigyan siya ng gawain ng mabilis na pagpapalaki ng ilang virtual machine at paglunsad ng mga serbisyo sa kanila. Ano sa palagay mo, ano ang posibilidad na hindi napapansin ng admin ang hamba? Pagkatapos ay nagbabago ang mga espesyalista, ngunit nananatili ang mga saklay, habang ang mga kumpanya ay palaging nagsusumikap na mabawasan ang mga gastos, kabilang ang para sa mga espesyalista sa IT.

Pseudo shell at jailbreak

Ang shell ng system na nakuha sa yugto ng produksyon ay kadalasang limitado, lalo na kung nakuha mo ito sa pamamagitan ng pag-hack ng user ng web server. Halimbawa, maaaring pigilan ka ng mga paghihigpit sa shell mula sa paggamit ng sudo command na may error:

sudo: no tty present and no askpass program specified

Pagkatapos makakuha ng isang shell, inirerekumenda ko ang paglikha ng isang ganap na terminal, halimbawa sa Python.

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

Itanong mo: "Bakit kailangan ko ng isang libong utos, kung maaari kong gamitin ang isa, halimbawa, upang maglipat ng mga file?" Ang katotohanan ay ang mga system ay na-configure nang iba, sa susunod na host Python ay maaaring hindi mai-install, ngunit Perl ay magagamit. Ang kasanayan ay upang magawa ang mga pamilyar na bagay sa system nang walang pamilyar na mga tool. Ang isang kumpletong listahan ng mga tampok ay matatagpuan dito.

Ang isang mababang pribilehiyo na shell ay maaaring makuha gamit ang mga pangkat 1 ΠΈ mga pangkat 2 (nakakagulat kahit ang GIMP).

Tingnan ang kasaysayan ng command

Kinokolekta ng Linux ang kasaysayan ng lahat ng naisagawang command sa isang file ~ / .bash_history. Kung ang server ay nasa aktibong paggamit at ang kasaysayan nito ay hindi na-clear, mayroong isang magandang pagkakataon na ang mga kredensyal ay matatagpuan sa file na ito. Ang paglilinis ng kasaysayan ay karaniwang hindi maginhawa. Kung ang tagapangasiwa ay mapipilitang pumili ng sampung antas ng mga utos sa pamamagitan ng , siyempre, mas maginhawa para sa kanya na tawagan ang utos na ito mula sa kasaysayan kaysa sa muling pagpasok dito. Dagdag pa, marami ang hindi nakakaalam tungkol sa "hack" na ito. Kung may mga alternatibong shell tulad ng Zsh o Fish sa system, mayroon silang sariling kasaysayan. Upang ipakita ang kasaysayan ng mga utos sa anumang shell, i-type lamang ang kasaysayan ng utos.

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

Mayroong nakabahaging pagho-host, kung saan ang server ay ginagamit upang mag-host ng ilang mga site. Karaniwan, sa pagsasaayos na ito, ang bawat mapagkukunan ay may sariling user na may hiwalay na direktoryo ng tahanan at isang virtual na host. Kaya, kung hindi tama ang pagkaka-configure, mahahanap mo ang .bash_history file sa root directory ng web resource.

Paghahanap ng mga password sa file system at pag-atake sa mga katabing system

Ang mga configuration file para sa iba't ibang serbisyo ay maaaring mabasa ng iyong kasalukuyang user. Sa kanila, makakahanap ka ng mga kredensyal sa malinaw na teksto - mga password para sa pag-access sa database o mga kaugnay na serbisyo. Ang parehong password ay maaaring gamitin kapwa para ma-access ang database at para pahintulutan ang root user (credential staffing).
Ito ay nangyayari na ang nahanap na mga kredensyal ay nabibilang sa mga serbisyo sa iba pang mga host. Ang pagbuo ng isang pag-atake sa imprastraktura sa pamamagitan ng isang nakompromisong host ay hindi mas masahol kaysa sa pagsasamantala ng iba pang mga host. Ang mga katabing system ay matatagpuan din sa pamamagitan ng paghahanap ng mga IP address sa file system.

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

Kung ang nakompromisong host ay may web application na naa-access mula sa Internet, mas mabuting ibukod ang mga log nito sa paghahanap ng mga IP address. Ang mga address ng mga gumagamit ng mapagkukunan mula sa Internet ay malamang na hindi kapaki-pakinabang sa amin, ngunit ang mga address ng panloob na network (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) at kung saan sila pupunta, batay sa log, maaaring maging interesado.

Sudo

Ang sudo command ay nagbibigay-daan sa user na magsagawa ng command sa konteksto ng root gamit ang sarili nilang password o hindi ito ginagamit. Maraming mga operasyon sa Linux ang nangangailangan ng mga pribilehiyo sa ugat, ngunit ang pagpapatakbo bilang ugat ay itinuturing na napakasamang kasanayan. Sa halip, mas mainam na ilapat ang pumipili na pahintulot upang magsagawa ng mga utos sa konteksto ng ugat. Gayunpaman, maraming mga tool sa Linux, kabilang ang mga karaniwang tulad ng vi, ay maaaring gamitin upang palakihin ang mga pribilehiyo sa mga lehitimong paraan. Upang mahanap ang tamang paraan, inirerekumenda kong tumingin dito.

Ang unang bagay na dapat gawin pagkatapos magkaroon ng access sa system ay patakbuhin ang sudo -l command. Ipapakita nito ang pahintulot na gamitin ang sudo command. Kung ang isang user na walang password ay nakuha (gaya ng apache o www-data), ang isang sudo privilege escalation vector ay hindi malamang. Kapag gumagamit ng sudo, hihingi ang system ng password. Ang paggamit ng passwd command upang magtakda ng password ay hindi rin gagana, hihilingin nito ang kasalukuyang password ng user. Ngunit kung magagamit pa rin ang sudo, kung gayon, sa katunayan, kailangan mong hanapin ang:

  • anumang mga interpreter, kahit sino ay maaaring mag-spawn ng isang shell (PHP, Python, Perl);
  • anumang mga text editor (vim, vi, nano);
  • sinumang manonood (mas kaunti, higit pa);
  • anumang mga posibilidad ng pagtatrabaho sa file system (cp, mv);
  • mga tool na may output sa bash, interactive man o bilang isang executable command (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Mayroong maraming mga manual sa Internet na nagpapayo sa pagbuo ng lahat ng suid / sgid command, ngunit ang isang bihirang artikulo ay nagbibigay ng mga detalye kung ano ang gagawin sa mga programang ito. Ang mga pagpipilian sa pagtaas ng pribilehiyo na hindi isinasaalang-alang ang paggamit ng mga pagsasamantala ay matatagpuan dito. Gayundin, ang ilang mga executable na file ay may mga partikular na kahinaan para sa bersyon ng OS, halimbawa.

Sa isang perpektong mundo, dapat mong patakbuhin ang lahat ng naka-install na pakete sa pamamagitan ng hindi bababa sa searchsploit. Sa pagsasagawa, dapat itong gawin sa mga pinakasikat na programa tulad ng sudo. Ito rin ay palaging isang opsyon upang gamitin at suportahan ang pagbuo ng mga automated na tool na magha-highlight ng kawili-wili, mula sa isang privilege escalation point of view, mga executable na may suid/sgid bits set. Magbibigay ako ng isang listahan ng mga naturang tool sa kaukulang seksyon ng artikulo.

Mga nasusulat na script na pinapatakbo ng Cron o Init sa kontekstong Root

Maaaring tumakbo ang mga Cron job sa konteksto ng iba't ibang user, kabilang ang root. Kung mayroong isang gawain sa cron na may isang link sa isang maipapatupad na file, at ito ay magagamit para sa iyo na magsulat, madali mo itong mapapalitan ng isang nakakahamak at maisagawa ang pagtaas ng pribilehiyo. Kasabay nito, bilang default, ang mga file na may mga gawain sa cron ay magagamit para sa pagbabasa ng sinumang user.

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

Katulad ang kaso sa init. Ang pagkakaiba ay ang mga gawain sa cron ay pana-panahong isinasagawa, at sa init - sa pagsisimula ng system. Para sa operasyon, kakailanganin mong i-reboot ang system, habang ang ilan sa mga serbisyo ay maaaring hindi tumaas (kung hindi sila nakarehistro sa autoload).

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

Maaari ka ring maghanap ng mga file na maisusulat ng sinumang user.

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

Ang pamamaraan ay lubos na kilala, maingat na ginagamit ng mga may karanasan na mga tagapangasiwa ng system ang utos ng chmod. Gayunpaman, sa Web, ang karamihan sa mga manwal ay naglalarawan ng pagtatakda ng pinakamataas na karapatan. Ang "just make it work" na diskarte ng mga walang karanasan na system administrator ay lumilikha ng mga pagkakataon para sa privilege escalation sa prinsipyo. Kung maaari, pinakamahusay na tumingin sa kasaysayan ng utos para sa mga hindi ligtas na paggamit ng chmod.

chmod +w /path 
chmod 777 /path

Pagkakaroon ng shell access para sa ibang mga user

Tinitingnan namin ang listahan ng mga gumagamit sa /etc/passwd. Bigyang-pansin natin ang mga may kabibi. Maaari mong bastusin ang mga user na ito - posible na sa pamamagitan ng nagreresultang user ay mapapalaki mo ang mga pribilehiyo.

Upang mapabuti ang seguridad, inirerekomenda ko na palagi kang sumunod sa prinsipyo ng hindi bababa sa pribilehiyo. Makatuwiran din na maglaan ng oras upang suriin ang mga hindi secure na configuration na maaaring manatili pagkatapos ng pag-troubleshoot - ito ang "teknikal na tungkulin" ng administrator ng system.

Self-written code

Ito ay nagkakahalaga ng pagtinging mabuti sa mga executable sa home directory ng user at web server (/var/www/ maliban kung tinukoy). Ang mga file na ito ay maaaring maging isang ganap na hindi secure na solusyon at naglalaman ng hindi kapani-paniwalang mga saklay. Siyempre, kung mayroon kang ilang balangkas sa direktoryo ng iyong web server, hindi makatuwirang maghanap ng zero-day dito bilang bahagi ng isang pentest, ngunit inirerekomendang hanapin at pag-aralan ang mga custom na pagbabago, plugin at mga bahagi.

Upang mapataas ang seguridad, mas mabuting iwasan ang paggamit ng mga kredensyal sa mga self-written na script, gayundin ang potensyal na mapanganib na paggana, gaya ng pagbabasa ng /etc/shadow o pagmamanipula ng id_rsa, kung maaari.

Pagtaas ng pribilehiyo sa pamamagitan ng pagsasamantala sa mga kahinaan

Bago tangkaing itaas ang mga pribilehiyo sa pamamagitan ng pagsasamantala, mahalagang maunawaan ang paglilipat ng mga file sa target na host. Bilang karagdagan sa mga karaniwang tool tulad ng ssh, ftp, http (wget, curl), mayroong isang buo "zoo" ng mga posibilidad.

Upang mapabuti ang seguridad ng iyong system, regular itong i-update hanggang sa pinakabago matatag mga bersyon, at subukan ding gumamit ng mga distribusyon na idinisenyo para sa Enterprise. Kung hindi man, bihira, ngunit may mga sitwasyon kung saan ginagawang hindi nagagamit ng apt upgrade ang system.

Pinagsasamantalahan ang Mga Serbisyong Tumatakbo sa Konteksto ng Root User

Ang ilang mga serbisyo ng Linux ay tumatakbo bilang ang privileged user root. Matatagpuan ang mga ito gamit ang ps aux | ugat ng grep. Sa kasong ito, ang serbisyo ay maaaring hindi ipahayag sa Web at magagamit nang lokal. Kung mayroon itong mga pampublikong pagsasamantala, maaari silang ligtas na magamit: ang pag-crash ng serbisyo kung sakaling mabigo ay hindi gaanong kritikal kaysa sa pag-crash ng OS.

ps -aux | grep root # Linux

Ang pinakamatagumpay na kaso ay maaaring ituring na operasyon ng isang na-hack na serbisyo sa konteksto ng root user. Ang pagpapatakbo ng serbisyo ng SMB ay nagbibigay ng SYSTEM ng pribilehiyong pag-access sa mga system ng Windows (hal. sa pamamagitan ng ms17-010). Gayunpaman, hindi ito karaniwan sa mga sistema ng Linux, kaya maaari kang gumugol ng maraming oras sa pagdami ng pribilehiyo.

Pinagsasamantalahan ang Linux Kernel Vulnerabilities

Ito ang huling landas na tatahakin. Ang hindi matagumpay na operasyon ay maaaring humantong sa isang pag-crash ng system, at sa kaganapan ng isang reboot, ang ilang mga serbisyo (kabilang ang mga kung saan ito ay posible upang makuha ang orihinal na shell) ay maaaring hindi tumaas. Nangyayari na nakalimutan lang ng administrator na gamitin ang systemctl enable command. Dagdag pa, magdudulot ito ng maraming kawalang-kasiyahan sa iyong trabaho kung ang pagsasamantala ay hindi napagkasunduan.
Kung magpasya kang gamitin ang mga mapagkukunan mula sa exploitdb, siguraduhing basahin ang mga komento sa simula ng script. Sa iba pang mga bagay, kadalasang sinasabi nito kung paano i-compile nang tama ang pagsasamantalang ito. Kung ikaw ay masyadong tamad o kailangan ng "kahapon" dahil sa mga deadline, maaari kang maghanap ng mga repository na may mga pinagsama-samang pagsasamantala, halimbawa. Gayunpaman, dapat itong maunawaan na sa kasong ito makakakuha ka ng isang baboy sa isang sundot. Sa kabilang banda, kung naiintindihan ng isang programmer sa byte kung paano gumagana ang isang computer at ang software na ginagamit nito, hindi siya makakasulat ng isang linya ng code sa buong buhay niya.

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

Metasploit

Upang mahuli at mahawakan ang isang koneksyon, palaging mas mahusay na gamitin ang exploit/multi/handler module. Ang pangunahing bagay ay itakda ang tamang payload, halimbawa, generic/shell/reverce_tcp o generic/shell/bind_tcp. Ang shell na nakuha sa Metasploit ay maaaring i-upgrade sa Meterpreter gamit ang post/multi/manage/shell_to_meterpreter module. Sa Meterpreter, maaari mong i-automate ang proseso ng post-exploitation. Halimbawa, sinusuri ng post/multi/recon/local_exploit_suggester module ang platform, arkitektura, at mga mapagsamantalang entity at nagmumungkahi ng mga module ng Metasploit para sa pagtaas ng pribilehiyo sa target na system. Salamat sa Meterpreter, ang pagtaas ng pribilehiyo kung minsan ay bumababa sa pagpapatakbo ng tamang module, ngunit ang pag-hack nang hindi nauunawaan kung ano ang nangyayari sa ilalim ng hood ay hindi totoo (kailangan mo pa ring magsulat ng isang ulat).

Kagamitan

Ang mga tool upang i-automate ang lokal na koleksyon ng impormasyon ay makakatipid sa iyo ng maraming pagsisikap at oras, ngunit sa kanilang sarili ay hindi ganap na matukoy ang landas ng pagdami ng pribilehiyo, lalo na sa kaso ng pagsasamantala sa mga kahinaan ng kernel. Gagawin ng mga tool sa pag-automate ang lahat ng kinakailangang utos para mangolekta ka ng impormasyon tungkol sa system, ngunit mahalaga din na magawa mong pag-aralan natanggap na data. Umaasa ako na ang aking artikulo ay magiging kapaki-pakinabang sa iyo dito. Siyempre, marami pang mga tool kaysa sa ililista ko sa ibaba, ngunit lahat sila ay gumagawa ng tungkol sa parehong bagay - ito ay higit na isang bagay ng panlasa.

Linpeas

Isang medyo bagong tool, ang unang commit ay napetsahan noong Enero 2019. Sa kasalukuyan ang aking paboritong instrumento. Ang ilalim na linya ay na ito ay nagha-highlight ng mga pinaka-kagiliw-giliw na mga vectors ng pagdami ng pribilehiyo. Sumang-ayon, mas maginhawang makakuha ng ekspertong pagtatasa sa antas na ito kaysa sa pag-parse ng monolitikong hilaw na data.

LinEnum

Ang aking pangalawang paboritong tool, ito rin ay nangongolekta at nag-aayos ng data na natanggap bilang resulta ng lokal na enumeration.

linux-exploit-suggester(1,2)

Susuriin ng pagsasamantalang ito ang sistema para sa mga angkop na kondisyon para sa mga pagsasamantala. Sa katunayan, gagawa ito ng trabaho na kapareho ng Metasploit local_exploit_suggester module, ngunit mag-aalok ng mga link sa exploit-db source code kaysa sa Metasploit modules.

Linuxprivchecker

Ang script na ito ay mangongolekta at mag-oorganisa ayon sa mga seksyon ng malaking halaga ng impormasyon na maaaring maging kapaki-pakinabang para sa pagbuo ng isang vector ng pagtaas ng pribilehiyo.

Sa ibang pagkakataon ay i-elaborate ko Pagtaas ng pribilehiyo ng Linux sa pamamagitan ng suid/sgid.

Pinagmulan: www.habr.com

Magdagdag ng komento