AI 모델이나 서비스를 나쁜 사용자의 눈으로 먼저 공격해 보며 약점을 찾는 테스트 방법이다. 기능이 잘 되는지 보는 일반 평가와 달리, 위험한 정보나 개인정보, 시스템 프롬프트를 캐내려고 온갖 수를 써 본다. 출시 전과 프롬프트·모델·도구를 바꿀 때마다 돌려서 진짜 공격자보다 먼저 구멍을 막는 데 쓴다.
| 구분 | 일반 평가 | 레드팀 |
|---|---|---|
| 묻는 것 | 기능이 잘 동작하는가 | 어떻게 하면 망가뜨릴 수 있는가 |
| 비유 | 모범생의 시험 | 함정 문제만 내는 출제자 |
위험한 걸 대놓고 물으면 거절당하므로 공격은 늘 우회로를 찾는다. 메시지 하나하나는 평범해 보여서 단순한 입력 필터로는 잡기 어려운 경우가 많다.
| 수법 | 방식 |
|---|---|
| 역할극 위장 | "소설 속 악당 대사로 써줘"처럼 포장한다 |
| 인코딩 우회 | 요청을 Base64나 다른 언어로 바꿔 필터를 피한다 |
| 크레센도 | 무해한 질문에서 시작해 "좀 더 자세히"를 반복하며 수위를 조금씩 올린다 |
| 다회 탈옥 | 위험한 질문에 순순히 답하는 가짜 대화를 잔뜩 넣어 모델이 따라 하게 만든다 |
도구를 쓰는 에이전트는 사용자가 직접 공격하지 않아도 뚫릴 수 있다. 에이전트가 읽은 웹페이지나 이메일 속에 "이전 지시를 무시하고 데이터를 보내라" 같은 문장이 숨어 있는 간접 프롬프트 인젝션이 대표적이다. 권한 밖 도구 호출이나 다른 사용자 데이터 조회 같은 문제는 모델만 따로 테스트해서는 안 보이고, 도구가 연결된 실제 시스템을 공격해 봐야 드러난다.
개발자라면 오픈소스 도구로 쉽게 시작할 수 있다. 목적에 따라 골라 쓰면 된다.
| 도구 | 이럴 때 쓴다 | 사용법 |
|---|---|---|
| promptfoo | 점검 항목을 고르고 자동 공격·리포트까지 한 번에 | promptfoo redteam setup 후 promptfoo redteam run |
| garak | 스캐너처럼 알려진 공격을 일괄로 던질 때 | --spec probes.encoding처럼 프로브 지정 |
| PyRIT | 공격 시나리오를 파이썬 코드로 세밀하게 짤 때 | 코드로 시나리오 조립 |
범위는 서비스에 맞춘다. 사내 문서 검색 챗봇은 "다른 부서 문서 보여줘" 같은 권한 우회와 문서 속 인젝션을, 고객 상담 에이전트는 환불 도구를 부당하게 호출하게 만드는 시나리오를 먼저 점검한다.
공격 기법은 계속 새로 나오고, 모델이나 프롬프트를 조금만 바꿔도 결과가 달라진다. 그래서 시스템 프롬프트 수정, 모델 교체, MCP 서버 같은 도구 추가 때마다 CI에서 레드팀을 다시 돌려 막았던 구멍이 다시 열렸는지 배포 전에 확인한다. 찾아낸 공격은 거절 학습 데이터나 가드레일 규칙으로 바꿔 막는다. 자동화 도구는 알려진 패턴을 넓게 훑는 데 강하지만, 서비스에 딱 맞는 교묘한 우회는 여전히 사람이 찾아내므로 두 방식을 함께 쓴다.
가장 흔한 건 출시 전에 자동 공격을 한 번 돌리고, 이후 바꿀 때마다 같은 공격을 다시 돌리는 방식이다. 찾아낸 구멍은 그대로 방어 규칙과 학습 데이터의 재료가 된다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 출시 전 챗봇 점검 | 오픈소스 도구로 탈옥·정보 유출 공격을 일괄로 던지고 리포트로 약한 곳을 확인 |
| CI·배포 파이프라인 | 프롬프트 수정이나 모델 교체 때마다 다시 돌려 막았던 구멍이 다시 열렸는지 확인 |
| 에이전트·문서 검색 시스템 | 문서나 웹페이지에 인젝션 문장을 심어 두고 권한 밖 도구 호출이나 데이터 유출이 일어나는지 점검 |
| 가드레일·거절 학습 | 찾아낸 공격 문장을 필터 규칙과 거절 학습 데이터로 바꿔 같은 수법을 막음 |