Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

ISACA İstanbul Chapter

Benzer bir sunumlar


... konulu sunumlar: "ISACA İstanbul Chapter"— Sunum transkripti:

1 ISACA İstanbul Chapter
LİNUX SUNUCULARDA YETKİ YÜKSELTME Istanbul, FATİH EMİRAL (BTRisk)

2 Genel yetki yükseltme metodu
AJANDA Ön şartlar Genel yetki yükseltme metodu Aşina olma adımında (da) bakılabilecek temel bilgiler Pratik yetki yükseltme alanlarının incelenmesi Uzun inceleme Diğer sistemlere yönelik bilgi edinme Shell komut ve script'lerindeki bazı özel konular

3 İşletim sistemleri komut satırında rahat olmak
ÖN ŞARTLAR Adım attığınız (shell aldığınız) bir sunucu üzerinde yetki yükseltme adımlarını pratik biçimde gerçekleştirebilmek için gerekli önşartlar: İşletim sistemleri komut satırında rahat olmak ve shell script yazabilmek'tir. Ancak bir sistem yöneticisi rahatlığında olmak şart değildir. Daha ziyade hazırlıklı olmaktan söz ediyoruz.

4 GENEL YETKİ YÜKSELTME METODU
File sistem üzerinde kısa bir süre gezinerek sisteme aşina olma Otomatik enumeration Manuel enumeration Manuel inceleme Google, google, google, ... Yetki yükseltme mekanizmasını kurma / etkinleştirme (denemeleri ...) Yüksek yetkili shell'i alma (ve daha sonra diğer hedefler için bilgi toplama)

5 AŞİNA OLMA ADIMINDA (DA) BAKILABİLECEK TEMEL BİLGİLER
whoami / id (Kimim ve hangi gruplara üyeyim) ls -ahl ~ (Mevcut kullanıcımızın home dizin içeriği) sudo -l (sudo hakkım var mı. Bazı komutlar parola gerektirebilir, eğer bir proses’i hack’leyerek sisteme ulaştıysanız bu bir problem olabilir. Sudo komutlarında parola ihtiyacı olup olmadığını bir script için şu şekilde de test edebiliriz) echo '' | sudo -S -l 2>/dev/null | grep -w 'nmap\|perl\|'awk'\|'find'\|'bash'\|'sh'\|'man'\|'more'\|'less'\|'vi'\|'vim'\|'nc'\|'netcat'\|python\|ruby\|lua\|irb' (Sudo ile çalıştırarak içinden komut çalıştırabileceğimiz interpreter, shell v.d. uygulamalar var mı)

