← 아티클 목록

시리즈AI를 보안 분석에 붙여 본 기록2편 · 공개 5편

AI Security

탐지를 피해 본 다음에야 그 탐지기가 무엇을 보고 있었는지 알았다

Evasion·Poisoning·Model Extraction이 각각 어느 단계로 들어오는지 구분하고, 공격자에게 보여 주는 출력이 방어 설계를 어떻게 바꾸는지, Red·Blue 반복 검증에서 규칙 미탐과 단일 행동 모델의 정상 판정이 어떻게 드러났는지 합성 데이터로 확인한 기록.

목차 10

정확도만 보고는 공격자가 어디에 손을 대는지 알 수 없다

Adversarial Machine Learning은 공격자가 모델의 입력, 학습 데이터 또는 외부 인터페이스를 의도적으로 조작해 오분류를 유도하거나 모델과 학습 데이터에 관한 정보를 알아내는 위협을 다룬다. 탐지기를 평가할 때 Precision과 Recall만 보면 이 위협이 보이지 않는다. 두 지표는 ’지금 가진 데이터에서 얼마나 맞히는가’에 답하지, ’공격자가 그 데이터를 어떻게 바꿀 수 있는가’에는 답하지 않기 때문이다.

그래서 방어자가 따로 적어 두는 것이 위협 모델이다. 공격자가 어느 단계에 접근할 수 있는지, 어떤 출력을 관찰할 수 있는지, 공격이 실패했을 때 어떤 흔적이 남는지를 모델 성능과 별도의 칸으로 정의한다.

세 가지 위협이 각각 다른 단계로 들어온다

유형 주로 발생하는 단계 공격 목표 방어 관점
Evasion 추론·운영 입력을 바꾸어 탐지를 피하거나 오분류를 유도 입력 정규화, 행동·내용 특징 결합, 다중 시간 창, 사후 추적
Poisoning 학습·업데이트 데이터나 라벨을 오염해 결정 경계를 왜곡 데이터 출처와 변경 이력, 승인 절차, 격리된 검증 세트
Privacy·Model Extraction 모델 API·출력 반복 질의로 모델, 결정 경계 또는 학습 데이터 정보를 추론 질의 제한, 출력 최소화, 비정상 탐색 패턴 감시

강의에서 배운 분류는 Evasion, Poisoning, Model Extraction 셋이다. NIST AI 100-2e2025는 공격 생명주기와 공격자 목표를 더 세분화하고 모델 추출을 모델 프라이버시 공격 범주 안에서 다루므로, 위 세 칸은 학습용 요약으로 쓰고 표준의 전체 분류와 같다고 읽지 않는다.

세 유형이 갈리는 지점은 공격자가 손을 대는 시점이다. Evasion은 이미 배포된 탐지기 앞에서 입력만 바꾼다. Poisoning은 그 탐지기가 만들어지는 과정에 끼어든다. Extraction은 탐지기를 바꾸지 않고 응답만 모아 경계를 그린다. 방어 수단도 각각 다른 곳에 붙는다.

공격자가 무엇을 볼 수 있느냐가 방어 설계를 바꾼다

White-box 공격자는 모델 구조, 특징, 파라미터 또는 규칙을 알고 그 위에서 입력을 최적화한다. Black-box 공격자는 내부 구현을 모르더라도 반복 질의로 판정, 점수, 순위 같은 피드백을 관찰해 결정 경계를 추정할 수 있다.

여기서 분석 편의와 공격자 피드백이 같은 값에 걸린다. 점수와 상세 오류 메시지를 많이 내보낼수록 분석가는 판정을 이해하기 쉬워지지만 공격자가 얻는 신호도 같이 늘어난다. 운영 인터페이스는 역할에 따라 출력 범위를 나누고, 짧은 시간에 경계를 훑는 질의 패턴 자체를 감시 대상으로 둔다.

데이터 누수와 포이즈닝은 결과가 닮았지만 원인이 다르다

데이터 누수는 검증·테스트 정보가 전처리나 학습 과정에 의도치 않게 섞여 평가가 실제보다 좋아지는 문제다. 포이즈닝은 공격자가 학습 데이터나 라벨을 의도적으로 오염시키는 공격이다. 둘 다 결과 수치를 왜곡하지만 하나는 파이프라인 설계의 실수이고 다른 하나는 외부 행위자의 조작이라, 손봐야 할 통제 수단이 다르다. 같은 용어로 묶어 두면 검증 분할을 고쳐야 할 상황에서 접근 통제를 손보게 된다.

