Yetkisiz Seyir Defteri#4: ENC Spoofing-Harita Manipülasyonu
Serinin üçüncü yazısında AIS’e sahte paket enjekte edip haritada nasıl hayalet gemi oluşturulabileceğini anlatmıştım.
Yetkisiz Seyir Defteri#4: ENC Spoofing-Harita Manipülasyonu
Photo by Raimond Klavins on Unsplash
Serinin üçüncü yazısında AIS’e sahte paket enjekte edip haritada nasıl hayalet gemi oluşturulabileceğini anlatmıştım.
Bu yazıda ise geminin ECDIS’inin okuduğu harita dosyasını değiştirip haritadaki bir sığlığı nasıl gizleyebileceğimizi anlatacağım.
Harita nedir?
ENC (Electronic Navigational Chart), geminin ECDIS’inde kullanılan resmi elektronik seyir haritası. ENC’ler tek bir harita değil, coğrafi parçalara bölünmüş kutucuklardan oluşur, bu kutucuklardan her birine hücre denir. Her hücre bir dosyadır ve ECDIS haritayı bu dosyalardan okur. Bu dosya S-57 denen bir standarda göre yazılmış bir veri dosyası. IHO (Uluslararası Hidrografi Örgütü) tanımlıyor açık bir standart. İçinde kıyı çizgileri, derinlikler vs. ayrı ayrı nesneler olarak duruyor.
Deniz haritada düz bir şekilde görülmüyor, derinlik bantlarına bölünmüş. Her bant bir DEPARE (Depth Area) ve her DEPARE’nin iki sınır değeri var:
DRVAL1 -> alanın en sığ derinliği
DRVAL2 -> alanın en derin derinliği
ECDIS bir alanın karaya oturma riski taşıyıp taşımadığına DRVAL1'e bakarak karar veriyor, çünkü önemli olan alanın en sığ noktası. DRVAL1 geminin güvenli derinliğinden sığsa, ECDIS o alanı tehlikeli olarak işaretliyor.
1. Dosya nasıl değiştirilir?
Harita dosyasını okumak ve yazmak için GDAL kullandım. GDAL, S-57 dahil onlarca coğrafi veri formatını açıp içine bakabilen bir araç. Hücredeki DEPARE’leri ve DRVAL değerlerini listeleyen ogrinfo da GDAL'ın bir parçası.
İlk denemem GDAL ile sıfırdan bir S-57 hücresi üretip içine kendi derinlik alanlarımı koymaktı. Bu denemem çalışmadı çünkü GDAL’ın S-57 okuma tarafı iyi ama yazma tarafı zayıf kaldı. DEPARE geometrisini düzgün yazamadı bu nedenle ECDIS onları tehlike olarak çizemedi.
Sıfırdan üretmeyi bırakıp gerçek bir hücre üzerinde çalışmaya karar verdim. NOAA’nın San Francisco Bay hücresini (US5CA13M) indirdim.GDAL’ın update moduyla mevcut derinliği değiştirmeyi denedim, izin vermedi. Sahte bir .001 güncelleme dosyası yazmayı denedim, o da olmadı.
Bunun üzerine GDAL’ı bıraktım ve doğrudan dosyanın ham baytlarına indim. Burada ISO 8211 devreye giriyor. S-57 haritada ne olduğunu gösteriyordu, ISO 8211 ise haritada yer alan bu bilgiler dosyada bayt bayt nasıl dizilmesi gerektiğini gösteriyor. Yani bir S-57 dosyası fiziksel olarak ISO 8211 kayıtlarından oluşur ve her kaydın başında bir dizin bulunur, bu dizin “şu alan şu bayttan başlar, şu kadar uzunlukta” bilgisini tutar.
Dosyayı ham haliyle açtığımda derinlik değerlerinin düz ASCII metin olarak durduğunu gördüm. DRVAL1 değeri -1.7 olan nesneler dosyada doğrudan -1.7 karakterleriyle yazılıydı. Bunları 35.0 yaptım.
00000000: 3132 3235 4653 5054 3635 3337 1ee9 3f1e 1225FSPT6537..?.
00000010: 6466 0a00 0003 012a 0001 0001 1e26 02af df.....*.....&..
00000020: 816e 268d 1c1e 5700 2d31 2e37 1f58 0030 .n&...W.-1.7.X.0
00000030: 1f1e 82dc 0400 0002 0102 82db 0400 0002 ................
00000040: 0102 82da 0400 0001 0102 82d9 0400 0001 ................
00000050: 0102 82d8 0400 0001 0102 ..........
Ancak ISO 8211 her alanın uzunluğunu o baştaki dizinde tuttuğu için, bir alanın bayt sayısı değişirse dizindeki bilgi yanlış kalır ve ondan sonraki bütün alanların konumu kayar ve dosya bozulur. O nedenle dizindeki uzunluklarına dikkat etmek gerekli burada.
-1.7 -> 4 karakter
35.0 -> 4 karakter
İkisi de dört karakter olduğu için dizindeki uzunluklara dokunmadım. Bu şekilde 69 nesnenin DRVAL1'ini değiştirdim.
2. Etki: Veri Değişti
Değişikliğin gerçekten olduğunu göstermek için aynı nesneyi iki dosyada karşılaştırdım. Her DEPARE’nin benzersiz bir kimliği (FIDN) var, ben de aynı FIDN’i hem temiz hem değiştirilmiş hücrede sorguladım.

