mən kökəm. Linux OS Privilege Eskalasiyasını Anlamaq

2020-ci ilin birinci rübünü OSCP imtahanına hazırlaşmaqla keçirdim. Google-da məlumat axtarmaq və bir çox "kor" cəhdlər bütün boş vaxtımı alırdı. Xüsusilə imtiyazların artırılması mexanizmlərini başa düşmək çətin olduğu ortaya çıxdı. PWK kursu bu mövzuya böyük diqqət yetirir, lakin metodik materiallar həmişə kifayət deyil. İnternetdə faydalı əmrləri olan çoxlu təlimatlar var, amma bunun hara aparacağını anlamadan tövsiyələrə kor-koranə əməl etməyin tərəfdarı deyiləm.

İmtahana hazırlaşarkən və müvəffəqiyyətlə keçərkən öyrənə bildiklərimi sizinlə bölüşmək istərdim (o cümlədən Hack The Box-a dövri reydlər). Daha şüurlu şəkildə Try Harder yolunu getməyimə kömək edən hər bir məlumat üçün dərin minnətdarlıq hissi keçirdim, indi cəmiyyətə geri qaytarmaq vaxtımdır.

Mən sizə mütləq ehtiyac duyacağınız ən ümumi vektorların və əlaqəli xüsusiyyətlərin təhlilini ehtiva edən OS Linux-da imtiyazların artırılması üçün bələdçi vermək istəyirəm. Çox vaxt imtiyazların yüksəldilməsi mexanizmlərinin özləri olduqca sadədir, məlumatların strukturlaşdırılması və təhlili zamanı çətinliklər yaranır. Buna görə də, mən "görməli yerlər turu" ilə başlamaq və sonra hər bir vektoru ayrıca məqalədə nəzərdən keçirmək qərarına gəldim. Ümid edirəm mövzunu öyrənmək üçün vaxtınıza qənaət edəcəyəm.

mən kökəm. Linux OS Privilege Eskalasiyasını Anlamaq

Beləliklə, metodlar çox uzun müddətdir yaxşı məlumdursa, niyə 2020-ci ildə imtiyazların artırılması mümkündür? Əslində, istifadəçi sistemi düzgün idarə edərsə, onda imtiyazları artırmaq həqiqətən mümkün olmayacaq. Belə imkanların yaranmasına səbəb olan əsas qlobal problemdir etibarsız konfiqurasiya. Sistemdə boşluqları ehtiva edən köhnəlmiş proqram versiyalarının olması da təhlükəli konfiqurasiyanın xüsusi halıdır.

Təhlükəsiz konfiqurasiya vasitəsilə imtiyazların artması

Əvvəlcə etibarsız konfiqurasiya ilə məşğul olaq. ilə başlayaq İT mütəxəssisləri tez-tez dərsliklərdən və stackoverflow kimi resurslardan istifadə edirlər, onların bir çoxunda təhlükəli əmrlər və konfiqurasiyalar var. Çarpıcı misaldır xəbərlər stackoverflow-dan ən çox kopyalanan kodun xəta olduğunu. Təcrübəli admin tıxac görəcək, amma bu ideal dünyadadır. Hətta bacarıqlı mütəxəssislər artan iş yükü səhv etməyə qadirdir. Təsəvvür edin ki, administrator növbəti tender üçün sənədləri hazırlayır və təsdiqləyir, eyni zamanda növbəti rübdə tətbiq olunacaq yeni texnologiyaya dərindən baxır, eyni zamanda istifadəçiyə dəstək tapşırıqlarını vaxtaşırı həll edir. Və sonra ona tez bir zamanda bir neçə virtual maşını yetişdirmək və onlara xidmətlər yaymaq tapşırığı verilir. Sizcə, admin sadəcə olaraq tıxacın fərqinə varmaması ehtimalı nədir? Sonra mütəxəssislər dəyişir, lakin qoltuqaltılar qalır, şirkətlər isə həmişə İT mütəxəssisləri də daxil olmaqla xərcləri minimuma endirməyə çalışırlar.

Pseudo shell və jailbreak

