Men ildizman. Linux OS imtiyozlarini oshirishni tushunish

Men 2020 yilning birinchi choragini OSCP imtihoniga tayyorgarlik ko'rish bilan o'tkazdim. Googleda ma'lumot qidirish va ko'plab "ko'r" urinishlar bo'sh vaqtimni oldi. Imtiyozlarni oshirish mexanizmlarini tushunish ayniqsa qiyin bo'lib chiqdi. PWK kursi ushbu mavzuga katta e'tibor beradi, ammo uslubiy materiallar har doim ham etarli emas. Internetda foydali buyruqlar bilan ko'plab qo'llanmalar mavjud, ammo men bu qayerga olib kelishini tushunmasdan tavsiyalarga ko'r-ko'rona amal qilish tarafdori emasman.

Men imtihonga tayyorgarlik ko'rish va muvaffaqiyatli o'tish paytida o'rganganlarimni siz bilan baham ko'rmoqchiman (shu jumladan Hack The Box-ga davriy reydlar). Try Harder yoβ€˜lidan ongliroq yurishimga yordam bergan har bir ma’lumot uchun chuqur minnatdorchilik tuygβ€˜usini his qildim, endi jamiyatga qaytish vaqti keldi.

Men sizga Linux OS-da imtiyozlarni oshirish bo'yicha qo'llanma bermoqchiman, bu sizga eng keng tarqalgan vektorlar va sizga kerak bo'lgan tegishli xususiyatlarni tahlil qilishni o'z ichiga oladi. Ko'pincha, imtiyozlarni oshirish mexanizmlarining o'zi juda oddiy, ma'lumotni tuzish va tahlil qilishda qiyinchiliklar paydo bo'ladi. Shuning uchun men "ekskursiya safari" dan boshlashga qaror qildim va keyin har bir vektorni alohida maqolada ko'rib chiqing. Umid qilamanki, mavzuni o'rganish uchun vaqtingizni tejayman.

Men ildizman. Linux OS imtiyozlarini oshirishni tushunish

Xo'sh, agar usullar juda uzoq vaqtdan beri ma'lum bo'lsa, nega 2020 yilda imtiyozlarni oshirish mumkin? Aslida, agar foydalanuvchi tizimni to'g'ri ishlatsa, undagi imtiyozlarni oshirish haqiqatan ham mumkin bo'lmaydi. Bunday imkoniyatlarni yuzaga keltiradigan asosiy global muammo hisoblanadi ishonchsiz konfiguratsiya. Tizimda zaifliklarni o'z ichiga olgan eskirgan dasturiy ta'minot versiyalarining mavjudligi ham xavfli konfiguratsiyaning alohida holatidir.

Ishonchsiz konfiguratsiya orqali imtiyozlarni oshirish

Avvalo, xavfsiz bo'lmagan konfiguratsiya bilan shug'ullanamiz. Keling, bundan boshlaylik IT mutaxassislari ko'pincha qo'llanmalar va stackoverflow kabi manbalardan foydalanadilar, ularning aksariyati xavfli buyruqlar va konfiguratsiyalarni o'z ichiga oladi. Bunga yorqin misol keltirish mumkin yangiliklar stackoverflow'dan eng ko'p ko'chirilgan kodda xatolik borligi. Tajribali admin jambni ko'radi, lekin bu ideal dunyoda. Hatto malakali mutaxassislar ham ish yukining ortishi xato qilishga qodir. Tasavvur qiling-a, administrator navbatdagi tender uchun hujjatlarni tayyorlamoqda va tasdiqlamoqda, shu bilan birga keyingi chorakda joriy etiladigan yangi texnologiyani o'rganmoqda, shu bilan birga foydalanuvchilarni qo'llab-quvvatlash vazifalarini vaqti-vaqti bilan hal qilmoqda. Va keyin unga bir nechta virtual mashinalarni tezda ko'tarish va ularga xizmat ko'rsatish vazifasi beriladi. Sizningcha, admin oddiygina jambni sezmasligi ehtimoli qanday? Keyin mutaxassislar o'zgaradi, ammo tayoqchalar qoladi, kompaniyalar esa har doim xarajatlarni, shu jumladan IT mutaxassislari uchun xarajatlarni minimallashtirishga intiladi.

Pseudo shell va jailbreak

