SCADA/ICS için Scapy ile Protokol Analizi ve Manipülasyonu
Scapy, ağ protokol analizi ve manipülasyonu için Python tabanlı esnek bir araçtır. Ancak çoğu kişi, Scapy'nin SCADA/ICS sistemleri üzerinde de kullanılabileceğini göz ardı eder. Bu rehber, SCADA protokollerinin analizi ve manipülasyonu için Scapy'nin nasıl kullanılacağını detaylandırır.
Scapy Nedir ve Neden SCADA/ICS İçin Kullanılır?
Scapy, ağ paketlerini oluşturmak, çözmek ve manipüle etmek için kullanılan güçlü bir araçtır. SCADA/ICS sistemlerinde aşağıdaki avantajları sunar:
Özel Protokol Desteği: SCADA protokolleri (ör. Modbus, DNP3) üzerinde çalışmak için özelleştirilebilir.
Paket Manipülasyonu: Hedef protokol için özelleştirilmiş paketler oluşturabilir.
Gelişmiş Analiz: Ağdaki SCADA protokollerini analiz etmek ve olası anormallikleri tespit etmek.
Genişletilebilirlik: Yeni protokol katmanları eklemek kolaydır.
SCADA/ICS Protokolleri İçin Scapy Modülleri
1. Modbus Protokolü
Modbus, SCADA sistemlerinde sıkça kullanılan ve genellikle TCP/IP veya RTU (seri) üzerinden çalışan bir protokoldür.
1.1. Modbus Paket Oluşturma
Aşağıdaki kod ile bir Modbus "Read Coils" isteği oluşturabilirsiniz:
from scapy.all import *
from scapy.contrib.modbus import *
# Modbus "Read Coils" isteği oluşturma
pkt = ModbusADURequest(transId=1, protoId=0, unitId=1)/ModbusPDU01ReadCoilsRequest(startAddr=0, quantity=10)
send(pkt)
transId: Transfer ID (isteğe bağlı olarak artırılabilir).
unitId: Hedef cihazın ID'si.
startAddr: Okumaya başlanacak adres.
quantity: Okunacak coil sayısı.
1.2. Gelen Paketlerin Analizi
Ağ trafiğini dinleyip gelen Modbus paketlerini analiz edebilirsiniz:
from scapy.all import sniff
from scapy.contrib.modbus import *
# Modbus paketlerini filtreleyerek yakalama
def analyze_modbus(pkt):
if pkt.haslayer(ModbusADUResponse):
print(pkt.summary())
sniff(filter="tcp port 502", prn=analyze_modbus, count=10)
1.3. Modbus Manipülasyonu
Bir Modbus cihazına sahte veri göndermek için:
pkt = ModbusADURequest(transId=2, protoId=0, unitId=1)/ModbusPDU05WriteSingleCoilRequest(addr=0, value=1)
send(pkt)
2. DNP3 Protokolü
DNP3 (Distributed Network Protocol), enerji sektöründe yaygın kullanılan bir protokoldür.
2.1. DNP3 Paket Oluşturma
DNP3 protokolünde basit bir isteği aşağıdaki gibi oluşturabilirsiniz:
from scapy.all import *
from scapy.contrib.dnp3 import *
# DNP3 okuma isteği
pkt = DNP3(FC=0x01) # Fonksiyon Kodu (0x01: Read)
send(pkt)
2.2. DNP3 Trafiğini Dinleme
DNP3 protokolüne özgü trafiği analiz etmek için:
from scapy.contrib.dnp3 import *
def analyze_dnp3(pkt):
if pkt.haslayer(DNP3):
print(pkt.summary())
sniff(filter="tcp port 20000", prn=analyze_dnp3, count=10)
3. IEC 104 Protokolü
IEC 60870-5-104 (IEC 104), Avrupa'da kullanılan bir telekontrol protokolüdür.
3.1. IEC 104 Paket Oluşturma
Basit bir IEC 104 kontrol isteği oluşturmak için:
from scapy.contrib.iec104 import *
# IEC 104 kontrol isteği
pkt = IEC104APDU(start=1, cause=6)/IEC104ASDU(type=45)
send(pkt)
3.2. IEC 104 Trafiği Analizi
Ağda IEC 104 trafiğini analiz etmek için:
from scapy.contrib.iec104 import *
def analyze_iec104(pkt):
if pkt.haslayer(IEC104APDU):
print(pkt.summary())
sniff(filter="tcp port 2404", prn=analyze_iec104, count=10)
SCADA/ICS Testlerinde Scapy Kullanımı İçin İpuçları
Test Ortamı Kullanın: Gerçek SCADA sistemlerinde test yapmaktan kaçının. Bunun yerine, simüle edilmiş bir ortam veya test cihazları kullanın.
Protokol Bilgisi: SCADA protokollerinin detaylarını öğrenerek daha etkili analiz yapabilirsiniz.
Dokümantasyon: Paketlerin nasıl oluşturulduğunu ve manipüle edildiğini detaylıca kaydedin.
Paket Boyutu ve Zamanlama: SCADA cihazları, büyük veya hızlı paketlere hassas olabilir. Test sırasında cihazların tepkilerini dikkatlice izleyin.
Sonuç: Scapy ile SCADA/ICS Sistemlerini Daha Güvenli Hale Getirmek
Scapy, SCADA/ICS protokollerini analiz etmek ve manipüle etmek için harika bir araçtır. Ancak bu gücü doğru ve etik bir şekilde kullanmak önemlidir. Bu rehber, Scapy ile protokol analizi ve manipülasyonu konusunda size temel bir başlangıç sağlayacaktır. Daha fazla soru ya da paylaşmak istediğiniz deneyimler varsa, yorum kısmında buluşalım!