saya akar. Memahami Eskalasi Privilege OS Linux

Saya menghabiskan kuartal pertama tahun 2020 untuk mempersiapkan ujian OSCP. Mencari informasi di Google dan banyak upaya "buta" menghabiskan seluruh waktu luang saya. Ternyata sangat sulit untuk memahami mekanisme peningkatan hak istimewa. Mata kuliah PWK menaruh perhatian besar pada topik ini, tetapi materi metodologis selalu tidak cukup. Ada banyak manual di Internet dengan perintah yang berguna, tetapi saya bukan pendukung mengikuti rekomendasi secara membabi buta tanpa memahami ke mana arahnya.

Saya ingin berbagi dengan Anda apa yang berhasil saya pelajari selama persiapan dan keberhasilan lulus ujian (termasuk penggerebekan berkala di Hack The Box). Saya merasakan rasa terima kasih yang mendalam atas setiap informasi yang membantu saya berjalan di jalur Try Harder dengan lebih sadar, sekarang saatnya saya memberikan kembali kepada komunitas.

Saya ingin memberi Anda panduan untuk peningkatan hak istimewa di OS Linux, yang mencakup analisis vektor paling umum dan fitur terkait yang pasti Anda perlukan. Seringkali, mekanisme eskalasi hak istimewa itu sendiri cukup sederhana, kesulitan muncul saat menyusun dan menganalisis informasi. Oleh karena itu, saya memutuskan untuk memulai dengan "tur jalan-jalan" dan kemudian mempertimbangkan setiap vektor dalam artikel terpisah. Saya harap saya akan menghemat waktu Anda untuk mempelajari topik ini.

saya akar. Memahami Eskalasi Privilege OS Linux

Jadi, mengapa eskalasi hak istimewa bahkan mungkin terjadi pada tahun 2020 jika metodenya sudah dikenal sejak lama? Nyatanya, jika pengguna menangani sistem dengan benar, sangat tidak mungkin untuk meningkatkan hak istimewa di dalamnya. Masalah global utama yang memunculkan peluang tersebut adalah konfigurasi tidak aman. Kehadiran versi perangkat lunak usang yang mengandung kerentanan dalam sistem juga merupakan kasus khusus dari konfigurasi yang tidak aman.

Eskalasi hak istimewa melalui konfigurasi yang tidak aman

Pertama-tama, mari kita berurusan dengan konfigurasi yang tidak aman. Mari kita mulai dengan Profesional TI sering menggunakan manual dan sumber daya seperti stackoverflow, banyak di antaranya berisi perintah dan konfigurasi yang tidak aman. Contoh yang mencolok adalah berita bahwa kode yang paling banyak disalin dari stackoverflow berisi kesalahan. Admin yang berpengalaman akan melihat kusennya, tapi ini di dunia yang ideal. Bahkan profesional yang kompeten peningkatan beban kerja mampu melakukan kesalahan. Bayangkan administrator sedang mempersiapkan dan menyetujui dokumentasi untuk tender berikutnya, pada saat yang sama mempelajari teknologi baru yang akan diperkenalkan pada kuartal berikutnya, sambil menyelesaikan tugas dukungan pengguna secara berkala. Dan kemudian dia diberi tugas untuk segera meningkatkan beberapa mesin virtual dan meluncurkan layanan padanya. Bagaimana menurut Anda, berapa kemungkinan admin tidak memperhatikan kusennya? Kemudian spesialis berubah, tetapi kruk tetap ada, sementara perusahaan selalu berusaha untuk meminimalkan biaya, termasuk untuk spesialis TI.

Pseudo shell dan jailbreak

Shell sistem yang diperoleh selama fase produksi seringkali terbatas, terutama jika Anda mendapatkannya dengan meretas pengguna server web. Misalnya, pembatasan shell dapat mencegah Anda menggunakan perintah sudo dengan kesalahan:

sudo: no tty present and no askpass program specified

Setelah mendapatkan shell, saya sarankan untuk membuat terminal lengkap, misalnya dengan Python.

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

Anda bertanya: "Mengapa saya memerlukan seribu perintah, jika saya dapat menggunakan satu, misalnya, untuk mentransfer file?" Faktanya adalah bahwa sistem dikonfigurasi secara berbeda, Python mungkin tidak diinstal pada host berikutnya, tetapi Perl mungkin tersedia. Keahliannya adalah untuk dapat melakukan hal-hal yang familiar dalam sistem tanpa alat yang familiar. Daftar lengkap fitur dapat ditemukan di sini.