위협 모델을 적을 때 채우는 다섯 칸

항목 확인 질문
보호 자산 모델, 학습 데이터, 탐지 규칙, 판정 결과 중 무엇을 보호해야 하는가?
공격자 통제 입력, 라벨, 학습 데이터, API 호출 빈도 중 무엇을 조작할 수 있는가?
관찰 가능 정보 이진 판정, 점수, 순위, 오류 메시지 중 무엇이 노출되는가?
남는 흔적 반복 질의, 시간대별 변화, 계정·IP 전환, 입력 분포 변화가 기록되는가?
방어와 복구 차단, 속도 제한, 재학습 중단, 데이터 롤백, 분석가 검토가 가능한가?

방어 쪽에서 붙일 수 있는 것은 학습 데이터의 출처·수집 시점·변환 이력·승인자를 기록하는 일, 시간이나 그룹 기준으로 분리한 검증 세트를 보존하고 전처리도 학습 세트에만 맞추는 일, API 호출량을 제한하고 필요 이상의 점수와 오류를 외부에 내보내지 않는 일, 규칙과 내용 특징과 행동 특징을 여러 시간 창으로 함께 보는 일이다. 어느 것도 입력 조작과 데이터 오염을 한 번에 해결하지 않는다. 모델 성능, 운영 비용, 공격자 피드백, 로그 가시성 사이에서 계속 저울질하는 항목으로 남는다.

Red로 뚫고 Blue로 막은 뒤 같은 조건에서 다시 잰다

위협 모델을 적어 두는 것과 그 위협이 실제로 통하는지 보는 것은 다른 일이다. Red·Blue 탐지 검증은 Red 관점에서 탐지 실패 조건을 재현하고, Blue 관점에서 규칙과 모델을 보강한 뒤, 같은 조건으로 다시 측정하는 반복 절차다. 목표는 회피 기법을 늘리는 것이 아니라 탐지기가 어떤 신호에 기대고 있고 어디서 무너지는지를 드러낸 다음, 변경 전후의 미탐과 오탐을 같은 기준으로 비교하는 데 있다.

단계 Red 검증 Blue 보강 확인할 결과
규칙 탐지 대소문자, 인코딩, 주석·공백 변형에서 단순 규칙이 놓치는지 확인 제한된 반복 디코딩, 대소문자·공백 정규화, 패턴 보강 원본별 탐지 여부와 남은 미탐
행동 탐지 요청 간격, 요청 수, 내용 비율을 바꿨을 때 단일 모델 순위가 달라지는지 확인 내용 특징, 여러 시간 창, 규칙과 모델 투표 결합 전략별 점수·판정과 오탐 변화
재검증 관찰 가능한 판정으로 새 변형을 선택 출력 최소화, 탐색성 질의 감시, 경계 사례 테스트 변경 전후 결과와 남은 탐지 공백

이 실습은 제공된 합성 데이터와 로컬 오프라인 코드만 대상으로 했다. 실제 서비스나 허가받지 않은 시스템에는 적용하지 않는다.

재현 결과에서 갈린 자리

검증 항목 확인 결과
수정본 오프라인 실행 전체 실행 정상 종료, 단위 테스트 5개 통과
규칙 우회 단순 규칙의 미탐 4건이 보강 규칙에서는 0건으로 감소
단일 모델 회피 정상위장 전략이 단일 행동 모델에서 정상으로 판정됨
보강 탐지 합성 공격 IP 3개를 모두 이상으로 판정
별도 1인 실습 코드 초기 회피 6건, 보강 후 전체 10건 탐지

이 수치는 두 개의 합성 실습 패키지에서 각각 얻은 결과다. 두 패키지는 데이터 생성 방식과 특징, 모델이 서로 달라서 원점수나 탐지 건수를 나란히 놓고 비교하지 않는다. 운영 환경의 탐지 성능을 보장하는 결과도 아니다.

