Mục tiêu chương / Learning objectives
- Phân tích bề mặt tấn công (attack surface) của toàn bộ AI/ML pipeline: thu thập dữ liệu → huấn luyện → triển khai → inference.
- Phân loại và giải thích 4 nhóm tấn công ML: evasion, poisoning, extraction, inversion.
- Áp dụng differential privacy và kỹ thuật kiểm tra tính toàn vẹn dữ liệu huấn luyện.
- Triển khai adversarial training và Adversarial Robustness Toolbox (ART) để tăng cường độ bền mô hình.
- Thiết kế MLOps pipeline bảo mật: model registry, signing, versioning, và CI/CD cho ML.
1. Lý thuyết cốt lõi / Core theory
1.1. Bảo mật AI/ML Pipeline (AI/ML pipeline security)
Một hệ thống AI/ML hiện đại trải qua nhiều giai đoạn và mỗi giai đoạn đều có rủi ro bảo mật riêng. Giai đoạn thu thập dữ liệu (data collection): dữ liệu từ nguồn không tin cậy có thể chứa mẫu độc hại — kẻ tấn công kiểm soát một phần nguồn dữ liệu internet (web scraping) có thể "tiêm" các mẫu được thiết kế trước. Giai đoạn tiền xử lý (preprocessing): pipeline ETL có thể bị tấn công để thay thế hoặc biến đổi dữ liệu. Giai đoạn huấn luyện (training): môi trường tính toán (GPU cluster, cloud ML service) là mục tiêu của supply chain attack. Giai đoạn triển khai và phục vụ (deployment/serving): model artifact, API endpoint, và container image đều là điểm tấn công.
Sự kiện thực tế: Năm 2021, các nhà nghiên cứu chứng minh có thể đầu độc mô hình GitHub Copilot bằng cách đưa code độc hại lên các repository công khai — mô hình sẽ gợi ý code có lỗ hổng bảo mật cho người dùng (Trojaning Attack on Neural Networks, Yao et al.).
1.2. Taxonomy Tấn công ML (ML attack taxonomy)
Cộng đồng bảo mật AI phân loại tấn công theo 4 nhóm chính, dựa trên thời điểm và mục tiêu của kẻ tấn công:
- Evasion attacks (tấn công lẩn tránh): xảy ra tại inference time. Kẻ tấn công tạo adversarial examples — đầu vào được chỉnh sửa tinh vi để đánh lừa mô hình phân loại sai trong khi con người không nhận ra sự thay đổi. FGSM (Fast Gradient Sign Method), PGD (Projected Gradient Descent), C&W attack là các kỹ thuật phổ biến. Ứng dụng thực tế: bypass hệ thống nhận dạng khuôn mặt, qua mặt bộ lọc spam, lách CAPTCHA AI.
- Poisoning attacks (tấn công đầu độc): xảy ra tại training time. Kẻ tấn công tiêm dữ liệu độc hại vào tập huấn luyện để mô hình học hành vi sai lệch. Backdoor/Trojan attacks: mô hình hoạt động bình thường với đầu vào thông thường nhưng phân loại sai khi đầu vào chứa "trigger" bí mật (ví dụ: một patch nhỏ ở góc ảnh).
- Extraction attacks (tấn công trích xuất): kẻ tấn công truy vấn model API nhiều lần để tái tạo (clone) mô hình mà không cần truy cập trực tiếp. Thiệt hại: đánh cắp tài sản trí tuệ, bypass rate limiting bằng cách inference cục bộ. Bảo vệ: model watermarking, output perturbation, rate limiting.
- Inversion attacks (tấn công đảo ngược): sử dụng đầu ra của mô hình để suy ra thông tin nhạy cảm từ dữ liệu huấn luyện. Membership inference: xác định xem một bản ghi cụ thể có trong tập huấn luyện không — vi phạm GDPR nếu dữ liệu là thông tin cá nhân. Model inversion: tái tạo hình ảnh khuôn mặt từ mô hình nhận dạng.
1.3. Bảo mật Dữ liệu Huấn luyện (Securing training data)
Data provenance (nguồn gốc dữ liệu): sử dụng cryptographic hashing (SHA-256) để kiểm tra tính toàn vẹn của từng batch dữ liệu. Các framework như DVC (Data Version Control) cho phép track lineage của dữ liệu qua các phiên bản. Statistical anomaly detection: phân tích phân phối thống kê của dữ liệu mới nhập vào — outlier bất thường có thể là dấu hiệu của poisoning. Differential Privacy (DP): thêm noise có kiểm soát vào dữ liệu hoặc gradient trong quá trình huấn luyện để ngăn membership inference. Thư viện TensorFlow Privacy và Opacus (PyTorch) triển khai DP-SGD — kỹ thuật được Apple và Google dùng trong federated learning.
Khái niệm then chốt — Differential Privacy: Một thuật toán là ε-differentially private nếu thay đổi một record trong dataset chỉ thay đổi xác suất output tối đa e^ε lần. ε nhỏ = bảo vệ tốt hơn nhưng accuracy thấp hơn. Apple dùng ε ≈ 8 cho iOS telemetry; Google dùng ε ≈ 1 cho Chrome histograms.
1.4. Bảo mật Mô hình (Model security)
Model watermarking: nhúng chữ ký vô hình vào mô hình để chứng minh quyền sở hữu khi phát hiện theft. Kỹ thuật: backdoor-based watermarking (nhúng trigger đã biết), feature-based watermarking. Adversarial robustness: huấn luyện mô hình với adversarial examples (adversarial training) để tăng khả năng kháng tấn công evasion — đánh đổi accuracy thông thường lấy robustness. Secure aggregation trong Federated Learning: giao thức mật mã cho phép server tổng hợp gradient từ nhiều client mà không thể đọc gradient của từng client — ngăn server độc hại thực hiện inversion attack. Model signing: ký số model artifact bằng GPG hoặc Sigstore để đảm bảo tính xác thực trước khi deploy.
⚠️ Đặc thù AI — Không thể vá lỗi & Không xác định (Unpatchability & Nondeterminism): LLM không thể "vá lỗi" (patch) như phần mềm thông thường — thay đổi hành vi đòi hỏi fine-tuning hoặc RLHF, không phải hotfix. Nondeterminism: cùng một prompt → đầu ra khác nhau mỗi lần chạy (temperature > 0), khiến kiểm tra bảo mật khó tái lập. Hệ quả: không có chu trình CVE/patch cho lỗi hành vi LLM. Biện pháp bù trừ: red team liên tục, triển khai output filter như compensating control.
1.4b. Machine Unlearning — Quyền Bị Quên trong ML (Machine Unlearning / Right to Erasure)
GDPR Điều 17 (Article 17 "right to erasure") yêu cầu tổ chức phải có khả năng xóa dữ liệu cá nhân khỏi hệ thống, bao gồm cả mô hình ML đã học từ dữ liệu đó. Đây là thách thức kỹ thuật lớn vì thông tin cá nhân được nhúng vào trọng số của mô hình — không thể "xóa" đơn giản như xóa record trong database.
- Exact unlearning (quên chính xác): huấn luyện lại mô hình từ đầu mà không có dữ liệu cần xóa — đảm bảo hoàn toàn nhưng chi phí rất cao với mô hình lớn.
- Approximate unlearning — SISA (Sharded, Isolated, Sliced, Aggregated): phân vùng dữ liệu huấn luyện thành nhiều shard độc lập; khi cần xóa dữ liệu, chỉ huấn luyện lại shard chứa dữ liệu đó thay vì toàn bộ mô hình — giảm chi phí đáng kể.
- Gradient-based unlearning (quên dựa trên gradient): tiêm "forgetting gradient" — gradient ngược chiều với gradient học — để giảm ảnh hưởng của các điểm dữ liệu cụ thể mà không cần huấn luyện lại.
- Thách thức kiểm chứng: làm sao chứng minh dữ liệu đã thực sự bị "quên"? Câu trả lời: dùng membership inference attack như công cụ kiểm tra — nếu mô hình sau unlearning không thể phân biệt data đã xóa với data chưa từng học, thì unlearning thành công.
# Verify unlearning via membership inference
from art.attacks.inference.membership_inference import MembershipInferenceBlackBox
attack = MembershipInferenceBlackBox(classifier, attack_model_type="rf")
# Train attack model on remaining data, then test whether deleted
# samples are still "remembered" by the unlearned model.
# If attack success rate ≈ 50% (random), unlearning is effective.
attack.fit(x_retain, y_retain, x_test, y_test)
inferred = attack.infer(x_deleted, y_deleted)
print(f"Membership inferred for deleted data: {inferred.mean()*100:.1f}%")
# Target: ~50% (same as random guessing = data truly forgotten)
Exam tip: Machine unlearning là giao điểm của data privacy (GDPR right to erasure) và model security (membership inference). Câu hỏi thi thường hỏi về SISA như giải pháp thực tế và membership inference như phương pháp xác minh.
1.5. MLOps Security (Secure ML operations)
Secure model registry: lưu trữ model artifact với access control (RBAC), audit log, và integrity verification. MLflow, Weights & Biases, và Azure ML Registry đều hỗ trợ. CI/CD cho ML: pipeline tự động hóa testing bảo mật trước khi deploy — bao gồm adversarial robustness benchmark, bias testing, và vulnerability scanning của dependencies. Model versioning và rollback: khả năng nhanh chóng rollback về phiên bản trước khi phát hiện mô hình bị compromised. Runtime monitoring: phát hiện bất thường trong phân phối đầu vào tại inference time (distribution shift có thể là dấu hiệu của evasion attack đang diễn ra).
2. Bài thực hành / Hands-on lab
pip install adversarial-robustness-toolbox scikit-learn cleverhans tensorflowLab 1 — FGSM Evasion Attack trên Image Classifier
Mục tiêu: Chứng minh FGSM (Fast Gradient Sign Method) có thể làm mô hình phân loại ảnh sai với thay đổi hầu như không nhìn thấy.
- Tạo và kích hoạt môi trường Python:
python3 -m venv aisec-lab
source aisec-lab/bin/activate
pip install adversarial-robustness-toolbox[tensorflow] scikit-learn numpy matplotlib
- Tạo file
fgsm_attack.py:
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from art.estimators.classification import KerasClassifier
from art.attacks.evasion import FastGradientMethod
# 1. Tải và chuẩn bị dữ liệu MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255.0
x_test = x_test.reshape(-1, 28, 28, 1).astype('float32') / 255.0
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)
# 2. Xây dựng và huấn luyện CNN đơn giản
tf.compat.v1.disable_eager_execution()
model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
MaxPooling2D(2,2),
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train[:5000], y_train[:5000], epochs=3, batch_size=64, verbose=1)
# 3. Bọc mô hình bằng ART classifier
classifier = KerasClassifier(model=model, clip_values=(0,1), use_logits=False)
# 4. Tạo adversarial examples với FGSM (epsilon=0.2)
attack = FastGradientMethod(estimator=classifier, eps=0.2)
x_test_adv = attack.generate(x=x_test[:100])
# 5. So sánh độ chính xác
_, acc_clean = model.evaluate(x_test[:100], y_test[:100], verbose=0)
preds_adv = np.argmax(classifier.predict(x_test_adv), axis=1)
preds_true = np.argmax(y_test[:100], axis=1)
acc_adv = np.mean(preds_adv == preds_true)
print(f"\n=== KẾT QUẢ FGSM ATTACK ===")
print(f"Độ chính xác trên ảnh gốc (clean): {acc_clean*100:.1f}%")
print(f"Độ chính xác trên ảnh adversarial: {acc_adv*100:.1f}%")
print(f"Tỷ lệ tấn công thành công (attack SR): {(1-acc_adv)*100:.1f}%")
- Chạy script và quan sát kết quả:
python fgsm_attack.py
✅ Kết quả mong đợi / Expected output:
=== KẾT QUẢ FGSM ATTACK === Độ chính xác trên ảnh gốc (clean): 98.0% Độ chính xác trên ảnh adversarial: 12.0% Tỷ lệ tấn công thành công (attack SR): 88.0%
Nhận xét: Chỉ với một nhiễu nhỏ không thể nhìn thấy (ε=0.2), tỷ lệ tấn công thành công lên tới ~88%. Đây là mối đe dọa thực tế với hệ thống nhận dạng khuôn mặt, xe tự lái, và hệ thống phát hiện mã độc dựa trên ML.
Lab 2 — Phát hiện Data Poisoning bằng Statistical Anomaly Detection
Mục tiêu: Phát hiện dữ liệu bị đầu độc bằng phân tích thống kê phân phối đặc trưng.
import numpy as np
from sklearn.datasets import make_classification
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import LocalOutlierFactor
# 1. Tạo dataset huấn luyện bình thường
np.random.seed(42)
X_clean, y_clean = make_classification(n_samples=1000, n_features=20, random_state=42)
# 2. Tạo poisoning samples (5% data bị nhiễm độc)
n_poison = 50
X_poison = np.random.uniform(low=5.0, high=10.0, size=(n_poison, 20))
y_poison = np.ones(n_poison) # mislabeled
# 3. Kết hợp dữ liệu
X_combined = np.vstack([X_clean, X_poison])
labels_true = np.array(['clean']*1000 + ['poisoned']*n_poison)
# 4. Phát hiện bằng Local Outlier Factor (unsupervised)
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.05)
y_pred = lof.fit_predict(X_combined) # -1 = outlier (nghi ngờ poisoned), 1 = inlier
# 5. Đánh giá kết quả
detected_poison = np.sum((y_pred == -1) & (labels_true == 'poisoned'))
false_positives = np.sum((y_pred == -1) & (labels_true == 'clean'))
print(f"\n=== KẾT QUẢ PHÁT HIỆN DATA POISONING ===")
print(f"Tổng mẫu nghi ngờ bị phát hiện: {np.sum(y_pred == -1)}")
print(f"Poisoned samples phát hiện đúng: {detected_poison}/{n_poison}")
print(f"False positives (clean bị nhầm): {false_positives}")
print(f"Detection rate: {detected_poison/n_poison*100:.1f}%")
✅ Kết quả mong đợi / Expected output:
=== KẾT QUẢ PHÁT HIỆN DATA POISONING === Tổng mẫu nghi ngờ bị phát hiện: 52 Poisoned samples phát hiện đúng: 47/50 False positives (clean bị nhầm): 5 Detection rate: 94.0%
Lab 3 — Adversarial Training như Biện pháp Phòng thủ
Mục tiêu: Triển khai adversarial training để tăng khả năng kháng FGSM attack.
from art.defences.trainer import AdversarialTrainer
from art.attacks.evasion import FastGradientMethod
# Sử dụng lại classifier từ Lab 1
# 1. Tạo attack để dùng trong training
fgsm_train = FastGradientMethod(estimator=classifier, eps=0.2)
# 2. Adversarial Trainer: huấn luyện trên cả clean + adversarial examples
trainer = AdversarialTrainer(classifier, attacks=fgsm_train, ratio=0.5)
trainer.fit(x_train[:5000], y_train[:5000], nb_epochs=5, batch_size=64)
# 3. Đánh giá mô hình sau adversarial training
x_test_adv2 = fgsm_train.generate(x=x_test[:100])
preds_robust = np.argmax(classifier.predict(x_test_adv2), axis=1)
acc_robust = np.mean(preds_robust == preds_true)
print(f"\n=== KẾT QUẢ SAU ADVERSARIAL TRAINING ===")
print(f"Accuracy trên adversarial (trước AT): 12.0%")
print(f"Accuracy trên adversarial (sau AT): {acc_robust*100:.1f}%")
print(f"Cải thiện độ bền (robustness gain): {(acc_robust - 0.12)*100:.1f}%")
✅ Kết quả mong đợi / Expected output:
=== KẾT QUẢ SAU ADVERSARIAL TRAINING === Accuracy trên adversarial (trước AT): 12.0% Accuracy trên adversarial (sau AT): 71.0% Cải thiện độ bền (robustness gain): 59.0%
Nhận xét: Adversarial training tăng robustness đáng kể nhưng thường giảm một chút accuracy trên clean data — đây là sự đánh đổi (accuracy-robustness tradeoff) điển hình cần cân nhắc trong production.
3. Tình huống doanh nghiệp / Real-world scenario
Bối cảnh:
Ngân hàng VPBank triển khai hệ thống phát hiện giao dịch gian lận dựa trên mô hình ML với độ chính xác 99.2%. Sau 3 tháng, nhóm bảo mật phát hiện một số giao dịch lừa đảo tinh vi liên tục vượt qua bộ lọc. Điều tra cho thấy: nhóm hacker đã nghiên cứu các giao dịch hợp lệ trong nhiều tháng, sau đó thực hiện các giao dịch gian lận với pattern được thiết kế đặc biệt để nằm trong vùng "safe zone" của mô hình — đây chính là evasion attack nhắm vào AI hệ thống tài chính.
Biện pháp ứng phó theo kiến thức chương này:
- Triển khai adversarial training định kỳ với các pattern gian lận mới phát hiện.
- Áp dụng ensemble detection: kết hợp nhiều mô hình khác nhau — kẻ tấn công khó đồng thời qua mặt tất cả.
- Giám sát distribution shift trong đầu vào inference — cảnh báo khi phát hiện pattern bất thường ngay cả khi mô hình không flag là fraud.
- Thực hiện red teaming định kỳ: chủ động tìm cách bypass chính hệ thống của mình trước kẻ tấn công.
4. Tự kiểm tra / Knowledge check
- Phân biệt evasion attack và poisoning attack theo thời điểm tấn công và mục tiêu. Cho ví dụ thực tế mỗi loại.
- Differential Privacy (ε-DP) bảo vệ chống lại loại tấn công nào? Giải thích sự đánh đổi giữa ε nhỏ và accuracy.
- Tại sao model watermarking quan trọng trong bối cảnh mô hình AI là tài sản thương mại? Kỹ thuật backdoor-based watermarking hoạt động như thế nào?
- Adversarial training có nhược điểm gì? Khi nào nên và không nên sử dụng?
- Trong federated learning, secure aggregation ngăn chặn loại tấn công nào từ phía server?
- Membership inference attack vi phạm nguyên lý nào trong bộ ba CIA? Tại sao đây là vấn đề pháp lý theo GDPR?