RPL Tabanlı IOT Cihazları Zafiyetinin Tespiti İçin Makine Öğrenmesi Algoritmalarının Karşılaştırılması

Düğümlerin Elde Edilmesi

Saldırı Simülasyon Parametreleri ve Düğümlerin Üretilmesi

Önceki yazımda, Contiki ve Cooja ile, Ubuntu 18.04 işletim sistemine sahip sanal bir bilgisayarda IoT cihazlarının simülasyonunu yapabilmek için Contiki ve Cooja’yı nasıl kurduğumuzu anlatmıştım. Bu sanal bilgisayar ile normal ve zafiyetli IoT cihazlarının veri transferi simülasyonunu yapıp ağ bilgisini alacağız. Elbette bu simülasyonu yapabilmemiz için “normal” ve “zafiyetli” düğümlere ihtiyacımız var. Bu zafiyetli ne normal düğümleri elde etmek için D’Hondt’s RPL Framework başlığı altında D’Hondt ve diğerlerinin (2015) yapmış oldukları iş çerçevesinin (framework) kurulumunun nasıl yapıldığını anlattım.

Bu yazımda ise, D’Hondt ve diğerlerinin (2015) yapmış olduğu çalışmadan “Hello Flood”, “Decreased Rank” ve “Version Number Increase” saldırılarının yapılacağı zafiyetli düğümler ile normal düğümleri nasıl elde ettiğimizi anlatacağım.

Özetle, elimizde iki adet bilgisayar var.

  1. Contiki ve Cooja’ nın kurulu olduğu bir bilgisayar,
  2. D’Hondt’s RPL Framework’ün kurulu olduğu diğer bilgisayar.


Bu yazıda D’Hondt’s RPL Framework’ün kurulu olduğu diğer bilgisayarda normal ve zafiyetli düğümleri oluşturup, bu düğümleri Contiki ve Cooja’nın kurulu olduğu bilgisayara aktarılmasını anlatacağım.

Sonraki aşamalarda ise, Cooja ile yapılan simülasyondan veri elde edilen veriler işlenip değerlendirilecektir.

Bu işlemin nasıl yapıldığı ile ilgili video aşağıda yer almaktadır.

Zafiyetli ve normal düğümleri oluşturmak için aşağıdaki aşamalar izlenmiştir:

Öncelikle, D’Hondt’s RPL Framework’ün kurulu olduğu diğer bilgisayarda yeni bir terminal açılır. D’Hondt’s RPL Framework’ün kurulu olduğu klasöre aşağıdaki komut ile girilir, daha önceden indirilen vagrant dosyası çalıştırılarak sanal bilgisayarın açılması beklenir.

				
					-cd rpl-attacks/
-vagrant up

				
			

~/Experiments klasörünün içerisine attacks.json dosyası oluşturulur. İçeriği aşağıdaki gibidir:

				
					{
  "BASE": {
    "simulation": {
      "number-motes": 20,
      "target": "z1",
      "duration": 120,
      "area-square-side":500}},
  "hello-flood": {
    "simulation": {
      "title": "Test hello-flood simulation",
      "goal": "Create a new simulation",
      "root": "echo"},
    "malicious": {
      "type": "sensor",
      "building-blocks": [
        "hello-flood"
      ]}},
  "increased-version": {
    "simulation": {
      "title": "Test increased-version simulation",
      "goal": "Create a new simulation",
      "root": "echo"
    },
    "malicious": {
      "type": "sensor",
      "building-blocks": [
        "increased-version"
      ]
    }
  },
  "decreased-rank": {
    "simulation": {
      "title": "Test decreased-rank simulation",
      "goal": "Create a new simulation",
      "root": "echo"
    },
    "malicious": {
      "type": "sensor",
      "building-blocks": [
        "decreased-rank" ] }  } }

				
			

Yukarıdaki json dosyasında 3 adet saldırı tanımlanmıştır. Bu dosya ile framework’ün 3 adet klasör oluşturması sağlanacaktır.

JSON dosyasını ~/Experiments klasörünün içerisinde oluşturduktan sonra masa üstünde bulunan “RPL Attacks Framework” kısayoluna çift tıklanır. Yeni bir terminal açılacaktır. make_all komutu ile düğümler ve diğer dosyalar oluşturulur.

				
					-make_all attacks.json
				
			

Simülasyon, ~/Experiments klasörünün içinde, parametrelerde belirtilen başlıklara göre klasörler oluşturur. Bu klasörlerin her birinin içerisinde, “with-malicious” ve “without-malicious” klasörleri bulunmaktadır.

Bu klasörlerin de içindeki “motes” klasöründe attacks.json dosyasında belirlenen parametrelere göre saldırı klasörleri ve dosyaları framework tarafından oluşturulur.

Framework’deki düğümlerin C kodları incelendiğinde, zafiyetli düğüm oluşturmak için aşağıdaki kodların IoT cihazlarının yazılımına eklendiği anlaşılacaktır:

				
					{
  "hello-flood": {
    "RPL_CONF_DIS_INTERVAL": 0,
    "RPL_CONF_DIS_START_DELAY": 0,
    "rpl-timers.c": ["next_dis++;", "next_dis++; int i=0; while (i<20) {i++; dis_output(NULL);}"]
  },
  "increased-version": {
    "rpl-icmp6.c": ["dag->version;", "dag->version++;"]
  },
  "decreased-rank": {
    "RPL_CONF_MIN_HOPRANKINC": 0,
    "rpl-private.h": [
      ["#define RPL_MAX_RANKINC             (7 * RPL_MIN_HOPRANKINC)", "#define RPL_MAX_RANKINC 0"],
      ["#define INFINITE_RANK                   0xffff", "#define INFINITE_RANK 256"]
    ],
    "rpl-timers.c": ["rpl_recalculate_ranks();", null]
  }
}

				
			