숫자보다 눈에 걸린 것은 정상위장 줄이다. 단일 행동 모델이 정상이라고 답했다는 것은 그 IP의 행동이 사라졌다는 뜻이 아니라, 지금 고른 특징과 임계값에서 정상 쪽에 놓였다는 뜻이다. 그래서 보강 단계에서 내용 특징과 여러 시간 창, 규칙과 모델의 투표를 함께 넣었고 그 조합에서는 합성 공격 IP 3개가 모두 이상으로 올라왔다. 판정 하나가 아니라 어떤 특징으로 계산된 판정인지를 함께 봐야 하는 이유이고, 요청 수나 요청 간격처럼 공격자가 직접 조절할 수 있는 특징에 비중이 실릴수록 이 간격이 벌어진다(특징을 바꾸면 탐지에서 빠질 수 있다).

가장 느리고 가장 적은 조합이 가장 안 걸리는 조합은 아니었다

회피 파라미터를 격자로 훑었을 때 가장 낮은 이상 점수를 만든 조합은 delay=4초, count=10이었다. 요청 간격이 가장 길고 요청 수가 가장 적은 격자의 끝이 아니다.

이상 점수가 ’얼마나 조용한가’가 아니라 ’기준 분포에서 얼마나 떨어져 있는가’를 재는 값이라는 점을 생각하면 이해되는 결과이지만, 이 실습에서 각 조합의 점수가 왜 그렇게 나왔는지까지 특징별로 분해해 보지는 않았다. 확인된 것은 회피 강도를 한 방향으로 올릴수록 점수가 단조롭게 낮아지지는 않았다는 사실이고, 그래서 한쪽 끝만 확인하면 실제 최저점을 지나친다는 것이다.

같은 실험에서 방어 쪽으로도 두 가지가 남았다.

  • 규칙을 강화해 미탐이 줄어도, 정상 입력의 따옴표나 흔한 단어까지 즉시 차단하면 오탐이 커진다. 규칙의 탐지 범위와 조치 수준(경보인지 차단인지)은 따로 검증한다.
  • 실습에서 쓴 다중 시간 창은 고정된 비중첩 구간이다. 경계 양쪽으로 나뉜 행동은 두 창 모두에서 작아 보인다. 운영에서는 rolling·sliding window와 구간 경계 사례를 함께 본다.

한계는 관찰 단위 쪽에도 있었다. 이 탐지기는 IP를 하나씩 평가하기 때문에, 각 세션이 충분히 느리고 작으면 초저속극소량 전략을 정상으로 분류할 수 있다. 사건 하나의 점수를 아무리 정교하게 매겨도 사건 여러 개가 서로 닮았다는 사실은 그 점수에 들어오지 않는다. 관찰 단위를 세션 65개 전체로 넓혀 여섯 개 행동 특징을 서로 비교하자, 개별 판정을 통과한 유사 세션 15개가 하나의 덩어리로 묶였다(세션을 하나씩 보던 탐지기를 65개 전체로 넓혔더니 다른 답이 나왔다).

실패한 방어까지 적어야 다음 기준이 된다

같은 검증을 다시 돌릴 수 있으려면 결과 숫자만으로는 부족하다. 실습에서 남긴 항목은 다음과 같다.

  • 난수 시드와 Python·라이브러리 버전
  • 실행 시각, 입력 데이터와 설정값
  • 정규화 전후의 입력 또는 특징 값
  • 모델별 점수, 임계값, 최종 판정
  • 변경 전후의 미탐·오탐과 실패한 테스트
  • 회피 후에도 남은 시간·내용·세션 흔적

성공한 보강만 기록하면 다음 회차에서 같은 함정을 다시 밟는다. 막지 못한 변형과 예상 밖의 오탐을 같은 문서에 남겨야 그것이 다음 개선의 기준선이 된다.

직접 돌려서 확인한 범위는 합성 실습 패키지 두 개의 오프라인 실행까지다. 위협 모델의 Poisoning과 Model Extraction은 표에 적힌 정의와 방어 항목을 정리했을 뿐, 학습 데이터를 오염시키거나 반복 질의로 경계를 추정하는 실험을 해 보지는 않았다. 규칙 보강이 오탐을 얼마나 늘렸는지도 재지 않았다. 미탐이 4건에서 0건으로 줄었다는 숫자는 있지만 그 대가로 정상 입력 몇 건이 걸리게 됐는지는 정상 트래픽 세트를 따로 만들지 않아 비어 있다.

참고 자료