Ishlab chiqarish bosqichida olingan tizim qobig'i ko'pincha cheklangan, ayniqsa siz uni veb-server foydalanuvchisini buzish orqali olgan bo'lsangiz. Masalan, qobiq cheklovlari sudo buyrug'ini xato bilan ishlatishingizga xalaqit berishi mumkin:

sudo: no tty present and no askpass program specified

Qobiqni olgandan so'ng, men to'liq terminal yaratishni maslahat beraman, masalan, Python bilan.

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

Siz shunday deb so'raysiz: "Agar men, masalan, fayllarni uzatish uchun foydalana olsam, nega menga mingta buyruq kerak?" Haqiqat shundaki, tizimlar boshqacha tarzda tuzilgan, keyingi xostda Python o'rnatilmagan bo'lishi mumkin, ammo Perl mavjud. Ko'nikma - bu tizimda tanish narsalarni tanish asboblarsiz bajarishdir. Xususiyatlarning to'liq ro'yxatini topish mumkin shu yerda.

Past imtiyozli qobiq yordamida olinishi mumkin jamoalar 1 ΠΈ jamoalar 2 (hayratlanarli, hatto GIMP).

Buyruqlar tarixini ko'rish

Linux fayldagi barcha bajarilgan buyruqlar tarixini to'playdi ~ / .bash_history. Agar server faol foydalanilayotgan bo'lsa va uning tarixi tozalanmagan bo'lsa, hisobga olish ma'lumotlari ushbu faylda topilgan bo'lishi mumkin. Tarixni tozalash juda noqulay. Agar administrator orqali o'n darajali buyruqlarni tanlashga majbur bo'lsa, albatta, unga qayta kiritishdan ko'ra tarixdan ushbu buyruqni chaqirish qulayroq bo'ladi. Bundan tashqari, ko'pchilik bu "hack" haqida bilmaydi. Tizimda Zsh yoki Fish kabi muqobil qobiqlar mavjud bo'lsa, ularning o'z tarixi bor. Har qanday qobiqdagi buyruqlar tarixini ko'rsatish uchun buyruqlar tarixini kiritish kifoya.

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

Umumiy hosting mavjud bo'lib, unda server bir nechta saytlarni joylashtirish uchun ishlatiladi. Odatda, ushbu konfiguratsiya bilan har bir resurs alohida uy katalogiga va virtual xostga ega bo'lgan o'z foydalanuvchisiga ega. Shunday qilib, agar noto'g'ri sozlangan bo'lsa, .bash_history faylini veb-resursning ildiz katalogidan topishingiz mumkin.

Fayl tizimida parollarni topish va qo'shni tizimlarga hujumlar

