Saldırı Tespit Sistemlerinde Derin Öğrenme Yaklaşımı - 2


Merhabalar, kısa bir aradan sonra tekrar karşınızdayız. Bu yazımızda, Saldırı Tespit Sistemleri'nde Derin Öğrenme Yaklaşımı başlığıyla yayınladığımız serinin 2. bölümüyle devam edeceğiz. Serinin ilk yazısında belirttiğimiz gibi içerik olarak derin öğrenme teknikleri ile çeşitli saldırı tiplerine göre STS'ler için neler yapılabileceğini kod örnekleriyle birlikte açıklayacağız. Paylaşılan kodun çıktılarını doğru değerlendiren ilk 2 kişiye isteği doğrultusunda İstanbul Yıldız Teknopark veya Ankara Hacettepe Teknokent ofislerimizden birinde staj yapma imkanı verilecektir. Staj imkanından faydalanmak istemeyen okurlarımıza aşağıda listesi sunulan kitaplardan birini hediye edeceğiz. Staj imkanı veya kitap hediyemizden birini kazanmak için yapmanız gereken kodun çıktılarını doğru değerlendirmek ve hızlıca bizimle paylaşmak. Bu konuda sizlere şimdiden başarılar diliyorum ;)

Başlangıç olarak, kısa tanım ve önerilerimizle derin öğrenme tekniklerine değinelim.

Derin Öğrenme ile yapılacak projelerde kullanılacak olan modellerin ve yapıların anlaşılabilmesi ve projeye uygun modeller seçebilme veya doğru aşamadan gerekli özellikleri çıkarma gibi işlemlerin gerçekleştirilebilmesi için Yapay Sinir Ağlarının temellerine hakim olunması gerekmektedir.

Kaynak önerisi verecek olursak, derin öğrenme için gerekli olan lineer cebir, olasılık ve bilgi teorisi, sayısal analiz ve makine öğrenmesi temellerinin detaylıca ele alındığı Deep Learning (Ian Goodfellow, Yoshua Bengio, Aaron Courville) adlı kitabı[1] temellerin kavranması, tutarlı algoritmalar kurabilme ve problemlere doğru çözümler üretebilme becerisine katkısı bakımından şiddetle öneriyorum.

Tanım olarak;
Yapay Sinir Ağları: İnsan beyninden esinlenerek geliştirilmiş, ağırlıklı bağlantılar aracılığıyla birbirine bağlanan ve her biri kendi belleğine sahip işlem elemanlarından oluşan paralel ve dağıtılmış bilgi işleme yapıları; bir başka deyişle, biyolojik sinir ağlarını taklit eden bilgisayar programlarıdır [2]. Geleneksel Algoritmalar ile Yapay Sinir Ağlarını kıyaslayacak olursak;


Tablo.1 - Geleneksel Algoritmalar ile YSA'ların Karşılaştırılması [3]


Perceptron Yapısı

Görsel.1' de belirtilen perceptron çalışma prensibini açıklayacak olursak diyagramda belirtilen  input değerler ağırlıklarla çarpılarak toplamları alınır ve bu toplama bias değeri eklenir. Bu sonuç bir aktivasyon fonksiyonuna sokularak çıkan hataya göre ağırlıklar bir optimizasyon fonksiyonu seçilerek yeniden güncellenir.



Görsel.1 - Örnek Perceptron Diyagramı [4]
Görsel.1 - Örnek Perceptron Diyagramı [4]


Aktivasyon Fonksiyonu: Bu fonksiyon hücreye gelen net girdiyi işleyerek hücrenin bu girdiye karşılık üreteceği çıktıyı belirler. Aktivasyon fonksiyonu genellikle doğrusal olmayan bir fonksiyon seçilir. Yapay sinir ağlarının bir özelliği olan “doğrusal olmama” aktivasyon fonksiyonlarının doğrusal olmama özelliğinden gelmektedir. Aktivasyon fonksiyonu seçilirken dikkat edilmesi gereken bir diğer nokta ise fonksiyonun türevinin kolay hesaplanabilir olmasıdır. Geri beslemeli ağlarda aktivasyon fonksiyonunun türevi de kullanıldığı için hesaplamanın yavaşlamaması için türevi kolay hesaplanır bir fonksiyon seçilir. 

