---
# System prepended metadata

title: Modul 3

---

# Intrusion Detection System (IDS) with AI Part I

## Tujuan
1. Peserta mengetahui cara melihat serangan dari data
2. Peserta memahami data preparation dasar
3. Peserta memahami konsep 

## 1. Data Dalam Cyber Security
Dalam dunia cybersecurity modern, data adalah “senjata utama” sekaligus “bahan bakar” bagi sistem deteksi ancaman. Hampir semua sistem keamanan jaringan, baik tradisional maupun berbasis Machine Learning (ML), bergantung pada data untuk mendeteksi, menganalisis, dan memahami pola serangan.

Tanpa data, sistem deteksi ibarat dokter tanpa hasil pemeriksaan pasien — tidak tahu apa yang sedang terjadi di dalam jaringan. Dengan kata lain, semakin banyak dan semakin baik kualitas data yang dikumpulkan, semakin efektif pula sistem pertahanan yang dapat dibangun.

Data dalam konteks keamanan jaringan bisa berasal dari berbagai sumber, misalnya:

* Log sistem: mencatat aktivitas login, error, atau perubahan konfigurasi. 
* Network traffic: paket data yang keluar-masuk jaringan.
* Application logs: permintaan API, error server, atau aktivitas pengguna. 
* IDS alerts: hasil deteksi dari Snort, Suricata, atau sistem lain.
 
Dari data tersebut, analis keamanan bisa mencari tahu apa yang terjadi, kapan, dari mana asalnya, dan apakah aktivitas tersebut normal atau berbahaya.

Dalam analisis jaringan dan IDS, kita biasanya bekerja dengan dua jenis data utama:

| Jenis Data                | Deskripsi                                                                                                         | Kelebihan                                                                   | Kekurangan                                                              |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| **Packet Capture (PCAP)** | Berisi semua paket data mentah yang lewat di jaringan, termasuk header dan payload.                               | Detail sangat lengkap, bisa menganalisis konten serangan sampai level byte. | Ukuran file besar, butuh waktu dan sumber daya untuk analisis.          |
| **Flow Data**             | Ringkasan aktivitas jaringan per sesi komunikasi (source IP, dest IP, port, protocol, byte count, duration, dsb). | Lebih ringan dan efisien, cocok untuk analisis skala besar dan real-time.   | Tidak menyimpan payload, jadi sulit melihat isi serangan secara detail. |


## 2. Dataset IDS
Dataset pada IDS akan menjadi “bahan latihan” agar model dapat memahami seperti apa bentuk lalu lintas normal dan bagaimana pola lalu lintas yang mengandung serangan. Secara umum, dataset IDS berisi rekaman lalu lintas jaringan (network flow atau packet capture) yang sudah dilabeli dengan kategori:

- Normal traffic – aktivitas jaringan yang sah dan tidak berbahaya.
- Attack traffic – lalu lintas jaringan yang mengandung pola serangan tertentu.

Beberapa dataset IDS modern yang paling sering digunakan dalam penelitian dan pembelajaran adalah CICIDS2017 dan UNSW-NB15.

### 2.1 CICIDS2017
CICIDS2017 (Canadian Institute for Cybersecurity Intrusion Detection System Dataset 2017) merupakan dataset IDS yang dikembangkan oleh Canadian Institute for Cybersecurity bekerja sama dengan Communications Security Establishment (CSE). Dataset ini menjadi salah satu dataset paling populer untuk pelatihan dan evaluasi model IDS berbasis Machine Learning karena memiliki data yang lengkap dan realistis.

Jenis Serangan yang Terdapat dalam CICIDS2017:

| Kategori Serangan           | Contoh Attack                          | Deskripsi Singkat                                                         |
| --------------------------- | -------------------------------------- | ------------------------------------------------------------------------- |
| **DoS (Denial of Service)** | DoS Hulk, DoS GoldenEye, DoS Slowloris | Serangan untuk membanjiri server target hingga tidak bisa merespons.      |
| **DDoS (Distributed DoS)**  | DDoS LOIC HTTP                         | Serangan terdistribusi dari banyak sumber IP.                             |
| **Brute Force**             | SSH dan FTP Brute Force                | Percobaan login berulang kali dengan kombinasi username/password berbeda. |
| **Web Attack**              | SQL Injection, XSS, Command Injection  | Serangan melalui protokol HTTP untuk mengeksploitasi web server.          |
| **Infiltration**            | Portscan, Botnet Infiltration          | Aktivitas pemindaian atau komunikasi berbahaya antar host.                |
| **Heartbleed**              | Heartbleed SSL exploit                 | Eksploitasi kelemahan SSL untuk mencuri informasi sensitif.               |

Beberapa fitur penting yang terdapat di dalamnya antara lain:
* Flow Duration – durasi komunikasi antara source dan destination.
* Total Fwd/Bwd Packets – jumlah paket yang dikirim dari dua arah.
* Flow Bytes/s – kecepatan aliran data.
* Packet Length Mean – rata-rata panjang paket.
* Flow IAT Mean – rata-rata jeda antar paket.
* Fwd Header Length, Bwd Header Length, dll.

### 2.2 UNSW-NB15
UNSW-NB15 merupakan dataset IDS yang dikembangkan oleh Australian Centre for Cyber Security (ACCS) pada tahun 2015. Dataset ini dirancang untuk memperbaiki kelemahan dataset klasik seperti KDD99 dan NSL-KDD dengan menyediakan lalu lintas jaringan yang lebih realistis, modern, dan beragam.

Jenis Serangan dalam UNSW-NB15:
| Kategori Serangan           | Deskripsi Singkat                                               |
| --------------------------- | --------------------------------------------------------------- |
| **Fuzzers**                 | Pengujian input acak untuk memunculkan crash sistem.            |
| **Analysis**                | Aktivitas scanning atau probing untuk mencari celah.            |
| **Backdoors**               | Pembuatan koneksi tersembunyi ke sistem target.                 |
| **DoS (Denial of Service)** | Mencegah layanan berjalan normal dengan membanjiri traffic.     |
| **Exploits**                | Upaya memanfaatkan celah aplikasi untuk mendapatkan akses.      |
| **Generic**                 | Serangan terhadap enkripsi atau hash umum.                      |
| **Reconnaissance**          | Pemindaian IP, port, atau service untuk mengumpulkan informasi. |
| **Shellcode**               | Payload berbahaya yang digunakan untuk kontrol jarak jauh.      |
| **Worms**                   | Penyebaran malware otomatis melalui jaringan.                   |

UNSW-NB15 memiliki fitur yang lebih terstruktur dan kaya konteks dibanding dataset lama.
Beberapa contoh fitur utamanya antara lain:
* srcip, dstip, sport, dsport – alamat dan port komunikasi.
* proto – protokol yang digunakan (TCP, UDP, ICMP, dll).
* dur – durasi koneksi.
* sbytes, dbytes – jumlah byte dari source dan destination.
* state – status koneksi.
* sttl, dttl – time-to-live dari dua arah komunikasi.
* attack_cat – kategori serangan.
* label – 0 untuk normal, 1 untuk attack


## 3. Data Preparation Untuk IDS
Sebelum model Machine Learning bisa mengenali serangan, data harus terlebih dahulu “dibersihkan” dan disiapkan agar dapat dipahami oleh algoritma. Tahapan ini disebut data preparation atau data preprocessing. Proses ini sangat penting karena kualitas data akan langsung memengaruhi kualitas hasil deteksi serangan.
### 3.1 Cleaning
Langkah pertama adalah menghapus data yang tidak relevan, tidak lengkap, atau rusak.
Contoh umum:
-    Kolom seperti **Source IP**, **Destination IP**, atau **Timestamp** sering dihapus karena tidak memiliki pola statistik yang stabil.
-    Data dengan nilai kosong (**NaN**) dihapus atau diganti dengan nilai rata-rata (mean/median).
-    Duplikasi baris juga harus dihapus agar model tidak bias.