İstehsal mərhələsində əldə edilən sistem qabığı çox vaxt məhdud olur, xüsusən də onu veb server istifadəçisini sındırmaqla əldə etsəniz. Məsələn, qabıq məhdudiyyətləri xəta ilə sudo əmrindən istifadə etməyinizə mane ola bilər:

sudo: no tty present and no askpass program specified

Bir qabıq əldə etdikdən sonra, məsələn, Python ilə tam hüquqlu bir terminal yaratmağı məsləhət görürəm.

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

Siz soruşursunuz: "Məsələn, faylları ötürmək üçün birindən istifadə edə bilsəm, niyə mənə min əmr lazımdır?" Fakt budur ki, sistemlər fərqli şəkildə konfiqurasiya olunur, növbəti hostda Python quraşdırılmaya bilər, lakin Perl mövcud ola bilər. Bacarıq, tanış alətlər olmadan sistemdə tanış şeyləri edə bilməkdir. Xüsusiyyətlərin tam siyahısını tapa bilərsiniz burada.

Aşağı imtiyazlı qabıq istifadə edərək əldə edilə bilər komandalar 1 и komandalar 2 (təəccüblü hətta GIMP).

Komanda tarixçəsinə baxın

Linux faylda bütün icra edilən əmrlərin tarixçəsini toplayır ~ / .bash_history. Əgər server aktiv istifadədədirsə və onun tarixçəsi təmizlənməyibsə, etimadnamələrin bu faylda tapılması şansı yüksəkdir. Tarixi təmizləmək tamamilə əlverişsizdir. Administrator vasitəsilə on səviyyəli əmrləri seçməyə məcbur olarsa, təbii ki, ona yenidən daxil olmaqdansa, tarixdən bu əmri çağırmaq daha rahat olacaq. Üstəlik, çoxlarının bu "hack" haqqında məlumatı yoxdur. Sistemdə Zsh və ya Balıq kimi alternativ qabıqlar varsa, onların öz tarixləri var. İstənilən qabıqda əmrlərin tarixini göstərmək üçün sadəcə əmr tarixçəsini daxil edin.

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

Paylaşılan hostinq var ki, server bir neçə saytı yerləşdirmək üçün istifadə olunur. Tipik olaraq, bu konfiqurasiya ilə hər resursun ayrıca ev kataloqu və virtual hostu olan öz istifadəçisi var. Beləliklə, səhv konfiqurasiya olunarsa, .bash_history faylını veb resursun kök kataloqunda tapa bilərsiniz.

Fayl sistemində parolların tapılması və qonşu sistemlərə hücumlar

Müxtəlif xidmətlər üçün konfiqurasiya faylları cari istifadəçiniz tərəfindən oxuna bilər. Onlarda etimadnamələri aydın mətndə tapa bilərsiniz - verilənlər bazasına və ya əlaqəli xidmətlərə daxil olmaq üçün parollar. Eyni parol həm verilənlər bazasına daxil olmaq, həm də kök istifadəçiyə icazə vermək üçün istifadə edilə bilər (etimadnamənin işçi heyəti).
Tapılan etimadnamələrin digər hostlardakı xidmətlərə aid olması baş verir. Təhlükəli host vasitəsilə infrastruktura hücumun inkişafı digər hostların istismarından daha pis deyil. Qonşu sistemləri fayl sistemində IP ünvanlarına baxmaqla da tapmaq olar.

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

Təhlükəli hostda İnternetdən istifadə edilə bilən bir veb proqramı varsa, onun qeydlərini IP ünvanlarının axtarışından xaric etmək daha yaxşıdır. İnternetdən resurs istifadəçilərinin ünvanlarının bizim üçün faydalı olacağı ehtimalı azdır, lakin daxili şəbəkənin ünvanları (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) və hara getdiklərini nəzərə alsaq. loglar, maraqlı ola bilər.

Sudo

Sudo əmri istifadəçiyə root kontekstində öz parolu ilə və ya ümumiyyətlə istifadə etmədən əmri yerinə yetirməyə imkan verir. Linux-da bir çox əməliyyatlar kök imtiyazları tələb edir, lakin kök kimi işləmək çox pis təcrübə hesab olunur. Bunun əvəzinə, kök kontekstində əmrləri yerinə yetirmək üçün seçmə icazəsi tətbiq etmək daha yaxşıdır. Bununla belə, bir çox Linux alətləri, o cümlədən vi kimi standart vasitələr, imtiyazları qanuni şəkildə artırmaq üçün istifadə edilə bilər. Düzgün yolu tapmaq üçün baxmağı məsləhət görürəm burada.

