Adversarial Robustness Toolbox

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
📅 2026.03 #adversarial-ml #ai-red-team #ibm

AI 모델의 보안 취약점을 탐지하고 방어하는 오픈소스 라이브러리. Red Teaming, 적대적 공격/방어, 모델 검증을 위한 실무 도구.

1. Adversarial Robustness Toolbox란?

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 기반 방어, 입력 변조 탐지기 등 내장.

🔍 모델 검증 & Red Teaming

모델 강건성 지표, 인증(robustness certification), 자동화된 Red Teaming 파이프라인.

2. 왜 써야 하는가?

기존 모델 보안 도구 대비 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는 단순 공격 도구를 넘어, 방어-탐지-검증-자동화까지 하나의 프레임워크로 제공하므로 실무 Red Teaming에 가장 적합합니다.

3. 핵심 개념

ART의 아키텍처는 Estimator (모델 래퍼), Attack, Defence, Detector, Metrics로 구성됩니다.

┌─────────────────────────────────────────────────────────┐ │ ART Architecture │ ├─────────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌────────────┐ ┌──────────────┐ │ │ │ Estimator │◄───│ Attack │◄───│ Defence │ │ │ │ (모델 래퍼)│ │ (FGSM,PGD..)│ │(AdvTrain,..) │ │ │ └─────┬─────┘ └────────────┘ └──────────────┘ │ │ │ │ │ ┌─────▼─────┐ ┌────────────┐ ┌──────────────┐ │ │ │ Detector │◄───│ Metrics │ │ RedTeamer │ │ │ │(변조탐지) │ │(강건성점수) │ │(자동공격) │ │ │ └───────────┘ └────────────┘ └──────────────┘ │ │ │ │ ── TensorFlow / PyTorch / scikit-learn ── │ └─────────────────────────────────────────────────────────┘

4. 퀵스타트

📦 설치

pip install adversarial-robustness-toolbox

특정 프레임워크 의존성 포함 설치:

pip install adversarial-robustness-toolbox[tensorflow]
pip install adversarial-robustness-toolbox[torch]
pip install adversarial-robustness-toolbox[all]

⚙️ 기본 설정 & 첫 예제 (PyTorch)

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%}")
✅ 확인 — 위 예제는 MNIST 분류기에 FGSM 공격을 적용한 기본 워크플로입니다. eps 값을 조정하며 공격 강도를 실험해보세요.

5. 핵심 설정 레퍼런스

파라미터 설명 예시 값
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 범위에서 스윕하세요.

6. 실무 팁 & 트러블슈팅

자주 겪는 문제와 해결책

문제 원인 해결책
공격 생성 시 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의 경우)
💡 실무 팁 — Red Teaming 시 ART의 RedTeamer 클래스를 활용하면 여러 공격을 자동으로 조합하고 결과를 요약해줍니다. from art.red_teamer import RedTeamer로 시작하세요.

7. 참고 자료