👨‍💻İmmune Programming ve NSA Algoritması ile Anomali Tespiti

Giriş: Doğadan İlham Alan Yapay Zeka

Biyolojik sistemler, özellikle insan bağışıklık sistemi, dış tehditlere karşı kendini koruma konusunda son derece gelişmiş mekanizmalara sahiptir. Bu doğal sistemden ilham alarak geliştirilen Immune Programming (Bağışıklık Programlama), yapay zeka ve siber güvenlik alanında kendini gösteren yenilikçi bir yaklaşımdır.

Bu yazıda, Immune Programming’in temel prensiplerini ve Negative Selection Algorithm (NSA) gibi bağışıklık temelli algoritmaların, siber tehditler ve anomali tespiti gibi alanlarda nasıl kullanıldığını detaylı şekilde inceleyeceğiz. Yazının sonunda ise NSA algoritmasıyla gerçekleştirdiğim basit bir anomali tespit uygulamasına yer vereceğim.

 

Immune Programming Nedir?

Immune Programming, biyolojik bağışıklık sisteminin çalışma prensiplerini model alan bir yapay zeka yaklaşımıdır. Özellikle aşağıdaki süreçleri dijital ortama uyarlamayı hedefler:

  • Self / Non-Self Ayırımı: Sistem, kendiyle uyuşan verileri tanır ve onları normal (self) kabul eder. Uyuşmayanlar ise anomali (non-self) olarak değerlendirilir.

  • Negative Selection: Kendine ait olan verileri tanıyabilmek için eğitim sürecinde bu verilere benzeyen detektörleri filtreler.

  • Clonal Selection: Başarılı detektörler çoğaltılır ve mutasyona uğratılarak daha etkili hale getirilir.

  • Immune Memory: Önceden karşılaşılan tehditleri hatırlayarak daha hızlı yanıt verir.

Bu yaklaşım; saldırı tespiti, ağ güvenliği, spam filtreleme, sahtecilik analizi gibi birçok alanda uygulanabilir.

❗Negative Selection Algorithm (NSA) Nedir?

NSA, bağışıklık sisteminin negatif seleksiyon sürecini taklit eder. Temel amacı; sistemin kendine ait olan verileri öğrenerek bu verilere benzeyen dedektörleri reddetmek ve sadece farklı (non-self) verileri tanıyabilen detektörler üretmektir.

NSA’nın Aşamaları:

  1. Normal Veri Kümesi (Self) Tanımlanır: Eğitim sırasında sadece normal (beklenen) veriler kullanılır.

  2. Rastgele Detektörler Oluşturulur: Bu detektörler veri kümesinden bağımsız şekilde oluşturulur.

  3. Eşleşme Kontrolü: Eğer detektör, herhangi bir normal veriyle eşleşirse (benzerlik ölçütüne göre), o detektör elenir.

  4. Anomali Tespiti: Filtrelenen detektörler, daha sonra sisteme gelen yeni verileri test eder. Eşleşme sağlanırsa, bu bir anomalidir.

Avantajları:

  • Eğitimi sadece normal verilerle yapılır (etiketli anomali verisine ihtiyaç duymaz).

  • Düşük kaynakla çalışabilir.

  • Açıklanabilirliği yüksektir.

🔧 Kullanılan Teknolojiler ve Eşleşme Metodolojisi

Projede, Python programlama dili ile birlikte bazı temel kütüphaneler kullanılmıştır:

  • NumPy: Sayısal veri üretimi ve vektörel işlemler için kullanılmıştır.

  • random: Rastgele detektör değerleri üretmek için kullanılmıştır.

  • matplotlib: Tespit edilen anomali verilerini grafiksel olarak göstermek amacıyla kullanılmıştır.

🧮 Eşleşme Ölçütü: Mutlak Fark (Threshold Tabanlı Karar)

Detektörlerin yeni gelen verileri “anomalidir” şeklinde işaretleyebilmesi için kullanılan temel karşılaştırma ölçütü, mutlak farktır. Yani, yeni gelen verinin bir detektöre olan uzaklığı, belirli bir eşik değerden (threshold) küçükse, bu veri anomali olarak değerlendirilir.

Matematiksel olarak:

Eğer |x - d| ≤ t ise → x anomalidir
Burada:

  • x: Gelen yeni veri,

  • d: Detektör değeri,

  • t: Eşik değer (örneğin 5)

Bu yaklaşım oldukça basit ve açıklanabilir olup, düşük işlem maliyeti ile hızlı karar verebilen bir yöntemdir. Özellikle gerçek zamanlı siber güvenlik uygulamalarında tercih edilir.

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# --- 1. Veri Yükleme ve Ön İşleme ---
df = pd.read_csv("dataset/NSL-KDD.csv", header=None)

column_names = [
    'duration', 'protocol_type', 'service', 'flag', 'src_bytes', 'dst_bytes',
    'land', 'wrong_fragment', 'urgent', 'hot', 'num_failed_logins', 'logged_in',
    'num_compromised', 'root_shell', 'su_attempted', 'num_root', 'num_file_creations',
    'num_shells', 'num_access_files', 'num_outbound_cmds', 'is_host_login',
    'is_guest_login', 'count', 'srv_count', 'serror_rate', 'srv_serror_rate',
    'rerror_rate', 'srv_rerror_rate', 'same_srv_rate', 'diff_srv_rate', 'srv_diff_host_rate',
    'dst_host_count', 'dst_host_srv_count', 'dst_host_same_srv_rate',
    'dst_host_diff_srv_rate', 'dst_host_same_src_port_rate', 'dst_host_srv_diff_host_rate',
    'dst_host_serror_rate', 'dst_host_srv_serror_rate', 'dst_host_rerror_rate',
    'dst_host_srv_rerror_rate', 'label', 'difficulty_level'
]
df.columns = column_names

for col in ['protocol_type', 'service', 'flag']:
    df[col] = LabelEncoder().fit_transform(df[col])

le_label = LabelEncoder()
df['label'] = le_label.fit_transform(df['label'])
normal_label = le_label.transform(['normal'])[0]
y_binary = (df['label'] != normal_label).astype(int)

X = df.drop(['label', 'difficulty_level'], axis=1)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_binary, test_size=0.3, random_state=42)
X_normal = X_train[y_train == 0]

# PCA bir kez hesaplanır (X_test sabit çünkü)
pca = PCA(n_components=2)
X_test_pca = pca.fit_transform(X_test)

# --- K-Means NSA ---
def kmeans_nsa(threshold=3.0, num_detectors=3000):
    print(f"\n=== K-Means NSA: Threshold={threshold}, Detektör Sayısı={num_detectors} ===")
    kmeans = KMeans(n_clusters=num_detectors, random_state=42, n_init=10)
    kmeans.fit(X_normal)
    detectors = kmeans.cluster_centers_

    def is_anomaly(sample):
        distances = np.linalg.norm(detectors - sample, axis=1)
        return 0 if np.min(distances) < threshold else 1

    y_pred = np.array([is_anomaly(s) for s in X_test])

    acc = accuracy_score(y_test, y_pred)
    prec = precision_score(y_test, y_pred, zero_division=1)
    rec = recall_score(y_test, y_pred, zero_division=1)
    f1 = f1_score(y_test, y_pred, zero_division=1)

    print(f"Accuracy: {acc:.4f}")
    print(f"Precision: {prec:.4f}")
    print(f"Recall: {rec:.4f}")
    print(f"F1 Score: {f1:.4f}")

    # PCA Görselleştirme
    plt.figure(figsize=(10, 6))
    plt.scatter(X_test_pca[y_test == 0][:, 0], X_test_pca[y_test == 0][:, 1], c='green', label='Normal', alpha=0.5, s=10)
    plt.scatter(X_test_pca[y_test == 1][:, 0], X_test_pca[y_test == 1][:, 1], c='red', label='Gerçek Anomali', alpha=0.5, s=10)
    plt.scatter(X_test_pca[y_pred == 1][:, 0], X_test_pca[y_pred == 1][:, 1], c='blue', label='Tespit Edilen Anomali', alpha=0.3, s=8)
    plt.title(f'K-Means NSA – PCA\nThreshold={threshold}, Detektör={num_detectors}')
    plt.xlabel('PCA Bileşeni 1')
    plt.ylabel('PCA Bileşeni 2')
    plt.legend()
    plt.grid(True)
    plt.tight_layout()
    plt.show()

