월요일 아침에 결제 대시보드를 열었더니 밤사이 들어온 400건의 1달러 결제가 보인다 — 모두 서로 다른 카드 번호에서 발생했고, 대부분은 거절되었지만 몇 건은 이해할 수 없게도 성공했다. 아무도 아무것도 사지 않았다. 당신의 결제 페이지가 그저 카드 검증기로 사용된 것이고, 수습 비용은 이미 불어나고 있다.
이런 시나리오는 더 이상 흔치 않은 사건이 아니다. Signifyd의 2026년 사기 보고서에 따르면 2026년 첫 4개월 동안 카드 테스트 공격이 전년 대비 175% 급증했으며, 카드 테스트는 이제 판매자들이 직면하는 가장 흔한 다섯 가지 사기 유형 중 하나로, 최소 3분의 1의 판매자가 피해를 입고 있다. 온라인에서 무엇이든 판매한다면 — 실물 상품, 디지털 다운로드, SaaS 구독, 비영리 기부금까지 — 당신의 결제 양식은 표적이다. 이 글에서는 카드 테스트가 어떻게 작동하는지, 실제로 어떤 비용이 드는지, 그리고 이를 막는 다층적 통제 수단을 살펴본다.
카드 테스트란 무엇인가 (그리고 봇이 당신의 결제 양식을 좋아하는 이유)
카딩(carding), 카드 체킹(card checking), 또는 열거(enumeration)라고도 불리는 카드 테스트는 도난당한 카드 번호를 검증하여 아직 사용 가능한 카드를 찾아내는 과정이다. 사기꾼들은 유출된 카드 데이터를 대량으로 구매한 뒤, 실제 판매자의 결제 페이지를 통해 이를 실행하여 어떤 카드가 승인되는지 확인한다. 유효한 카드는 더 큰 사기 구매에 사용되거나 프리미엄을 받고 재판매되고, 무효한 카드는 버려진다. 업계 추정에 따르면 이러한 공격의 약 80%는 봇이 수행한다 — 이는 누군가 손으로 번호를 입력하는 것이 아니라 자동화된 대량 탐색이다.
공격자는 일반적으로 두 가지 방식으로 당신을 탐색한다:
- 소액 결제. 1달러나 2달러 청구는 대부분의 카드 소지자가 눈치채지 못할 만큼 작아서 신고되는 경우가 드물다. 성공은 카드가 살아있다는 의미다.
- 카드 등록 및 토큰화. 계정이나 지갑에 카드를 저장하면 0달러 검증이나 소액 승인이 발생하는데, 이는 보통 카드 소지자 명세서에 전혀 나타나지 않는다. 이것이 더 은밀한 경로이며, 계정 생성 및 "카드 저장" 엔드포인트가 결제 페이지만큼이나 공격받는 이유다.
기부 양식은 특별히 언급할 가치가 있다. 비영리 단체는 의도적으로 마찰 없는 양식을 사용하기 때문에 불균형적으로 표적이 된다 — 계정 불필요, 최소 금액 거의 없음, 감정적으로 긴박한 문구 — 이는 정확히 테스트 스크립트가 원하는 것이다. 비영리 단체를 운영한다면 이 가이드의 모든 내용이 두 배로 적용된다.
당신의 결제 페이지가 표적이 된 이유
카드 테스터는 봇 시간을 어디에 쓸지 합리적으로 판단한다. 그들은 세 가지 속성을 가진 결제 엔드포인트를 찾는다: 로그인 불필요, 낮거나 없는 최소 금액, 그리고 스크립트에 피드백할 수 있는 즉각적인 기계 판독 가능 응답(승인 또는 거절). 비회원 결제, 즉시 배송되는 디지털 상품 매장, 무료 체험에서 유료로 전환되는 흐름, 기부 페이지는 모든 조건을 충족한다.
이것이 당신이 뭔가 잘못했다는 의미는 아니다. 모든 주요 결제 대행사의 사기 방지 팀은 카드 테스트를 온라인 상거래의 배경 방사선으로 취급한다 — 피할 수 없지만 관리 가능하다. 목표는 결제 페이지를 뚫을 수 없게 만드는 것이 아니라, 탐색하는 데 비용이 너무 많이 들어 봇이 다른 사람의 양식으로 이동하게 만드는 것이다.
공격이 실제로 초래하는 비용
피해는 사기 청구된 소액을 훨씬 뛰어넘는다. 전체 청구서를 합산해 보자:
승인 및 처리 수수료. 가격 요금제에 따라 모든 시도 — 거절된 시도 포함 — 에 대해 건당 승인 수수료를 지불할 수 있다. 10,000건의 테스트 시도가 쏟아지면 전부 실패하더라도 실제 비용이 발생한다.
분쟁 수수료 및 지불 거절. 성공한 소액 결제는 결국 카드 소지자가 눈치채고 사기로 신고한다. 각 사기 분쟁은 일반적으로 환불 금액에 더해 15~25달러의 분쟁 수수료와 대응 인력 시간이 든다. LexisNexis에 따르면 미국 판매자의 경우 수수료, 손실 상품, 운영 비용을 모두 포함하면 직접 사기 손실 1달러당 총 후방 비용이 4.61달러에 달한다.
훼손된 거절률 평판. 발급사와 카드 네트워크는 당신의 거절 비율을 주시한다. 테스트 공격이 쏟아지면 계정에 엄청난 거절이 쌓여 정당한 거래도 더 위험해 보이게 만들고, 이는 공격이 멈춘 후에도 실제 고객에 대한 거절률을 높일 수 있다. 봇이 떠난 후에도 오랫동안 판매 손실로 공격 비용을 계속 지불하게 된다.
모니터링 프로그램 및 벌금. 테스트로 인한 분쟁이 카드 네트워크의 임계값을 넘어 분쟁 비율을 끌어올리면, 매월 벌금이 부과되고 오래 머무를수록 벌금이 커지는 분쟁 모니터링 프로그램에 들어갈 수 있다. 이것이 성가신 공격을 다섯 자릿수 문제로 바꾸는 꼬리 위험이다.
오염된 비즈니스 데이터. 성공한 테스트 청구는 분석에서 신규 고객처럼 보인다. 수익 대시보드, 전환율, 성장 추세가 모두 왜곡되어 실제 비즈니스가 어떻게 되고 있는지 보기 어려워지고, 아래에서 다루겠지만 장부를 맞추기도 어려워진다.
카드 테스트를 당하고 있다는 신호
일찍 포착하면 분쟁 물결이 오기 전에 차단할 수 있는 경우가 많다. 다음 위험 신호를 주시하라:
- 거절된 승인의 갑작스러운 급증, 특히 소액의 경우
- 소수의 IP 주소에서 많은 시도, 또는 하나의 IP 주소가 여러 카드를 순환
- 몇 초 간격의 연속 제출, 이상한 시간대, 또는 평소 판매하지 않는 지역에서의 시도
- 반복적인 이메일 패턴(무작위 문자열, 하나의 받은편지함에 플러스 주소 변형) 또는 시도 간 불일치하는 청구 데이터
- 구매 없이 0달러 검증이나 새로운 저장 결제 수단 등록의 급증
- 같은 시간대에 집중되는 3D Secure 챌린지 실패
대부분의 결제 대행사는 거절률 이상에 대한 웹훅 알림이나 대시보드 뷰를 설정할 수 있게 해준다. 이 글에서 다른 것은 아무것도 하지 않더라도 "거절률이 최근 평균 대비 두 배" 알림 하나만 설정하라. 그 단 하나의 알림이 두 시간짜리 사건과 두 주짜리 사건을 가르는 차이다.
카드 테스트를 막는 통제 수단
단일 통제로 카드 테스트를 끝낼 수는 없다. 방어는 함께 작용하여 양식을 탐색하는 것이 수익성이 없게 만드는 값싼 마찰의 층이다. 대략 다음 순서로 구현하라.
1. CVC와 주소 검증을 요구하고 — 결과를 강제하라
모든 거래에서 카드 검증 코드(CVC)와 청구 우편번호를 수집한 뒤, 단순히 표시만 하는 것이 아니라 그 검사에 실패한 거래를 실제로 차단하라. 도난 카드 덤프에는 종종 CVC가 없으므로, CVC 불일치 시 강제 거절은 정당한 구매자(카드를 손에 들고 있음)에게 비용 없이 테스트 트래픽의 상당 부분을 걸러낸다. CVC 값을 절대 저장하지 마라 — 이는 규정 위반이자 어차피 재사용할 수 없으므로 무의미하다.
2. 결제 및 카드 저장 엔드포인트에 CAPTCHA를 추가하라
테스트는 압도적으로 봇이 주도하므로, 카드를 검증할 수 있는 모든 엔드포인트 — 결제, 카드 저장, 지갑 충전, 기부 제출 — 에 CAPTCHA를 넣으면 대부분의 공격 스크립트가 즉시 무력화된다. 실제 고객이 퍼즐을 보지 않도록 보이지 않는 점수 기반 CAPTCHA로 시작하고, 공격이 진행 중이면 일시적으로 보이는 챌린지로 전환하라. 두 가지 구현 세부 사항이 매우 중요하다: CAPTCHA 토큰을 서버 측에서 검증하라(클라이언트 측 JavaScript만으로는 안 됨 — 봇은 브라우저를 건너뛴다), 그리고 검사가 메인 결제 페이지만이 아니라 모든 카드 검증 요청을 포함하도록 하라.
3. 속도 제한을 설정하라
속도 규칙은 동일한 주체가 시간 창 내에서 결제를 시도할 수 있는 횟수를 제한한다. 소규모 판매자를 위한 합리적인 시작점:
- IP 주소당 시간당 및 일당 최대 시도 횟수
- 이메일 주소, 계정, 기기당 일당 최대 서로 다른 카드 수
- 하나의 IP 주소에서 일당 생성되는 최대 신규 고객 계정 수
- 단기간 내 동일 저가 SKU의 최대 구매 횟수
핵심 단어는 "차원을 넘나드는 동일 주체"다 — 테스터는 카드를 순환하지만 종종 IP, 이메일, 기기를 재사용하므로 어느 한 차원에 대한 규칙이라도 그들을 잡는다. 주요 결제 대행사에 번들된 것을 포함한 대부분의 사기 플랫폼은 이를 구성 가능한 규칙으로 지원한다. 임계값은 실제 최대 트래픽에 맞춰 조정하라(제품 출시나 기부의 날(Giving Tuesday) 급증이 자체 방어를 작동시켜서는 안 된다).
4. 각 시도의 비용을 높여라
작은 구조적 변화는 전환에 큰 영향을 주지 않으면서 양식을 더 나쁜 표적으로 만든다:
- 결제에 로그인을 요구하라, 최소한 결제 수단 저장에는. 이메일 인증을 포함한 계정 생성을 강제하면 스크립트 속도가 극적으로 느려진다.
- 여전히 전환되는 최소 청구 금액을 설정하라. 기부 최소 금액을 1달러에서 5달러로 올리면 실제 기부자에게는 거의 영향이 없고 각 탐색 비용이 다섯 배가 된다.
- 최종 승인 전에 약간의 지연이나 확인 단계를 추가하라. 사람은 1초의 멈춤을 눈치채지 못하지만, 시간당 수천 건의 시도를 실행하는 스크립트는 즉시 느낀다.
5. 위험한 트래픽에 3D Secure를 켜라
3D Secure 2는 인증된 거래에 대한 책임을 발급사로 전가하고 카드 미소지 사기를 극적으로 줄인다 — 업계 데이터는 적용 시 약 70% 감소를 시사한다. 전환 트레이드오프는 실재하므로 현명한 방법은 선택적이다: 위험 규칙(새 기기, 불일치 지역, 속도 플래그)을 위반하는 거래에만 챌린지를 요구하고 신뢰하는 재방문 고객은 마찰 없이 통과하게 하라.
6. 공격 중에 무엇을 해야 하는지 알라
이전 섹션의 알림이 새벽 2시에 울리면, 플레이북은 이렇다:
- 성공한 사기 결제를 즉시 환불하라. 환불은 처리 수수료만 든다. 분쟁은 그 수수료에 15~25달러와 비율 손상을 더한다. 환불이 항상 더 저렴한 출구다.
- 일시적으로 규칙을 강화하라. 속도 임계값을 낮추고, CAPTCHA를 보이는 것으로 전환하고, 3D Secure를 광범위하게 활성화하라. 물결이 지나간 후 완화할 수 있다.
- 사기꾼의 카드를 재시도하지 마라. 공격적인 독촉과 스마트 재시도 로직은 사기 계정의 저장된 카드를 다시 발동시켜 사실상 자기 자신에게 공격을 반복할 수 있다. 최근 생성되고 이행된 적 없는 계정은 재시도 시퀀스에서 제외하라.
- 차단하고 보고하라. 악용 IP와 기기 지문을 차단하고, 로그를 보존하며, 결제 대행사에 보고하라 — 초기 보고는 발생한 분쟁에 맥락이 필요할 때 도움이 된다.
수습을 위한 부기 (이것을 건너뛰지 마라)
사기 사건은 부실하게 기록하면 몇 달간 지속되는 회계 엉망을 만든다. 상황이 정리되면:
- 분쟁 수수료를 별도의 비용 계정에 추적하라, 처리 수수료와 분리하여. 함께 묶으면 사건의 실제 비용이 숨겨지고 새로운 통제가 효과가 있었는지 측정할 수 없게 된다.
- 총액에서 순액으로 신중하게 조정하라. 테스트 승인, 환불, 지불 거절은 모두 다른 시점에 지급금에 영향을 준다. 대시보드 합계를 믿지 말고 영향을 받은 기간의 결제 대행사 지급금을 주문 기록과 항목별로 조정하라.
- 사기 손실을 명시적으로 기록하라. 회수되지 않은 지불 거절은 잡다한 계정에 묻어둘 수익 반전이 아니라 실제 비용이다. 전용 사기 손실 계정에 기록하면 마진이 정직하게 유지되고 보험이나 세금 목적에 깨끗한 숫자를 제공한다.
- 준비금을 주시하라. 결제 대행사는 사기 급증 후 때때로 롤링 준비금을 부과하거나 인상한다. 그것은 손댈 수 없는 현금이다 — 운영 계정이 준비금 보류로 놀라지 않도록 예측에 반영하라.
장부가 이미 처리 수수료, 환불, 지불 거절 손실을 별도 계정으로 분리하고 있다면 이 정리는 반나절이면 된다. 모두 하나의 "Stripe 수수료" 버킷에 들어간다면 일주일이 걸린다. 오늘 하는 지루한 계정과목표 작업이 다음 사건을 견딜 수 있게 만드는 것이다 — 그리고 장부에 그 정리가 필요하다면 계정 구조화에 관한 Beancount 문서가 좋은 참고 자료다.
결제 페이지와 장부를 사기에 적대적으로 유지하라
카드 테스트는 나아지지 않고 악화되고 있다: 자동화 공격은 계속 증가하고 모든 온라인 판매자가 피해 범위 안에 있다. 가장 큰 피해를 입는 판매자는 탐색당하는 사람들(모두가 탐색당한다)이 아니라 거절률 알림도, 속도 제한도, 새벽 2시 사건에 대한 계획도 없는 사람들이다. 트래픽이 정상일 때 지금 이 가이드의 통제 수단을 적용하면, 다음 급증은 위기가 아니라 알림이 된다.
그리고 사기 청구, 환불, 분쟁 수수료가 장부에 닿을 때, 진실을 말해주는 계정에 기록되도록 하라. Beancount.io는 재무 데이터에 완전한 투명성과 통제를 제공하는 플레인 텍스트 회계를 제공한다 — 블랙박스도, 벤더 종속도 없다. 무료로 시작하세요 그리고 개발자와 재무 전문가들이 왜 플레인 텍스트 회계로 전환하고 있는지 확인하세요.





