Access’den PostgreSQL’e Tablo Aktarma
Bu yazıda, excel ve python aracılığıyla Access DB’deki, bir tablonun postgresql’e aktarılması anlatılmaktadır.
Önceki makalede, D’Hondt ve diğerlerinin yapmış olduğu RPL Saldırıları İş Çerçevesinden (Framework) Taşma Saldırıları, Azaltılmış Rank Saldırıları ve Sürüm Numarası Artırma Saldırıları için oluşturulan düğümlerin nasıl elde edildiğini açıklamıştım. Bu makaleye buradan ulaşabilirsiniz.
Bu makalede ise, bu düğümlerle Cooja’yı kullanarak simülasyon yapacak ve ağ verilerini elde edeceğim. Contiki ve Coojanın nasıl kurulduğu ile ilgili makaleye de buradan ulaşabilirsiniz.
Makine öğrenmesi için iki adet sınıflandırılmış veri setine ihtiyacımız olacaktır. Bunlardan bir tanesi, içerisinde zafiyetli düğüm barındırmayan ve tamamen normal IoT düğümleri ile yapılan simülasyondan oluşturulan verilerdir. Diğeri ise çerisinde zafiyetli düğüm barındıran normal IoT düğümleri ile yapılan simülasyondan oluşturulan verilerdir. Böylece, bu iki veri setini sınıflandırıp, sınıflandırma algoritmaları ile anomaliyi tespit edeceğiz.
Simülasyonun yapılması ve ham verilerin elde edilmesi ile ilgili videoya aşağıdan ulaşabilirsiniz.
Simülasyonun yapıldığı bilgisayarda, masa üstünde “Experiments” isimli klasörümüz bulunmaktadır. Bu klasörün burada nasıl oluşturulduğuyla ilgili detaylı bilgiye buradan ulaşabilirsiniz.
“Experiments” klasörünün içerisinde saldırıların klasörleri bulunmaktadır. Bu klasörlerin içerisinde ise düğümler bulunmaktadır. Bu düğümler “.z1” uzantılı düğümlerdir.
Cooja simülatörü başlatmak için, yeni bir terminal açıyoruz, coojayı çalıştıracağımız klasöre girmemiz gerekmektedir.
cd contiki-ng/tools/cooja
Cooja aşağıdaki komutla çalıştırılır.
sudo ant run big-mem
Burada big-mem parametresini girmemizin nedeni, simülatörü RAM’de daha fazla hafıza alanı ile çalıştırmaktır.
Cooja simülatörü açıldığında, yeni simülasyon oluşturmak için:
File->New Simulation… butonunu tıklıyoruz.
Simülasyona bir isim veriyoruz. Burada
HF-1R10M ismi verilmiştir.
İsim verirken tarafımızdan şöyle bir kodlama yapılmıştır.
HF: Hello Flood (Taşma Saldırısı)
DR: Decreased Rank (Azaltılmış Rank)
VI: Version Number Increase (Sürüm Numarası Artırma)
R: Root (Kök)
N: Normal (Normal)
M: Malicious (Zafiyetli)
Numaralar: Düğüm Sayıları
Örneğin
HF-1R10N1M
İsimli simülasyon için Taşma Saldırısı, 1 adet kök düğüm, 10 adet normal düğüm ve 1 adet zafiyetli düğüm
İlk simülasyonda, tamamen normal düğümler kullanacağız. Böylece, normal sınıfına ait veri üretebileceğiz.
Ardından sırasıyla düğümleri simülasyona ekleyeceğiz. Bunun için
Motes->AddMotes->create new mote type->Z1 mote…
Seçeneğini seçiyoruz.
“Descriptions” bölümüne “root” yazıyoruz ve
Experiments ->hello-flood->with-malicious->motes klasöründeki root.z1’i seçip Create tuşuna basıyoruz. Sonrasında açılan pencerede bizden bu düğümden kaç adet nereye yerleştireceğini sormaktadır. 1 adet kök düğüm belirlediğimiz için “Number of motes” bölümünü “1” olarak bırakacağız ve “Random positioning”i seçeceğiz. “Add motes” düğmesine bastığımızda simülasyona 1 adet kök düğüm yerleştirecektir.
Normal düğümleri eklemek için de aynı yöntem kullanılacaktır. Motes->AddMotes->create new mote type->Z1 mote…
Seçeneğini seçiyoruz.
Descriptions bölümüne “normal” yazıyoruz ve
Experiments ->hello-flood->with-malicious->motes klasöründeki “sensor.z1”i seçip Create tuşuna basıyoruz. Sonrasında açılan pencerede bizden bu düğümden kaç adet nereye yerleştireceğini sormaktadır. Buraya 10 rakamını giriyoruz ve “create” düğmesine basıyoruz. Aynı yöntemle zafiyetli düğümü de simülasyona ekliyoruz fakat add mote seçeneğinde “Do not add motes” butonuna basıyoruz. Zafiyetli düğümle yapılan simülasyondan veri elde etmek için bu düğümü sonradan kullanacağız.
Not : Normal düğümlerle yapılan simülasyonu farklı kaydedip sonradan zafiyetli düğümü eklemeye çalıştığımızda, program hata vermektedir. Düğümlerin yerini değiştirmemek ve aynı koşullarla simülasyonu gerçekleştirmek maksadıyla zafiyetli düğümü simülasyona ekledik fakat simülasyonda kullanmadık.
Düğümleri birbirinden ayırt edebilmek için, düğümlerin yerleştirildiği penceredeki “view” menüsünde, “mote type” ı seçiyoruz. Böylece, farklı türdeki düğümler farklı renklerle gösterilecektir.
Normal düğümlerle yapılan simülasyondan ham verileri elde edebilmek için ağ verilerini kaydetmemiz yeterli olacaktır. Ağ verilerini katdetmek için,
Tools -> Radio Messages…
Seçeneğini seçiyoruz
Açılan yeni pencerede “6LoWPAN Analyzer with PCAP” seçeneğini seçiyoruz. Böylece ham verileri elde edeceğimiz PCAP dosyası kaydedilecektir. Ayrıca simülasyon esnasında network paketlerini burada görebileceğiz.
Simülasyonu 5 dakika boyunca çalıştırmak istiyoruz. Bunun için script editor’ü kullanabiliriz.
Tools -> Simulation Script Editor…
Seçeneğini seçtikten sonra çıkan pencerede
TIMEOUT(300000) yazmamız yeterli olacaktır.
(5 x60 = 300 sn. = 3000000 milisaniye )
Scripti girdikten sonra penceredeki menüden Run-Activate seçeneğini işaretlenmediği zaman script çalışmayacaktır.
Start düğmesine basarak simülasyonu başlatıyoruz.
Simülasyon 5 dakika boyunca çalışıp duracaktır. Makine öğrenmesi için kullanacağımız veriler PCAP formatında aşağıdaki klasöre kaydedilecektir.
Home/contiki-ng/tools/cooja/build
Oluşan PCAP dosyasının adını simülasyonun adıyla kaydediyoruz.
Paketleri analiz etmemiz için PCAP formatından CSV (Comma Seperated Value) formatına çevirmemiz gerekiyor. Bunun için Wireshark programını kullanacağız.
Wireshark programını açtıktan sonra
File-> Open…
Düğmesine bastıktan sonra,
Home/contiki-ng/tools/cooja/build
Klasörünün altında bulunan PCAP dosyamızı seçiyoruz. Sonrasında ise,
File->Export Packet Dissections->As CSV…
Düğmesine basıyoruz. Açılan pencerede, CSV dosyasının adını verip dosyayı kaydediyoruz.
PCAP dosyasını bu sayede CSV dosyasına çevirmiş olduk.
Normal düğümlerle simülasyonu yapıp ağ paket verilerini elde ettikten sonra aynı işlemi zafiyetli düğümle yapıp ağ paketlerini elde ettik.
Bunun için, simülasyonu yeniden yüklememiz gerekmektedir.
Simülasyonda “Reload” düğmesine basarak simülasyonu yeniden yüklüyoruz.
Normal düğümlerden en son eklenen düğümü silip, en son düğümün bulunduğu noktaya, daha önceden simülasyona eklediğimiz “malicious” düğümünü ekliyoruz.
Zafiyetli düğümle yapılan simülasyondan elde ettiğimiz PCAP dosyasını CSV dosyasına yukarıda anlatılan metotla çeviriyoruz.
Hello Flood saldırısında elde ettiğimiz verilerle, normal verileri karşılaştırdığımız zaman, saldırıdaki veri satırlarının daha fazla olduğunu görebiliriz.
Aynı deneyi, Azaltılmış Rank Saldırısı ve Versiyon Numarası Artırma Saldırısı için de yapıp normal ve zafiyetli düğümlerle yaptığımız deneylerden elde ettiğimiz verileri kaydediyoruz.
Simülasyonlara ait zafiyetli, kök ve normal düğüm sayıları tablo 3.1’dedir.
Normal | Zafiyetli | ||||
Saldırı Türü | Kök | Normal | Kök | Normal | Zafiyetli |
Taşma Saldırısı | 1 | 10 | 1 | 9 | 1 |
Azaltılmış Rank | 1 | 10 | 1 | 9 | 1 |
Sürüm Numarası Artırma Saldırısı | 1 | 10 | 1 | 9 | 1 |
Tablo 3.1: Simülasyon Düğümlerinin Türleri ve Adetleri.
Oluşturulan ham veri formatı Tablo 3.2’dedir.
No | Time | Source | Destination | Protocol | Length | Info |
1 | 0 | fe80::c30c:0:0:c | ff02::1a | ICMPv6 | 64 | RPL Control (DODAG Information Solicitation) |
2 | 3270 | fe80::c30c:0:0:c | ff02::1a | ICMPv6 | 64 | RPL Control (DODAG Information Solicitation) |
3 | 6565 | fe80::c30c:0:0:c | ff02::1a | ICMPv6 | 64 | RPL Control (DODAG Information Solicitation) |
………….. |
Tablo 3.2: Simülasyon Sonucunda Oluşturulan Ham Veri.
Ayrıca oluşturulan ham verileri buradan indirebilirsiniz.
Bu yazıda, excel ve python aracılığıyla Access DB’deki, bir tablonun postgresql’e aktarılması anlatılmaktadır.
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.
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.
“RPL Tabanlı IOT Cihazları Zafiyetinin Tespiti İçin Makine Öğrenmesi Algoritmalarının Karşılaştırılması” isimli yüksek lisans tezimi bu blog sayfasını kullanarak açıkladım. Ş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. Bu bölümde, zafiyetli düğümlerle yapılan deney sonuçları ile, iyicil düğümlerle yapılan deney sonuçlarını istatistiksel metotlarla karşılaştıracağım. İstatistiksel metotlar bizlere makine öğrenmesi metotlarının düzgün çalışıp çalışmadığı hakkında bilgi verecektir.
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.
Bu yazımızda işlenen verileri eğitip RPL protokolünde saldırıyı makine öğrenmesi algoritmaları ile tespit edeceğiz.
Ham verileri, anlamlı hale getirirken, zafiyetli düğümle yapılan simülasyondan elde edilen veri seti 1 ile, normal düğümlerle yapılan simülasyon 0 ile etiketlendikten sonra bu iki veri seti birleştirilmiştir. Elde edilen bu yeni veri seti ile “sınıflandırma” algoritmaları karşılaştırılacaktır. Karşılaştırılacak makine öğrenmesi algoritmalarının tanımları bu sayfada açıklanmıştır.
Ham veri kümesinden elde edilen bilgiler, makine öğrenimini uygulamak için yeterli olmayacaktır. Zayıf düğümler içeren simülasyonlardan elde edilen ham veriler, normal düğümler içeren simülasyonlardan elde edilen ham verilerden tamamen farklıdır. Bu farkın paket sayısı, mesaj türleri, toplam paket uzunlukları ve oranları olduğu gözlemlenmiştir. Bu anormalliği algılamak için, ham veriler 1 saniyelik karelere bölünmüştür. Her saniyenin çerçeveleri içinde aşağıdaki değerler hesaplanmış ve yeni bir veri kümesi oluşturulmuştur.
Önceki makalede, D’Hondt ve diğerlerinin yapmış olduğu RPL Saldırıları İş Çerçevesinden (Framework) Taşma Saldırıları, Azaltılmış Rank Saldırıları ve Sürüm Numarası Artırma Saldırıları için oluşturulan düğümlerin nasıl elde edildiğini açıklamıştım.
Bu makalede ise, bu düğümlerle Cooja’yı kullanarak simülasyon yapacak ve ağ verilerini elde edeceğim.
Makine öğrenmesi için iki adet sınıflandırılmış veri setine ihtiyacımız olacaktır. Bunlardan bir tanesi, içerisinde zafiyetli düğüm barındırmayan ve tamamen normal IoT düğümleri ile yapılan simülasyondan oluşturulan verilerdir. Diğeri ise çerisinde zafiyetli düğüm barındıran normal IoT düğümleri ile yapılan simülasyondan oluşturulan verilerdir. Böylece, bu iki veri setini sınıflandırıp, sınıflandırma algoritmaları ile anomaliyi tespit edeceğiz.
Ö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.
D’Hondt ve diğerlerinin (2015) hazırladıkları akademik rapor ile Cooja IoT simülatörünü kullanarak RPL protokolüne yönelik saldırılardan Taşma Saldırılarını, Sürüm Numarası Artırma Saldırılarını ve Azaltılmış Rank Saldırılarını (Decreased Rank) simüle etmeyi başarmışlardır.
Bu yazıda D’Hondt’s RPL Saldırı Çerçevesinin nasıl kurulduğu ile ilgili bilgi bulabilirsiniz.
Ubuntu 18.04 üzerinde Contiki İşletim Sistemi ve Cooja nasıl kurulur? Bu blog sayfasındai bu sorunun cevabını ve çözümünü bulabilirsiniz.
Bu başlık altında, RPL protokolünde gerçekleşebilecek Taşma Saldırıları, Versiyon Numarası Yükseltme Saldırıları ve Azaltılmış Rank saldırısına ilişkin deneyler yapılıp veri seti oluşturulacaktır.
Tezin protokol katmanları bölümünde RPL protokolü ile ilgili detaylı bilgi verilmiştir. Bu bölümde, RPL protokolünde uygulanan saldırılara değinilecektir.
RPL yapısı itibari ile birçok parametreye sahiptir. DIS mesajları, DAO Mesajları, Versiyon numarası, ağaç yapısı vs. Bu protokol parametrelerinde meydana gelecek herhangi bir değişiklik sistemin kusursuz işleyişini engelleyeceği için bir saldırı niteliğinde olacaktır. Bu bölümde RPL protokolünde yapılan saldırılar görülmektedir.
Bu tez çalışmasının konusu, “RPL tabanlı nesnelerin interneti cihazlarına yapılan saldırıların tespiti için kullanılabilecek makine öğrenmesi yöntemlerinin karşılaştırılması” olduğu için RPL protokolü üzerinde biraz daha fazla durulacaktır.
Tez konusu RPL protokolünü içerdiği için bu bölümde RPL ve 6LoPWAN dışındaki protokoller açıklanmıştır. Bunlar: Kısıtlı Uygulama Protokolü (CoAP), Veri Dağıtım Hizmeti (DDS), Mesaj Kuyruğu Telemetri Aktarımı (MQTT), Gelişmiş Mesaj Kuyruk Protokolü (AMQP), Genişletilebilir Mesajlaşma ve Durum Protokolü (XMPP), Çok Noktaya Yayın Alan Adı Sistemi (mDNS), DNS Hizmet Keşfi (DNS-SD), Altyapı Katmanı Protokolleri, Fiziksel Link Katmanı Protokolleri, EPCglobal, Z-wave, Bluetooth Düşük Enerji (BLE), IEEE 802.15.4, IEEE 802.11ah, ZigBee, Gelişmiş Uzun Vadeli Evrim (LTE-A)