Bir önceki yazıda kurulumunu detaylıca anlattığım güvenlik önlemleri alınmamış akıllı cihazımıza, kötü niyetli bilgisayar korsanlarının saldırı senaryolarını simüle ettik. Şimdi ise, bu akıllı cihazı daha güvenli hale getirmek için HIDS/HIPS (Host-based Intrusion Detection System/Host-based Intrusion Prevention System) kuracağız.
1. IDS/IPS Sisteminin kUrulması
Öncelikle indirdiğimiz (https://github.com/norcholly/safe-pi-monitor) proje klasörüne cd /root/safe-pi-monitor/scripts/bash && ls komutu ile gidip içeriği terminale yansıtıyoruz. Ardından chmod +x ids-setup.sh komutu ile scriptimizi çalıştırılabilir hale getiriyoruz ve ./ids-setup.sh ile çalıştırıyoruz.

Kurulumlar başarıyla tamamlandığında Setup complete! yazısını görüyoruz.

cd /etc/suricata/ && ls -la komutu ile HIDS/HIPS aracımız suricata‘nın bulunduğu dizinin içeriğini görüntülüyoruz.

cd rules/ && ls komutu ile HIDS/HIPS kurallarının bulunduğu dizine girip içeriği görüntüledikten sonra, proje dosyalarımızla beraber gelen local.rules kural dosyasını mv /root/safe-pi-monitor/local.rules . komutu ile bulunduğumuz dizine taşıyoruz. ls komutu ile tekrar içeriği görüntüleyip local.rules dosyasının geldiğini doğruluyoruz.

nano /etc/suricata/suricata.yaml komutu ile suricata’nın genel ayar dosyasını açıyoruz ve HOME_NET değişkenini kendi local IP adresimiz ile değiştiriyoruz. (Bilmiyorsak terminale ifconfig yazarak öğrenebiliriz.)

Ardından CTRL + W kombinasyonuyla arama kısmına default-rule-path yazıyoruz ve rule-files: kısmına kural dosyası olarak rules dizinine eklediğimiz local.rules dosyasını yazıyoruz. suricata-rules satırının başına # koyarak yorum satırı yapıyoruz. CTRL + O kombinasyonu ile dosyamızı kaydediyoruz ve CTRL + X kombinasyonu ile terminalimize geri dönüyoruz.

Terminalimize suricata-update yazdıktan sonra suricata’nın yaptığımız değişikliklerin aktif hale gelmesini bekliyoruz.

systemctl restart suricata komutu ile IDS sistemini yeniden başlatıyoruz. Tekrardan cd /root/safe-pi-monitor/scripts/bash komutunu yazarak bash scriptlerimizin olduğu dizine geliyoruz ve nano ip-blocker.sh ile ip-blocker scriptimizin içine kendi local IP adresimizi yazıyoruz.

Dosyamızı kaydedip terminalimize döndükten sonra nano /etc/crontab yazarak yeni bir cron ekliyoruz. Bu cron sayesinde makine her çalıştığında ip-blocker.sh scriptimiz otomatik olarak arka planda çalışacaktır. (Scriptin dizinini değiştirirseniz çalışmayacaktır. Satır üst satırlarla uygun hizada olmalıdır. TAB tuşuna basarak gerekli boşluğu ekleyebilirsiniz.)
@reboot root /usr/bin/bash /root/safe-pi-monitor/scripts/bash/ip-blocker.sh

chmod +x ip-blocker.sh ile çalıştırılabilir hale getirdikten sonra ./ip-blocker.sh ile manuel olarak kendimiz çalıştırıyoruz. Artık bu terminali kullanmayacağız çünkü çalışan bir iş var.

Yeni bir terminal açıp ifconfig yazarak kullandığımız interface adını öğreniyoruz. Ardından, suricata -c /etc/suricata/suricata.yaml -i <interface> komutu ile HIDS/HIPS sistemimizi çalıştırıyoruz. Bu iki terminali sadece izlemek (monitoring) için kullanacağız.

Saldırgan makinemizden MySQL portuna bir brute-force saldırısı gerçekleştirdiğimizde saldırının yarıda kesildiğini fark ediyoruz.

Çünkü o sırada HIDS/HIPS sistemimiz Suricata, 60 saniye içinde birden fazla yanlış giriş denemesini tespit edip uyarı vermiştir. Bu uyarıları, ip-blocker scriptimiz anlık olarak log dosyasını takip ederek almış ve gelen uyarıdaki saldırgan IP adresini güvenlik duvarımız iptables sayesinde engellemiştir. Artık, saldırgan makinenin IP adresi ile bizim makinemiz arasında hiçbir iletişim kurulamayacaktır.

(Eğer isterseniz tail -f /var/log/suricata/fast.log komutu ile anlık olarak gelen uyarıları izleyebilirsiniz.)
2. XSS Açığının Kapatılması ve SQL Injectıon Önlemİ
Kurduğumuz akıllı cihazın web arayüzünde XSS (Cross-site-scripting) zafiyetinin bulunduğunu keşfetmiştik. Şimdi ise onu kapatmak için kodlarımızda değişiklik yapacağız.
Öncelikle cd /var/www/html/src/Controllers && ls komutu ile kullanıcıdan input aldığımız sayfanın iskeletinin olduğu dizine gidip dizinin içeriğini görüntülüyoruz.

nano _date-check.php ile dosyamızı düzenlemek için açıp, aşağıdaki düzenlemeleri yapıyoruz. Bu sayede saldırgan, girdilere <, > vb. karakterler yazdığında amacına ulaşamayacak ve girdiği payload bir metin olarak okunacaktır.

Aşağıdaki değişikliğimizle de SQL sorgularını parametreli hale getiriyoruz. Böylece saldırganın girdileri sorgunun parçası değil, parametreleri olarak kabul edilir ve direkt olarak sunucuya sorgu gönderilmez.

Aynı değişiklikleri, nano _date-time-check.php komutu ile diğer dosyamıza da uyguluyoruz. Böylece XSS zafiyeti kapanmış, muhtemel SQL Injection zafiyetleri de giderilmiş olacaktır.
(Proje dosyalarında bu değişiklikler mevcuttur. Blog yazılarında simüle etme amacıyla bu değişikliklerin yapılmadığı proje dosyaları kullanılmıştır. Sizin bu değişikliği yapmanıza gerek yoktur.)
3. Sonuç
Akıllı cihazımıza IDS/IPS (Intrusion Detection System/Intrusion Prevention System), Suricata sayesinde kuruldu ve iptables güvenlik duvarı ile entegre hale getirildi. Yazdığımız kurallar doğrultusunda saldırgan, (eğer açık ise) SSH ve MySQL servislerimize brute-force (kaba kuvvet) saldırısı yaparsa ve birden fazla ICMP paketi yollarsa uyarı alacağız. Uyarı loglarını izleyen scriptimiz, saldırganın IP adresini güvenlik duvarına ekleyip engelleyecektir.
Görüşlerinizi, önerilerinizi ve yaşadığınız sorunları paylaşmak için iletişim kısmından bana ulaşmayı ihmal etmeyin.

Yorum bırakın