PortSpoof ile Hacker Aldatmaca
Uzun zamandır yazmak istediğim bir makale ile karşınızdayım. Günümüzün en büyük sorunlarından bir tanesi de güvenlik konuları. “Network Scanner’ler(ağ tarayıcıları)”… Nasıl bir güvenlik duvarımız olursa olsun yine de network scanner‘ler kullanmış oldukları metotlarla sistemimizde çalışan arka plan sunucularını, servislerini ya da güvenlik duvarımızın tipini belirlemede tehlike arz ediyorlar. Bu makalede Portspoof ile bu scan(tarama) aktivitelerini nasıl yanıltacağımızı anlatacağım.
Portspoof; bir network scanner (ağ tarama) uygulaması (nmap vb.) kullanarak sunucular üzerinde çalışan servisleri tespit etmek isteyen saldırganların işlerini zorlaştırmak ve tarama sonucunu değiştirerek onları yanıltmak (bakkala yollamak) J üzere geliştirilmiş ilginç bir uygulamadır.
Bildiğiniz gibi network scanner(ağ tarama) uygulamalarının uzaktaki bir sistemde çalışan servisleri tespit etmeleri için kullandıkları bir takım yöntemler vardır. Bu yöntemlerden en tipik olanı ise TCP’nin üçlü el sıkışma(3-way handshake) prensibinden hareketle uzak sunucunun tüm portlarına (ya da ilgilenilen portlarına) birer SYN paketi göndermek ve gelen cevaba göre ilgili servisin açık-kapalı olması ya da hizmet durumu ile ilgili karara varmaktır. Örnek olarak üzerinde bir web sunucusu çalıştığını bildiğiniz uzaktaki bir sistemin 80. portuna bir SYN paketi gönderirseniz ve uzak sunucudaki bu servis çalışır durumdaysa -ayrıca herhangi bir engelleme yoksa- cevap olarak SYN+ACK paketi alırsınız. Bu şekilde ilgili servisin çalışır vaziyette olduğu uzaktan tespit edilir ve örneğin nmap ilgili port’u OPEN(açık) olarak bildirir. Aynı şekilde gönderilen SYN paketine RST paketi dönerse, uzak sunucuda ilgili portu dinleyen bir servis olmadığı anlaşılır ve scanner uygulaması durumu CLOSED(bu porttan hizmet verilmiyor) olarak değerlendirir. Eğer uzak sunucu bir güvenlik duvarı(firewall) üzerinden korunuyorsa ve SYN paketini gönderdiğiniz porta erişim izniniz yoksa ilgili paket -genel olarak- drop edilir bu nedenle de geriye herhangi bir paket döndürülmez. Bu durumda da network scanner uygulaması durumu FILTERED olarak bildirir, bu şekilde de uzaktaki sistemin bir güvenlik duvarına(firewall) sahip olduğunu tespit edebilirsiniz.
İşte portspoof programı bu tip yöntemler kullanarak sunucunuz üzerindeki servisler hakkında bilgi almak isteyen saldırganların işini zorlaştırmak için gönderilen her SYN paketine otomatik olarak SYN+ACK döndürerek tüm portların açıkmış(savunmasızmış) gibi görünmesini sağlamaktadır. Bu durum sisteminize saldırı gerçekleştirenin hangi portun karşılığında gerçekten hangi servisin olduğunu tespit edebilmesini doğrudan zorlaştıracaktır. Ayrıca elinizde tüm portları açık görünen bir sistem varsa, gerçekten hangi portta hangi servisin çalıştığını tespit etmek için ilgili portlar üzerinde versiyon tespiti (probing) yapmanız gerekir. Nmap gibi uygulamaların version tespiti için spesifik servislere ait fingerprint’lerin tutulduğu database’leri olduğundan normal şartlarda bu tespit işlemi fazla uzun sürmeyecektir ancak portspoof gelen her versiyon tespit taraması için bir sahte bir fingerprint döner, bu nedenle saldırgan servis tespiti için gerçekten uzun süreler harcamak zorunda kalacaktır. (Ben denemedim ama portspoof ’un sitesinde tüm portlar -65535 adet- version detection için yaklaşık 8 saat gerekeceği yazmakta.)
İşte yukarıda bahsedilen bu durumlardan ötürü sistemlerinizde portspoof kullanmak isteyebilirsiniz. Böyle bir ihtiyaç için CentOS 7 üzerinde kurulum ve konfigürasyon aşamalarını aşağıda uygulayabiliriz:
Önce mevcutta Centos 7 kurulu bir makine olduğunu varsayarak işlemlerimize başlıyoruz. Eğer elinizde kurulu olan bir Centos 7 yok ise linkten temin edebilirsiniz.
http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso
Öncelikli olarak gereksinim paketlerini kuruyoruz. (Bunun için ben EPEL reposunu da kuruyorum.)
# wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/ius-release-1.0-13.ius.centos7.noarch.rpm
# sudo rpm -Uvh ius-release*.rpm
# yum install gcc gcc-c++ unzip
Gereksinim paketletinin kurulumundan sonra portspoof uygulamasını indiriyoruz:
# wget https://github.com/drk1wi/portspoof/archive/master.zip
ve kurulum aşamasına geçiyoruz:
# unzip master.zip
# cd portspoof-master
# ./configure –sysconfdir=/etc/
Bu adımda işlem biraz sürer merak etmeyin. Tek tek paketleri internetten indirip kurar..
# make && make install
Bu adımın ardında, sisteme gelen tüm istekleri portspoof’a yönlendirmek için gerekli firewalld (iptables) kuralını ekleyeceğiz. Portspoof öntanımlı olarak tcp 4444 portunu dinliyor ve tüm bağlantı isteklerini portspoof üzerinden geçirmek için tüm portlara gelen bağlantı isteklerini 4444’e yani portspoof’a forward etmeniz gerekiyor. Bu noktada yönlendirme işlemini yapmadan önce portspoof’un araya girmesini istemediğiniz özel servisleriniz varsa bunlar için yönlendirme yapmamanız gerekiyor. Örnek olarak tcp 22’de ssh ve tcp 80’de web sunucu calistiran bir sistem için bu portlar haricinde kalan tüm diğer portlar için yönlendirme şu şekilde yapılmakta:
# firewall-cmd –permanent –zone=public –add-forward-port=port=1-21:proto=tcp:toport=4444
# firewall-cmd –permanent –zone=public –add-forward-port=port=23-79:proto=tcp:toport=4444
# firewall-cmd –permanent –zone=public –add-forward-port=port=81-65535:proto=tcp:toport=4444
# systemctl restart firewalld
Not: Eğer klasik iptables kullanıyorsanız (CentOS 6.x sürümü vs.) kuralları aşağıdaki şekilde ekleyebilirsiniz:
# iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp -m multiport –dports 1:21,23:79,81:65535 -j REDIRECT –to-ports 4444
# iptables-restore < iptables-config
Yönlendirme işi de tamamlandıktan sonra portspoof’u çalıştırıyoruz. Bu noktada portspoof’un iki farklı modu’u bulunuyor. Tüm potların açık olarak gösterilmesini sağlayan mode’un yanu sıra version tespiti denemelerinde sahte finger print göndermek üzere kullanılan bir diğer modu bulunuyor. Ben saldırgan için işleri iyice çığırından çıkarmak için ikinci modu tercih ediyorum:
# portspoof -c /etc/portspoof.conf -s /etc/portspoof_signatures –D
Bu şekilde sisteminizin örnek olarak ilk 50 portunu tarayıp servis versiyonu tespit etmek isterseniz nmap’i aşağıdaki şekilde kullanabilirsiniz:
# nmap -sV -p 1.50 uzaksistem-ipsi(örn:8.8.8.8)
Sonuç aşağıdakine benzer şekilde eğlenceli olacaktır:
# nmap -sV -p 1-50 192.168.1.100
Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-18 00:33 EEST
Nmap scan report for 192.168.1.100
Host is up (0.00024s latency).
PORT STATE SERVICE VERSION
1/tcp open smtp Unrecognized SMTP service (12345 0000000000000000000000000000000000000000000000000000000)
2/tcp open smtp Unrecognized SMTP service (12345 0000000000000000000000000000000000000000000000000000000)
3/tcp open smtp Unrecognized SMTP service (12345 0000000000000000000000000000000000000000000000000000000)
4/tcp open smtp Unrecognized SMTP service (12345 0000000000000000000000000000000000000000000000000000000)
5/tcp open smtp Unrecognized SMTP service (12345 0000000000000000000000000000000000000000000000000000000)
6/tcp open smtp Unrecognized SMTP service (12345 0ffffffffffffffffffffffffffffffffffffffffffffffffffff00)
7/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffff777778887777777777cffffffffffffffffffff00)
8/tcp open smtp Unrecognized SMTP service (12345 0fffffffffff8000000000000000008888887cfcfffffffffffff00)
9/tcp open smtp Unrecognized SMTP service (12345 0ffffffffff80000088808000000888800000008887ffffffffff00)
10/tcp open smtp Unrecognized SMTP service (12345 0fffffffff70000088800888800088888800008800007ffffffff00)
11/tcp open smtp Unrecognized SMTP service (12345 0fffffffff000088808880000000000000088800000008fffffff00)
12/tcp open smtp Unrecognized SMTP service (12345 0ffffffff80008808880000000880000008880088800008ffffff00)
13/tcp open smtp Unrecognized SMTP service (12345 0ffffffff000000888000000000800000080000008800007fffff00)
14/tcp open smtp Unrecognized SMTP service (12345 0fffffff8000000000008888000000000080000000000007fffff00)
15/tcp open smtp Unrecognized SMTP service (12345 0ffffff70000000008cffffffc0000000080000000000008fffff00)
16/tcp open smtp Unrecognized SMTP service (12345 0ffffff8000000008ffffff007f8000000007cf7c80000007ffff00)
17/tcp open smtp Unrecognized SMTP service (12345 0fffff7880000780f7cffff7800f8000008fffffff80808807fff00)
18/tcp open smtp Unrecognized SMTP service (12345 0fff78000878000077800887fc8f80007fffc7778800000880cff00)
19/tcp open smtp Unrecognized SMTP service (12345 0ff70008fc77f7000000f80008f8000007f0000000000000888ff00)
20/tcp open smtp Unrecognized SMTP service (12345 0ff0008f00008ffc787f70000000000008f000000087fff8088cf00)
21/tcp open smtp Unrecognized SMTP service (12345 0f7000f800770008777000000000000000f80008f7f70088000cf00)
22/tcp open ssh OpenSSH 6.4 (protocol 2.0)
23/tcp open smtp Unrecognized SMTP service (12345 0f8008707ff07ff8000008088ff800000000f7000000f800808ff00)
24/tcp open smtp Unrecognized SMTP service (12345 0f7000f888f8007ff7800000770877800000cf780000ff00807ff00)
25/tcp open smtp Unrecognized SMTP service (12345 0ff0808800cf0000ffff70000f877f70000c70008008ff8088fff00)
26/tcp open smtp Unrecognized SMTP service (12345 0ff70800008ff800f007fff70880000087f70000007fcf7007fff00)
27/tcp open smtp Unrecognized SMTP service (12345 0fff70000007fffcf700008ffc778000078000087ff87f700ffff00)
28/tcp open smtp Unrecognized SMTP service (12345 0ffffc000000f80fff700007787cfffc7787fffff0788f708ffff00)
29/tcp open smtp Unrecognized SMTP service (12345 0fffff7000008f00fffff78f800008f887ff880770778f708ffff00)
30/tcp open smtp Unrecognized SMTP service (12345 0ffffff8000007f0780cffff700000c000870008f07fff707ffff00)
31/tcp open smtp Unrecognized SMTP service (12345 0ffffcf7000000cfc00008fffff777f7777f777fffffff707ffff00)
32/tcp open smtp Unrecognized SMTP service (12345 0cccccff0000000ff000008c8cffffffffffffffffffff807ffff00)
33/tcp open smtp Unrecognized SMTP service (12345 0fffffff70000000ff8000c700087fffffffffffffffcf808ffff00)
34/tcp open smtp Unrecognized SMTP service (12345 0ffffffff800000007f708f000000c0888ff78f78f777c008ffff00)
35/tcp open smtp Unrecognized SMTP service (12345 0fffffffff800000008fff7000008f0000f808f0870cf7008ffff00)
36/tcp open smtp Unrecognized SMTP service (12345 0ffffffffff7088808008fff80008f0008c00770f78ff0008ffff00)
37/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffc8088888008cffffff7887f87ffffff800000ffff00)
38/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffff7088888800008777ccf77fc777800000000ffff00)
39/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffffff800888880000000000000000000800800cfff00)
40/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffffffff70008878800000000000008878008007fff00)
41/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffffffffff700008888800000000088000080007fff00)
42/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffffffffffffc800000000000000000088800007fff00)
43/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffffffffffffff7800000000000008888000008ffff00)
44/tcp open smtp Unrecognized SMTP service (12345 0fffffffffffffffffffffffff7878000000000000000000cffff00)
45/tcp open smtp Unrecognized SMTP service (12345 0ffffffffffffffffffffffffffffffc880000000000008ffffff00)
46/tcp open smtp Unrecognized SMTP service (12345 0ffffffffffffffffffffffffffffffffff7788888887ffffffff00)
47/tcp open smtp Unrecognized SMTP service (12345 0ffffffffffffffffffffffffffffffffffffffffffffffffffff00)
48/tcp open smtp Unrecognized SMTP service (12345 0000000000000000000000000000000000000000000000000000000)
49/tcp open smtp Unrecognized SMTP service (12345 0000000000000000000000000000000000000000000000000000000)
50/tcp open smtp Unrecognized SMTP service (12345 0000000000000000000000000000000000000000000000000000000)
Portspoof sistemini beğendiniz mi? O zaman linkten daha detaylı bilgilere ulaşabilirsiniz. https://github.com/drk1wi/portspoof