Pertahankan kolom yang benar-benar memiliki makna statistik dan berhubungan dengan perilaku trafik.

### 3.2 Encoding
Sebagian data IDS bersifat kategorikal (misalnya kolom protocol_type: **TCP**, **UDP**, **ICMP**).
Model ML tidak bisa langsung membaca teks, jadi perlu dikonversi ke angka.

Metode umum:
- Label Encoding: mengganti setiap kategori dengan angka unik (contoh: **TCP=0**, **UDP=1**, **ICMP=2**).
- One-Hot Encoding: membuat kolom baru untuk setiap kategori dengan nilai 0/1 (lebih akurat untuk data non-hierarkis).
```python
import pandas as pd

# Contoh data
data = pd.DataFrame({
    'protocol_type': ['TCP', 'UDP', 'ICMP', 'TCP', 'UDP'],
    'packet_count': [10, 15, 3, 8, 20]
})

# One-hot encoding
encoded = pd.get_dummies(data, columns=['protocol_type'])
print(encoded)
```



| packet_count |  protocol_type_TCP | protocol_type_UDP |protocol_type_ICMP|
| -------- | -------- | -------- |--------|
| 10     | 1     | 0     |    0    |
| 15     | 0     | 1     |    0    |
| 13     | 0     | 0     |    1    |
| 18     | 1     | 0     |    0    |
| 20     | 0     | 1     |    0    |

note : Ketika nilainya 1 artinya ada protokol tersebut sebanyak ```packet_count``` dan 0 sebaliknya

### 3.3 Normalization/Scaling
Fitur numerik seperti packet_count, duration, dan byte_rate sering memiliki rentang nilai yang sangat berbeda.
Contoh: duration bisa ratusan detik, sedangkan packet_count hanya puluhan.

Jika tidak dinormalisasi, fitur dengan nilai besar akan mendominasi model.
Beberapa contoh metode:
- MinMaxScaler: skala ke rentang [0,1].
```python
from sklearn.preprocessing import MinMaxScaler
import pandas as pd

data = pd.DataFrame({
    'duration': [1, 10, 100, 500],
    'packet_count': [20, 50, 100, 200]
})

scaler = MinMaxScaler()
scaled = scaler.fit_transform(data)
scaled_df = pd.DataFrame(scaled, columns=data.columns)
print(scaled_df)
```



| duration | packet_count | 
| -------- | -------- |
| 0.0000     |  0.0000     | 
| 0.0180     |  0.1667     | 
| 0.1980     |   0.4444     | 
| 1.0000      |  1.0000     | 


Artinya :
- Nilai terkecil jadi 0
- Nilai terbesar jadi 1
- Nilai di antaranya akan diskalakan secara proporsional.

-----
- StandardScaler: ubah distribusi menjadi mean=0, std=1.

```python
from sklearn.preprocessing import StandardScaler
import pandas as pd

data = pd.DataFrame({
    'duration': [1, 10, 100, 500],
    'packet_count': [20, 50, 100, 200]
})

scaler = StandardScaler()
scaled = scaler.fit_transform(data)
scaled_df = pd.DataFrame(scaled, columns=data.columns)
print(scaled_df)
```
Hasil (mean = 0, std = 1):



| duration | packet_count |  
| -------- | -------- | 
| -0.69     |   -1.05   | 
| -0.67     | -0.60     | 
| -0.29     | -0.06     | 
| 1.65     | 1.70     | 


Artinya:
- Nilai di bawah rata-rata → negatif
- Nilai di atas rata-rata → positif
- Distribusi jadi “terpusat” di nol.
- Jika ≈ 0 : Data mendekati rata-rata


### 3.4 Train/Test Split
Setelah data siap, dataset dibagi dua:
- Training set (≈70–80%) untuk melatih model.
- Testing set (≈20–30%) untuk mengevaluasi performa model terhadap data baru.

