Aku root. Ngerteni Linux OS Privilege Escalation

Aku ngenteni kuartal pertama 2020 kanggo nyiapake ujian OSCP. Nggoleki informasi ing Google lan akeh upaya "buta" njupuk kabeh wektu luangku. Iku utamané angel kanggo ngerti mekanisme kanggo nambah hak istimewa. Mata kuliah PWK nggatekake bab iki, nanging materi piwulangan ora tau cukup. Ana akeh manual ing Internet kanthi prentah sing migunani, nanging aku ora seneng karo rekomendasi kanthi wuta tanpa ngerti apa sing bakal ditindakake.

Aku kaya kanggo nuduhake karo sampeyan apa aku sinau sak preparation lan sukses maringaken ujian (kalebu forays periodik menyang Hack The Box). Aku ngrasakake rasa syukur sing kuat kanggo saben informasi sing mbantu aku mlaku ing dalan Coba Harder kanthi luwih sadar, saiki iki wektu kanggo menehi bali menyang masyarakat.

Aku pengin menehi sampeyan manual babagan carane nambah hak istimewa ing OS Linux, sing kalebu analisis vektor sing paling umum lan fitur sing gegandhengan sing mesthi bakal migunani kanggo sampeyan. Asring mekanisme kanggo nambah hak istimewa dhewe cukup prasaja, kangelan muncul nalika struktur lan nganalisa informasi. Mulane, aku mutusake kanggo miwiti "tur wisata" lan banjur nimbang saben vektor ing artikel sing kapisah. Muga-muga sampeyan bisa ngirit wektu kanggo nliti topik kasebut.

Aku root. Ngerteni Linux OS Privilege Escalation

Dadi, kenapa eskalasi hak istimewa bisa ditindakake ing taun 2020 yen metode kasebut wis dikenal suwe banget? Nyatane, yen pangguna nangani sistem kanthi bener, mula ora bisa nambah hak istimewa kasebut. Masalah global utama sing nyebabake kesempatan kasebut yaiku konfigurasi ora aman. Anane versi piranti lunak lawas sing ngemot kerentanan ing sistem uga minangka kasus khusus saka konfigurasi sing ora aman.

Eskalasi hak istimewa liwat konfigurasi ora aman

Pisanan, ayo ngatasi konfigurasi sing ora aman. Ayo dadi miwiti karo Profesional IT asring nggunakake manual lan sumber daya kaya stackoverflow, akeh sing ngemot printah lan konfigurasi sing ora aman. Tuladha sing nggumunake - kabar iku yen kode sing paling akeh disalin saka stackoverflow ana kesalahan. Admin berpengalaman bakal weruh jamb, nanging iki ing donya becik. Malah spesialis sing kompeten tambah beban kerja bisa nggawe kesalahan. Mbayangno sing administrator wis nyiapake lan koordinasi dokumentasi kanggo tender sabanjuré, ing wektu sing padha delving menyang teknologi anyar sing bakal dipun ginakaken ing waktu sabanjuré, nalika periodik mecahaken masalah dhukungan pengguna. Banjur dheweke diwenehi tugas kanthi cepet nyetel sawetara mesin virtual lan ngluncurake layanan kasebut. Apa sampeyan mikir kemungkinan sing admin ora bakal weruh jamb? Banjur spesialis diganti, nanging kruk tetep, nalika perusahaan tansah ngupayakake nyilikake biaya, kalebu kanggo staf IT.

Pseudo-shell lan jailbreak

Cangkang sistem sing dipikolehi sajrone tahap eksploitasi asring diwatesi, utamane yen sampeyan entuk liwat hacking pangguna server web. Contone, watesan cangkang bisa nyegah sampeyan nindakake perintah sudo, nyebabake kesalahan:

sudo: no tty present and no askpass program specified

Sawise sampeyan duwe cangkang, aku nyaranake nggawe terminal lengkap, contone nggunakake Python.

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

Sampeyan bisa uga takon: "Napa aku butuh sewu prentah yen aku bisa nggunakake siji, contone, kanggo nransfer file?" Kasunyatane yaiku sistem dikonfigurasi kanthi beda; host tartamtu bisa uga ora nginstal Python, nanging bisa uga duwe Perl. Katrampilan kasebut yaiku bisa nindakake perkara sing akrab ing sistem tanpa alat sing akrab. Dhaptar lengkap fitur bisa ditemokake kene.

Cangkang sing nduweni hak istimewa bisa dipikolehi kanthi nggunakake tim 1 и tim 2 (kaget, malah GIMP).

