Saya akar. Memahami Peningkatan Keistimewaan OS Linux

Saya menghabiskan suku pertama 2020 dengan persediaan untuk peperiksaan OSCP. Mencari maklumat di Google dan banyak percubaan "buta" mengambil semua masa lapang saya. Ternyata amat sukar untuk memahami mekanisme untuk meningkatkan keistimewaan. Kursus PWK memberi perhatian yang besar kepada topik ini, tetapi bahan metodologi sentiasa tidak mencukupi. Terdapat banyak manual di Internet dengan arahan yang berguna, tetapi saya bukan penyokong yang mengikuti cadangan secara membuta tuli tanpa memahami ke mana hal ini akan membawa.

Saya ingin berkongsi dengan anda apa yang saya berjaya pelajari semasa penyediaan dan kejayaan lulus peperiksaan (termasuk serbuan berkala di Hack The Box). Saya merasakan rasa terima kasih yang mendalam untuk setiap maklumat yang membantu saya menempuh laluan Try Harder dengan lebih sedar, sekarang adalah masa saya untuk memberi kembali kepada komuniti.

Saya ingin memberi anda panduan untuk peningkatan keistimewaan dalam OS Linux, yang termasuk analisis vektor yang paling biasa dan ciri berkaitan yang pasti anda perlukan. Selalunya, mekanisme peningkatan keistimewaan itu sendiri agak mudah, kesukaran timbul apabila menstruktur dan menganalisis maklumat. Oleh itu, saya memutuskan untuk memulakan dengan "pelancongan bersiar-siar" dan kemudian mempertimbangkan setiap vektor dalam artikel yang berasingan. Saya harap saya akan menjimatkan masa anda untuk mempelajari topik tersebut.

Saya akar. Memahami Peningkatan Keistimewaan OS Linux

Jadi, mengapa peningkatan keistimewaan boleh dilakukan pada tahun 2020 jika kaedah tersebut telah diketahui sejak sekian lama? Malah, jika pengguna mengendalikan sistem dengan betul, ia benar-benar tidak mungkin untuk meningkatkan keistimewaan di dalamnya. Masalah global utama yang menimbulkan peluang tersebut ialah konfigurasi tidak selamat. Kehadiran versi perisian lapuk yang mengandungi kelemahan dalam sistem juga merupakan kes khas konfigurasi yang tidak selamat.

Peningkatan keistimewaan melalui konfigurasi tidak selamat

Pertama sekali, mari kita berurusan dengan konfigurasi yang tidak selamat. Mari kita mulakan dengan Profesional IT sering menggunakan manual dan sumber seperti stackoverflow, kebanyakannya mengandungi arahan dan konfigurasi yang tidak selamat. Contoh yang menarik ialah berita itu bahawa kod yang paling banyak disalin daripada stackoverflow mengandungi ralat. Pentadbir yang berpengalaman akan melihat jamb, tetapi ini adalah dunia yang ideal. Malah profesional yang cekap beban kerja bertambah mampu melakukan kesilapan. Bayangkan bahawa pentadbir sedang menyediakan dan meluluskan dokumentasi untuk tender seterusnya, pada masa yang sama mendalami teknologi baharu yang akan diperkenalkan pada suku seterusnya, sambil menyelesaikan tugas sokongan pengguna secara berkala. Dan kemudian dia diberi tugas untuk menaikkan beberapa mesin maya dengan cepat dan melancarkan perkhidmatan pada mereka. Apa yang anda fikir, apakah kebarangkalian bahawa admin langsung tidak perasan jamb? Kemudian pakar bertukar, tetapi tongkat kekal, manakala syarikat sentiasa berusaha untuk meminimumkan kos, termasuk untuk pakar IT.

Cangkang pseudo dan jailbreak

Cangkang sistem yang diperoleh semasa fasa pengeluaran selalunya terhad, terutamanya jika anda memperolehnya dengan menggodam pengguna pelayan web. Sebagai contoh, sekatan shell boleh menghalang anda daripada menggunakan perintah sudo dengan ralat:

sudo: no tty present and no askpass program specified

Selepas mendapat cangkerang, saya cadangkan mencipta terminal penuh, contohnya dengan Python.

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

Anda bertanya: "Mengapa saya memerlukan seribu arahan, jika saya boleh menggunakan satu, sebagai contoh, untuk memindahkan fail?" Hakikatnya ialah sistem dikonfigurasikan secara berbeza, pada hos seterusnya Python mungkin tidak dipasang, tetapi Perl mungkin tersedia. Kemahirannya adalah untuk dapat melakukan perkara biasa dalam sistem tanpa alat biasa. Senarai lengkap ciri boleh didapati di sini.

Cangkang keistimewaan rendah boleh diperolehi menggunakan pasukan 1 ΠΈ pasukan 2 (yang menghairankan walaupun GIMP).