ogrinfo çıktısı
Aynı nesnenin en sığ derinliği(DRVAL1) temiz hücrede -1.7 metre, yani su seviyesinin altında. Değiştirilmiş hücrede aynı nesne 35 metre görünüyor. Tek bir baytı bile ekleyip çıkarmadan, sadece rakamları değiştirerek sığlığı güvenli derinliğe çevirmiş olduk böylece.
3. Etki: Harita Değişti
Peki kaptanın ekranında ne değişiyor? İki hücreyi de OpenCPN’e yükleyip aynı bölgeye aynı ölçekte baktım. Yer, San Francisco Bay içinde Oakland Inner Harbor, Coast Guard Island çevresi.

OpenCPN temiz hücre

OpenCPN değiştirilmiş hücre
Temiz haritada Coast Guard Island’ın kıyısında yeşil bir bant görünüyor, burası sığlık. Değiştirilmiş haritada aynı bant beyaz, çünkü OpenCPN’de beyaz derin ve güvenli su demek. Sığlık görsel olarak da haritadan silindi.
Neden alarm vermedi?
OpenCPN’in bir harita nesnesine bakıp karaya oturma uyarısı veren grounding alarmı yok.
Gerçek ECDIS’lerde bu alarm IMO standardı gereği zorunlu, ve alarm doğrudan DRVAL1'e bakıyor. Bu alarm OpenCPN de de yer alsaydı önceden gemi sığlığa yaklaşınca karaya oturma alarmı çalacaktı saldırıdan sonra ise bu alarm çalmayacaktı.
Peki bu gerçek hayatta olur mu?
Bu saldırı, harita verisi imzayla korunmadığı sürece çalışır.
IHO’nun S-63 diye bir standardı var, ENC verisini şifreleyip dijital imzayla koruyor. Bir hücre S-63 ile korunuyorsa, benim bayt değişikliğim imzayı bozar ve uyumlu bir ECDIS hücreyi reddeder. Ben NOAA hücresi kullandım, çünkü NOAA elektronik haritalarını ücretsiz ve imzasız düz S-57 olarak dağıtıyor.
İmzalı sistemlerde saldırı doğrudan işlemez, ama iki yöntem daha var:
- ECDIS’in kendisi ele geçirilirse, imza doğrulama da saldırganın kontrolüne girer. (bunun olabileceğinden önceki yazılarda da bahsetmiştim.)
- Tedarik zinciri (supply chain) saldırıları: İmza atılmadan önce veriye girilirse, sahte veri geçerli olarak imzalanır.
Nasıl tespit edilir, nasıl korunulur?
- Dijital imza (S-63): Harita verisinin şifreli ve imzalı dağıtılması, verinin yolda değiştirilmesini engeller. Bu saldırıya karşı asıl savunma bu.
- ECDIS güvenliği: İmza olsa bile onu doğrulayan cihaz ele geçirilirse savunma çöker. ECDIS’in güncel tutulması, USB gibi dış medya girişlerinin kontrol edilmesi gerekir.
Regülasyon ne diyor?
- IMO A.817(19): ECDIS performans standardı, karaya oturma uyarısını zorunlu kılıyor.
- IHO S-63: ENC verisini şifreleyip dijital imzayla koruyan standart.
Kaynaklar
- IHO S-57, IHO Transfer Standard for Digital Hydrographic Data (S-57'nin ISO/IEC 8211'i fiziksel taşıyıcı olarak kullanması) — **https://iho.int/uploads/user/pubs/standards/s-57/31Main.pdf**
- NOAA Office of Coast Survey, ücretsiz S-57 ENC dağıtımı — **https://www.charts.noaa.gov/ENCs/ENCs.shtml**
SON
Bir sonraki yetkisiz seyir defterinde görüşmek üzere.
sudo shutdown -h now 👋
메타데이터
- post_id
- 2f79397fe6e4
- slug
- yetkisiz-seyir-defteri-4-enc-spoofing-harita-manipülasyonu-2f79397fe6e4
- url
- https://medium.com/@tubaadiguzel/yetkisiz-seyir-defteri-4-enc-spoofing-harita-manip%C3%BClasyonu-2f79397fe6e4
- canonical_url
- https://medium.com/@tubaadiguzel/yetkisiz-seyir-defteri-4-enc-spoofing-harita-manip%C3%BClasyonu-2f79397fe6e4
- author_url
- https://medium.com/@tubaadiguzel
- status
- ok
- fetched_at
- 2026-08-23 17:14:19