Shell dengan hak istimewa rendah dapat diperoleh menggunakan tim 1 ΠΈ tim 2 (bahkan mengejutkan GIMP).

Lihat riwayat perintah

Linux mengumpulkan riwayat semua perintah yang dieksekusi dalam sebuah file ~ / .bash_history. Jika server sedang aktif digunakan dan riwayatnya tidak dihapus, kemungkinan besar kredensial ditemukan di file ini. Membersihkan sejarah sangat tidak nyaman. Jika administrator terpaksa memilih perintah sepuluh tingkat melalui , tentunya akan lebih mudah baginya untuk memanggil perintah ini dari riwayat daripada memasukkannya lagi. Plus, banyak yang tidak tahu tentang "hack" ini. Jika ada cangkang alternatif seperti Zsh atau Fish dalam sistem, mereka memiliki sejarahnya sendiri. Untuk menampilkan riwayat perintah di shell apa pun, cukup ketik riwayat perintah.

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

Ada hosting bersama, di mana server digunakan untuk menghosting beberapa situs. Biasanya, dengan konfigurasi ini, setiap sumber daya memiliki penggunanya sendiri dengan direktori home terpisah dan host virtual. Jadi, jika konfigurasinya salah, Anda dapat menemukan file .bash_history di direktori root sumber daya web.

Menemukan kata sandi di sistem file dan menyerang sistem yang berdekatan

File konfigurasi untuk berbagai layanan mungkin dapat dibaca oleh pengguna Anda saat ini. Di dalamnya, Anda dapat menemukan kredensial dalam teks biasa - kata sandi untuk mengakses database atau layanan terkait. Kata sandi yang sama dapat digunakan untuk mengakses database dan untuk mengotorisasi pengguna root (staf kredensial).
Kebetulan kredensial yang ditemukan milik layanan di host lain. Perkembangan serangan terhadap infrastruktur melalui host yang dikompromikan tidak lebih buruk dari eksploitasi host lain. Sistem yang berdekatan juga dapat ditemukan dengan mencari alamat IP di sistem file.

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 host yang disusupi memiliki aplikasi web yang dapat diakses dari Internet, lebih baik mengecualikan lognya dari pencarian alamat IP. Alamat pengguna sumber daya dari Internet sepertinya tidak berguna bagi kami, tetapi alamat jaringan internal (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) dan ke mana mereka pergi, dilihat dari log, mungkin menarik.

Sudo

Perintah sudo memungkinkan pengguna untuk menjalankan perintah dalam konteks root dengan kata sandi mereka sendiri atau tanpa menggunakannya sama sekali. Banyak operasi di Linux memerlukan hak akses root, tetapi menjalankan sebagai root dianggap praktik yang sangat buruk. Sebaliknya, lebih baik menerapkan izin selektif untuk menjalankan perintah dalam konteks root. Namun, banyak alat Linux, termasuk yang standar seperti vi, dapat digunakan untuk meningkatkan hak istimewa dengan cara yang sah. Untuk menemukan cara yang benar, saya sarankan untuk melihat di sini.

