블로그

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

 썸네일
2017년 7월 12일 게시


CAPTCHA(Completely Automated Public Turing test to tell Computer and Humans Apart)는 원래 봇, 맬웨어 및 인공 지능(AI)이 웹 페이지와 상호 작용하는 것을 방지하기 위해 설계되었습니다. 90년대에는 이는 스팸 봇을 방지하는 것을 의미했습니다. 요즘에는 기업에서는 신임장 정보 입력과 같은 더욱 사악한 자동화된 공격을 방지하기 위해 CAPTCHA를 사용합니다.

그러나 CAPTCHA가 도입되자마자 사이버범죄자들은 이를 우회하는 효과적인 방법을 개발했습니다. 선량한 사람들은 "강화된" CAPTCHA로 대응했지만 결과는 똑같습니다. 자동화를 중지하려는 테스트는 자동화로 우회됩니다.

CAPTCHA를 해독할 수 있는 방법은 여러 가지가 있습니다. 일반적인 방법은 CAPTCHA 해결 서비스를 사용하는 것인데, 이는 개발도상국의 저비용 인력을 활용하여 CAPTCHA 이미지를 해결합니다. 사이버범죄자들은 CAPTCHA 솔루션 서비스에 가입하여 API를 통해 자동화 도구를 간소화하고 대상 웹사이트에 답변을 채웁니다. 이런 불법적인 기업은 너무나 흔해서 Google로 간단히 검색하면 다음을 포함한 많은 기업을 찾을 수 있습니다.

  • CAPTCHA로 사망
  • 2캡차
  • 콜로티바블로
  • 프로타이퍼스
  • 안티게이트

이 문서에서는 2Captcha를 사용하여 공격자가 신임장 정보 입력 공격을 조직하기 위해 솔루션을 통합하는 방법을 설명합니다.

2캡차

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를 사용하여 2Captcha 서비스에 CAPTCHA를 보내고 2Captcha에 제출된 CAPTCHA 이미지에 부여된 숫자 ID인 Captcha ID를 받습니다. ID는 5단계에서 2Captcha에 대한 API GET 요청을 통해 해결된 CAPTCHA를 검색하는 데 사용됩니다.
  4. 2Captcha는 담당자에게 CAPTCHA를 할당하고 담당자는 이를 풀어 2Captcha에 솔루션을 제출합니다.
  5. 공격자는 CAPTCHA ID를 사용하여 2Captcha를 ping하는 스크립트를 프로그램합니다(문제가 해결될 때까지 5초마다). 그러면 2Captcha가 해결된 CAPTCHA를 전송합니다. 해결책이 아직 풀리지 않은 경우 공격자는 "CAPTCHA_NOT_READY"를 나타내는 2Captcha 게시물을 받고 프로그램은 5초 후에 다시 시도합니다.
  6. 공격자는 훔친 목록의 자격 증명 세트와 함께 필드가 채워진 로그인 요청을 대상 사이트에 CAPTCHA 솔루션과 함께 보냅니다.
  7. 공격자는 각 CAPTCHA 이미지마다 이 프로세스를 반복합니다.

Selenium이나 PhantomJS와 같은 웹 테스트 프레임워크와 결합하면 공격자는 마치 사람과 같은 방식으로 대상 웹사이트와 상호 작용하여 기존 보안 조치를 효과적으로 우회하여 자격 증명 채우기 공격을 실행할 수 있습니다.

화폐화 및 범죄 생태계

이렇게 우아한 솔루션이 도입되면, 금융 생태계는 어떻게 구성되고, 각 당사자는 어떻게 수익을 창출할까?

수익화: CAPTCHA 솔버

CAPTCHA 솔버로 일하는 것은 수익성이 전혀 없습니다. 2Captcha 웹사이트에 제공된 메트릭을 기준으로 다음과 같은 지불금을 계산할 수 있습니다.

CAPTCHA 당 6초가 걸린다고 가정하면, 근로자는 분당 10개의 CAPTCHA, 시간당 600개의 CAPTCHA를 제출할 수 있습니다. 하루 8시간이면 4,800개의 CAPTCHA가 됩니다. 2Captcha의 직원으로서 체험 기간 동안 얻은 수익(솔루션당 약 0.0004달러)을 기준으로 하면 하루에 1.92달러에 해당합니다.

선진국에 사는 사람들에게는 시간 낭비일 수 있지만, 하루에 몇 달러만 써도 비교적 돈을 벌 수 있는 지역에 사는 사람들에게는 CAPTCHA 해결 서비스는 돈을 벌 수 있는 쉬운 방법입니다.

수익화: 공격자

공격자는 제3자 2Captcha에 CAPTCHA 솔루션 1000개를 묶음으로 제공하는 비용을 지불합니다. 공격자는 솔루션에 입찰하여 패키지당 1달러에서 5달러 사이의 가격을 지불합니다.

많은 공격자는 CAPTCHA 해결 서비스를 대규모 신임장 정보 채우기 공격의 구성 요소로 사용하며, 이는 비용을 정당화합니다. 예를 들어, 공격자가 대상 사이트에서 Pastebin의 100만 개의 자격 증명을 테스트하기 위해 공격을 시작한다고 가정합니다.  이 시나리오에서 공격자는 각 자격 증명 세트로 하나의 CAPTCHA를 우회해야 하며, 이에 드는 비용은 약 1000달러입니다.  자격 증명 재사용 성공률이 1.5%라고 가정하면 공격자는 15,000개가 넘는 계정을 인수할 수 있으며, 이를 모두 수익화할 수 있습니다.