Lihat sejarah arahan

Linux mengumpul sejarah semua arahan yang dilaksanakan dalam fail ~ / .bash_history. Jika pelayan sedang digunakan secara aktif dan sejarahnya tidak dikosongkan, terdapat kemungkinan besar bukti kelayakan ditemui dalam fail ini. Mengosongkan sejarah sememangnya menyusahkan. Jika pentadbir terpaksa memilih arahan sepuluh peringkat melalui , sudah tentu, ia akan menjadi lebih mudah baginya untuk memanggil arahan ini dari sejarah daripada memasukkannya semula. Tambahan pula, ramai yang tidak tahu tentang "hack" ini. Jika terdapat cengkerang alternatif seperti Zsh atau Fish dalam sistem, ia mempunyai sejarah tersendiri. Untuk memaparkan sejarah arahan dalam mana-mana shell, hanya taip sejarah arahan.

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

Terdapat pengehosan bersama, di mana pelayan digunakan untuk mengehos beberapa tapak. Biasanya, dengan konfigurasi ini, setiap sumber mempunyai pengguna sendiri dengan direktori rumah yang berasingan dan hos maya. Jadi, jika dikonfigurasikan secara salah, anda boleh mencari fail .bash_history dalam direktori akar sumber web.

Mencari kata laluan dalam sistem fail dan serangan pada sistem bersebelahan

Fail konfigurasi untuk pelbagai perkhidmatan mungkin boleh dibaca oleh pengguna semasa anda. Di dalamnya, anda boleh mencari bukti kelayakan dalam teks yang jelas - kata laluan untuk mengakses pangkalan data atau perkhidmatan berkaitan. Kata laluan yang sama boleh digunakan untuk mengakses pangkalan data dan untuk membenarkan pengguna akar (penjawatan kelayakan).
Ia berlaku bahawa bukti kelayakan yang ditemui adalah milik perkhidmatan pada hos lain. Perkembangan serangan ke atas infrastruktur melalui hos yang terjejas tidak lebih buruk daripada eksploitasi hos lain. Sistem bersebelahan juga boleh didapati dengan mencari alamat IP dalam sistem fail.

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

Jika hos yang terjejas mempunyai aplikasi web yang boleh diakses daripada Internet, adalah lebih baik untuk mengecualikan lognya daripada carian alamat IP. Alamat pengguna sumber daripada Internet tidak mungkin berguna kepada kami, tetapi alamat rangkaian dalaman (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) dan ke mana mereka pergi, berdasarkan log, mungkin menarik.

Sudo

Perintah sudo membolehkan pengguna melaksanakan arahan dalam konteks root dengan kata laluan mereka sendiri atau tanpa menggunakannya sama sekali. Banyak operasi dalam Linux memerlukan keistimewaan root, tetapi berjalan sebagai root dianggap sebagai amalan yang sangat buruk. Sebaliknya, lebih baik menggunakan kebenaran terpilih untuk melaksanakan arahan dalam konteks akar. Walau bagaimanapun, banyak alatan Linux, termasuk yang standard seperti vi, boleh digunakan untuk meningkatkan keistimewaan dengan cara yang sah. Untuk mencari cara yang betul, saya cadangkan untuk melihat di sini.