Neural network yapısı ilişkisel ve diferansiyellenebilir bir fonksiyona dayalı olarak kurulmaktadır. Bu fonksiyon lineer bir nöron yapısı için aşağıdaki örnekteki gibi tanımlanmaktadır.

Görsel.2 - Lineer Nöron Yapısal Diyagramı [5]

Lineer nöronlarda hesaplama hızlı gerçekleşmektedir, fakat ciddi şekilde sınırlıdırlar. Herhangi bir ileri beslemeli ağda gizli katmanın bulunmaması anlamına gelmektedir. Gizli katmanların bulunmasının yani çok katmanlı bir yapıya sahip olmanın birtakım önemli özelliklerin giriş katmanından elde edilmesine olanak sağlamaktadır, diğer bir deyişle kompleks bir ilişki ağımız varsa birden fazla gizli katmana yani lineer olmayan bir yapıya ihtiyaç duyarız. Bu sistemin başarısını artıran bir faktördür.

Maliyet Fonksiyonu (Cost Function): Görsel.2' de belirtilen fonksiyonun y değerinin; tahmini ve gerçek değeri arasındaki fark hatayı vermektedir. Bu hata öklit, manhattan mesafesi vb. metriklerden faydalanarak oluşturulan fonksiyonlar yardımıyla bulunmaktadır, seçilecek olan bu fonksiyon maliyet fonksiyonudur. Önemli olan nokta ise birçok yerde karşımıza çıktığı gibi maliyeti bir optimizasyon fonksiyonu kullanarak minimize etmektir.

Görsel.3 - Fully Connected Layer Diyagramı [6]

Fully Connected Layer (fc layer): Görsel.3' te belirtilen Fully Connected  katman diyagramında ilgili katmanda bulunan tüm nöronların her biri önceki katmanlardaki nöronların hepsiyle bağlantılıdır. Eğer bir sınıflandırma yapılacaksa kullanılacak olan en son fc layerda bulunan nöron sayısı sınıf sayısı kadar olmalıdır.