Sistemə daxil olduqdan sonra ediləcək ilk iş sudo -l əmrini yerinə yetirməkdir. Sudo əmrindən istifadə etmək icazəsini göstərəcək. Əgər parolu olmayan istifadəçi (məsələn, apache və ya www-data) əldə edilərsə, sudo imtiyazlarının yüksəldilməsi vektoru çətin ki. Sudo istifadə edərkən sistem parol tələb edəcək. Parol təyin etmək üçün passwd əmrindən istifadə də işləməyəcək, o, cari istifadəçi parolunu tələb edəcək. Ancaq sudo hələ də mövcuddursa, əslində, axtarmaq lazımdır:

  • hər hansı bir tərcüməçi, hər kəs bir qabıq (PHP, Python, Perl) kürü edə bilər;
  • hər hansı mətn redaktorları (vim, vi, nano);
  • hər hansı bir izləyici (az, daha çox);
  • fayl sistemi ilə işləmək üçün hər hansı imkanlar (cp, mv);
  • interaktiv və ya icra edilə bilən komanda kimi bash-da çıxışı olan alətlər (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

İnternetdə bütün suid / sgid əmrlərini qurmağı tövsiyə edən bir çox dərslik var, lakin nadir bir məqalə bu proqramlarla nə edəcəyini izah edir. İstismarların istifadəsini nəzərə almayan imtiyazların artırılması variantları tapıla bilər burada. Həmçinin, bir sıra icra edilə bilən faylların OS versiyası üçün xüsusi zəiflikləri var, məsələn.

İdeal bir dünyada bütün quraşdırılmış paketləri ən azı searchsploit vasitəsilə işlətməlisiniz. Praktikada bu, sudo kimi ən məşhur proqramlarla edilməlidir. O, həmçinin suid/sgid bit dəsti ilə imtiyazların yüksəldilməsi nöqteyi-nəzərindən maraqlı olanları vurğulayacaq avtomatlaşdırılmış alətlərdən istifadə etmək və işlənib hazırlanmasını dəstəkləmək üçün həmişə bir seçimdir. Bu cür vasitələrin siyahısını məqalənin müvafiq hissəsində verəcəyəm.

Kök kontekstində Cron və ya Init tərəfindən idarə olunan yazıla bilən skriptlər

Cron işləri kök daxil olmaqla müxtəlif istifadəçilərin kontekstində işləyə bilər. Əgər cron-da icra edilə bilən fayla keçidi olan tapşırıq varsa və onu yazmaq üçün əlçatandırsa, onu asanlıqla zərərlisi ilə əvəz edə və imtiyazların artırılmasını həyata keçirə bilərsiniz. Eyni zamanda, standart olaraq, cron tapşırıqları olan fayllar istənilən istifadəçi tərəfindən oxunmaq üçün mövcuddur.

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

Oxşar vəziyyət init ilə bağlıdır. Fərq ondadır ki, cron-da tapşırıqlar vaxtaşırı, init-də isə sistemin işə salınması zamanı yerinə yetirilir. Əməliyyat üçün sistemi yenidən başlatmalı olacaqsınız, bəzi xidmətlər artmaya bilər (əgər onlar avtomatik yükləmədə qeydiyyatdan keçməyibsə).

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

Siz həmçinin istənilən istifadəçi tərəfindən yazıla bilən faylları axtara bilərsiniz.

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

Metod olduqca məşhurdur, təcrübəli sistem idarəçiləri chmod əmrindən diqqətlə istifadə edirlər. Bununla belə, İnternetdə təlimatların böyük əksəriyyəti maksimum hüquqların təyin edilməsini təsvir edir. Təcrübəsiz sistem administratorlarının “sadəcə onu işə salmaq” yanaşması prinsipcə imtiyazların artırılması üçün imkanlar yaradır. Mümkünsə, chmodun təhlükəli istifadəsi üçün əmr tarixçəsinə baxmaq daha yaxşıdır.

chmod +w /path 
chmod 777 /path

Digər istifadəçilər üçün qabıq girişi əldə etmək

Biz /etc/passwd-də istifadəçilərin siyahısına baxırıq. Qabığı olanlara diqqət yetiririk. Siz bu istifadəçiləri qəddar edə bilərsiniz - ola bilər ki, nəticədə yaranan istifadəçi vasitəsilə siz imtiyazları artıra biləcəksiniz.

Təhlükəsizliyi yaxşılaşdırmaq üçün sizə həmişə ən az imtiyaz prinsipinə riayət etməyi tövsiyə edirəm. Problemlərin aradan qaldırılmasından sonra qala biləcək etibarlı olmayan konfiqurasiyaları yoxlamaq üçün vaxt ayırmağın da mənası var - bu, sistem administratorunun "texniki vəzifəsidir".

Öz-özünə yazılmış kod

İstifadəçinin və veb-serverin ev kataloqunda (/var/www/ başqa cür göstərilməyibsə) icra olunan sənədlərə yaxından nəzər salmağa dəyər. Bu fayllar tamamilə etibarsız bir həll ola bilər və inanılmaz qoltuqağacı ehtiva edə bilər. Əlbəttə ki, veb server kataloqunuzda hansısa çərçivə varsa, pentestin bir hissəsi kimi orada sıfır günü axtarmaq mənasızdır, lakin xüsusi modifikasiyaları, plaginləri və komponentləri tapmaq və öyrənmək tövsiyə olunur.

Təhlükəsizliyi artırmaq üçün, öz-özünə yazılmış skriptlərdə etimadnamələrdən, eləcə də mümkünsə /etc/shadow oxumaq və ya id_rsa ilə manipulyasiya etmək kimi potensial təhlükəli funksionallıqdan istifadə etməkdən çəkinmək daha yaxşıdır.

Zəifliklərdən istifadə etməklə imtiyazların yüksəldilməsi

İstismar yolu ilə imtiyazları yüksəltməyə cəhd etməzdən əvvəl bunu başa düşmək vacibdir faylların hədəf hosta ötürülməsi. Ssh, ftp, http (wget, curl) kimi adi alətlərə əlavə olaraq bir bütövlük var. imkanların "zooparkı".

Sisteminizin təhlükəsizliyini artırmaq üçün onu müntəzəm olaraq ən son versiyaya yeniləyin sabit versiyaları, həmçinin Enterprise üçün hazırlanmış paylamalardan istifadə etməyə çalışın. Əks təqdirdə, nadir hallarda, lakin apt yeniləməsi sistemi yararsız hala gətirdiyi vəziyyətlər var.

Kök İstifadəçinin Kontekstində Çalışan Xidmətlərdən İstismar

Bəzi Linux xidmətləri imtiyazlı istifadəçi kökü kimi işləyir. Onları ps aux | istifadə edərək tapmaq olar grep kökü. Bu halda, xidmət İnternetdə elan olunmaya və yerli olaraq mövcud ola bilər. Əgər onun ictimai istismarları varsa, onlardan təhlükəsiz istifadə etmək olar: nasazlıq halında xidmət qəzası OS qəzasından daha az kritikdir.

ps -aux | grep root # Linux

Ən uğurlu hal kök istifadəçi kontekstində sındırılmış xidmətin işləməsi hesab edilə bilər. SMB xidmətinin işə salınması SYSTEM-ə Windows sistemlərində imtiyazlı giriş imkanı verir (məsələn, ms17-010 vasitəsilə). Bununla belə, bu, Linux sistemlərində ümumi deyil, ona görə də imtiyazların artırılmasına çox vaxt sərf edə bilərsiniz.

Linux nüvəsində zəifliklərdən istifadə

Bu, ən son yoldur. Uğursuz əməliyyat sistemin çökməsinə səbəb ola bilər və yenidən başladıqda bəzi xidmətlər (o cümlədən, orijinal qabığı əldə etmək mümkün olanlar) yüksəlməyə bilər. Belə olur ki, administrator sadəcə systemctl enable əmrindən istifadə etməyi unutmuşdur. Üstəlik, istismar razılaşdırılmasa, işinizdən çox narazılıq yaradacaq.
Əgər exploitdb-dəki mənbələrdən istifadə etmək qərarına gəlsəniz, skriptin əvvəlindəki şərhləri oxumağınızdan əmin olun. Digər şeylər arasında, adətən bu istismarı necə düzgün tərtib etmək lazım olduğunu söyləyir. Əgər çox tənbəl idinizsə və ya son tarixlərə görə "dünən" ehtiyacınız varsa, artıq tərtib edilmiş istismarları olan depoları axtara bilərsiniz, məsələn. Ancaq başa düşmək lazımdır ki, bu vəziyyətdə bir donuz alacaqsınız. Digər tərəfdən, bir proqramçı kompüterin necə işlədiyini və istifadə etdiyi proqram təminatını baytına qədər başa düşsəydi, bütün həyatı boyu bir kod sətri yazmazdı.

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

Metasploit

Əlaqəni tutmaq və idarə etmək üçün istismar/multi/işləyici modulundan istifadə etmək həmişə daha yaxşıdır. Əsas odur ki, düzgün yükü təyin edin, məsələn, generic/shell/reverce_tcp və ya generic/shell/bind_tcp. Metasploit-də əldə edilən qabıq post/multi/manage/shell_to_meterpreter modulundan istifadə edərək Meterpreter-ə yüksəldilə bilər. Meterpreter ilə siz istismardan sonrakı prosesi avtomatlaşdıra bilərsiniz. Məsələn, post/multi/recon/local_exploit_suggester modulu platforma, arxitektura və istismar olunan obyektləri yoxlayır və hədəf sistemdə imtiyazların artırılması üçün Metasploit modullarını təklif edir. Meterpreter sayəsində imtiyazların yüksəldilməsi bəzən düzgün modulun işə salınması ilə nəticələnir, lakin başlıq altında nə baş verdiyini anlamadan sındırmaq doğru deyil (hələ bir hesabat yazmalısınız).

Tools

Yerli məlumatların toplanmasının avtomatlaşdırılması üçün alətlər sizə çox səy və vaxta qənaət edəcək, lakin öz-özünə imtiyazların yüksəldilməsi yolunu tam müəyyən edə bilməz, xüsusən də nüvə zəifliklərindən istifadə halında. Avtomatlaşdırma alətləri sistem haqqında məlumat toplamaq üçün bütün lazımi əmrləri yerinə yetirəcək, lakin bunu bacarmaq da vacibdir. təhlil etmək alınan məlumatlar. Ümid edirəm ki, məqaləm bu işdə sizin üçün faydalı olacaq. Əlbəttə ki, aşağıda sadalayacağımdan daha çox alətlər var, lakin onların hamısı eyni şeyi edir - bu, daha çox zövq məsələsidir.

Linpeas

Kifayət qədər təzə alət, ilk öhdəlik 2019-cu ilin yanvarına aiddir. Hal-hazırda sevimli alətim. Əsas odur ki, o, ən maraqlı imtiyazların yüksəldilməsi vektorlarını vurğulayır. Razılaşın, monolit xam məlumatları təhlil etməkdənsə, bu səviyyədə ekspert qiymətləndirməsi almaq daha rahatdır.

LinEnum

İkinci sevimli alətim, o, həmçinin yerli siyahıyaalma nəticəsində alınan məlumatları toplayır və təşkil edir.

linux-exploit-suggester(1,2)

Bu istismar sistemi istismar üçün uyğun şərtlər üçün təhlil edəcək. Əslində, o, Metasploit local_exploit_suggester modulu ilə eyni işi görəcək, lakin Metasploit modullarından çox exploit-db mənbə kodlarına keçidlər təklif edəcək.

Linux privchecker

Bu skript imtiyazların yüksəldilməsi vektorunun formalaşması üçün faydalı ola biləcək böyük miqdarda məlumatı bölmələr üzrə toplayacaq və təşkil edəcəkdir.

Başqa vaxt ətraflı izah edəcəyəm suid/sgid vasitəsilə Linux imtiyazlarının yüksəldilməsi.

Mənbə: www.habr.com

Добавить комментарий