사이버 범죄자들이 CAPTCHA를 우회하는 방법

F5 에코시스템 | 2017년 7월 12일


CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart, 컴퓨터와 인간을 구별하기 위한 완전 자동화된 공개 튜링 테스트)는 원래 봇, 멀웨어, 인공지능(AI)이 웹 페이지와 상호 작용하지 못하도록 설계되었습니다. 1990년대에는 스팸 봇을 차단하는 것이 주된 목적이었습니다. 오늘날에는 조직들이 크리덴셜 스터핑과 같은 더욱 악의적인 자동화 공격을 방지하기 위해 CAPTCHA를 사용합니다.

하지만 CAPTCHA가 도입되자마자 사이버 범죄자들은 이를 우회할 수 있는 효과적인 방법을 개발했습니다. 이에 방어 측에서는 보안이 강화된 CAPTCHA로 대응했지만, 결과는 여전히 같습니다. 자동화를 막기 위한 테스트가 자동화로 우회되고 있는 것입니다.

CAPTCHA를 무력화하는 방법은 여러 가지가 있습니다. 일반적인 방법 중 하나는 개발도상국의 저임금 인력을 활용해 CAPTCHA 이미지를 풀어 주는 CAPTCHA 해결 서비스를 이용하는 것입니다. 사이버 범죄자들은 CAPTCHA 해결 서비스에 가입한 뒤 API를 통해 이를 자동화 도구와 연동하여 대상 웹사이트에 정답이 자동으로 입력되도록 합니다. 이러한 수상한 업체는 매우 흔해서 Google에서 간단히 검색하기만 해도 다음과 같은 여러 업체를 찾을 수 있습니다:

  • DeathbyCAPTCHA
  • 2Captcha
  • Kolotibablo
  • ProTypers
  • Antigate

이 글에서는 공격자가 크리덴셜 스터핑 공격을 조직적으로 수행하기 위해 2Captcha 솔루션을 어떻게 통합하는지 살펴봅니다.

2Captcha

2Captcha.com 사이트에 접속하면 아래 이미지가 표시되며, 방문자에게 1) 2Captcha에서 일할 것인지, 아니면 2) 2Captcha 서비스를 구매할 것인지 묻습니다.

사이버 범죄자들이 CAPTCHA를 우회하는 방법

옵션 1 – 2Captcha에서 일하기

2Captcha에서 일하려면 이메일 주소와 대금을 지급받을 PayPal 계정을 입력해 간단히 계정을 등록하면 됩니다. 테스트 결과, 계정은 몇 분 만에 인증되었습니다.

신규 작업자는 CAPTCHA를 빠르게 푸는 방법을 알려 주는 일회성 교육 과정을 이수해야 합니다. 또한 대소문자 구분이 필요한 경우와 그렇지 않은 경우 등 유용한 팁도 제공합니다. 충분한 정확도로 교육을 완료하면 작업자는 수익을 올리기 시작할 수 있습니다.

사이버 범죄자들이 CAPTCHA를 우회하는 방법

“작업 시작”을 선택하면 작업자는 위에 표시된 작업 공간 화면으로 이동합니다. 그러면 CAPTCHA가 제시되고 정답을 제출하라는 안내가 표시됩니다. 정답을 맞히면 전자 “지갑”에 돈이 입금되며, 작업자는 원할 때 언제든지 지급을 요청할 수 있습니다. 작업 공간에는 CAPTCHA가 끊임없이 나타나는 것으로 보이며, 이는 해당 서비스에 대한 수요가 꾸준하다는 것을 보여줍니다.

사이버 범죄자들이 CAPTCHA를 우회하는 방법

2Captcha 작업자들이 정답을 제출하도록 유도하는 방식은 Uber 운전자가 우수한 서비스를 제공하도록 유도하는 방식과 마찬가지로 고객 평점에 기반합니다. 2Captcha 고객은 자신이 받은 CAPTCHA 답변의 정확도를 평가합니다. 2Captcha 작업자의 평점이 일정 기준 아래로 떨어지면 해당 작업자는 플랫폼에서 퇴출됩니다. 반대로 평점이 가장 높은 작업자는 수요가 적을 때 CAPTCHA를 우선 배정받는 혜택을 받습니다.

옵션 2 – 서비스로서의 2Captcha

2Captcha를 서비스로 이용하려면 고객(즉, 공격자)이 공격에 2Captcha API를 통합해 디지털 공급망을 구축합니다. 그러면 대상 사이트의 CAPTCHA 퍼즐이 자동으로 전송되고, 대상 사이트에 입력할 정답을 받아볼 수 있습니다.