Ndeleng riwayat printah

Linux ngumpulake riwayat kabeh perintah sing dieksekusi ing file ~ / .bash_history. Yen server digunakake kanthi aktif lan riwayate ora diresiki, ana kemungkinan gedhe kanggo nemokake kredensial ing file iki. Mbusak riwayat mung ora trep. Yen administrator dipeksa kanggo milih printah sepuluh-crita liwat , mesthi, iku bakal luwih trep kanggo nelpon printah iki saka sajarah saka kanggo ngetik maneh. Kajaba iku, akeh wong sing ora ngerti babagan "hack" iki. Yen ana cangkang alternatif kaya Zsh utawa Fish ing sistem kasebut, dheweke duwe sejarah dhewe. Kanggo nampilake riwayat printah ing cangkang apa wae, mung ketik riwayat printah.

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

Ana hosting sing dienggo bareng, ing ngendi server digunakake kanggo dadi tuan rumah sawetara situs web. Biasane, kanthi konfigurasi iki, saben sumber duwe pangguna dhewe kanthi direktori ngarep sing kapisah lan host virtual. Dadi, yen dikonfigurasi kanthi ora bener, sampeyan bisa nemokake file .bash_history ing direktori root saka sumber web.

Nggoleki sandhi ing sistem file lan serangan ing sistem jejer

File konfigurasi kanggo macem-macem layanan bisa diwaca dening pangguna saiki. Ing kono sampeyan bisa nemokake kredensial ing teks sing cetha - sandhi kanggo ngakses database utawa layanan sing gegandhengan. Tembung sandhi sing padha bisa digunakake kanggo ngakses basis data lan menehi wewenang marang pangguna root (staf kredensial).
Mengkono manawa kredensial sing ditemokake kalebu layanan ing host liyane. Ngembangake serangan ing infrastruktur liwat host sing dikompromi ora luwih ala tinimbang ngeksploitasi host liyane. Sistem jejer uga bisa ditemokake kanthi nggoleki alamat IP ing sistem berkas.

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

Yen host sing dikompromi duwe aplikasi web sing bisa diakses saka Internet, luwih becik ngilangi log saka telusuran alamat IP. Alamat pangguna sumber daya saka Internet ora bisa migunani kanggo kita, nanging alamat jaringan internal (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) lan menyang ngendi, miturut log. , mbok menawa ana kapentingan.

Sudo

Printah sudo menehi pangguna kemampuan kanggo nglakokake perintah ing konteks root nggunakake tembung sandhi dhewe utawa tanpa nggunakake tembung sandhi. Akeh operasi ing Linux mbutuhake hak istimewa root, nanging mlaku minangka root dianggep minangka praktik sing ala banget. Nanging, luwih becik nggunakake ijin selektif kanggo nglakokake perintah ing konteks root. Nanging, akeh alat Linux, kalebu standar kaya vi, bisa digunakake kanggo nambah hak istimewa kanthi cara sing sah. Kanggo nemokake cara sing cocok, aku nyaranake nggoleki kene.