# --- Random NSA ---
def generate_random_detectors(X_normal, num_detectors=1000, min_dist=0.5, max_attempts=10000):
    detectors = []
    attempts = 0
    n_features = X_normal.shape[1]
    while len(detectors) < num_detectors and attempts < max_attempts:
        rand_vector = np.random.uniform(low=-3, high=3, size=n_features)
        distances = np.linalg.norm(X_normal - rand_vector, axis=1)
        if np.min(distances) > min_dist:
            detectors.append(rand_vector)
        attempts += 1
    return np.array(detectors)

def random_nsa(threshold=3.0, num_detectors=1000):
    print(f"\n=== Random NSA: Threshold={threshold}, Detektör Sayısı={num_detectors} ===")
    detectors = generate_random_detectors(X_normal, num_detectors=num_detectors)

    def is_anomaly(sample):
        distances = np.linalg.norm(detectors - sample, axis=1)
        return 0 if np.min(distances) < threshold else 1

    y_pred = np.array([is_anomaly(s) for s in X_test])

    acc = accuracy_score(y_test, y_pred)
    prec = precision_score(y_test, y_pred, zero_division=1)
    rec = recall_score(y_test, y_pred, zero_division=1)
    f1 = f1_score(y_test, y_pred, zero_division=1)

    print(f"Accuracy: {acc:.4f}")
    print(f"Precision: {prec:.4f}")
    print(f"Recall: {rec:.4f}")
    print(f"F1 Score: {f1:.4f}")



# --- Deneyleri Çalıştır ---
thresholds = [2.5, 3.0]
detector_counts = [1000, 3000]

for t in thresholds:
    for n in detector_counts:
        kmeans_nsa(threshold=t, num_detectors=n)

for t in thresholds:
    for n in [1000, 2000]:
        random_nsa(threshold=t, num_detectors=n)

exit()

Immune Tabanlı Anomali Tespitinin Etkililiği ve Geleceği

 

Staj sürecimde gerçekleştirdiğim uygulama, yalnızca normal (self) verilerle eğitilen bir sistemin, Negative Selection Algorithm (NSA) sayesinde beklenmeyen (non-self) anomali verilerini başarıyla tespit edebildiğini göstermiştir. Bu yaklaşımın en dikkat çekici yönlerinden biri, etiketlenmiş anomali verisine ihtiyaç duymadan çalışabilmesidir. Bu özellik, özellikle büyük veri ortamlarında ve dinamik ağ sistemlerinde önemli bir avantaj sağlar.

NSA algoritmasının kullandığı detektörler, sistemin kendisine benzeyen örnekleri filtreleyerek yalnızca “farklı” olanlara odaklanır. Bu sayede, bilinen tehditlerin dışında kalan yeni ve bilinmeyen anomalileri de tespit edebilme potansiyeline sahiptir. Uygulamada kullanılan eşleşme kriteri basit bir mutlak fark (|x - y| < threshold) olsa da, bu temel mantıkla geliştirilen detektörlerin anomali tespit başarısı oldukça yüksektir.

Ayrıca, bu sistem düşük hesaplama kaynağı ile çalışabildiği için gömülü sistemler, IoT cihazları ve sınırlı donanıma sahip ortamlarda da uygulanabilir. Bu durum, Immune Programming yaklaşımlarının yalnızca teoride değil, gerçek dünya uygulamalarında da işlevsel olduğunu kanıtlar niteliktedir.

Gelecekte, bu tür bağışıklık tabanlı algoritmalar; makine öğrenmesi, derin öğrenme ve davranışsal analiz yöntemleriyle entegre edilerek çok daha gelişmiş siber güvenlik sistemleri oluşturulabilir. Özellikle, sıfır gün saldırıları ve daha önce hiç görülmemiş anormalliklerin tespiti gibi karmaşık senaryolarda immune computing tabanlı sistemler, proaktif savunma stratejilerinin ana bileşeni haline gelebilir.

Bu küçük çaplı uygulama, bağışıklık sisteminden ilham alan yapay zeka algoritmalarının ne kadar esnek, uyarlanabilir ve etkili olduğunu deneyimleyerek gözlemlememi sağladı.

 

Burak Lorascan