2Captcha는 유용하게도 C#, JavaScript, PHP, Python 등 다양한 프로그래밍 언어로 API 호출을 생성할 수 있는 예제 스크립트를 제공합니다. 아래에는 Python으로 작성된 예제 코드를 그대로 옮겨 놓았습니다:

사이버 범죄자들이 CAPTCHA를 우회하는 방법

자동화된 공격에 2CAPTCHA 통합하기

공격자는 크리덴셜 스터핑 공격에 2Captcha를 어떻게 사용할까요? 아래 다이어그램은 CAPTCHA 우회 과정에서 각 주체가 어떻게 상호 작용하는지 보여줍니다:

사이버 범죄자들이 CAPTCHA를 우회하는 방법

기술적 과정:

  1. 공격자는 대상 사이트에서 CAPTCHA 이미지를 삽입하는 데 사용되는 CAPTCHA iframe 소스와 URL을 요청하여 로컬에 저장합니다.
  2. 공격자가 2Captcha 웹사이트에서 API 토큰을 요청합니다
  3. 공격자는 HTTP POST를 사용하여 CAPTCHA를 2Captcha 서비스로 전송하고 Captcha ID를 받습니다. Captcha ID는 2Captcha에 제출된 CAPTCHA 이미지에 할당되는 숫자 ID입니다. 이 ID는 5단계에서 2Captcha에 API GET 요청을 보내 해결된 CAPTCHA를 가져오는 데 사용됩니다.
  4. 2Captcha는 CAPTCHA를 작업자에게 할당하고, 작업자는 이를 해결한 후 그 답을 2Captcha에 제출합니다.
  5. 공격자는 CAPTCHA ID를 사용해 2Captcha에 요청을 보내도록 스크립트를 프로그래밍합니다(해결될 때까지 5초마다 요청). 그러면 2Captcha가 해결된 CAPTCHA를 전송합니다. 아직 CAPTCHA를 해결 중인 경우 공격자는 2Captcha로부터 “CAPTCHA_NOT_READY”라는 응답을 받고, 프로그램은 5초 후 다시 시도합니다.
  6. 공격자는 필드에 값(즉, 탈취된 목록에서 가져온 자격 증명 세트)을 입력하고 CAPTCHA 해답과 함께 대상 사이트에 로그인 요청을 보냅니다.
  7. 공격자는 각 CAPTCHA 이미지에 대해 이 과정을 반복합니다.

Selenium 또는 PhantomJS와 같은 웹 테스트 프레임워크를 함께 사용하면 공격자는 대상 웹사이트와 사람이 직접 상호작용하는 것처럼 위장하여 기존의 여러 보안 조치를 효과적으로 우회하고 크리덴셜 스터핑 공격을 감행할 수 있습니다.

수익화 및 범죄 생태계

이처럼 정교한 솔루션이 마련된 상황에서 금융 생태계는 어떤 모습이며, 각 당사자는 어떻게 수익을 창출할까요?

수익화: CAPTCHA 해결 서비스

CAPTCHA 풀이 작업은 수익성이 높다고 보기 어렵습니다. 2Captcha 웹사이트에 제공된 지표를 바탕으로 계산하면 수익은 다음과 같습니다:

CAPTCHA 하나를 푸는 데 6초가 걸린다고 가정하면, 작업자는 분당 10개, 시간당 600개의 CAPTCHA를 제출할 수 있습니다. 하루 8시간 동안 작업하면 총 4,800개입니다. 2Captcha 작업자로 직접 체험하며 얻은 수익(문제 하나당 약 $0.0004)을 기준으로 계산하면 하루 수입은 $1.92입니다.

선진국에 사는 사람들에게는 시간 낭비이지만, 하루에 몇 달러만으로도 비교적 넉넉하게 생활할 수 있는 지역에 사는 사람들에게 CAPTCHA 풀이 서비스는 손쉽게 돈을 벌 수 있는 방법입니다.

수익화: 공격자

공격자는 제3자인 2Captcha에 CAPTCHA 솔루션 1,000개 묶음 단위로 비용을 지불합니다. 공격자들은 솔루션을 입찰하며, 묶음당 1달러에서 5달러 사이를 지불합니다.