Wangsulan: Bab ingkang pisanan sampeyan kudu nindakake nalika sampeyan entuk akses menyang sistem iku kanggo mbukak printah sudo -l. Bakal nampilake ijin kanggo nggunakake perintah sudo. Yen pangguna tanpa sandhi ditampa (kayata apache utawa www-data), vektor eskalasi hak istimewa liwat sudo ora mungkin. Nalika nggunakake sudo, sistem bakal njaluk sandhi. Sampeyan uga ora bisa nyetel sandhi nggunakake printah passwd; bakal njaluk sandhi pangguna saiki. Nanging yen sudo isih kasedhiya, mula sampeyan kudu golek:

  • sembarang juru, sapa bisa ngasilake Nihan (PHP, Python, Perl);
  • sembarang editor teks (vim, vi, nano);
  • sembarang penonton (kurang, luwih);
  • sembarang kemampuan kanggo nggarap sistem file (cp, mv);
  • Piranti sing duwe output ing bash, interaktif utawa minangka printah eksekusi (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Ana akeh manual ing Internet sing menehi saran ngumpulake kabeh suid / printah sgid, nanging artikel langka menehi spesifik apa apa karo program iki. Pilihan kanggo escalating hak istimewa sing ora njupuk menyang akun nggunakake exploitasi bisa ditemokake kene. Uga, sawetara file eksekusi duwe kerentanan khusus kanggo versi OS, contone.

Ing donya becik, sampeyan bakal mbukak kabeh paket diinstal liwat paling searchsploit. Ing praktik, iki kudu ditindakake kanthi program sing paling populer kayata sudo. Ana uga tansah pilihan kanggo nggunakake lan ndhukung pangembangan alat otomatis sing bakal nyorot menarik, saka sudut pandang eskalasi hak istimewa, file eksekusi karo suid / bit sgid disetel. Aku bakal menehi dhaptar alat kasebut ing bagean sing cocog ing artikel kasebut.

Skrip sing bisa ditulis sing dikelola dening Cron utawa Init ing konteks Root

Proyek Cron bisa ditindakake ing macem-macem konteks pangguna, kalebu root. Yen tugas cron wis disetel karo link menyang file eksekusi, lan kasedhiya kanggo sampeyan nulis, bisa gampang diganti karo angkoro lan eskalasi hak istimewa. Nanging, kanthi gawan, file kanthi tugas cron bisa diwaca dening pangguna apa wae.

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

Kahanan padha karo init. Bentenane yaiku tugas ing cron dieksekusi sacara periodik, lan ing init - ing wiwitan sistem. Operasi mbutuhake urip maneh sistem, lan sawetara layanan bisa uga ora diwiwiti (yen padha ora kadhaptar ing wiwitan).

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

Sampeyan uga bisa nggoleki file sing bisa ditulis dening pangguna.

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

Cara kasebut cukup dikenal; Administrator sistem sing berpengalaman kanthi ati-ati nggunakake perintah chmod. Nanging, ing Internet, akèh-akèhé manual njlèntrèhaké nyetel hak maksimum. Pendekatan "mung nggawe iku bisa" saka administrator sistem inexperienced nggawe kesempatan kanggo escalation hak istimewa ing asas. Yen bisa, iku luwih apik kanggo katon ing sajarah printah kanggo nggunakake ora aman saka chmod.

chmod +w /path 
chmod 777 /path

Entuk akses cangkang menyang pangguna liyane

Kita ndeleng dhaptar pangguna ing /etc/passwd. We mbayar manungsa waé kanggo wong sing duwe cangkang. Sampeyan bisa ngrusak pangguna iki - bisa uga liwat pangguna sing diasilake pungkasane bisa nambah hak istimewa.

Kanggo nambah keamanan, aku menehi saran supaya sampeyan tansah netepi prinsip hak istimewa sing paling ora. Sampeyan uga bisa nggunakake wektu kanggo mriksa konfigurasi sing ora aman sing bisa tetep sawise ngatasi masalah - iki minangka "tugas teknis" administrator sistem.

Kode sing ditulis dhewe

Sampeyan kudu mriksa file sing bisa dieksekusi ing direktori ngarep pangguna lan server web (/ var / www /, kajaba kasebut). File-file kasebut bisa uga dadi solusi sing ora aman lan ngemot crutches sing luar biasa. Mesthi, yen sampeyan duwe sawetara jinis kerangka ing direktori server web, ora ana gunane kanggo nggoleki nol dina minangka bagéan saka pentest, nanging dianjurake kanggo nemokake lan sinau modifikasi, plugin lan komponen khusus.

Kanggo nambah keamanan, luwih becik, yen bisa, supaya ora nggunakake kredensial ing skrip sing ditulis dhewe, uga fungsi sing bisa mbebayani, kayata maca /etc/shadow utawa manipulasi id_rsa.

Peningkatan hak istimewa liwat eksploitasi kerentanan

Sadurunge nyoba kanggo nambah hak istimewa liwat eksploitasi, iku penting kanggo ngerti nransfer file menyang host target. Saliyane alat biasa kaya ssh, ftp, http (wget, curl) ana kabeh "zoo" saka kemungkinan.

Kanggo nambah keamanan sistem, nganyari kanthi rutin nganti paling anyar stabil versi, lan uga nyoba kanggo nggunakake distribusi dirancang kanggo Enterprise. Yen ora, iku arang banget, nanging ana kahanan nalika upgrade apt ndadekake sistem ora bisa digunakake.

Eksploitasi layanan sing mlaku ing konteks pangguna root

Sawetara layanan Linux mbukak minangka root. Padha bisa ditemokake nggunakake printah ps aux | grep root. Ing kasus iki, layanan kasebut bisa uga ora diiklanake ing Internet lan kasedhiya sacara lokal. Yen ana eksploitasi umum, bisa digunakake kanthi aman: kacilakan layanan yen gagal luwih kritis tinimbang kacilakan OS.

ps -aux | grep root # Linux

Kasus sing paling sukses bisa dianggep minangka operasi layanan sing disusupi ing konteks pangguna root. Operasi layanan SMB menehi akses SYSTEM istimewa ing sistem Windows (contone, liwat ms17-010). Nanging, iki ora umum ing sistem Linux, supaya sampeyan bisa nglampahi akeh wektu kanggo nambah hak istimewa.

Eksploitasi Kernel Kernel Linux

Iki minangka dalan pungkasan sing kudu sampeyan lakoni. Operasi sing ora kasil bisa nyebabake kacilakan sistem, lan yen urip maneh, sawetara layanan (kalebu sing entuk cangkang awal) bisa uga ora diwiwiti. Iku kedadeyan yen administrator mung kelalen nggunakake perintah systemctl enable. Kajaba iku, bakal nyebabake rasa ora puas karo karya sampeyan yen operasi kasebut ora disepakati.
Yen sampeyan mutusake nggunakake kode sumber saka exploitdb, priksa manawa sampeyan maca komentar ing wiwitan naskah. Antarane liyane iku, biasane ngandika carane bener ngumpulake eksploitasi diwenehi. Yen sampeyan kesed utawa kudu nindakake "wingi" amarga tenggat wektu, sampeyan bisa nggoleki repositori kanthi eksploitasi sing wis dikompilasi, contone. Nanging, sampeyan kudu ngerti yen ing kasus iki sampeyan bakal njaluk babi ing poke. Ing tangan liyane, yen programmer mangertos mudhun kanggo bait carane komputer bisa digunakake lan piranti lunak digunakake, kang ora bakal nulis baris siji kode ing kabeh urip.

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

metasploit

Kanggo nyekel lan nangani sambungan, iku tansah luwih apik nggunakake eksploitasi / multi / modul handler. Ingkang utama yaiku nyetel muatan sing bener, contone, generik/shell/reverse_tcp utawa generic/shell/bind_tcp. Nihan diprodhuksi dening Metasploit bisa nganyari kanggo Meterpreter nggunakake modul post / multi / ngatur / shell_to_meterpreter. Kanthi Meterpreter, sampeyan bisa ngotomatisasi proses pasca eksploitasi. Contone, modul post / multi / recon / local_exploit_suggester mriksa platform, arsitektur lan entitas sing dibutuhake kanggo eksploitasi lan ngusulake modul Metasploit kanggo nambah hak istimewa ing sistem target. Thanks kanggo Meterpreter, escalating hak istimewa kadhangkala teka mudhun kanggo mbukak modul dibutuhake, nanging hacking tanpa mangerteni apa mengkono ing hood ora "bener" (sampeyan isih kudu nulis laporan).

Tools

Piranti kanggo ngotomatisasi koleksi informasi lokal bakal nylametake sampeyan akeh gaweyan lan wektu, nanging dheweke ora bisa ngerteni kanthi lengkap dalan kanggo eskalasi hak istimewa, utamane ing kasus eksploitasi kerentanan kernel. Piranti otomatis bakal nindakake kabeh prentah sing dibutuhake kanggo ngumpulake informasi babagan sistem, nanging uga penting kanggo bisa kanggo nganalisa data ditampa. Muga-muga artikelku bakal migunani kanggo sampeyan babagan iki. Mesthi, ana luwih akeh alat tinimbang sing bakal dakkandhakake ing ngisor iki, nanging kabeh padha nindakake perkara sing padha - iki mung masalah rasa.

Linpeas

Tula sing paling anyar, komitmen pisanan diwiwiti ing Januari 2019. Alat favoritku saiki. Intine yaiku nyorot vektor eskalasi hak istimewa sing paling menarik. Setuju, luwih trep kanggo entuk penilaian pakar ing tingkat iki tinimbang ngurai data mentah monolitik.

LinEnum

Alat favorit nomer loro, uga ngumpulake lan ngatur data sing dipikolehi minangka asil enumerasi lokal.

Linux-exploit-suggester (1,2)

Eksploitasi iki bakal nganalisa sistem kanggo kahanan eksploitasi sing cocog. Nyatane, bakal nindakake proyek sing padha karo modul Metasploit local_exploit_suggester, nanging bakal menehi link menyang kode sumber exploit-db tinimbang modul Metasploit.

Linuxprivchecker

Skrip iki bakal ngumpulake lan ngatur menyang bagean akeh informasi sing bisa migunani kanggo mbentuk vektor kanggo nambah hak istimewa.

Liyane wektu aku bakal njlèntrèhaké rinci elevasi hak istimewa ing Linux OS liwat suid/sgid.

Source: www.habr.com

Add a comment