6 AŞİNA OLMA ADIMINDA (DA) BAKILABİLECEK TEMEL BİLGİLER
uname -a (Sistem bilgisi, kernel versiyonu, v.s.) cat /proc/version (Biraz daha detaylı sistem bilgisi, bazen uname -a çıktısı çok zayıf kalabilir) lscpu (İşlemci mimarisi hakkında bilgiler, uname komutu çıktılarını desteklemek amacıyla da kullanılabilir, makine mimarisi payload üretirken ve local privilege exploit araştırırken önemli olacaktır) cat /etc/*-release (Linux dağıtımı hakkında daha detaylı bilgi sağlar, kernel exploit ararken hedefi netleştirmek için kullanılabilir) hostname (Sunucunun adı işlevi hakkında bize fikir verebilir, bu bilgi de bize daha sonraki adımlar için fikir verebilir)

7 AŞİNA OLMA ADIMINDA (DA) BAKILABİLECEK TEMEL BİLGİLER
cat /etc/passwd (Hangi kullanıcıların home dizinleri var, erişim hakkımız varsa bu dizinlerde önemli bilgiler bulabiliriz. Ayrıca başka root kullanıcısı var mı – uid: 0. Modern işletim sistemlerinde genellikle parola hash’leri passwd dosyasında bulunmaz, shadow dosyasında bulunur, ama şansımızı denemekte fayda var) cat /etc/master.passwd (FreeBSD sistemler üzerindeki passwd dosyasının adıdır.) lastlog | grep -v "Never" (Sisteme logon olmuş kullanıcılar, yine home dizin incelemesi, başka root kullanıcısı var mı gibi incelemelere destek olur) cat /etc/group (Özellikle root grubu (bu tür grupların adları farklı dağıtımlarda farklı olabilir) ve sudo grubuna üyelikler ilgimizi çekebilir. /etc/sudoers dosyasında %sudo ifadesiyle sudo grubunun yetkileri tanımlanır, eğer sistem yöneticisi bu hakları kısıtlamamışsa ve bu grubun üyesiysek şansımız yüksek)

8 AŞİNA OLMA ADIMINDA (DA) BAKILABİLECEK TEMEL BİLGİLER
cat /etc/sudoers 2>/dev/null (Normalde sudoers dosyası sadece root kullanıcısı ve root grubuna üye kullanıcılar tarafından izlenebilir, ama şansımızı denemekte fayda var. Bu dosyada diğer sudo yetkili kullanıcıları görebiliriz.) cat /etc/shadow 2>/dev/null (Normalde shadow dosyası sadece root kullanıcısı ve root grubuna üye kullanıcılar tarafından izlenebilir, ama şansımızı denemekte fayda var. Parola hash’lerini bu dosyadan elde edebiliriz.) ls -ahl /root/ 2>/dev/null (root’un home dizinini okuyabiliyor muyuz, eğer okuyabiliyorsak .bash_history v.d. dosyalardan hassas bilgiler elde edebiliriz) ls -ahl /home/ 2>/dev/null (home dizini ve altındaki dizinler için erişim haklarımız neler. Kullanıcı home dizinleri genellikle bu dizin altında olmakla birlikte bu mutlak bir kural değildir, bu yüzden passwd dosyasını incelememizden yine de fayda var.)

9 AŞİNA OLMA ADIMINDA (DA) BAKILABİLECEK TEMEL BİLGİLER
find /home/ -perm -4 -type f -exec ls -al {} \; 2>/dev/null (home dizinleri altındaki world readable dosyaların listesi. Bu komut manuel enumeration sırasında farklı dizinler için de kullanılabilir. Erişim hakkı parametresini -perm -o=r şeklinde de yazabilirdik.) Hassas dosyalara erişim haklarımız (Yazma hakkımız varsa değiştirmek isteyebiliriz): ls -la /etc/passwd 2>/dev/null ls -la /etc/group 2>/dev/null ls -la /etc/profile 2>/dev/null ls -la /etc/shadow 2>/dev/null ls -la /etc/master.passwd 2>/dev/null ls -la ~/.*_history 2>/dev/null (Mevcut kullanıcımızın home dizininde bulunan history dosyalarının ve erişim haklarının listesi) ls -la /root/.*_history 2>/dev/null (root’un home dizininde bulunan history dosyalarının ve erişim haklarının listesi)

10 PRATİK YETKİ YÜKSELTME ALANLARININ İNCELENMESİ
find / -uid 0 -perm type f 2>/dev/null (Sahibi root olan world writable setuid dosyalar) find / -perm type f 2>/dev/null (World writable setuid dosyalar) find / -perm type f 2>/dev/null | grep -w 'nmap\|perl\|'awk'\|'find'\|'bash'\|'sh'\|'man'\|'more'\|'less'\|'vi'\|'vim'\|'nc'\|'netcat'\|python\|ruby\|lua\|irb\|pl' | xargs -r ls –la (root shell escape’i yapabileceğimiz dosyalardan setuid hakkına sahip olanları var mı?) find / -perm type f 2>/dev/null (Tüm setuid hakkına sahip dosyaların listesi)

11 PRATİK YETKİ YÜKSELTME ALANLARININ İNCELENMESİ
find / -uid 0 -perm type f 2>/dev/null (Sahibi root olan world writable setgid dosyalar) find / -perm type f 2>/dev/null (World writable setgid dosyalar) find / -perm type f 2>/dev/null | grep -w 'nmap\|perl\|'awk'\|'find'\|'bash'\|'sh'\|'man'\|'more'\|'less'\|'vi'\|'vim'\|'nc'\|'netcat'\|python\|ruby\|lua\|irb\|pl' | xargs -r ls –la (root shell escape’i yapabileceğimiz dosyalardan setgid hakkına sahip olanları var mı?) find / -perm type f 2>/dev/null (Tüm setgid hakkına sahip dosyaların listesi)

12 PRATİK YETKİ YÜKSELTME ALANLARININ İNCELENMESİ
ls -la /etc/cron* 2>/dev/null (cron job’ların tanımlandığı dosya ve dizinlerin listesi, erişim hakları ile birlikte. Bu dosyalar içinde yazma hakkımız bulunanlar var ise ve root hakları ile çalıştırılıyorlarsa kendimizi sudoers dosyasına ekletebilir veya reverse shell payload’umuzu root hakları ile çalıştırtabiliriz.) find /etc/cron* -perm exec ls -la {} \; -exec cat {} 2>/dev/null \; (World writable cron dosya ve dizinlerinin listesi. Bu daha nokta atışı bir komut, ancak yukarıdaki çıktının sonuçları bize bazı dolaylı bilgiler verebilir, en azından okunabilir işlerin içini inceleyip başka bir manipülasyon yöntemi bulabilir miyiz bakabiliriz.) cat /etc/crontab 2>/dev/null (Sistemin geneli için geçerli ve genellikle root hakları ile çalışan cron işleri ile ilgili bilgi edinebiliriz.) ls -la /var/spool/cron/crontabs 2>/dev/null (Varsa root ve diğer kullanıcıların cron konfigürasyon dosyalarını ve erişim haklarını inceleyebiliriz)

13 PRATİK YETKİ YÜKSELTME ALANLARININ İNCELENMESİ
ls -la /etc/anacrontab 2>/dev/null (anacron sürekli açık olmayan bilgisayarlarda atlanan işleri takip etmek için geliştirilmiş bir mekanizma. Bu altyapı da yine genellikle root hakları ile çalıştığından anacrontab dosyasına yazma hakkımız olması halinde haklarımızı yükseltebiliriz. Anacron’un bizim için olumsuz tarafı en kısa sürenin günlük olmasıdır.) cat /etc/passwd | cut -d ":" -f 1 | xargs -n1 crontab -l –u 2>/dev/null (Eğer görme hakkımız varsa diğer kullanıcıların aktif cron işlerini listeler. Kullanıcıların cron konfigürasyonunu herhangi bir dosyadan okutarak cron tanımlaması yapması mümkündür, bu konfigürasyonu /var/spool/cron/crontabs/ dizini altına kaydederlerse sistem her yeniden başlatıldığında aktif hale gelir, manuel olarak tekrar tanımlanmasına gerek kalmaz. Dolayısıyla bakmakta fayda var.)

14 PRATİK YETKİ YÜKSELTME ALANLARININ İNCELENMESİ
Local privilege escalation exploit'lerinin araştırılması için: Kernel exploit’lerini araştırma sudo -V (sudo uygulama versiyonunun incelenmesi. sudo ve sudoedit uygulamalarının eski versiyonlarında bulunan açıklıklar ile bu fonksiyonalite kötüye kullanılabilir ve hak yükseltilebilir.) mysql --version (MySQL açıklıkları ile yetki yükseltilebilir. Tabi bazı durumlarda MySQL erişim bilgilerine de ihtiyacımız olabilir.) Sistem üzerinde çalışan servislerin detaylı analizi sonrası incelemelere devam etmek gerekebilir.

15 PRATİK YETKİ YÜKSELTME ALANLARININ İNCELENMESİ
mysqladmin -uroot -proot version / mysqladmin -uroot version (MySQL’e basit biçimde bağlanabilirsek ve MySQL root hakları ile çalışıyorsa bu veritabanının fonksiyonalitesi – örneğin INTO OUTFILE, LOAD_FILE() gibi – kullanılarak yetki yükseltme yolunda ilerlenebilir) psql -U postgres template0 -c 'select version()' (veritabanı ismini biliyor olmamız önkoşulu ile - template0 yerine veritabanı adı gelecektir - postgres kullanıcısının şifresi boş mu test eder) psql -U pgsql template0 -c 'select version()' (veritabanı ismini biliyor olmamız önkoşulu ile - template0 yerine veritabanı adı gelecektir - pgsql kullanıcısının şifresi boş mu test eder)

16 UZUN İNCELEME find / > dirlist.txt (Sistem üzerindeki tüm dosyaların adlarının bir dosyaya kaydedilmesi. Daha sonra bu listeyi kullanarak belli dosya adlarını dosya sistemini tekrar tekrar taramadan inceleyebiliriz.) grep 'ini$' dirlist.txt > ini.files grep 'conf$' dirlist.txt > conf.files grep 'backup$|bck$' dirlist.txt > backup.files grep 'cap$' dirlist.txt > capture.files cat ini.files | xargs grep -E 'pass|root' 2>/dev/null cat conf.files | xargs grep -E 'password|root' 2>/dev/null Yukarıdaki grep işlemleri ve kelime arama komutları ihtiyaca göre çeşitlendirilebilir.

17 UZUN İNCELEME find / -maxdepth 4 -name *.conf -type f -exec grep -Hn keyword {} \; 2>/dev/null (Dizin listesi de kullanılabilirdi elbette - sonu .conf ile biten dosyaların içinde keyword kelimesinin aranması) find / -name *.log -type f -exec grep -Hn keyword {} \; 2>/dev/null (Sonu .log ile biten dosyaların içinde keyword kelimesinin aranması) find / -name *.log -type f -exec grep -Hn keyword {} \; 2>/dev/null (Sonu .ini ile biten dosyaların içinde keyword kelimesinin aranması) find /etc/ -maxdepth 1 -name *.conf -type f -exec ls -la {} \; 2>/dev/null (/etc dizini altında bulunan ve sonu .conf ile biten dosyaların erişim hakları ile birlikte listelenmesi) find / -writable -not -user `whoami` -type f -not -path "/proc/*" -exec ls -al {} \; 2>/dev/null (/proc/ dizini dışında bulunan ve bize ait olmadığı halde yazabildiğimiz dosyaların listesi. /proc/ file system’i çalışma anında oluşturulur ve disk üzerinde değildir.)

18 UZUN İNCELEME find / ! -path "*/proc/*" -perm -2 -type f -print 2>/dev/null (/proc/ dizini dışında bulunan tüm world writable dosyaların listesi. Belki CTF’i hazırlayan kişi sahibi bizim olan bir dosyayı da world writable yapmıştır, gözden kaçırmayalım.) find / -writable -user `whoami` -type d -not -path "/proc/*" -exec ls -al {} \; 2>/dev/null (Kullanıcımızın da yazabileceği writable dizinler, kendimiz script’lerimizi yerleştirebileceğimiz bir yer aradığımızda da kullanılabilir.) find / -type d -perm >/dev/null (World writable dizinler. Yine CTF durumlarında dikkati doğru alana yöneltmek için kullanılabilir.)

19 UZUN İNCELEME find / -name "id_dsa*" -o -name "id_rsa*" -o -name "known_hosts" -o -name "authorized_hosts" -o -name "authorized_keys 2>/dev/null (ssh anahtar dosyalarının tespitine çalışma. Bunlardan sonu pub ile bitenler public anahtarlardır, yani başka bir sisteme erişim için uygun değildir, ancak private key’ler diğer sistemlere erişmek için işimize yarayabilir.) grep "PermitRootLogin " /etc/ssh/sshd_config 2>/dev/null | grep -v "#" | awk '{print $2}' (root kullanıcısı ssh ile logon olabilir mi. Gerçi eğer şifresini biliyorsak bu noktada su komutuyla da root olabiliriz. Ancak CTF imajlarında bu özellik aktif değilse en azından CTF’i hazırlayan kişinin ssh üzerinden root parola bruteforce yöntemi ile girmemizi öngörmediğinden emin olabiliriz) cat /etc/shells (Shell uygulamalarının listesi. Setuid bit incelemesi yaparken dikkatimizi yoğunlaştırabileceğimiz dosyalardan olabilir bu liste)

20 UZUN İNCELEME echo $PATH (setuid’li bir uygulama başka bir uygulamayı çağırıyorsa (bu durumları hata mesajlarından veya strings gibi komutlarla statik incelemeyle farkedebiliriz) bu uygulamalarla aynı isimli ancak bizim istediğimiz bir işlevi yerine getiren farklı bir uygulamayı path’imize yerleştirmek için ihtiyacımız olacaktır.) cat /etc/login.defs (Parola bruteforce saldırısı yapmayı düşünüyorsak parola politikasını bu dosyadan öğrenebiliriz. Ayrıca parola hash’lerinin hesaplanmasında kullanılan algoritmayı da bu dosyada görebiliriz.) cat /etc/apache2/envvars 2>/dev/null |grep -i 'user\|group' |awk '{sub(/.*\export /,"")}1' (Apache sunucusunu çalıştıran kullanıcı adını görebiliriz. Eğer zaten Apache üzerinde çalışan bir uygulamayı kullanarak sisteme sızmamışsak bu alana daha fazla eğilebiliriz) apache2 -v 2>/dev/null; httpd -v 2>/dev/null (Apache versiyonu hakkında bilgi).

21 UZUN İNCELEME find /home -iname *.rhosts -exec ls -la {} 2>/dev/null \; -exec cat {} 2>/dev/null \; (Home dizinleri altında .rhosts dosyaları var mı ve içerikleri nedir? Varsa bu kullanıcı adları ile güvenilen başka bir sunucudan r komutları çalıştırılabilir. Düşük bir ihtimal de olsa bakmakta fayda var.) find /usr/home -iname *.rhosts -exec ls -la {} 2>/dev/null \; -exec cat {} 2>/dev/null \; (Yukarıdaki işlemin /usr/home dizini altında gerçekleştirilmesi) find /etc -iname hosts.equiv -exec ls -la {} 2>/dev/null \; -exec cat {} 2>/dev/null \; (Sistem genelinde etkili olan ve trust ilişkilerinin tanımlandığı /etc/hosts.equiv dosyasının içeriğinin incelenmesi) ls -la /etc/exports 2>/dev/null; cat /etc/exports 2>/dev/null (NFS dosya paylaşım konfigürasyonunun incelenmesi. Paylaşımlarda hassas bilgiler tespit edilebilir.)

22 UZUN İNCELEME ls -la /var/mail 2>/dev/null (Sistem üzerinde mail box’lar var mı) head /var/mail/root 2>/dev/null (root’un mail’i var mı ve okuyabiliyor muyuz)

23 UZUN İNCELEME netstat -antp (Dinlemekte olan TCP servisleri, çalışan uygulama adıyla listeler. Uzaktan görülemeyen ancak lokalde erişilebilen ve yüksek haklarla çalışan servisler olabilir.) netstat –anup (Dinlemekte olan UDP servisleri, çalışan uygulama adıyla listeler.) ps aux (Çalışan proses’lerin listelenmesi) ps aux | awk '{print $11}'|xargs -r ls -la 2>/dev/null |awk '!x[$0]++' (Çalışan proses’lerin imajları ve bunlara erişim haklarının listelenmesi)

24 UZUN İNCELEME cat /etc/inetd.conf 2>/dev/null (Servis konfigürasyon dosyası içinde çalışan ağ servisleri ile ilgili işimize yarayabilecek bir bilgi olabilir, servis imajlarını aldığı parametreler ve hangi kullanıcı hakları ile çalıştıkları gibi.) cat /etc/xinetd.conf 2>/dev/null (xinetd TCP wrapper destekli bir servis konfigürayon dosyası. Bir tür host based firewall fonksiyonalitesi sağlar ve bazı unix ortamlarında görülebilir.) ls -la /etc/init.d 2>/dev/null (init script’lerinin, yani sistem açılırken çalıştırılan script’lerin listesi ve erişim hakları) find /etc/init.d/ \! -uid 0 -type f 2>/dev/null |xargs -r ls -la 2>/dev/null (root kullanıcısına ait olmayan ancak init.d dizininde yer alan script’lerin listesi. Bu dizinde bulunan script’ler root hakları ile çalışacağından yazma hakkımız bulunması halinde sistem yeniden açıldığında root kullanıcı hakları ile komut çalıştırabiliriz)

25 UZUN İNCELEME ls -la /etc/rc.d/init.d 2>/dev/null (Varsa rc.d init scriptlerinin listesi ve erişim hakları) find /etc/rc.d/init.d \! -uid 0 -type f 2>/dev/null |xargs -r ls -la 2>/dev/null (root kullanıcısına ait olmayan ancak rc.d init.d dizini altında yer alan scriptlerin listesi)

26 DİĞER SİSTEMLERE YÖNELİK BİLGİ EDİNME
Aynı parolaların diğer sistemlerde de kullanılması ihtimaline bağlı olarak açık ve hash'li parolaları ele geçirme, parola hash'lerini bruteforce ile kırma (/etc/passwd, salt'lu hash kullanımı, MySQL hash'leri, v.d. parolalar) Aktif ağ bağlantıları (netstat -an) /sbin/ifconfig -a (Sunucu üzerindeki tüm interface’leri görmek için. Farklı ağlara dallanmak için işimize yarayabilir.) route (Yine bağlı bulunulan diğer ağlar hakkında bilgi edinmek için kullanılabilir)

27 DİĞER SİSTEMLERE YÖNELİK BİLGİ EDİNME
cat /etc/fstab 2>/dev/null |grep username |awk '{sub(/.*\username=/,"");sub(/\,.*/,"")}1'| xargs -r echo username:; cat /etc/fstab 2>/dev/null |grep password |awk '{sub(/.*\password=/,"");sub(/\,.*/,"")}1'| xargs -r echo password:; cat /etc/fstab 2>/dev/null |grep domain |awk '{sub(/.*\domain=/,"");sub(/\,.*/,"")}1'| xargs -r echo domain: (/etc/fstab dosyası içinde erişim bilgileri var mı) cat /etc/fstab 2>/dev/null |grep cred |awk '{sub(/.*\credentials=/,"");sub(/\,.*/,"")}1'| xargs -I{} sh -c 'ls -la {}; cat {}' (/etc/fstab dosyası içinde credentials dosyası var mı)

28 SHELL KOMUT VE SCRIPT'LERİNDEKİ BAZI ÖZEL KONULAR
Hataların script çıktılarını kirletmemesi için 2>/dev/null Escape karakteri \ (awk gibi uygulamalara verilen parametrelerdeki shell özel karakterlerinin shell tarafından dikkate alınmaması için) Command subtitution (ters tırnak ve $( ) kullanımı)

29 Sorular? Teşekkür ederiz!


"ISACA İstanbul Chapter" indir ppt

Benzer bir sunumlar


Google Reklamları