많은 공격자는 대규모 크리덴셜 스터핑 공격의 한 요소로 CAPTCHA 해결 서비스를 사용하며, 이는 비용을 지불할 만한 가치가 있습니다. 예를 들어 공격자가 Pastebin에서 가져온 100만 개의 자격 증명을 대상 사이트에서 테스트하는 공격을 수행한다고 가정해 보겠습니다. 이 경우 공격자는 각 자격 증명 세트마다 CAPTCHA 하나를 우회해야 하며, 비용은 약 1,000달러입니다. 자격 증명 재사용 성공률을 1.5%로 가정하면 공격자는 15,000개의 계정을 탈취할 수 있으며, 이를 모두 수익화할 수 있습니다.

수익화: 2Captcha

2Captcha는 CAPTCHA 1,000개당 공격자로부터 대금을 받습니다. 앞서 언급했듯이 고객(즉, 공격자)은 CAPTCHA 1,000개당 1~5달러를 지불합니다. 그러면 2Captcha와 같은 서비스는 입찰가의 일부를 수수료로 떼고 나머지를 인력에게 지급합니다. CAPTCHA 해결 서비스는 대규모로 활용되므로 수익이 상당히 누적됩니다. 2Captcha가 해결된 CAPTCHA 1,000개당 1달러만 받더라도 묶음당 최소 60센트의 순수익을 올립니다. 이러한 사이트의 소유자 역시 개발도상국에 거주하는 경우가 많기 때문에, 겉보기에는 적어 보이는 수익도 상당한 금액입니다.

Google의 Invisible reCAPTCHA는 어떨까요?

올해 3월, Google은 reCAPTCHA의 업그레이드 버전인 ‘Invisible reCAPTCHA’를 출시했습니다. 모든 사용자에게 악명 높은 ‘로봇이 아닙니다’ 버튼을 클릭하도록 요구했던 ‘no CAPTCHA reCAPTCHA’와 달리, Invisible reCAPTCHA는 사람으로 확인된 사용자는 그대로 통과시키고 의심스러운 사용자에게만 reCAPTCHA 이미지 인증을 제시합니다.

공격자들은 자신이 언제 테스트를 받고 있는지 알 수 없으므로 이를 뚫지 못할 것이라고 생각할 수도 있습니다. 하지만 Google이 Invisible reCAPTCHA를 공개한 지 불과 하루 만에 2CAPTCHA는 이를 우회하는 방법에 관한 블로그 게시물을 작성했습니다.

Google은 사용자가 이전에 요청된 페이지를 방문한 적이 있는지를 바탕으로 해당 사용자가 사람인지 판단하며, 이는 브라우저의 쿠키를 확인해 알아냅니다. 동일한 사용자가 새 기기를 사용하기 시작했거나 최근에 캐시를 삭제했다면 Google에는 해당 정보가 없으므로 reCAPTCHA 인증을 요청할 수밖에 없습니다.

공격자가 2Captcha를 사용해 크리덴셜 스터핑 공격을 자동화하려면 CAPTCHA 인증이 반드시 표시되도록 해야 합니다. 따라서 Invisible reCAPTCHA를 우회하는 한 가지 방법은 요청할 때마다 브라우저 데이터를 삭제하는 코드 한 줄을 공격 스크립트에 추가하여, 해결 가능한 reCAPTCHA 인증이 항상 표시되도록 하는 것입니다.

Invisible reCAPTCHA에서 다소 까다로운 점은 CAPTCHA 챌린지가 숨겨져 있다는 것이지만, 이를 우회할 방법이 있습니다. 브라우저의 “요소 검사” 도구를 사용하면 CAPTCHA를 “찾을” 수 있습니다. 따라서 공격자는 숨겨진 CAPTCHA의 위치를 나타내는 매개변수를 포함한 POST 요청을 2Captcha로 보낼 수 있습니다. 공격자가 2Captcha로부터 CAPTCHA 해답을 받으면 다음 두 가지 방법 중 하나를 자동화하여 Invisible reCAPTCHA를 무력화할 수 있습니다:

  1. 페이지 양식을 제출할 때 해결된 토큰을 전달하는 함수를 호출하는 JavaScript 작업
  2. 웹페이지에서 HTML 코드를 직접 변경하여 일반 CAPTCHA 코드 조각을 해결된 토큰 입력값으로 대체합니다.

Invisible reCAPTCHA를 우회할 수 있는 것은 최신 CAPTCHA의 설계에 치명적인 결함이 있기 때문이 아닙니다. 통과 조건이 알려지면 어떤 역 튜링 테스트든 본질적으로 공략할 수 있기 때문입니다.