Hal pertama yang harus dilakukan setelah mendapatkan akses ke sistem adalah menjalankan perintah sudo -l. Ini akan menampilkan izin untuk menggunakan perintah sudo. Jika pengguna tanpa kata sandi diperoleh (seperti apache atau www-data), vektor eskalasi hak istimewa sudo tidak mungkin terjadi. Saat menggunakan sudo, sistem akan meminta kata sandi. Menggunakan perintah passwd untuk menyetel kata sandi juga tidak akan berfungsi, ia akan menanyakan kata sandi pengguna saat ini. Tetapi jika sudo masih tersedia, maka sebenarnya Anda perlu mencari:

  • penerjemah apa pun, siapa pun dapat menelurkan shell (PHP, Python, Perl);
  • editor teks apa pun (vim, vi, nano);
  • pemirsa mana pun (lebih sedikit, lebih banyak);
  • segala kemungkinan bekerja dengan sistem file (cp, mv);
  • alat yang memiliki output dalam bash, baik secara interaktif atau sebagai perintah yang dapat dieksekusi (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Ada banyak manual di Internet yang menyarankan untuk membuat semua perintah suid / sgid, tetapi sebuah artikel langka memberikan secara spesifik tentang apa yang harus dilakukan dengan program ini. Opsi peningkatan hak istimewa yang tidak memperhitungkan penggunaan eksploit dapat ditemukan di sini. Juga, sejumlah file yang dapat dieksekusi memiliki kerentanan khusus untuk versi OS, misalnya.

Di dunia yang ideal, Anda harus menjalankan semua paket yang terinstal setidaknya melalui searchsploit. Dalam praktiknya, ini harus dilakukan dengan program paling populer seperti sudo. Itu juga selalu merupakan pilihan untuk menggunakan dan mendukung pengembangan alat otomatis yang akan menyoroti yang menarik, dari sudut pandang eskalasi hak istimewa, yang dapat dieksekusi dengan set bit suid/sgid. Saya akan memberikan daftar alat tersebut di bagian artikel yang sesuai.

Skrip yang dapat ditulis dijalankan oleh Cron atau Init dalam konteks Root

Pekerjaan Cron dapat berjalan dalam konteks pengguna yang berbeda, termasuk root. Jika ada tugas di cron dengan tautan ke file yang dapat dieksekusi, dan itu tersedia untuk Anda tulis, Anda dapat dengan mudah menggantinya dengan yang jahat dan melakukan eskalasi hak istimewa. Pada saat yang sama, secara default, file dengan tugas cron tersedia untuk dibaca oleh pengguna mana pun.

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

Mirip halnya dengan init. Perbedaannya adalah tugas di cron dijalankan secara berkala, dan di init - saat startup sistem. Untuk operasi, Anda perlu me-reboot sistem, sementara beberapa layanan mungkin tidak naik (jika tidak terdaftar di autoload).

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

Anda juga dapat mencari file yang dapat ditulis oleh pengguna mana pun.

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

Metodenya cukup terkenal, administrator sistem yang berpengalaman dengan hati-hati menggunakan perintah chmod. Namun, di Web, sebagian besar manual menjelaskan pengaturan hak maksimum. Pendekatan "buat saja berhasil" dari administrator sistem yang tidak berpengalaman pada prinsipnya menciptakan peluang untuk eskalasi hak istimewa. Jika memungkinkan, sebaiknya lihat riwayat perintah untuk penggunaan chmod yang tidak aman.

chmod +w /path 
chmod 777 /path

Mendapatkan akses shell untuk pengguna lain

Kami melihat daftar pengguna di /etc/passwd. Kami memperhatikan mereka yang memiliki cangkang. Anda dapat mem-brute pengguna ini - ada kemungkinan bahwa melalui pengguna yang dihasilkan Anda pada akhirnya akan dapat meningkatkan hak istimewa.

Untuk meningkatkan keamanan, saya menganjurkan agar Anda selalu mematuhi prinsip hak istimewa terkecil. Masuk akal juga untuk meluangkan waktu untuk memeriksa konfigurasi tidak aman yang mungkin tersisa setelah pemecahan masalah - ini adalah "tugas teknis" dari administrator sistem.

Kode yang ditulis sendiri

Ada baiknya mencermati executable di direktori home pengguna dan server web (/var/www/ kecuali ditentukan lain). File-file ini bisa berubah menjadi solusi yang sepenuhnya tidak aman dan berisi kruk yang luar biasa. Tentu saja, jika Anda memiliki beberapa framework di direktori server web Anda, tidak masuk akal untuk mencari zero-day di dalamnya sebagai bagian dari pentest, tetapi disarankan untuk mencari dan mempelajari modifikasi kustom, plugin, dan komponen.

Untuk meningkatkan keamanan, sebaiknya hindari penggunaan kredensial dalam skrip yang ditulis sendiri, serta fungsionalitas yang berpotensi berbahaya, seperti membaca /etc/shadow atau memanipulasi id_rsa, jika memungkinkan.

Peningkatan hak istimewa melalui eksploitasi kerentanan

Sebelum mencoba meningkatkan hak istimewa melalui eksploitasi, penting untuk memahami mentransfer file ke host target. Selain alat biasa seperti ssh, ftp, http (wget, curl), ada juga yang utuh "kebun binatang" kemungkinan.

Untuk meningkatkan keamanan sistem Anda, perbarui secara berkala ke yang terbaru stabil versi, dan juga coba gunakan distribusi yang dirancang untuk Perusahaan. Kalau tidak, jarang, tetapi ada situasi ketika apt upgrade membuat sistem tidak dapat digunakan.

Mengeksploitasi Layanan yang Berjalan dalam Konteks Pengguna Root

Beberapa layanan Linux berjalan sebagai root pengguna istimewa. Mereka dapat ditemukan menggunakan ps aux | grep akar. Dalam hal ini, layanan mungkin tidak diumumkan di Web dan tersedia secara lokal. Jika memiliki eksploitasi publik, mereka dapat digunakan dengan aman: kerusakan layanan jika terjadi kegagalan jauh lebih tidak penting daripada kerusakan OS.

ps -aux | grep root # Linux

Kasus paling sukses dapat dianggap sebagai pengoperasian layanan yang diretas dalam konteks pengguna root. Mengoperasikan layanan SMB memberi SYSTEM akses istimewa pada sistem Windows (misalnya melalui ms17-010). Namun, ini tidak umum pada sistem Linux, jadi Anda dapat menghabiskan banyak waktu untuk peningkatan hak istimewa.

Memanfaatkan Kerentanan Kernel Linux

Ini adalah jalan terakhir yang harus diambil. Operasi yang tidak berhasil dapat menyebabkan sistem crash, dan jika terjadi reboot, beberapa layanan (termasuk layanan yang memungkinkan untuk mendapatkan shell asli) mungkin tidak muncul. Kebetulan administrator lupa menggunakan perintah systemctl enable. Plus itu akan menyebabkan banyak ketidakpuasan dengan pekerjaan Anda jika eksploitasi belum disepakati.
Jika Anda memutuskan untuk menggunakan sumber dari exploitdb, pastikan untuk membaca komentar di awal skrip. Antara lain, biasanya disebutkan cara mengkompilasi eksploit ini dengan benar. Jika Anda terlalu malas atau membutuhkan "kemarin" karena tenggat waktu, Anda dapat mencari repositori dengan eksploit yang sudah dikompilasi, misalnya. Namun, harus dipahami bahwa dalam hal ini Anda akan mendapatkan babi di ladang. Di sisi lain, jika seorang pemrogram memahami hingga ke byte cara kerja komputer dan perangkat lunak yang digunakannya, dia tidak akan menulis satu baris kode pun sepanjang hidupnya.

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

Metasploit

Untuk menangkap dan menangani koneksi, selalu lebih baik menggunakan modul exploit/multi/handler. Hal utama adalah mengatur muatan yang benar, misalnya, generik/Shell/reverce_tcp atau generik/Shell/bind_tcp. Shell yang diperoleh di Metasploit dapat ditingkatkan ke Meterpreter menggunakan modul post/multi/manage/Shell_to_meterpreter. Dengan Meterpreter, Anda dapat mengotomatiskan proses pasca eksploitasi. Misalnya, modul post/multi/recon/local_exploit_suggester memeriksa platform, arsitektur, dan entitas yang dapat dieksploitasi dan menyarankan modul Metasploit untuk eskalasi hak istimewa pada sistem target. Berkat Meterpreter, eskalasi hak istimewa terkadang bermuara pada menjalankan modul yang tepat, tetapi meretas tanpa memahami apa yang terjadi di balik layar tidaklah benar (Anda masih harus menulis laporan).

Tools

Alat untuk mengotomatiskan pengumpulan informasi lokal akan menghemat banyak tenaga dan waktu, tetapi dengan sendirinya tidak dapat sepenuhnya mengidentifikasi jalur eskalasi hak istimewa, terutama dalam hal mengeksploitasi kerentanan kernel. Alat otomasi akan melakukan semua perintah yang diperlukan bagi Anda untuk mengumpulkan informasi tentang sistem, tetapi penting juga untuk dapat melakukannya menganalisa menerima data. Saya harap artikel saya bermanfaat bagi Anda dalam hal ini. Tentu saja, ada lebih banyak alat daripada yang akan saya sebutkan di bawah ini, tetapi semuanya melakukan hal yang sama - ini lebih merupakan masalah selera.

Linpea

Alat yang cukup baru, komit pertama bertanggal Januari 2019. Saat ini instrumen favorit saya. Intinya adalah menyoroti vektor eskalasi hak istimewa yang paling menarik. Setuju, lebih mudah untuk mendapatkan penilaian ahli pada tingkat ini daripada mengurai data mentah monolitik.

LinEnum

Alat favorit kedua saya, ia juga mengumpulkan dan mengatur data yang diterima sebagai hasil pencacahan lokal.

linux-exploit-suggester(1,2)

Eksploitasi ini akan menganalisis sistem untuk kondisi yang sesuai untuk eksploitasi. Bahkan, itu akan melakukan pekerjaan yang identik dengan modul Metasploit local_exploit_suggester, tetapi akan menawarkan tautan ke kode sumber exploit-db daripada modul Metasploit.

pemeriksa privasi Linux

Skrip ini akan mengumpulkan dan mengatur sejumlah besar informasi berdasarkan bagian yang dapat berguna untuk pembentukan vektor eskalasi hak istimewa.

Lain kali akan saya uraikan Eskalasi hak istimewa Linux melalui suid/sgid.

Sumber: www.habr.com

Tambah komentar