Turli xizmatlar uchun konfiguratsiya fayllari joriy foydalanuvchi tomonidan o'qilishi mumkin. Ularda siz aniq matnda hisob ma'lumotlarini topishingiz mumkin - ma'lumotlar bazasiga yoki tegishli xizmatlarga kirish uchun parollar. Xuddi shu parol ma'lumotlar bazasiga kirish uchun ham, asosiy foydalanuvchini avtorizatsiya qilish uchun ham ishlatilishi mumkin (hisob ma'lumotlari xodimlari).
Topilgan hisob ma'lumotlari boshqa xostlardagi xizmatlarga tegishli bo'ladi. Buzilgan xost orqali infratuzilmaga hujumning rivojlanishi boshqa xostlarni ekspluatatsiya qilishdan yomonroq emas. Qo'shni tizimlarni fayl tizimidagi IP manzillarini qidirish orqali ham topish mumkin.

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

Agar buzilgan xostda Internetdan foydalanish mumkin bo'lgan veb-ilova bo'lsa, uning jurnallarini IP manzillarini qidirishdan chiqarib tashlash yaxshiroqdir. Internetdan foydalanuvchilarning manzillari biz uchun foydali bo'lishi dargumon, lekin ichki tarmoq manzillari (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) va ular qayerga borishi, jurnallar, qiziqarli bo'lishi mumkin.

Sudo

Sudo buyrug'i foydalanuvchiga root kontekstida o'z paroli bilan yoki undan umuman foydalanmasdan buyruqni bajarishga imkon beradi. Linux-dagi ko'plab operatsiyalar ildiz huquqlarini talab qiladi, ammo root sifatida ishlash juda yomon amaliyot hisoblanadi. Buning o'rniga, ildiz kontekstida buyruqlarni bajarish uchun tanlab ruxsatni qo'llash yaxshiroqdir. Biroq, ko'pgina Linux vositalari, jumladan vi kabi standart vositalar, imtiyozlarni qonuniy yo'llar bilan oshirish uchun ishlatilishi mumkin. To'g'ri yo'lni topish uchun men qarashni tavsiya qilaman shu yerda.

Tizimga kirishdan so'ng qilinadigan birinchi narsa sudo -l buyrug'ini ishga tushirishdir. U sudo buyrug'idan foydalanish ruxsatini ko'rsatadi. Agar parolsiz foydalanuvchi (masalan, apache yoki www-data) olinsa, sudo imtiyozlarini oshirish vektori ehtimoldan yiroq. Sudo-dan foydalanganda tizim parol so'raydi. Parol o'rnatish uchun passwd buyrug'idan foydalanish ham ishlamaydi, u joriy foydalanuvchi parolini so'raydi. Ammo agar sudo hali ham mavjud bo'lsa, unda siz quyidagilarni izlashingiz kerak:

  • har qanday tarjimonlar, har kim qobiq yaratishi mumkin (PHP, Python, Perl);
  • har qanday matn muharrirlari (vim, vi, nano);
  • har qanday tomoshabinlar (kamroq, ko'proq);
  • fayl tizimi bilan ishlashning har qanday imkoniyatlari (cp, mv);
  • bash-da interaktiv yoki bajariladigan buyruq sifatida chiqadigan vositalar (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Internetda barcha suid / sgid buyruqlarini yaratish bo'yicha maslahat beradigan ko'plab qo'llanmalar mavjud, ammo noyob maqolada ushbu dasturlar bilan nima qilish kerakligi haqida aniq ma'lumotlar berilgan. Ekspluatatsiyalardan foydalanishni hisobga olmaydigan imtiyozlarni oshirish variantlarini topish mumkin shu yerda. Bundan tashqari, bir qator bajariladigan fayllar OS versiyasi uchun maxsus zaifliklarga ega, masalan.

Ideal dunyoda siz barcha o'rnatilgan paketlarni hech bo'lmaganda searchsploit orqali ishga tushirishingiz kerak. Amalda, bu sudo kabi eng mashhur dasturlar bilan amalga oshirilishi kerak. Bundan tashqari, har doim imtiyozlarni oshirish nuqtai nazaridan suid/sgid bitlari bilan bajariladigan fayllarni ajratib ko'rsatadigan avtomatlashtirilgan vositalarni ishlab chiqishda foydalanish va qo'llab-quvvatlash imkoniyati mavjud. Men maqolaning tegishli qismida bunday vositalar ro'yxatini beraman.

Root kontekstida Cron yoki Init tomonidan boshqariladigan yoziladigan skriptlar

Cron ishlari turli foydalanuvchilar, jumladan, root kontekstida ishlashi mumkin. Agar cron-da bajariladigan faylga havolasi bo'lgan vazifa mavjud bo'lsa va uni yozishingiz mumkin bo'lsa, uni osongina zararli bilan almashtirishingiz va imtiyozlarni oshirishingiz mumkin. Shu bilan birga, sukut bo'yicha, cron vazifalari bo'lgan fayllar har qanday foydalanuvchi tomonidan o'qish uchun mavjud.

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

Init bilan ham xuddi shunday holat. Farqi shundaki, crondagi vazifalar davriy ravishda, initda esa tizim ishga tushirilganda bajariladi. Ishlash uchun siz tizimni qayta ishga tushirishingiz kerak bo'ladi, ba'zi xizmatlar ko'tarilmasligi mumkin (agar ular autoloadda ro'yxatdan o'tmagan bo'lsa).

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

Bundan tashqari, istalgan foydalanuvchi yozishi mumkin bo'lgan fayllarni qidirishingiz mumkin.

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

Usul juda mashhur, tajribali tizim ma'murlari chmod buyrug'idan ehtiyotkorlik bilan foydalanadilar. Biroq, Internetda qo'llanmalarning katta qismi maksimal huquqlarni belgilashni tasvirlaydi. Tajribasiz tizim ma'murlarining "shunchaki ishlasin" yondashuvi printsipial jihatdan imtiyozlarni oshirish uchun imkoniyatlar yaratadi. Iloji bo'lsa, chmod'dan xavfli foydalanish uchun buyruqlar tarixiga qarash yaxshidir.

chmod +w /path 
chmod 777 /path

Boshqa foydalanuvchilar uchun qobiqqa kirish

Biz /etc/passwd-dagi foydalanuvchilar ro'yxatini ko'rib chiqamiz. Biz qobiqqa ega bo'lganlarga e'tibor beramiz. Siz bu foydalanuvchilarga shafqatsiz munosabatda bo'lishingiz mumkin - natijada paydo bo'lgan foydalanuvchi orqali siz imtiyozlarni oshirishingiz mumkin.

Xavfsizlikni yaxshilash uchun har doim eng kam imtiyoz tamoyiliga amal qilishingizni tavsiya qilaman. Muammolarni bartaraf etishdan keyin qolishi mumkin bo'lgan xavfli konfiguratsiyalarni tekshirish uchun vaqt ajratish mantiqiy - bu tizim ma'murining "texnik vazifasi".

O'z-o'zidan yozilgan kod

Foydalanuvchi va veb-serverning uy katalogidagi bajariladigan fayllarni diqqat bilan ko'rib chiqishga arziydi (/var/www/, agar boshqacha ko'rsatilmagan bo'lsa). Ushbu fayllar mutlaqo xavfsiz bo'lmagan yechim bo'lib chiqishi va ajoyib tayoqchalarni o'z ichiga olishi mumkin. Albatta, agar sizning veb-serveringiz katalogida biron bir ramka mavjud bo'lsa, unda pentestning bir qismi sifatida nol kunni qidirish mantiqiy emas, lekin maxsus modifikatsiyalar, plaginlar va komponentlarni topish va o'rganish tavsiya etiladi.

Xavfsizlikni oshirish uchun o'z-o'zidan yozilgan skriptlarda hisobga olish ma'lumotlarini, shuningdek, /etc/shadow o'qish yoki iloji bo'lsa, id_rsa-ni manipulyatsiya qilish kabi potentsial xavfli funksiyalardan foydalanmaslik yaxshiroqdir.

Zaiflikdan foydalanish orqali imtiyozlarni oshirish

Imtiyozlarni ekspluatatsiya qilish orqali oshirishga harakat qilishdan oldin, buni tushunish muhimdir fayllarni maqsadli xostga o'tkazish. Ssh, ftp, http (wget, curl) kabi odatiy vositalarga qo'shimcha ravishda bir butun bor. imkoniyatlarning "hayvonot bog'i".

Tizimingiz xavfsizligini yaxshilash uchun uni muntazam ravishda oxirgi versiyaga yangilab turing barqaror versiyalari, shuningdek Enterprise uchun mo'ljallangan tarqatmalardan foydalanishga harakat qiling. Aks holda, kamdan-kam hollarda, lekin apt yangilanishi tizimni yaroqsiz holga keltiradigan holatlar mavjud.

Ildiz foydalanuvchi kontekstida ishlaydigan xizmatlardan foydalanish

Ba'zi Linux xizmatlari imtiyozli foydalanuvchi ildizi sifatida ishlaydi. Ularni ps aux | yordamida topish mumkin grep ildizi. Bunday holda, xizmat Internetda e'lon qilinmasligi va mahalliy sifatida mavjud bo'lishi mumkin. Agar u ommaviy ekspluatatsiyalarga ega bo'lsa, ulardan xavfsiz foydalanish mumkin: ishlamay qolganda xizmat ko'rsatishning ishdan chiqishi OS ishdan chiqishiga qaraganda ancha muhimroqdir.

ps -aux | grep root # Linux

Eng muvaffaqiyatli holatni ildiz foydalanuvchisi kontekstida buzilgan xizmatning ishlashi deb hisoblash mumkin. SMB xizmatidan foydalanish Windows tizimlarida SYSTEMga imtiyozli kirish imkonini beradi (masalan, ms17-010 orqali). Biroq, bu Linux tizimlarida keng tarqalgan emas, shuning uchun siz imtiyozlarni oshirishga ko'p vaqt sarflashingiz mumkin.

Linux yadrosining zaifliklaridan foydalanish

Bu eng oxirgi yo'l. Muvaffaqiyatsiz operatsiya tizimning ishdan chiqishiga olib kelishi mumkin va qayta ishga tushirilganda ba'zi xizmatlar (shu jumladan, asl qobiqni olish mumkin bo'lgan xizmatlar) ko'tarilmasligi mumkin. Administrator shunchaki systemctl enable buyrug'idan foydalanishni unutgan bo'ladi. Bundan tashqari, agar ekspluatatsiya to'g'risida kelishib olinmagan bo'lsa, bu sizning ishingizdan juda ko'p noroziliklarga olib keladi.
Agar siz exploitdb manbalaridan foydalanishga qaror qilsangiz, skript boshida sharhlarni o'qib chiqing. Boshqa narsalar qatorida, odatda bu ekspluatatsiyani qanday qilib to'g'ri kompilyatsiya qilish kerakligi aytiladi. Agar siz juda dangasa bo'lsangiz yoki belgilangan muddatlar tufayli "kecha" kerak bo'lsa, siz allaqachon tuzilgan ekspluatatsiyalar bilan omborlarni qidirishingiz mumkin, masalan. Biroq, shuni tushunish kerakki, bu holda siz cho'chqaga ega bo'lasiz. Boshqa tomondan, agar dasturchi kompyuterning qanday ishlashini va u foydalanadigan dasturiy ta'minotni bir baytgacha tushunsa, u butun hayoti davomida bir qator kod yozmagan bo'lardi.

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

Metasploit

Ulanishni ushlash va boshqarish uchun har doim exploit/multi/handler modulidan foydalanish yaxshiroqdir. Asosiysi, to'g'ri yukni o'rnatish, masalan, generic/shell/reverce_tcp yoki generic/shell/bind_tcp. Metasploit-da olingan qobiq post/multi/manage/shell_to_meterpreter moduli yordamida Meterpreter-ga yangilanishi mumkin. Meterpreter yordamida siz ekspluatatsiyadan keyingi jarayonni avtomatlashtirishingiz mumkin. Masalan, post/multi/recon/local_exploit_suggester moduli platforma, arxitektura va ekspluatatsiya qilinadigan ob'ektlarni tekshiradi va maqsadli tizimda imtiyozlarni oshirish uchun Metasploit modullarini taklif qiladi. Meterpreter tufayli, imtiyozlarning kuchayishi ba'zan to'g'ri modulni ishga tushirishga to'g'ri keladi, ammo kaput ostida nima sodir bo'layotganini tushunmasdan xakerlik qilish to'g'ri emas (siz hali ham hisobot yozishingiz kerak).

Asboblar

Mahalliy ma'lumot to'plashni avtomatlashtirish vositalari sizga ko'p kuch va vaqtni tejaydi, lekin o'z-o'zidan imtiyozlarni oshirish yo'lini to'liq aniqlay olmaydi, ayniqsa yadro zaifliklaridan foydalanishda. Avtomatlashtirish vositalari tizim haqida ma'lumot to'plash uchun barcha kerakli buyruqlarni bajaradi, ammo bu ham muhim: tahlil qilish olingan ma'lumotlar. Umid qilamanki, mening maqolam bu borada sizga foydali bo'ladi. Albatta, men quyida sanab o'tganimdan ko'ra ko'proq vositalar mavjud, ammo ularning barchasi bir xil narsani bajaradi - bu ko'proq ta'mga bog'liq.

No'xat

Juda yangi vosita, birinchi majburiyat 2019 yil yanvarda. Hozirda eng sevimli asbobim. Xulosa shuki, u eng qiziqarli imtiyozlarni oshirish vektorlarini ta'kidlaydi. Qabul qiling, monolit xom ashyoni tahlil qilishdan ko'ra, ushbu darajadagi ekspert bahosini olish qulayroqdir.

LinEnum

Mening ikkinchi sevimli vositam, shuningdek, mahalliy ro'yxatga olish natijasida olingan ma'lumotlarni to'playdi va tartibga soladi.

linux-exploit-suggester (1,2)

Ushbu ekspluatatsiya tizimni ekspluatatsiyalar uchun mos sharoitlar uchun tahlil qiladi. Aslida, u Metasploit local_exploit_suggester moduliga o'xshash ishni bajaradi, lekin Metasploit modullariga emas, balki exploit-db manba kodlariga havolalarni taklif qiladi.

Linux privchecker

Ushbu skript imtiyozlarni oshirish vektorini shakllantirish uchun foydali bo'lishi mumkin bo'lgan katta hajmdagi ma'lumotlarni to'playdi va bo'limlar bo'yicha tartibga soladi.

Boshqa safar men batafsil aytib beraman Linux imtiyozlarini suid/sgid orqali oshirish.

Manba: www.habr.com

a Izoh qo'shish