CAPTCHA가 존재하는 한 2Captcha와 같은 서비스도 계속 존재할 것입니다. 경제적 구조가 범죄자에게 매우 유리하기 때문입니다. 저렴한 인력을 활용하면 사업 비용을 최소화할 수 있고, 사이버 범죄자는 규모가 커질수록 수백만 달러 이상의 수익을 올릴 수 있습니다. 또한 인건비가 저렴한 지역은 전 세계 어디엔가 항상 존재하므로, 끊임없는 수요에 맞춰 2Captcha 측의 공급도 계속 이어질 것입니다.

이러한 접근 방식 전체에는 근본적인 한계가 있으므로, 더 나은 CAPTCHA를 개발할 필요는 없습니다. 대신 이러한 한계를 인정하고, 공격자가 통과 조건을 알 수 없거나 적어도 파악하기 어렵도록 방어 체계를 구현해야 합니다.

출처

Holmes, Tamara E. 「선불카드 및 기프트카드 통계」 CreditCards.com. Creditcards.com, 2015년 12월 1일. 웹.

Hunt, Troy. “자동화된 인간을 이용한 CAPTCHA 무력화.” 블로그 게시물. Troy Hunt. Troy Hunt, 2012년 1월 22일. 웹.

Motoyama, Marti, Kirill Levchenko, Chris Kanich, Stefan Savage. Re: CAPTCHA–경제적 맥락에서 CAPTCHA 해결 서비스 이해하기. 제19회 USENIX 보안 심포지엄 회의록, 워싱턴 D.C. 인쇄본.

공유

관련 블로그 게시물

성평등을 향한 여정: 사이버 보안 분야에서 성공적인 커리어를 개척하는 방법에 관한 Jenn Gile과의 Q&A
F5 에코시스템 | 2023. 07. 13.

성평등을 향한 여정: 사이버 보안 분야에서 성공적인 커리어를 개척하는 방법에 관한 Jenn Gile과의 Q&A

F5의 ‘성평등을 향한 여정’ 시리즈 네 번째 Q&A에서는 Rachael Shah와 NGINX 제품 마케팅 책임자 Jenn Gile이 사이버 보안 직종에 대한 오해를 바로잡고, 사이버 보안 분야의 성별 격차를 해소하기 위한 조언과 그 이점에 대해 이야기합니다.

TLS 검사에서 피터 파커 원칙 다루기
F5 에코시스템 | 2019. 12. 09.

TLS 검사에서 피터 파커 원칙 다루기

“큰 힘에는 큰 책임이 따른다.” 볼테르와 처칠도 이와 비슷한 말을 남겼지만, 이 문구는 스파이더맨 코믹스에서 벤 삼촌의 말로 가장 널리 알려져 있습니다. 물론 이 문구가 문화적으로 널리 통용되는 이유 중 하나는 TLS 검사를 비롯해 수많은 상황과 주제에 적용할 수 있기 때문입니다.

Venafi와 F5를 통한 머신 아이덴티티 보호
F5 에코시스템 | 2018. 12. 11.

Venafi와 F5를 통한 머신 아이덴티티 보호

‘머신 아이덴티티’란 간단히 말해 자동화된 프로세스가 자신의 신원을 식별할 수 있도록 하고, 다른 자동화 시스템과 프로세스가 관련 리소스에 적절한 수준의 접근 권한을 부여하도록 하는 방법을 의미합니다. 이 개념 자체는 새로운 것이 아닙니다. 비교적 새로운 점은 이를 구현해야 하는 규모입니다.

마이너와 미니언: 데이터 유출만이 비용을 초래하는 것은 아닙니다
F5 에코시스템 | 2018. 07. 23.

마이너와 미니언: 데이터 유출만이 비용을 초래하는 것은 아닙니다

물론 데이터 유출은 더 큰 비용을 초래할 수 있고(적어도 지금은), 실패 사실을 세상에 드러낼 수밖에 없게 합니다(통지 의무가 있으니까요). 하지만 보안을 단순히 데이터 노출 문제로만 봐서는 안 됩니다. 요즘은 데이터가...

내 클라우드에서 나가!
F5 에코시스템 | 2016. 10. 12.

내 클라우드에서 나가!

F5의 Jay Kelley가 전하는 최신 소식에는 Microsoft Office 365용 신규 ID 및 액세스 솔루션을 배포할 때 고려해야 할 사항이 정리되어 있습니다.

Shift(웹 앱) 보안 레터
F5 에코시스템 | 2015. 07. 06.

Shift(웹 앱) 보안 레터

웹 앱 보안을 개발 초기 단계로 앞당기세요. F5 블로그에서 DevOps 파이프라인 초기에 보안을 통합하여 취약점을 예방하고 시간을 절약하는 방법을 알아보세요.