Difference between revisions of "KI: PRAKTEK 9: Serangan terhadap AI"
Onnowpurbo (talk | contribs) (Created page with " PRAKTEK 9: Serangan terhadap AI Fokus modul ini adalah membongkar asumsi “AI selalu benar”. Mahasiswa diajak hands-on melihat sendiri bagaimana model AI bisa ditipu, dima...") |
Onnowpurbo (talk | contribs) |
||
| Line 1: | Line 1: | ||
| + | Fokus modul ini adalah membongkar asumsi “AI selalu benar”. Mahasiswa diajak hands-on melihat sendiri bagaimana model AI bisa ditipu, dimanipulasi, dan disesatkan, bahkan dengan perubahan kecil yang tidak terlihat oleh manusia. | ||
| − | |||
| − | |||
Seluruh praktik menggunakan Linux Ubuntu 24.04, Python, dan open-source software. Tidak ada black box, tidak ada proprietary tools. | Seluruh praktik menggunakan Linux Ubuntu 24.04, Python, dan open-source software. Tidak ada black box, tidak ada proprietary tools. | ||
| − | Tujuan | + | |
| + | ==Tujuan== | ||
Setelah menyelesaikan modul ini, mahasiswa mampu: | Setelah menyelesaikan modul ini, mahasiswa mampu: | ||
| − | Memahami kelemahan fundamental sistem AI | + | * Memahami kelemahan fundamental sistem AI |
| − | Menjelaskan konsep adversarial example dan data poisoning | + | * Menjelaskan konsep adversarial example dan data poisoning |
| − | Mensimulasikan serangan nyata terhadap model AI | + | * Mensimulasikan serangan nyata terhadap model AI |
| − | Menganalisis perubahan output akibat manipulasi input/data | + | * Menganalisis perubahan output akibat manipulasi input/data |
| − | Menyadari bahwa AI adalah sistem statistik, bukan sistem kebenaran | + | * Menyadari bahwa AI adalah sistem statistik, bukan sistem kebenaran |
Pesan kunci: | Pesan kunci: | ||
| − | AI bisa salah — dan kesalahan itu bisa direkayasa. | + | AI bisa salah — dan kesalahan itu bisa direkayasa. |
| − | Konsep Inti (Fundamental yang Wajib Dipahami) | + | |
| − | Adversarial Example | + | ==Konsep Inti (Fundamental yang Wajib Dipahami)== |
| + | |||
| + | ===Adversarial Example=== | ||
| + | |||
Adversarial example adalah input yang dimodifikasi sangat kecil, sering kali tidak terlihat oleh manusia, tetapi mengubah prediksi AI secara drastis. | Adversarial example adalah input yang dimodifikasi sangat kecil, sering kali tidak terlihat oleh manusia, tetapi mengubah prediksi AI secara drastis. | ||
| + | |||
Contoh dunia nyata: | Contoh dunia nyata: | ||
| − | Gambar rambu STOP → AI membaca Speed Limit | + | * Gambar rambu STOP → AI membaca Speed Limit |
| − | Email normal → diklasifikasikan sebagai spam | + | * Email normal → diklasifikasikan sebagai spam |
| − | Teks biasa → lolos sensor moderasi | + | * Teks biasa → lolos sensor moderasi |
👉 Masalahnya bukan bug, tetapi cara AI belajar dari pola statistik. | 👉 Masalahnya bukan bug, tetapi cara AI belajar dari pola statistik. | ||
| − | Data Poisoning | + | |
| + | ===Data Poisoning=== | ||
Data poisoning adalah serangan sebelum AI digunakan, yaitu dengan merusak data latih (training data). | Data poisoning adalah serangan sebelum AI digunakan, yaitu dengan merusak data latih (training data). | ||
| + | |||
Contoh nyata: | Contoh nyata: | ||
| − | Dataset wajah diberi label salah | + | * Dataset wajah diberi label salah |
| − | Review palsu dimasukkan ke data rekomendasi | + | * Review palsu dimasukkan ke data rekomendasi |
| − | Data sensor dimanipulasi sebelum pelatihan | + | * Data sensor dimanipulasi sebelum pelatihan |
👉 Jika data rusak, model secanggih apa pun akan rusak. | 👉 Jika data rusak, model secanggih apa pun akan rusak. | ||
| − | Tools yang Digunakan | + | |
| + | ==Tools yang Digunakan== | ||
Semua tools bersifat open source: | Semua tools bersifat open source: | ||
| − | Ubuntu Linux 24.04 | + | * Ubuntu Linux 24.04 |
| − | Python 3.12 | + | * Python 3.12 |
| − | scikit-learn | + | * scikit-learn |
| − | NumPy | + | * NumPy |
| − | Jupyter Notebook | + | * Jupyter Notebook |
| − | (opsional) Matplotlib untuk visualisasi | + | * (opsional) Matplotlib untuk visualisasi |
| − | Praktikum Lengkap (Step-by-Step) | + | |
| − | Bagian A — Setup Lingkungan | + | ==Praktikum Lengkap (Step-by-Step)== |
| + | |||
| + | ===Bagian A — Setup Lingkungan=== | ||
| + | |||
| + | sudo apt update | ||
| + | sudo apt install python3 python3-pip python3-venv -y | ||
| − | |||
| − | |||
Buat virtual environment: | Buat virtual environment: | ||
| − | python3 -m venv ai-attack-env | + | |
| − | source ai-attack-env/bin/activate | + | python3 -m venv ai-attack-env |
| + | source ai-attack-env/bin/activate | ||
| + | |||
Install library: | Install library: | ||
| − | pip install numpy scikit-learn matplotlib jupyter | + | |
| − | Bagian B — Train Model AI Sederhana | + | pip install numpy scikit-learn matplotlib jupyter |
| + | |||
| + | ===Bagian B — Train Model AI Sederhana=== | ||
| + | |||
Kita mulai dari model yang “benar” dan “bersih”. | Kita mulai dari model yang “benar” dan “bersih”. | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | ====Dataset & Model==== | |
| − | |||
| − | |||
| − | # Split | + | from sklearn.datasets import load_iris |
| − | X_train, X_test, y_train, y_test = train_test_split( | + | from sklearn.model_selection import train_test_split |
| − | + | from sklearn.linear_model import LogisticRegression | |
| − | ) | + | from sklearn.metrics import accuracy_score |
| + | |||
| + | # Load dataset | ||
| + | data = load_iris() | ||
| + | X, y = data.data, data.target | ||
| + | |||
| + | # Split | ||
| + | X_train, X_test, y_train, y_test = train_test_split( | ||
| + | X, y, test_size=0.2, random_state=42 | ||
| + | ) | ||
| + | |||
| + | # Train model | ||
| + | model = LogisticRegression(max_iter=200) | ||
| + | model.fit(X_train, y_train) | ||
| + | |||
| + | # Evaluate | ||
| + | y_pred = model.predict(X_test) | ||
| + | print("Accuracy:", accuracy_score(y_test, y_pred)) | ||
| − | + | Catatan Penting: | |
| − | + | Model ini tidak salah. Ia bekerja sesuai statistik. | |
| − | |||
| − | + | ===Bagian C — Adversarial Example (Serangan Input)=== | |
| − | + | ||
| − | + | ====Tujuan==== | |
| − | |||
| − | |||
| − | Bagian C — Adversarial Example (Serangan Input) | ||
| − | Tujuan | ||
Membuktikan bahwa perubahan kecil bisa menipu AI. | Membuktikan bahwa perubahan kecil bisa menipu AI. | ||
| − | |||
| − | |||
| − | sample = X_test[0] | + | ====Ambil Satu Data Uji==== |
| − | label = y_test[0] | + | import numpy as np |
| + | |||
| + | sample = X_test[0] | ||
| + | label = y_test[0] | ||
| + | |||
| + | print("Original prediction:", model.predict([sample])) | ||
| + | print("True label:", label) | ||
| − | |||
| − | |||
Manipulasi Input Secara Halus | Manipulasi Input Secara Halus | ||
| − | # Tambahkan noise kecil | + | # Tambahkan noise kecil |
| − | epsilon = 0.1 | + | epsilon = 0.1 |
| − | adversarial_sample = sample + epsilon * np.sign(sample) | + | adversarial_sample = sample + epsilon * np.sign(sample) |
| + | |||
| + | print("Adversarial prediction:", model.predict([adversarial_sample])) | ||
| − | |||
Yang terjadi: | Yang terjadi: | ||
| − | Secara visual: data hampir sama | + | * Secara visual: data hampir sama |
| − | Secara matematis: AI membaca berbeda | + | * Secara matematis: AI membaca berbeda |
| + | |||
Diskusi Kritis | Diskusi Kritis | ||
| − | Apakah manusia bisa melihat perbedaannya? ❌ | + | * Apakah manusia bisa melihat perbedaannya? ❌ |
| − | Apakah AI berubah keputusan? ✅ | + | * Apakah AI berubah keputusan? ✅ |
| − | Apakah ini bug? ❌ | + | * Apakah ini bug? ❌ |
| − | Apakah ini kelemahan desain AI? ✅ | + | * Apakah ini kelemahan desain AI? ✅ |
| + | |||
| + | ===Bagian D — Data Poisoning (Serangan Data Training)=== | ||
| − | + | ====Tujuan==== | |
| − | Tujuan | ||
Menunjukkan bahwa AI bisa “dibohongi” sejak awal pelatihan. | Menunjukkan bahwa AI bisa “dibohongi” sejak awal pelatihan. | ||
| − | |||
| − | + | ====Racuni Dataset==== | |
| − | # Salin data latih | + | import random |
| − | X_poisoned = X_train.copy() | + | |
| − | y_poisoned = y_train.copy() | + | # Salin data latih |
| + | X_poisoned = X_train.copy() | ||
| + | y_poisoned = y_train.copy() | ||
| + | |||
| + | # Ubah label secara acak | ||
| + | for i in random.sample(range(len(y_poisoned)), 10): | ||
| + | y_poisoned[i] = (y_poisoned[i] + 1) % 3 | ||
| − | + | ====Train Model dengan Data Rusak==== | |
| − | |||
| − | |||
| − | Train Model dengan Data Rusak | ||
| − | poisoned_model = LogisticRegression(max_iter=200) | + | poisoned_model = LogisticRegression(max_iter=200) |
| − | poisoned_model.fit(X_poisoned, y_poisoned) | + | poisoned_model.fit(X_poisoned, y_poisoned) |
| + | |||
| + | y_pred_poisoned = poisoned_model.predict(X_test) | ||
| + | print("Accuracy poisoned model:", accuracy_score(y_test, y_pred_poisoned)) | ||
| − | |||
| − | |||
Hasil: | Hasil: | ||
| − | Akurasi turun, tetapi AI tidak tahu bahwa ia sedang salah. | + | Akurasi turun, tetapi AI tidak tahu bahwa ia sedang salah. |
| − | Bagian E — Analisis & Refleksi | + | |
| + | ===Bagian E — Analisis & Refleksi=== | ||
Apa yang Dipelajari Mahasiswa? | Apa yang Dipelajari Mahasiswa? | ||
| − | AI tidak memahami makna, hanya pola | + | * AI tidak memahami makna, hanya pola |
| − | Perubahan kecil → dampak besar | + | * Perubahan kecil → dampak besar |
| − | Kualitas data lebih penting dari algoritma | + | * Kualitas data lebih penting dari algoritma |
| − | Serangan AI murah dan mudah dilakukan | + | * Serangan AI murah dan mudah dilakukan |
| − | Output Praktikum (Wajib Dikumpulkan) | + | ==Output Praktikum (Wajib Dikumpulkan)== |
Mahasiswa menyerahkan: | Mahasiswa menyerahkan: | ||
| − | Notebook Jupyter | + | |
| − | Training normal | + | * Notebook Jupyter |
| − | Adversarial example | + | ** Training normal |
| − | Data poisoning | + | ** Adversarial example |
| − | Analisis singkat (1–2 halaman): | + | ** Data poisoning |
| − | Bagian mana yang paling berbahaya? | + | |
| − | Mana yang lebih sulit dideteksi? | + | * Analisis singkat (1–2 halaman): |
| − | Implikasi untuk AI di pemerintahan / industri? | + | ** Bagian mana yang paling berbahaya? |
| − | Insight Penutup (Inspiratif) | + | ** Mana yang lebih sulit dideteksi? |
| − | AI bukan masalahnya. | + | ** Implikasi untuk AI di pemerintahan / industri? |
| − | Cara kita mempercayainya tanpa verifikasi — itulah masalahnya. | + | |
| + | ==Insight Penutup (Inspiratif)== | ||
| + | AI bukan masalahnya. | ||
| + | Cara kita mempercayainya tanpa verifikasi — itulah masalahnya. | ||
| + | |||
Modul ini membekali mahasiswa mindset security-first: | Modul ini membekali mahasiswa mindset security-first: | ||
| − | Jangan percaya output AI | + | * Jangan percaya output AI |
| − | Selalu audit data | + | * Selalu audit data |
| − | Selalu uji asumsi | + | * Selalu uji asumsi |
Latest revision as of 18:21, 23 January 2026
Fokus modul ini adalah membongkar asumsi “AI selalu benar”. Mahasiswa diajak hands-on melihat sendiri bagaimana model AI bisa ditipu, dimanipulasi, dan disesatkan, bahkan dengan perubahan kecil yang tidak terlihat oleh manusia.
Seluruh praktik menggunakan Linux Ubuntu 24.04, Python, dan open-source software. Tidak ada black box, tidak ada proprietary tools.
Tujuan
Setelah menyelesaikan modul ini, mahasiswa mampu:
- Memahami kelemahan fundamental sistem AI
- Menjelaskan konsep adversarial example dan data poisoning
- Mensimulasikan serangan nyata terhadap model AI
- Menganalisis perubahan output akibat manipulasi input/data
- Menyadari bahwa AI adalah sistem statistik, bukan sistem kebenaran
Pesan kunci:
AI bisa salah — dan kesalahan itu bisa direkayasa.
Konsep Inti (Fundamental yang Wajib Dipahami)
Adversarial Example
Adversarial example adalah input yang dimodifikasi sangat kecil, sering kali tidak terlihat oleh manusia, tetapi mengubah prediksi AI secara drastis.
Contoh dunia nyata:
- Gambar rambu STOP → AI membaca Speed Limit
- Email normal → diklasifikasikan sebagai spam
- Teks biasa → lolos sensor moderasi
👉 Masalahnya bukan bug, tetapi cara AI belajar dari pola statistik.
Data Poisoning
Data poisoning adalah serangan sebelum AI digunakan, yaitu dengan merusak data latih (training data).
Contoh nyata:
- Dataset wajah diberi label salah
- Review palsu dimasukkan ke data rekomendasi
- Data sensor dimanipulasi sebelum pelatihan
👉 Jika data rusak, model secanggih apa pun akan rusak.
Tools yang Digunakan
Semua tools bersifat open source:
- Ubuntu Linux 24.04
- Python 3.12
- scikit-learn
- NumPy
- Jupyter Notebook
- (opsional) Matplotlib untuk visualisasi
Praktikum Lengkap (Step-by-Step)
Bagian A — Setup Lingkungan
sudo apt update sudo apt install python3 python3-pip python3-venv -y
Buat virtual environment:
python3 -m venv ai-attack-env source ai-attack-env/bin/activate
Install library:
pip install numpy scikit-learn matplotlib jupyter
Bagian B — Train Model AI Sederhana
Kita mulai dari model yang “benar” dan “bersih”.
Dataset & Model
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# Load dataset
data = load_iris()
X, y = data.data, data.target
# Split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Train model
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
# Evaluate
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
Catatan Penting:
Model ini tidak salah. Ia bekerja sesuai statistik.
Bagian C — Adversarial Example (Serangan Input)
Tujuan
Membuktikan bahwa perubahan kecil bisa menipu AI.
Ambil Satu Data Uji
import numpy as np
sample = X_test[0]
label = y_test[0]
print("Original prediction:", model.predict([sample]))
print("True label:", label)
Manipulasi Input Secara Halus
# Tambahkan noise kecil
epsilon = 0.1
adversarial_sample = sample + epsilon * np.sign(sample)
print("Adversarial prediction:", model.predict([adversarial_sample]))
Yang terjadi:
- Secara visual: data hampir sama
- Secara matematis: AI membaca berbeda
Diskusi Kritis
- Apakah manusia bisa melihat perbedaannya? ❌
- Apakah AI berubah keputusan? ✅
- Apakah ini bug? ❌
- Apakah ini kelemahan desain AI? ✅
Bagian D — Data Poisoning (Serangan Data Training)
Tujuan
Menunjukkan bahwa AI bisa “dibohongi” sejak awal pelatihan.
Racuni Dataset
import random
# Salin data latih
X_poisoned = X_train.copy()
y_poisoned = y_train.copy()
# Ubah label secara acak
for i in random.sample(range(len(y_poisoned)), 10):
y_poisoned[i] = (y_poisoned[i] + 1) % 3
Train Model dengan Data Rusak
poisoned_model = LogisticRegression(max_iter=200)
poisoned_model.fit(X_poisoned, y_poisoned)
y_pred_poisoned = poisoned_model.predict(X_test)
print("Accuracy poisoned model:", accuracy_score(y_test, y_pred_poisoned))
Hasil:
Akurasi turun, tetapi AI tidak tahu bahwa ia sedang salah.
Bagian E — Analisis & Refleksi
Apa yang Dipelajari Mahasiswa?
- AI tidak memahami makna, hanya pola
- Perubahan kecil → dampak besar
- Kualitas data lebih penting dari algoritma
- Serangan AI murah dan mudah dilakukan
Output Praktikum (Wajib Dikumpulkan)
Mahasiswa menyerahkan:
- Notebook Jupyter
- Training normal
- Adversarial example
- Data poisoning
- Analisis singkat (1–2 halaman):
- Bagian mana yang paling berbahaya?
- Mana yang lebih sulit dideteksi?
- Implikasi untuk AI di pemerintahan / industri?
Insight Penutup (Inspiratif)
AI bukan masalahnya. Cara kita mempercayainya tanpa verifikasi — itulah masalahnya.
Modul ini membekali mahasiswa mindset security-first:
- Jangan percaya output AI
- Selalu audit data
- Selalu uji asumsi