AkiraBot이 8만 개 사이트에서 놓친 CAPTCHA: CAPTCHA 없는 폼 보호 방법
요약
본 글은 AI 기반 스팸 봇(AkiraBot)이 CAPTCHA를 우회하여 웹사이트의 문의 양식을 공격하는 자동화 위협에 대해 경고합니다. 기존의 CAPTCHA는 접근성 문제와 비용 문제를 안고 있어 효과적이지 않다고 지적하며, 대신 다층적인 방어 메커니즘을 구축해야 한다고 제안합니다.
핵심 포인트
- CAPTCHA는 이제 공격자에게 선택 사항이 되어 무력화되고 있습니다.
- 양식 스팸은 단순한 UX 버그가 아닌 자동화된 심각한 위협입니다.
- OWASP 등에서 CAPTCHA의 접근성 문제를 지적하고 있습니다.
- 효과적인 방어는 다층적인(Layered) 검증 장치와 비용 증가에 초점을 맞춰야 합니다.
이 글은 AI의 도움을 받아 작성되었으며, 저자가 검토했습니다.
2025년 4월, SentinelLABS는 AkiraBot에 대한 연구를 발표했습니다. 이는 AI 기반 스팸 프레임워크로, 2024년 9월 이후 420,000개 이상의 웹사이트를 표적으로 삼았으며 그중 최소 80,000곳에서 성공적으로 스팸을 전송했습니다 [1]. 이 도구는 OpenAI를 사용하여 각 사이트에 맞는 맞춤형 아웃리치를 생성한 다음, 해당 메시지를 문의 양식(contact forms)과 채팅 위젯에 삽입했습니다. 운영자들은 또한 hCAPTCHA, reCAPTCHA, Cloudflare Turnstile을 포함하여 CAPTCHA를 무력화하는 데 막대한 투자를 했습니다 [1].
이것이 불편한 부분입니다. 업계에서 가장 흔하게 사용되는 "당신이 인간임을 증명하라(prove you are human)" 통제 장치가 일반적인 스팸 도구의 표적 목록에 올라 있다는 것입니다. 만약 CAPTCHA가 공격자에게 선택 사항이라면, 문의 양식 소유자는 실제로 무엇을 남겨두고 있습니까?
양식 스팸은 사용자 경험(UX) 버그가 아닌 자동화된 위협입니다
OWASP는 자신의 자동화 위협(Automated Threats) 분류 체계에서 양식 및 콘텐츠 스팸을 OAT-017 Spamming으로 등재하고 있습니다. 여기에는 SEO 및 양식 스팸을 포함하여 악성 또는 의심스러운 콘텐츠와 메시지의 자동 추가가 포함됩니다 [2]. 관련 위협인 OAT-009 CAPTCHA Defeat은 이 싸움의 다른 측면, 즉 OCR(광학 문자 인식), 이미지 데이터베이스 또는 인간 해결사 농장(human solver farms)을 사용하여 자동화 방지 퍼즐을 풀거나 우회하는 자동화를 다룹니다 [3].
OWASP의 봇 관리(Bot Management) 치트 시트는 눈에 보이는 CAPTCHA에 대해 직설적으로 이야기합니다. 이는 접근성(accessibility)-에 적대적이며, 기계로 해결하기가 점점 쉬워지고 있고, 해결사 농장에서도 아주 적은 비용으로 이용 가능하다는 것입니다 [4]. W3C의 CAPTCHA 비접근성(Inaccessibility of CAPTCHA) 노트는 수년 동안 같은 접근성 문제를 제기해 왔습니다. 시각적 및 청각적 도전 과제들은 여전히 양식을 사용할 수 있어야 하는 사람들을 일상적으로 배제하고 있습니다 [5].
따라서 일반적인 문의 페이지의 실패 모드는 다음과 같이 쌓입니다.
- 봇이 양식을 찾거나(또는 표적 목록을 구매합니다).
- 인간이 볼 수 없는 필드까지 모두 채웁니다 (만약 허니팟(honeypot)이 약하거나 누락된 경우).
- CAPTCHA가 있다면, 우회 서비스나 농장이 이를 해결합니다.
- 귀하의 받은 편지함은 SEO 제안, 가짜 리드(fake leads), 또는 더 나쁜 것으로 채워집니다.
방문자 앞에 놓인 퍼즐은 잘못된 주(primary) 제어 방식입니다. 실제 브라우저 세션에는 비용이 거의 들지 않으면서 대량 자동화의 비용을 높일 수 있는 검증 장치가 필요합니다.
봇이 실패하는 저렴한 레이어들