수익화: 2캡차

2Captcha는 공격자로부터 1000개의 CAPTCHA당 비용을 받습니다. 앞서 언급했듯이 고객(즉, 공격자)은 1000개의 CAPTCHA당 1~5달러를 지불합니다. 2Captcha와 같은 서비스는 입찰 가격의 일부를 가져가고 나머지는 인력에게 분배합니다. CAPTCHA 해결 서비스는 대규모 솔루션으로 사용되기 때문에 수익이 꽤 많이 쌓입니다. 2Captcha가 1000개의 CAPTCHA를 풀 때마다 1달러만 받는다고 해도 묶음당 최소 60센트의 수익을 냅니다. 이러한 사이트의 소유주가 개발도상국에 있는 경우가 많기 때문에 수익이 낮아 보일지라도 실제로는 상당히 높은 수준입니다.

Google의 Invisible reCAPTCHA는 어떤가요?

올해 3월, 구글은 "Invisible reCAPTCHA"라는 reCAPTCHA의 업그레이드 버전을 출시했습니다. 모든 사용자가 악명 높은 "로봇이 아닙니다" 버튼을 클릭해야 하는 "CAPTCHA reCAPTCHA 없음"과 달리, Invisible reCAPTCHA는 의심스러운 사용자에게만 reCAPTCHA 이미지 챌린지를 제공하는 반면, 알려진 인간 사용자는 통과할 수 있도록 허용합니다.

공격자는 자신이 테스트를 받고 있다는 것을 알 수 없으므로 당황할 것이라고 생각할 수도 있습니다. 그런데 Google이 Invisible reCAPTCHA를 도입한 지 딱 하루 만에 2CAPTCHA는 이를 극복하는 방법에 대한 블로그 게시물을 작성했습니다 .

Google이 사용자가 인간인지 판단하는 방법은 사용자가 이전에 요청한 페이지를 방문했는지 확인하는 것입니다. Google은 브라우저의 쿠키를 확인하여 이를 판단합니다. 동일한 사용자가 새 기기를 사용하기 시작하거나 최근에 캐시를 지운 경우 Google은 해당 정보를 보유하지 않으므로 reCAPTCHA 인증을 요청해야 합니다.

공격자가 2Captcha를 사용하여 자격 증명 채우기 공격을 자동화하려면 CAPTCHA 챌린지를 보장해야 합니다. 따라서 Invisible reCAPTCHA를 우회하는 한 가지 방법은 각 요청마다 브라우저를 지우는 코드 줄을 공격 스크립트에 추가하여 해결 가능한 reCAPTCHA 챌린지를 보장하는 것입니다.

Invisible reCAPTCHA의 약간 까다로운 점은 CAPTCHA 챌린지가 숨겨져 있다는 점인데, 이를 해결할 방법이 있습니다. CAPTCHA는 브라우저 도구의 '요소 검사'를 사용하여 '찾을' 수 있습니다. 따라서 공격자는 숨겨진 CAPTCHA의 위치를 자세히 설명하는 매개변수를 포함한 POST를 2Captcha로 보낼 수 있습니다. 공격자가 2Captcha로부터 CAPTCHA 솔루션을 받으면 다음 두 가지 방법 중 하나를 통해 자동화를 통해 Invisible reCAPTCHA를 무력화할 수 있습니다.

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

Invisible reCAPTCHA를 우회할 수 있다는 사실은 새로운 CAPTCHA의 설계에 치명적인 결함이 있었기 때문이 아닙니다. 통과 조건이 알려져 있는 경우 모든 역 튜링 테스트는 본질적으로 이길 수 있다는 것입니다.

CAPTCHA가 있는 한 2Captcha와 같은 서비스가 계속 존재할 것입니다. 왜냐하면 경제적 이점이 범죄자의 손에 매우 유리하기 때문입니다. 저렴한 인력을 활용하면 사업 비용이 최소화되고 사이버 범죄자들은 규모에 따라 수백만 달러가 넘는 수익을 올릴 수 있습니다. 그리고 저렴한 노동 비용이 있는 지역은 항상 존재할 것이므로, 끊임없는 수요는 2Captcha 측에서 끊임없는 공급을 보장합니다.

이러한 접근 방식에는 근본적인 한계가 있기 때문에 세상은 더 나은 CAPTCHA를 개발할 필요가 없습니다. 대신, 우리는 그러한 한계를 인정하고, 통과 조건을 알 수 없거나 적어도 공격자가 알아내기 어려운 방어 수단을 구현해야 합니다.

출처

홈스, 타마라 E. “선불 카드 및 기프트 카드 통계.” 크레딧카드 닷컴(CreditCards.com) Creditcards.com, 2015년 12월 1일. 편물.

헌트, 트로이. “자동화된 인간으로 CAPTCHA를 깨다.” 블로그 게시물. 트로이 헌트 . 트로이 헌트, 2012년 1월 22일. 편물.

모토야마, 마르티, 키릴 레브첸코, 크리스 카니치, 슈테판 새비지. 답장: CAPTCHA - 경제적 맥락에서 CAPTCHA 해결 서비스 이해 . 19th USENIX Security Symposium, 워싱턴 DC의 Proc. 인쇄.