Tujuan pembagian ini supaya model itu bukan seperti “hafal” data lama, tetapi bisa mendeteksi serangan baru (generalization).

### 3.5 Class Imbalance
Banyak dataset IDS memiliki rasio tidak seimbang antara trafik normal dan serangan (contoh: 90% normal, 10% attack).
Hal ini bisa menyebabkan model “terlalu baik” mendeteksi normal, tapi gagal mendeteksi serangan langka.

Solusi yang bisa diterapkan :
- Oversampling: menambah jumlah data serangan (contoh: SMOTE).
Contoh:
```python
from imblearn.over_sampling import SMOTE
from collections import Counter
import pandas as pd

# Contoh data sederhana
X = pd.DataFrame({'duration': [10, 15, 20, 25, 100, 110],
                  'packet_rate': [50, 60, 55, 58, 400, 420]})
y = [0, 0, 0, 0, 1, 1]  # 0=normal, 1=attack

print("Sebelum:", Counter(y))
sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)
print("Sesudah:", Counter(y_res))
```
Hasil :

```python
Sebelum: Counter({0: 4, 1: 2})
Sesudah: Counter({0: 4, 1: 4})
```
SMOTE menambah data kelas minoritas (attack) hingga seimbang.
- Undersampling: mengurangi data normal.
- Weight adjustment: menambah bobot penalti untuk kelas yang jumlahnya lebih sedikit.

```python
from sklearn.linear_model import LogisticRegression
from sklearn.utils.class_weight import compute_class_weight
import numpy as np

y = np.array([0, 0, 0, 0, 0, 1, 1])  # Imbalance data

# Hitung bobot otomatis
weights = compute_class_weight(class_weight='balanced', classes=np.unique(y), y=y)
print("Bobot kelas:", dict(zip(np.unique(y), weights)))

# Terapkan ke model
model = LogisticRegression(class_weight='balanced')
model.fit(X, y)
```
hasil
```python
Bobot kelas: {0: 0.7, 1: 1.75}
```


## 4. Feature Engineering 
Setelah data bersih, langkah berikutnya adalah membuat fitur, yaitu representasi numerik yang menggambarkan perilaku trafik jaringan.

### 4.1 Apa itu Fitur?
Fitur adalah atribut terukur dari data yang digunakan model untuk mengenali pola.
Contoh : 
- duration = lama sesi koneksi (detik)
- packet_count = jumlah paket yang dikirim
- byte_rate = jumlah byte per detik
- flow_duration = selisih waktu antara paket pertama dan terakhir
- src_bytes, dst_bytes = byte yang dikirim oleh sumber/tujuan
Setiap fitur membawa sinyal tentang aktivitas jaringan.

### 4.2 Bagaimana Fitur Memisahkan Normal vs Serangan
Fitur berfungsi sebagai pembeda antara perilaku normal dan abnormal.
Contoh:
- DoS Attack: packet_rate sangat tinggi dalam waktu singkat.
- Brute Force Attack: banyak koneksi gagal dari IP yang sama.
- Port Scan: jumlah koneksi ke port berbeda meningkat drastis.

Dengan fitur yang tepat, model bisa mengenali pola anomali bahkan tanpa “melihat” isi paket.

### 4.3 Visualisasi Pola Serangan
Sebelum melatih model, visualisasi fitur membantu memahami pola.
Beberapa teknik visual sederhana:
- Histogram: melihat distribusi nilai (contoh: packet_count DoS jauh lebih tinggi dari normal).
- Scatter Plot: membandingkan dua fitur (contoh: duration vs byte_rate untuk memisahkan normal dan attack).
- Box Plot: menunjukkan outlier (contoh: traffic DoS memiliki outlier ekstrem).

Visualisasi bukan hanya untuk estetika tapi membantu menjelaskan kenapa model bisa mendeteksi serangan.