이것이 바로 Node 앱을 위해 제가 구축한 캡차 없는 패키지인 form-honeypot-guard의 설계 배경입니다:
- 각 빌드마다 무작위로 생성되고 현실적인 이름을 가진, 화면에 보이지 않는(off-screen) 접근 가능한 허니팟(honeypot) 필드;
- 너무 빠르거나 늦게 도착하거나 변조되거나 재전송된 제출을 거부하는 HMAC 서명 타이밍 토큰;
- 실제 브라우저만이 채울 수 있는 JS 증명(proof) 필드, 그리고 가벼운 상호작용 신호(키 누름, 포인터 이동, 초점 맞추기);
- 선택적 콘텐츠 휴리스틱스(링크 스팸, 이름 필드의 URL, 스팸 키워드);
- IP별 슬라이딩 윈도우 속도 제한(sliding-window rate limiting) (옵션으로 이메일 또는 지문 식별자(fingerprint)별), 올바른
429및Retry-After헤더 포함; - 캡차 공급업체 없이 더 강력한 도전을 원할 때 선택 가능한 Altcha 스타일의 작업 증명(proof-of-work).
클라이언트 런타임은 압축 시 2kB 미만입니다. Webpack 및 Vite 플러그인은 빌드 시간에 허니팟 마크업을 주입하고, 필드 이름을 무작위화하며, 서버가 읽는 매니페스트를 작성합니다. 헬퍼는 Express/Connect, Fastify, Next.js, SvelteKit, Remix, Astro, 그리고 순수 Fetch 런타임을 지원하며, 선택적으로 React 래퍼도 제공합니다.
CLI로 빌드된 HTML 감사하기
폼 보호는 절반의 이야기입니다. 나머지 절반은 트랩 없이 배포된 폼을 발견하는 것입니다. CLI가 빌드된 HTML을 감사합니다:
npx form-honeypot-guard check dist --strict

두 개의 오류와 두 개의 경고가 나타납니다:
- honeypot가 없는 POST 폼;
- 개인 데이터를 URL에 포함하는 GET 폼;
- 두 POST 폼 모두에서 CSRF 토큰 경고 (체커가 상기시킵니다. SameSite 쿠키만으로는 항상 충분하지 않습니다).
--strict은 경고를 오류로 취급하고 종료 코드 1을 반환하며, 이는 CI 환경에서 원하는 동작입니다. form-honeypot-guard secret 명령어는 FORM_GUARD_SECRET에 대한 새로운 HMAC 시크릿을 출력합니다.
빌드에 가드를 연결하기
data-guard로 폼을 표시하거나 (또는 모든 폼을 보호) 다음 webpack 플러그인을 추가합니다:
const { FormGuardPlugin } = require('form-honeypot-guard/webpack');
new FormGuardPlugin({
...
서버 측에서 (Express 예시):
import { expressGuard, cleanFields } from 'form-honeypot-guard';
app.use(expressGuard({
...
그리고 CI 환경에서 프론트엔드 빌드 후:
- run: npm run build
- name: Audit forms for honeypot coverage
run: npx form-honeypot-guard@1 check dist --strict
핵심 요약 (The takeaway)
AkiraBot은 LLM이 작성한 스팸과 CAPTCHA 우회 기술을 결합하면 수십만 개의 사이트를 공격할 수 있음을 보여주었습니다 [1]. OWASP는 이미 폼 스팸 및 CAPTCHA 무력화를 일급 자동화 위협으로 간주하고 있으며 [2][3], OWASP와 W3C 모두 가시적인 CAPTCHA에 주된 방어 수단으로 의존하는 것을 경고합니다 [4][5]. 대신 저렴한 서버 검사 신호를 계층적으로 사용하고, 폼이 보호되지 않은 채 배포되면 빌드를 실패시키세요.
- 사이트: https://mrlouiswright.github.io/form-honeypot-guard/
- npm: https://www.npmjs.com/package/form-honeypot-guard
- GitHub: https://github.com/MrLouisWright/form-honeypot-guard
참고 문헌 (References)
- Delamotte, A. and Walter, J. (SentinelLABS / SentinelOne). "AkiraBot | AI 기반 봇이 CAPTCHA를 우회하고 웹사이트에 대규모 스팸을 발생시키다". 2025. [https://www.sentinelone.com/labs/akirabot-ai-powered-bot-bypasses-captchas-spams-websites-at-scale/]
- OWASP. "OAT-017 스팸밍(Spamming)". OWASP 웹 애플리케이션 자동 위협 목록(Automated Threats to Web Applications). 2026년 10월 접속. [https://owasp.github.io/www-project-automated-threats-to-web-applications/assets/oats/EN/OAT-017_Spamming.html]
- OWASP. "OAT-009 CAPTCHA 무력화(CAPTCHA Defeat)". OWASP 웹 애플리케이션 자동 위협 목록(Automated Threats to Web Applications). 2026년 10월 접속. [https://owasp.github.io/www-project-automated-threats-to-web-applications/assets/oats/EN/OAT-009_CAPTCHA_Defeat.html]
- OWASP. "봇 관리 및 자동화 방지 치트 시트(Bot Management and Anti-Automation Cheat Sheet)". 2026년 10월 접속. [https://cheatsheetseries.owasp.org/cheatsheets/Bot_Management_and_Anti-Automation_Cheat_Sheet.html]
- W3C. "CAPTCHA의 접근성 문제: 웹에서 시각적 튜링 테스트를 대체하는 방안". W3C 워킹 그룹 노트(Working Group Note). 2026년 10월 접속. [https://www.w3.org/TR/turingtest/]
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기