Burada,

  • Taşma Saldırılarını gerçekleştirmek için gereksiz DIS mesajları yollanmıştır.
  • Sürüm Numarası Artırma Saldırılarında, sürüm numarasını +1 artırmıştır.
  • Azaltılmış Rank saldırılarında, cihazlar rank numaralarını azaltmışlardır


Cooja simülatörünün olduğu bilgisayar ve D’Hondt’s RPL Framework’ün kurulu olduğu bilgisayar aynı yerel alan ağı (LAN) üzerinde bulunmaktadır.

Parametreler aşağıdaki gibidir.:

Cooja simülatörünün olduğu bilgisayarın kullanıcı adı: mukiraz

Cooja simülatörünün olduğu bilgisayarın IP adresi: 192.168.1.15

SSH ile veri göndermek için komut yapısı aşağıdaki gibidir:

 

				
					scp -r <source folder> <destination folder>
scp -r <source folder> use_name@IP_Address: <destination folder>

				
			

Elimizde olan konfigürasyona göre aşağıdaki komut kullanılmıştır:

				
					-scp -r /home/user/Experiments mukiraz@192.168.1.15: /home/mukiraz/desktop
				
			

Experiments klasörünü aşağıdaki linkten de indirebilirsiniz.

SHA 256 Sum : eb806bb959430822e5715f2137518285787bbb4fa8dd4fd9553027b108f6ac09

Blog özeti

Önceki yazımda, Contiki ve Cooja ile, Ubuntu 18.04 işletim sistemine sahip sanal bir bilgisayarda IoT cihazlarının simülasyonunu yapabilmek için Contiki ve Cooja’yı nasıl kurduğumuzu anlatmıştım. Bu sanal bilgisayar ile normal ve zafiyetli IoT cihazlarının veri transferi simülasyonunu yapıp ağ bilgisini alacağız. Elbette bu simülasyonu yapabilmemiz için “normal” ve “zafiyetli” düğümlere ihtiyacımız var. Bu zafiyetli ne normal düğümleri elde etmek için D’Hondt’s RPL Framework başlığı altında D’Hondt ve diğerlerinin (2015) yapmış oldukları iş çerçevesinin (framework) kurulumunun nasıl yapıldığını anlattım. Bu yazımda ise, D’Hondt ve diğerlerinin (2015) yapmış olduğu çalışmadan “Hello Flood”, “Decreased Rank” ve “Version Number Increase” saldırılarının yapılacağı zafiyetli düğümler ile normal düğümleri nasıl elde ettiğimizi anlatacağım.

Yazar Hakkında

Diğer Yazılar

Tezim
Murat Uğur KİRAZ

Sonuç

Bu bölümde, RPL protokolüne yapılan Taşma Saldırısı, Azaltılmış Rank Saldırısı ve Sürüm Numarası Artırma Saldırısı “Karar Ağacı”, “Lojistik Regresyon”, “Rasgele Orman”, “Naive Bayes”, “K En Yakın Komşu” ve “Yapay Sinir Ağları” algoritmaları ile eğitilmiş ve test edilmiştir.

Taşma Saldırılarının tespitinde %97,2 doğruluk oranı ile Yapay Sinir Ağları algoritması, Sürüm Numarası Artırma Saldırılarının tespitinde %81 doğruluk oranı ile K En Yakın Komşu algoritması, Azaltılmış Rank saldırılarının tespitinde %58 doğruluk oranı ile Yapay Sinir Ağları algoritması başarı gösterdiği tespit edilmiştir.

Daha Fazla oku >>
Tezim
Murat Uğur KİRAZ

Makine Öğrenmesi Değerlerinin Yorumlanması

RPL Tabanlı IOT Cihazları Zafiyetinin Tespiti İçin Makine Öğrenmesi Algoritmalarının Karşılaştırılması başlıklı yüksek lisans tezimi nasıl yaptığımı, bu süreçte elde ettiğim tecrübelerimi ve bu tezdeki kodları bir yazı dizisi halinde blog sayfamda paylaşmaya devam ediyorum.

Şimdiye kadar, RPL protokolü ve RPL protokolünde gerçekleşen saldırılarla ilgili detaylı bilgi verdim. Sonrasında, Taşma Saldırıları, Sürüm Numarası Artırma Saldırısı ve Azaltılmış Rank Saldırısı ile ilgili deneyler yapıp, ham verileri elde ettim ve bu ham verileri anlamlı hale getirdim. Zafiyetli düğümlerle yapılan deney sonuçları ile, iyicil düğümlerle yapılan deney sonuçlarını istatistiksel metotlarla karşılaştırdım.

Bu bölümde ise makine öğrenmesi algoritmaları ile tespit ettiğimiz saldırıların sayısal sonuçlarını yorumlayacağım.

Daha Fazla oku >>

Yazıyı paylaşın

LinkedIn
Twitter