Eğitim için önemli olan öğrenme oranı (learning rate - optimizasyon algoritmalarındaki step size), dropout rate, yığın boyutu (batch size), epoch sayısı (tüm train verilerinin 1 kez modelden geçmesi 1 epoch'tur. ) değişkenlerinin önemi ve sonuca etkisi ile ilgili tecrübeyi benzer proje örnekleri ve deneme-yanılma yöntemi ile edinebileceğinizi belirtelim.

Bahsettiğimiz temel kavramlara ek olarak;

Tensor denilen kavrama değinecek olursak tensorlar, 2’ den fazla boyuta sahip olan veri yapılarını ifade etmek için kullanılırlar. (Örnek; 3D matris)

GPU’ların kullanılmasının tensor veri yapısı için uygun float değişkenleri taşıyabilecek genişlikte veriyolu ve unitlere (birimlere) sahip olmaları açısından CPU‘ lara göre daha efektif olduğu bilinmekte ve ispatlanmıştır.

Örnek bir alıştırma olarak : FCNN ile Flow Based IDS 

Bu kısımda, Fully Connected Yapay Sinir Ağı modeli ile flow bazlı özelliklerden saldırı tespiti yapan TensorFlow-Keras kütüphaneleri ile implemente ettiğimiz örnek Python 3 kodunu inceleyeceğiz. 

Veri Seti

Veri seti olarak Kanada Siber Güvenlik Enstitüsü tarafından yayınlanan gerçek trafik verilerinden oluşan CIC IDS 2017 [7] veri seti seçilmiştir. Veri setinde bulunan ağ akışları bazında hazırlanmış Görsel.4' te belirtilen istatistiksel özelliklerden(attribute, feature) oluşan veri setinin, alıştırma olması bakımından % 5 'lik bir bölümü alınarak eğitim, validasyon ve test aşamasında kullanılmıştır. Veri seti atak ve normal sınıfların dağılımı açısından dengeli (balanced) değildir. Atak örnek sayıları normale oranla daha azdır.


Görsel.4 - CIC IDS 2017 [7] Veri setine yönelik hazırlanan Metadata Görseli

Sınıflara ayrılması bakımından, veri seti Görsel.4' ten de anlaşılacağı üzere 14 adet saldırı tipi ve 1 adet normal akış sınıfı olmak üzere toplamda 15 adet sınıftan oluşmaktadır. Alıştırma için düzenlediğimiz veri setinde ise tüm saldırı etiketleri atak olarak değiştirilmiştir ve normal akışlarla beraber toplamda 2 adet sınıf bulunmaktadır. Ön işleme aşamasında ayırıcı olmayan özellikler çıkarılarak özellik sayısı 79' dan 75'e indirgenmiştir ve seçilen örnekler (samples) ve sınıf bilgileri Numpy kütüphanesi kullanılarak vektörlerden veri seti yeniden düzenlenmiştir.

İmplementasyon
Hazırladığımız örnek alıştırmanın python 3 kodu aşağıda verilmiştir. Soru, düzeltme ve önerilerinizi yorumlar kısmında belirtebilirsiniz.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import numpy as np
from keras import optimizers
from keras.models import Sequential
from keras.layers import Dense
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import confusion_matrix
from keras.callbacks import EarlyStopping, ModelCheckpoint

# Dataset loading..
X_train = np.load("train_data.npy")
y_train = np.load("train_label.npy")
X_test = np.load("test_data.npy")
y_test = np.load("test_label.npy")


# Validation set split parameters
validation_rate = 0.3
validation_size = int(len(y_test)*0.3)

# Model hyperparameter configuration
batch_size = 100
epochs = 3
learning_rate = 0.0005

# Scaling(Zero mean and unit stderr) Step
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# Simple Neural Network Model Creating...
classifier = Sequential()
# Adding the input layer and the first hidden layer
classifier.add(Dense(units=40, kernel_initializer='uniform', activation='relu', input_dim=75))
# Adding the second hidden layer
classifier.add(Dense(units=20, kernel_initializer='uniform', activation='relu'))
# Adding the output layer
classifier.add(Dense(units=1, kernel_initializer='uniform', activation='sigmoid'))

# Defining optimization function.
optimizer = optimizers.Adam(lr=learning_rate)

# Format the name of model weights.
weight_name = 'weights.{epoch:02d}-{acc:.4f}.h5'

# If improve results save model weights like checkpoint approach
checkpoint = ModelCheckpoint(weight_name, save_best_only=True)

# If results not improved after sequential 3 epoch just stop early the training.
stopper = EarlyStopping(monitor='val_loss', patience=3, mode='auto')

# Compile classifier model with hyperparameters
classifier.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['acc'])

# To finetune model you should load existing model weights.
# classifier.load_weights("weights.h5")

# Start training with determined hyperparameters.
classifier.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, callbacks=[checkpoint, stopper],
               validation_data=[X_test[:validation_size], y_test[:validation_size]])

# Test the model with test data set.
y_pred = classifier.predict(X_test[validation_size:])

# Thresholding results
y_pred = (y_pred > 0.5)

# Calculate and print the confusion matrix of results
cm = confusion_matrix(y_test[validation_size:], y_pred)
print("\nConfusion Matrix \n", cm)


ÖDÜLLÜ SORU (Son yanıtlama tarihi; Yayın tarihinden itibaren 1 ay) 

Elde ettiğiniz sonuçları detaylıca inceleyiniz. Ortaya çıkan yaklaşık %4-5 oranındaki sınıflandırma hatasının ANA SEBEBİNİ fark eden ve yorumlara yazan ilk 2 okurumuza isteği doğrultusunda Ankara ve İstanbul ofislerimizde staj yapma imkanı veya aşağıda listesi sunulan kitaplardan birini hediye edeceğiz. Staj imkanı veya kitap hediyemizden birini kazanmak için yapmanız gereken kodun çıktılarını doğru değerlendirmek ve hızlıca bizimle paylaşmak. Bu konuda sizlere şimdiden başarılar diliyorum ;)