Perkara pertama yang perlu dilakukan selepas mendapat akses kepada sistem ialah menjalankan perintah sudo -l. Ia akan memaparkan kebenaran untuk menggunakan arahan sudo. Jika pengguna tanpa kata laluan diperoleh (seperti apache atau www-data), vektor peningkatan keistimewaan sudo tidak mungkin. Apabila menggunakan sudo, sistem akan meminta kata laluan. Menggunakan arahan passwd untuk menetapkan kata laluan juga tidak akan berfungsi, ia akan meminta kata laluan pengguna semasa. Tetapi jika sudo masih tersedia, maka, sebenarnya, anda perlu mencari:

  • mana-mana jurubahasa, sesiapa sahaja boleh menghasilkan cangkerang (PHP, Python, Perl);
  • mana-mana penyunting teks (vim, vi, nano);
  • mana-mana penonton (kurang, lebih);
  • sebarang kemungkinan bekerja dengan sistem fail (cp, mv);
  • alat yang mempunyai output dalam bash, sama ada secara interaktif atau sebagai arahan boleh laku (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Terdapat banyak manual di Internet yang menasihatkan membina semua arahan suid / sgid, tetapi artikel yang jarang berlaku memberikan spesifik tentang perkara yang perlu dilakukan dengan program ini. Pilihan peningkatan keistimewaan yang tidak mengambil kira penggunaan eksploitasi boleh didapati di sini. Selain itu, beberapa fail boleh laku mempunyai kelemahan khusus untuk versi OS, sebagai contoh.

Dalam dunia yang ideal, anda harus menjalankan semua pakej yang dipasang melalui sekurang-kurangnya searchsploit. Dalam amalan, ini harus dilakukan dengan program paling popular seperti sudo. Ia juga sentiasa menjadi pilihan untuk menggunakan dan menyokong pembangunan alatan automatik yang akan menyerlahkan yang menarik, dari sudut pandangan peningkatan keistimewaan, boleh laku dengan set bit suid/sgid. Saya akan memberikan senarai alat sedemikian di bahagian artikel yang sepadan.

Skrip boleh tulis dijalankan oleh Cron atau Init dalam konteks Root

Tugas cron boleh dijalankan dalam konteks pengguna yang berbeza, termasuk root. Jika terdapat tugasan dalam cron dengan pautan ke fail boleh laku, dan ia tersedia untuk anda tulis, anda boleh menggantikannya dengan mudah dengan yang berniat jahat dan melakukan peningkatan keistimewaan. Pada masa yang sama, secara lalai, fail dengan tugas cron tersedia untuk dibaca kepada mana-mana pengguna.

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

Begitu juga dengan init. Perbezaannya ialah tugas dalam cron dilaksanakan secara berkala, dan dalam init - pada permulaan sistem. Untuk operasi, anda perlu but semula sistem, sementara sesetengah perkhidmatan mungkin tidak meningkat (jika ia tidak didaftarkan dalam autoload).

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

Anda juga boleh mencari fail yang boleh ditulis oleh mana-mana pengguna.

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

Kaedah ini agak terkenal, pentadbir sistem yang berpengalaman berhati-hati menggunakan arahan chmod. Walau bagaimanapun, di Web, sebahagian besar manual menerangkan penetapan hak maksimum. Pendekatan "just make it work" pentadbir sistem yang tidak berpengalaman mencipta peluang untuk peningkatan keistimewaan pada dasarnya. Jika boleh, sebaiknya lihat dalam sejarah arahan untuk kegunaan chmod yang tidak selamat.

chmod +w /path 
chmod 777 /path

Mendapat akses shell untuk pengguna lain

Kami melihat senarai pengguna dalam /etc/passwd. Kami memberi perhatian kepada mereka yang mempunyai cangkang. Anda boleh menindas pengguna ini - ada kemungkinan bahawa melalui pengguna yang terhasil akhirnya anda akan dapat meningkatkan keistimewaan.

Untuk meningkatkan keselamatan, saya mengesyorkan agar anda sentiasa mematuhi prinsip keistimewaan paling rendah. Ia juga masuk akal untuk meluangkan masa untuk menyemak konfigurasi tidak selamat yang mungkin kekal selepas menyelesaikan masalah - ini adalah "tugas teknikal" pentadbir sistem.

Kod yang ditulis sendiri

Anda patut melihat dengan teliti pada boleh laku dalam direktori rumah pengguna dan pelayan web (/var/www/ melainkan dinyatakan sebaliknya). Fail ini boleh menjadi penyelesaian yang tidak selamat sepenuhnya dan mengandungi tongkat yang luar biasa. Sudah tentu, jika anda mempunyai beberapa rangka kerja dalam direktori pelayan web anda, tidak masuk akal untuk mencari hari sifar di dalamnya sebagai sebahagian daripada pentest, tetapi disyorkan untuk mencari dan mengkaji pengubahsuaian tersuai, pemalam dan komponen.

Untuk meningkatkan keselamatan, adalah lebih baik untuk mengelak daripada menggunakan bukti kelayakan dalam skrip tulisan sendiri, serta fungsi yang berpotensi berbahaya, seperti membaca /etc/shadow atau memanipulasi id_rsa, jika boleh.

Peningkatan keistimewaan melalui eksploitasi kelemahan

Sebelum cuba meningkatkan keistimewaan melalui eksploitasi, adalah penting untuk memahami memindahkan fail ke hos sasaran. Sebagai tambahan kepada alat biasa seperti ssh, ftp, http (wget, curl), terdapat keseluruhannya "zoo" kemungkinan.

Untuk meningkatkan keselamatan sistem anda, kemas kini secara kerap kepada yang terkini stabil versi, dan juga cuba menggunakan pengedaran yang direka untuk Perusahaan. Jika tidak, jarang, tetapi terdapat situasi apabila peningkatan apt menjadikan sistem tidak boleh digunakan.

Mengeksploitasi Perkhidmatan yang Berjalan dalam Konteks Pengguna Root

Sesetengah perkhidmatan Linux dijalankan sebagai akar pengguna istimewa. Mereka boleh didapati menggunakan ps aux | akar grep. Dalam kes ini, perkhidmatan itu mungkin tidak diumumkan di Web dan tersedia secara tempatan. Jika ia mempunyai eksploitasi awam, ia boleh digunakan dengan selamat: ranap perkhidmatan sekiranya berlaku kegagalan adalah kurang kritikal berbanding ranap sistem OS.

ps -aux | grep root # Linux

Kes yang paling berjaya boleh dianggap sebagai operasi perkhidmatan yang digodam dalam konteks pengguna root. Mengendalikan perkhidmatan SMB memberikan akses istimewa SYSTEM pada sistem Windows (cth melalui ms17-010). Walau bagaimanapun, ini tidak biasa pada sistem Linux, jadi anda boleh menghabiskan banyak masa untuk peningkatan keistimewaan.

Memanfaatkan Kerentanan Kernel Linux

Ini adalah jalan terakhir yang perlu diambil. Operasi yang tidak berjaya boleh membawa kepada ranap sistem, dan sekiranya berlaku but semula, sesetengah perkhidmatan (termasuk perkhidmatan yang membolehkan shell asal boleh digunakan) mungkin tidak meningkat. Ia berlaku bahawa pentadbir hanya terlupa menggunakan perintah systemctl enable. Tambahan pula ia akan menyebabkan banyak rasa tidak puas hati terhadap kerja anda sekiranya eksploitasi tersebut tidak dipersetujui.
Jika anda memutuskan untuk menggunakan sumber daripada exploitdb, pastikan anda membaca ulasan pada permulaan skrip. Antara lain, ia biasanya mengatakan cara menyusun eksploit ini dengan betul. Jika anda terlalu malas atau memerlukan "semalam" kerana tarikh akhir, anda boleh mencari repositori dengan eksploitasi yang telah disusun, sebagai contoh. Walau bagaimanapun, perlu difahami bahawa dalam kes ini anda akan mendapat babi dalam cucuk. Sebaliknya, jika pengaturcara memahami bait bagaimana komputer berfungsi dan perisian yang digunakannya, dia tidak akan menulis baris kod sepanjang hidupnya.

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

Metasploit

Untuk menangkap dan mengendalikan sambungan, lebih baik menggunakan modul exploit/multi/pengendali. Perkara utama ialah menetapkan muatan yang betul, contohnya, generik/shell/reverce_tcp atau generik/shell/bind_tcp. Cangkang yang diperoleh dalam Metasploit boleh dinaik taraf kepada Meterpreter menggunakan modul post/multi/manage/shell_to_meterpreter. Dengan Meterpreter, anda boleh mengautomasikan proses pasca eksploitasi. Contohnya, modul post/multi/recon/local_exploit_suggester menyemak platform, seni bina dan entiti yang boleh dieksploitasi dan mencadangkan modul Metasploit untuk peningkatan keistimewaan pada sistem sasaran. Terima kasih kepada Meterpreter, peningkatan keistimewaan kadangkala berpunca daripada menjalankan modul yang betul, tetapi penggodaman tanpa memahami apa yang berlaku di bawah hud adalah tidak benar (anda masih perlu menulis laporan).

Alatan

Alat untuk mengautomasikan pengumpulan maklumat tempatan akan menjimatkan banyak usaha dan masa anda, tetapi dengan sendirinya tidak dapat mengenal pasti sepenuhnya laluan peningkatan keistimewaan, terutamanya dalam kes mengeksploitasi kelemahan kernel. Alat automasi akan melaksanakan semua arahan yang diperlukan untuk anda mengumpul maklumat tentang sistem, tetapi ia juga penting untuk dapat untuk menganalisis data yang diterima. Saya harap artikel saya akan berguna kepada anda dalam perkara ini. Sudah tentu, terdapat lebih banyak alat daripada yang saya akan senaraikan di bawah, tetapi semuanya melakukan perkara yang sama - ia lebih kepada soal rasa.

Linpeas

Alat yang agak baru, komitmen pertama bertarikh Januari 2019. Pada masa ini instrumen kegemaran saya. Intinya ialah ia menyerlahkan vektor peningkatan keistimewaan yang paling menarik. Setuju, adalah lebih mudah untuk mendapatkan penilaian pakar pada tahap ini daripada menghuraikan data mentah monolitik.

LinEnum

Alat kegemaran kedua saya, ia juga mengumpul dan menyusun data yang diterima hasil daripada penghitungan tempatan.

linux-exploit-suggester (1,2)

Eksploitasi ini akan menganalisis sistem untuk keadaan yang sesuai untuk eksploitasi. Malah, ia akan melakukan kerja yang serupa dengan modul Metasploit local_exploit_suggester, tetapi akan menawarkan pautan ke kod sumber exploit-db dan bukannya modul Metasploit.

Linuxprivchecker

Skrip ini akan mengumpul dan menyusun mengikut bahagian sejumlah besar maklumat yang boleh berguna untuk pembentukan vektor peningkatan keistimewaan.

Lain kali saya akan huraikan Peningkatan keistimewaan Linux melalui suid/sgid.

Sumber: www.habr.com

Tambah komen