Modbus TCP paketindeki 0x05 (Write Single Coil) fonksiyon kodunu gördüğünde, o hattaki valfin kapanması veya motorun durması için artık geri sayım başlamıştır; eğer aradaki paket mTLS veya protokol seviyesinde bir doğrulama mekanizman yoksa, saldırganın tek yapması gereken doğru register adresini bulmaktır.
Selamlar herkese. Bugün biraz tozlu, biraz yağlı ama bir o kadar da tehlikeli bir dünyaya giriyoruz: OT (Operational Technology) yani endüstriyel güvenlik. Ofisteki laptopun hacklenmesine benzemez bu işler. Orada en fazla verin çalınır, burada ise fiziksel bir şeyler patlar, yanar veya durur. Sahada geçirdiğim zamanlarda gördüğüm en büyük yanılgı, 'Abi bizim sistem dışarıya kapalı, air-gap var' cümlesidir. Spoiler: O air-gap hiçbir zaman tam anlamıyla yoktur. Bir USB bellek, bir bakım mühendisinin laptopu veya yanlış konfigüre edilmiş bir DMZ o efsaneyi saniyeler içinde yıkar.
Protokollerin Masumiyeti ve Zafiyeti
Endüstriyel sistemlerde kullanılan protokollerin çoğu (Modbus, S7Comm, BACnet, EtherNet/IP) 70'li ve 80'li yıllarda tasarlanmış. O zamanlar 'güvenlik' denilince akla sadece fiziksel güvenlik geliyordu; yani kapıdaki kilit. Bu protokollerin ruhunda kimlik doğrulama (authentication), şifreleme (encryption) veya bütünlük kontrolü (integrity check) gibi 'modern' icatlar yok.
Bir düşünün; testCompany bünyesinde bir üretim hattını denetliyoruz. PLC (Programmable Logic Controller) dediğimiz cihazlar, kendisine gelen her paketi 'babasından gelmiş gibi' kabul eder. Eğer paketin formatı doğruysa, komut uygulanır.
Örnek bir Modbus TCP paket yapısına bakalım (defanged):
Transaction Identifier: 0x1234
Protocol Identifier: 0x0000
Length: 0x0006
Unit Identifier: 0x01
Function Code: 0x05 (Write Single Coil)
Reference Number: 0x0064 (Register Adresi)
Data: 0xff00 (ON komutu)
Bu paketi ağ üzerinden 127.0.0.1 (PLC IP'si olduğunu hayal edelim) 502 portuna gönderdiğinde, cihaz 'Sen kimsin?' diye sormaz. Sadece 'Tamam, 100 numaralı röleyi açtım' der. İşte tehlikenin başladığı yer burasıdır.
Shodan: Fabrikayı Google'da Aramak
Saldırganlar artık fabrikaların içine sızmak için fiziksel olarak içeri girmek zorunda değil. Yanlışlıkla internete açılmış bir PLC veya HMI (Human-Machine Interface) paneli, Shodan üzerinde bir arama kadar uzağınızda.
Bir Red Teamer gözüyle bakarsak, keşif (recon) aşamasında şöyle bir komutun çıktılarını incelemek çok şeyi değiştirir:
nmap -sV -Pn -p 502 --script modbus-discover 127.0.0.1
Bu komut bize sadece portun açık olduğunu değil, cihazın modelini, firmware sürümünü ve hatta bazen proje ismini bile verir. Eğer testCompany bir enerji santraliyse ve biz internet üzerinden bu bilgilere ulaşabiliyorsak, o santral artık bizim değil, internetin malıdır.
Python ile Bir PLC'ye 'Merhaba' Demek (Eğitim Amaçlı)
Savunma tarafındaysan, saldırganın ne kadar kolay hareket edebileceğini bilmen lazım. pymodbus gibi kütüphanelerle saniyeler içinde bir betik yazılabilir. Aşağıdaki kod, tamamen zararsızlaştırılmış bir örnektir ve sadece mantığı anlatır:
# EĞİTİM AMAÇLI MOCK KOD - Sadece yerel test ortamında çalışır
from pymodbus.client import ModbusTcpClient
def check_plc_status(target_ip):
client = ModbusTcpClient(target_ip, port=502)
if client.connect():
# 0. register'dan itibaren 10 değeri oku
result = client.read_holding_registers(0, 10)
if not result.isError():
print(f"Cihazdan gelen veriler: {result.registers}")
else:
print("Veri okuma hatası!")
client.close()
else:
print(f"Cihaza bağlanılamadı: {target_ip}")
# testCompany simülasyonu
check_plc_status('127.0.0.1')
Bu kadar basit. Hiçbir şifre sormadı, hiçbir handshake yapmadı. Sadece bağlandı ve sordu.
Peki, Nasıl Hayatta Kalacağız? (Hardening)
Şimdi gelelim asıl meseleye: Savunma. OT dünyasında 'yama (patch) geçmek' IT dünyasındaki kadar kolay değildir. 7/24 çalışan bir hattı, 'Windows Update geldi, hadi restart atalım' diyerek durduramazsın. O yüzden stratejimiz farklı olmalı.
- Mikro-Segmentasyon: OT ağını IT ağından sadece bir firewall ile ayırmak yetmez. Üretim hattındaki robotlar ile paketleme bandındaki PLC'ler bile birbirini görmemeli. Layer 2 ve Layer 3 seviyesinde izolasyon şart.
- Pasif İzleme (Passive Monitoring): PLC'lere gidip 'Hey, sende açık var mı?' diye tarama yapamazsın, çünkü bazı eski cihazlar ping paketini görünce bile kilitlenebiliyor (şaka değil, tecrübeyle sabit). Bunun yerine ağ trafiğini bir 'Mirror Port' üzerinden dinleyip, anomali tespiti yapan IDS/IPS sistemleri kullanmalısın. Modbus trafiğinde daha önce hiç görülmemiş bir
0x06(Write Single Register) fonksiyon kodu mu geçti? Alarm çalmalı. - HMI ve Mühendislik İstasyonlarının Sıkılaştırılması: PLC'ye direkt saldıramayan kişi, ona komut gönderen mühendisin bilgisayarına saldırır. Bu bilgisayarlarda USB portları kapalı olmalı, internet erişimi minimumda tutulmalı ve EDR çözümleri en agresif modda çalışmalıdır.
- DMZ Tasarımı: Eğer verileri buluta (IIoT) çıkarman gerekiyorsa, bunu çift taraflı (dual-homed) bir yapı üzerinden, veriyi sadece dışarıya 'push' edecek şekilde kurgula. Dışarıdan içeriye 'pull' yapmak, kapıyı hırsıza aralamaktır.
Sonuç Niyetine
Endüstriyel güvenlik, sadece firewall kurallarından ibaret değil; bir kültür meselesidir. Sahadaki operatörden, merkezdeki CISO'ya kadar herkesin 'Bu sistem neden internete bağlı?' sorusunu sorması gerekiyor. testCompany gibi büyük yapılarda en zayıf halka genellikle unutulmuş bir 4G modem veya 'geçici olarak' açılmış bir VPN hesabıdır.
Unutmayın; siber dünyada bir bit'in değişmesi, gerçek dünyada bir çarkın durmasına neden olabilir. Dikkatli olun, segmentasyona güvenmeyin, her zaman izlemede kalın.
Safe hunting!