İpucu : Serinin ilk yazısında(Link : https://bit.ly/2yRMWF5 ). Veri setine odaklanınız. ;)


Kitap Listesi:

1- 50 Soruda Yapay Zeka – Cem Say
2- Incognito – Beynin Gizli Hayatı – David Eagleman
3- Robotların Yükselişi - Martin Ford 
Kaynaklar 

1- Goodfellow, Ian, et al. Deep learning. Vol. 1. Cambridge: MIT press, 2016. (https://www.deeplearningbook.org)
2- Elmas, Çetin. Yapay sinir ağları:(kuram, mimari, eğitim, uygulama). Seçkin Yayıncılık, 2003
3- http://www.ibrahimcayiroglu.com/Dokumanlar/GoruntuIsleme/Goruntu_Isleme_Ders_Notlari-9.Hafta.pdf
4- https://sebastianraschka.com/faq/docs/diff-perceptron-adaline-neuralnet.html
5- Fundamentals of Deep Learning by Nikhil Buduma and Nicholas Locascio (O’Reilly). Copyright 2017 Nikhil Buduma and Nicholas Locascio, 978-1-491-92561-4
6- http://cs231n.github.io/convolutional-networks/
7- Iman Sharafaldin, Arash Habibi Lashkari, and Ali A. Ghorbani, “Toward Generating a New Intrusion Detection Dataset and Intrusion Traffic Characterization”, 4th International Conference on Information Systems Security and Privacy (ICISSP), Purtogal, January 2018

M.Yasin SAĞLAM
Ar-Ge Mühendisi
R&D Engineer
CRYPTTECH

Yorumlar

  1. Veri setinde bulunan bazı özellikler ,atak ve normal sınıflandırması yaparken hataya sebep olabilir. Her bir özelliğin sınıflandırma üzerindeki ağırlığına bakılarak , ağırlığı az olan özellikler çıkarılıp daha düşük error rate elde edilebilir.Özellik çıkarma işlemi yapıldıktan sonra oluşturulmuş olan model kodunda da değişiklik yapılması gerekmektedir. Böylelikle false positive ve false negative değerleride düşücektir.

    YanıtlaSil
    Yanıtlar
    1. Değerli cevabınız için teşekkür ederiz. Aradığımız cevaba yaklaştığınız için size kitap hediye etmek istiyoruz. Detaylar için bizimle info@crypttech.com adresimiz üzerinden iletişime geçebilirsiniz.

      Sil
  2. Veri setinde kullanılan özelliklerde(attribute), paket içeriğine ait veri bulunmamaktadır.
    Bu sebeple XSS attack, Sql veya Command injection vb. saldırı tiplerinde hatalara sebep olabilmektedir.
    Sadece sayısal veriler kullanılarak, içerikle doğrudan ilişkisi olan saldırı türleri bulunamamaktadır.
    Modeldeki kayıp da buradan kaynaklanmaktadır.

    YanıtlaSil
    Yanıtlar
    1. Doğru cevabınız için tebrik ederiz. Bu alanda kendinizi daha da geliştirmenize katkıda bulunmak amacıyla İstanbul /Ankara ofislerimizden birinde staj imkanı sağlamak için sizi görüşmeye davet ediyoruz. Detaylar için bizimle info@crypttech.com adresimiz üzerinden iletişime geçebilirsiniz.

      Sil
  3. Veri setinde atak ve normal sınıfların dağılımı dengeli değil -> normal örnek sayısı atak örneklerinin 4 katı imiş, bu durumda sinir ağı normal örnekleri iyi öğreniyor ama atakları tespit etmekte yetersiz kalıyor.

    YanıtlaSil
    Yanıtlar
    1. Değerli cevabınız için teşekkür ederiz. Cevaba yönelik gayretinizden dolayı size kitap hediye etmek istiyoruz. Detaylar için bizimle info@crypttech.com adresimiz üzerinden iletişime geçebilirsiniz.

      Sil
  4. Çok açıklayıcı ve anlaşılır bir yazı olmuş.

    YanıtlaSil
    Yanıtlar
    1. Olumlu geri bildiriminiz için teşekkür ederiz.

      Sil

Yorum Gönder

Bu blogdaki popüler yayınlar

1. Geleneksel Stajyer CTF Soru ve Cevapları

B*-Tree (BTree, BPlusTree) Veri Yapısı ile Veri İndeksleme

2. Geleneksel Stajyer CTF Soru ve Cevapları - 2017