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.
Bir önceki bölümde, taşma saldırısı, azaltılmış rank saldırısı ve sürüm numarası artırma saldırısını contiki cooja ile simüle etmiştik. Bu simülasyonları hem normal düğümlerle hem de zafiyetli güğümlerle icra etmiştik. Simülasyonlardan toplam 6 adet ham veri seti ortaya çıkmıştı.
Ham veri setinde aşağıdaki sütunlar bulunmaktadır:
No : Satır numarası
Time : İşlem zamanı (ms)
Source : Kaynak IP adresi (IPV6)
Destination: Hedef IP adresi (IPV6)
Protocol : Protokol
Length : Paket uzunluğu
Info : Bilgi (DIO, DIS, DAO, Ack mesajları)
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.
Yeni veri setinin oluşturulması, aşağıdaki sözde kod vasıtası ile olmuştur.
START
Dset=INPUT(RawDataset)
WHILE Dset Rows Ends
Duration=time(current_row)-time(previous_row)
Duration_list=APPEND(Duration)
ENDWHILE
Dset = Dset + Duration_list
IP_dictionary={IP_Adress :unique_number}
Crr_scnd=60
Counter=0
fs=FLOOR(Dset[Duration_list])
WHILE counter < frame_second
osf= GET(Dset[Time]>= fs and Dset[Time]<= Crr_scnd+1)
WHILE osf Rows Ends:
Osf_list=[ src=IP_dictionary[Source IP_Adress],
dst=IP_dictionary[Dest. IP_Adress],
pct_cnt=COUNT(rows)
src_mote_rt= COUNT(src)/pct_cnt
dst_mote_rt= COUNT(dst)/pct_cnt
src_mote_dur=SUM(src_duration)
dst_mote_dur= SUM(dst_duration)
ttal_pckt_dur= SUM(duration)
ttal_pckt_lngth= SUM(pckt_lngth)
src_pckt_rt= SUM(src_pckt_lngth)/ ttal_pckt_lngth
dst_pckt_rt= SUM(dst_pckt_lngth)/ ttal_pckt_lngth
dio_msg_cnt= COUNT(dio_messages)
dis_msg_cnt= COUNT(dis_messages)
dao_msg_cnt= COUNT(dao_messages)
other_msg_cnt= COUNT(other_messages)
IF Dset=”Normal”
Label=0
ELSE
Label=1
ENDIF
ENDWHILE
New_dset=APPEND(Osf_list)
ENDWHILE
END
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.