AI 모델의 보안 취약점을 탐지하고 방어하는 오픈소스 라이브러리. Red Teaming, 적대적 공격/방어, 모델 검증을 위한 실무 도구.
Adversarial Robustness Toolbox (ART)는 IBM이 주도하는 오픈소스 Python 라이브러리로, 머신러닝 및 딥러닝 모델의 보안성을 평가하고 강화하기 위한 도구 모음입니다. 적대적 공격(adversarial attack), 방어(defense), 탐지(detection), Red Teaming 등을 지원하며, TensorFlow, PyTorch, scikit-learn 등 주요 프레임워크와 통합됩니다.
FGSM, PGD, DeepFool, Carlini-Wagner 등 40+ 공격 기법 제공. 모델 취약점을 실험적으로 발견.
Adversarial training, feature squeezing, GAN 기반 방어, 입력 변조 탐지기 등 내장.
모델 강건성 지표, 인증(robustness certification), 자동화된 Red Teaming 파이프라인.
기존 모델 보안 도구 대비 ART의 차별점은 통합성과 확장성입니다. 아래 비교표를 참고하세요.
| 기능 | ART | CleverHans | Foolbox | Adversarial Robustness 360 |
|---|---|---|---|---|
| 공격 알고리즘 수 | 40+ | ~20 | ~30 | ~15 |
| 방어 기법 | 포괄적 (training, preprocessing, detection) | 제한적 | 없음 | 일부 |
| 프레임워크 지원 | TF, PyTorch, Keras, MXNet, scikit-learn, XGBoost, LightGBM | TF 중심 | TF, PyTorch | TF, PyTorch |
| Red Teaming 자동화 | ✅ 내장 | ❌ | ❌ | ❌ |
| 인증/강건성 측정 | ✅ (CLEVER, randomized smoothing) | ❌ | ❌ | ❌ |
ART의 아키텍처는 Estimator (모델 래퍼), Attack, Defence, Detector, Metrics로 구성됩니다.
pip install adversarial-robustness-toolbox
특정 프레임워크 의존성 포함 설치:
pip install adversarial-robustness-toolbox[tensorflow]
pip install adversarial-robustness-toolbox[torch]
pip install adversarial-robustness-toolbox[all]
import torch
import torch.nn as nn
from art.estimators.classification import PyTorchClassifier
from art.attacks.evasion import FastGradientMethod
from art.utils import load_mnist
# 1. 모델 정의
model = nn.Sequential(
nn.Flatten(),
nn.Linear(784, 128),
nn.ReLU(),
nn.Linear(128, 10)
)
# 2. ART 분류기 래핑
classifier = PyTorchClassifier(
model=model,
loss=nn.CrossEntropyLoss(),
input_shape=(1, 28, 28),
nb_classes=10,
clip_values=(0, 1)
)
# 3. 데이터 로드
(x_train, y_train), (x_test, y_test), _, _ = load_mnist()
# 4. 공격 생성 (FGSM)
attack = FastGradientMethod(estimator=classifier, eps=0.2)
# 5. 적대적 샘플 생성
x_test_adv = attack.generate(x=x_test[:100])
# 6. 정확도 비교
pred_clean = classifier.predict(x_test[:100]).argmax(axis=1)
pred_adv = classifier.predict(x_test_adv).argmax(axis=1)
acc_clean = (pred_clean == y_test[:100]).mean()
acc_adv = (pred_adv == y_test[:100]).mean()
print(f"Clean accuracy: {acc_clean:.2%}")
print(f"Adversarial accuracy: {acc_adv:.2%}")
eps 값을 조정하며 공격 강도를 실험해보세요.
| 파라미터 | 설명 | 예시 값 |
|---|---|---|
estimator |
ART 분류기/회귀기 인스턴스 | PyTorchClassifier(...) |
eps |
공격 노이즈 크기 (L∞ norm) | 0.1, 0.2, 0.3 |
norm |
공격에 사용할 norm (1, 2, np.inf) | np.inf |
targeted |
타겟 공격 여부 | False (비타겟) |
batch_size |
공격 생성 배치 크기 | 128 |
defence |
방어 기법 (예: AdversarialTrainer) | AdversarialTrainer(...) |
detector |
변조 탐지기 (예: BinaryInputDetector) | BinaryInputDetector(...) |
eps가 너무 크면 공격이 눈에 띄고, 너무 작으면 효과가 없습니다. 먼저 0.05~0.3 범위에서 스윕하세요.
| 문제 | 원인 | 해결책 |
|---|---|---|
공격 생성 시 ValueError: Input shape mismatch |
Estimator의 input_shape가 실제 데이터와 다름 |
데이터 shape 확인: (채널, 높이, 너비) 또는 (높이, 너비, 채널) 일치 |
| 방어 훈련이 너무 느림 | AdversarialTraining이 매 epoch마다 공격을 생성 | epochs 축소, batch_size 증가, 또는 attack의 eps를 작게 |
| Black-box 공격 (예: ZooAttack) 수렴 안 됨 | 쿼리 수 제한, 학습률 부적절 | max_iter 증가, learning_rate 조정 (0.01~0.001) |
| 모델이 GPU에서 안 잡힘 | Estimator에 device 미설정 | device='cuda' 명시 (PyTorchClassifier의 경우) |
RedTeamer 클래스를 활용하면 여러 공격을 자동으로 조합하고 결과를 요약해줍니다. from art.red_teamer import RedTeamer로 시작하세요.