Port taklidi, belirli bir portun açık olduğu ve bağlanılabilir olduğu, ancak gerçek bir servis olmadığı ve temel işlevselliği sunmadığı, yalnızca bağlantı sırasında benzer veya aynı bir karşılama mesajıyla servisi taklit ettiği durumdur.
Port taklidi, genellikle büyük şirketler tarafından ağ altyapısını servis ve güvenlik açığı taramalarına karşı korumak için kullanılır. Basitçe söylemek gerekirse, port tarayıcılarını yanıltır ve genellikle tarama girişimleri sırasında donmalarına neden olur.
Bu kılavuzda, PortSpoof servisini kuracağız ve gerçekte servisler tarafından kullanılan portlar (22, 80, 443) hariç tüm portlar için taklit ayarlayacağız.
Yalnızca üç port açık olduğunda ve geri kalanlar kapalı olduğunda, tam kapsamlı bir port taraması yalnızca birkaç saniye sürer ve herkes sunucunun IP adresini kullanarak portları tarayarak hangi servislerin mevcut olduğunu öğrenebilir.
Ancak, tüm portların durumunu taklit edersek - yani 1’den 65535’e kadar tüm aralıkta portları açık gibi gösterirsek - tarama yaklaşık 65.535 saniye, yani yaklaşık 18 saat sürer. Elde edilen bilgi neredeyse değersiz olur ve bu, güvenlik açıklarının bulunmasını önemli ölçüde zorlaştırır.
1. PortSpoof Kurulumu
apt install git cmake build-essential autoconf automake libtool nano
git clone https://github.com/drk1wi/portspoof.git
cd portspoof
chmod +x configure
./configure --sysconfdir=/etc/
make -j$(nproc)
make install
1.1 Log Dosyası Oluşturma
mkdir -p /var/log/portspoof
touch /var/log/portspoof/alerts.log
chmod 644 /var/log/portspoof/alerts.log
1.2 Servis Dosyası Oluşturma
nano /etc/systemd/system/portspoof.service
Aşağıdaki içerikle:
[Unit]
Description=Portspoof Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/portspoof \
-c /etc/portspoof.conf \
-p 4444 \
-s /etc/portspoof_signatures \
-d \
-l /var/log/portspoof/alerts.log
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
1.3 PortSpoof Binary Yolunu Doğrulama
which portspoof
Servis dosyasındaki yol ile eşleştiğinden emin olun.
1.4 Servisi Başlatma
systemctl daemon-reexec
systemctl daemon-reload
systemctl enable portspoof
systemctl start portspoof
Durumu kontrol etmek için:
systemctl status portspoof
1.5 Ayarları Test Etme
telnet <IP-adresi> 4444
Trying 89.xx.187.xx...
Connected to 89.xx.187.xx.
Escape character is '^]'.
Bu, bağlantının başarılı olduğunu gösterir. Şimdi, kalan portları yönlendirmek için güvenlik duvarını yapılandırın.
2. iptables Kurulumu ve Kalıcı Kuralların Ayarlanması
apt install iptables iptables-persistent
IPv4 ve IPv6 için etkileşimli pencerede "Evet" seçeneğini tıklayın.
2.1 Kuralları Ayarlama
Servislerimizi (22, 80, 443) hariç tutmak için birkaç kural oluşturduk. Kendi servislerinize göre ayarlayın.
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 1:21 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 23:79 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 81:442 -j REDIRECT --to-ports 4444
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 444:65535 -j REDIRECT --to-ports 4444
Servislerimizi izin vermek için kurallar ekleyin:
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Kuralları, sunucu yeniden başlatıldığında uygulanacak şekilde kaydedin:
netfilter-persistent save
Veya:
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
Tamamlandı! Artık aralıktaki herhangi bir porta bağlanmayı deneyebilir ve çıktısını kontrol edebilirsiniz. Windows için ücretsiz bir port tarama aracı olan Advanced Port Scanner kullandık.
Görüldüğü üzere, portlar iki yapılandırma dosyasına dayalı olarak karşılama mesajları döndürür:
- portspoof.conf - Belirli portları ve yanıtlarını listeler. Bir port ve yanıt ekleyebilir ya da boş yanıt için port numarasını ve "" belirtebilirsiniz.
- portspoof_signatures - Yapılandırma dosyasında listelenmeyen tüm portlar için imza bilgilerini içerir.
Yanıtlar (banner’lar) bu iki yapılandırma dosyasından alınır.
Dosyaları düzenledikten sonra, servisi yeniden başlatmanız yeterlidir:
systemctl restart portspoof
Her port kendi yanıtına sahiptir. Tarama zamanında durdurulmazsa, program çok sayıda port nedeniyle donabilir.
Belirli portlardan gelen yanıtlar, işletim sistemini gizleyebilir ve tarayıcıların sunucuyu bir yönlendirici veya hatta yazıcı ile karıştırmasına neden olabilir.
3. Ek Adımlar
Port karşılama mesajlarını devre dışı bırakmak için imza dosyasını boş bir dosya ile değiştirin:
mv /etc/portspoof_signatures /etc/portspoof_signatures_orig
touch /etc/portspoof_signatures
EOF’dan önce yeni bir satır ekleyin, aksi takdirde servis başlatılamaz:
printf "\n" > /etc/portspoof_signatures
Servisi yeniden başlatın:
systemctl restart portspoof
Artık portspoof.conf içinde açıkça belirtilmeyen portlar boş bir yanıt döndürecektir. Bunu tüm portlar için uygulamak istiyorsanız, portspoof.conf içindeki ilgili satırları yorum satırına alın ve servisi yeniden başlatın.
Çok sayıda port için boş bir yanıt, hangi servisin yanıt verdiğini açıklamadığı için daha iyi bir çözümdür.
Ancak, amacınız cihaz taklidi yapmaksa, port yanıtları önemlidir, ancak bunu tüm portlar için yapmak çok barizdir.
Başarılı bir bağlantıdan sonra bağlantı kesilir. Geniş bir port aralığını taramak için nmap yardımcı programını kullanmak daha iyidir.
4. nmap ile Port Tarama
apt install nmap
4.1 Temel Tarama
nmap -p 1-65535 <IP-adresi>
4.2 Daha Hızlı Tarama
nmap -p 1-65535 -T4 <IP-adresi>
4.3 Servis Bilgisi Çıktısı ile
nmap -p 1-65535 -sV <IP-adresi>
4.4 Sonuçları Dosyaya Kaydetme
nmap -p 1-65535 -oN result.txt <IP-adresi>