이 예시에서는 넷플릭스로 위장하고 피해자를 실시간으로 조종하는 피싱 캠페인을 분석해 보겠습니다. 이는 일반적인 정적 HTML 양식이 아니라 본격적인 피싱 서비스입니다. 사용자는 여러 단계를 거치며, 운영자는 제어판을 통해 사용자를 다음 단계(로그인, 카드 정보, SMS 코드, PIN 코드 입력 또는 앱 내 확인)로 어디로 안내할지 결정합니다.
별도로, 저희는 해당 피싱 사이트의 제어판에 접근하여 이를 분석함으로써 이러한 작동 방식을 확인했습니다.
이 글에서는 제어판에 접근하는 방법을 설명하지는 않지만, 제어판이 존재한다는 사실 자체를 운영 모델의 증거로 삼습니다. 즉, 공격은 백엔드 인터페이스를 통해 수동 또는 반자동으로 제어되었습니다.
0. 미끼

사용자가 가장 먼저 받는 것은 조치를 취해야 한다는 내용의 표준적인 사회공학 전술이 담긴 이메일입니다. 공격자들은 사용자가 즐겨 보는 TV 프로그램 시청이 중단될 수 있다는 점을 이용해 사용자의 주의를 끌고자 합니다. 이메일 필터를 우회하고 최종 피싱 도메인을 숨기기 위해, 공격자들은 소셜 네트워크 X의 인프라를 통해 단축된 링크를 사용합니다: https://t.co/XXXXXXX
언뜻 보기에는 일반적인 링크처럼 보이기 때문에 t.co를 통해 제공되는 평범한 링크처럼 보이기 때문에, 사용자와 일부 자동 필터 모두에게 덜 의심스럽게 보입니다.
클릭 후 사용자는 바로 주요 피싱 페이지로 이동하지 않습니다. 먼저 중간 리소스로 이동하게 됩니다.
1. 중간 리디렉터로 사용되는 공개 S3 버킷
링크는 공개 S3 버킷으로 연결됩니다: https://access-authority-2faXXXXX.s3.eu-north-1.amazonaws.com/index.html
이 단계는 필터 및 리디렉터 역할을 수행합니다.
index.html 국가 및 사전에 알려진 IP 주소를 기준으로 필터링 기능을 포함하고 있습니다. 이를 통해 연구자, 자동 스캐너, 샌드박스 및 보안 시스템에 실제 피싱 사이트를 노출하지 않을 수 있습니다.
필터를 통과한 후 사용자는 간단한 HTML 리디렉션을 받게 됩니다:
<meta http-equiv="refresh" content="1;url=https://www.XXXXX.help/index.html">
도메인은 CAPTCHA 해결 서비스로 위장되어 있습니다. 이는 편리한 위장 수단입니다: 사용자는 기술적인 명칭을 보고, 브라우저의 중간 검증, CAPTCHA 또는 보안 검증 절차라고 생각할 수 있습니다.

실제로는 피싱 인프라입니다.
이미 이 단계에서 기기의 지문 인식이 진행됩니다. 코드는 다음과 같은 사용자 이벤트를 수집합니다:
- mousemove
- touchmove
- keyup
- Backspace
- deviceorientation
이 스크립트는 이벤트 발생 사실뿐만 아니라 그 매개변수도 분석합니다:
- 이동 속도;
- 이벤트 간 간격;
- 정규화된 좌표;
- 방향 변화의 급격함;
- 키보드 동작;
- 기기 방향;
- 터치/마우스 프로필.
이는 방문자가 실제 사람인지 여부를 평가하는 데 사용됩니다.
텔레메트리 난독화 및 “암호화”
일부 텔레메트리 데이터는 전송 전에 AES-CBC를 통해 암호화됩니다: crypto.subtle.encrypt({ name: 'AES-CBC', iv: ... }, key, data)
코드에는 디버깅 방지 로직이 포함되어 있습니다. 스크립트는 debugger 를 추출하여 new Function()를 통해 호출합니다. 실행이 지연될 경우, 페이지는 /misc/index.php?r=<random> 매개변수 bcl
이는 사용자가 DevTools를 열었는지, 아니면 JavaScript 실행이 브레이크포인트에서 중단되었는지 파악하려는 시도로 보입니다. 백엔드는 동작을 변경하여 실제 흐름을 숨기고 오류를 표시하거나 사용자를 정식 Netflix 사이트로 리디렉션할 수 있습니다.
"캡차"를 성공적으로 통과하면 main/prepare.php
2. 첫 번째 단계: 로그인 및 비밀번호 수집

공격의 첫 번째 실제 단계는 지도나 SMS가 아닙니다. 먼저 사용자는 넷플릭스 로그인 화면을 모방한 페이지로 이동합니다.
이 단계에서 공격자는 이메일과 비밀번호를 수집합니다.
중요: 공격은 계정 탈취로 시작되며, 그 후에야 결제 정보로 넘어갑니다.
POST 양식을 전송한 후, 페이지는 사용자를 다음 단계인 “결제 카드 확인”으로 이동시킵니다.
따라서 이후의 결제 단계가 완료되지 않더라도, 공격자들은 이미 귀중한 결과인 계정 접근 권한을 확보하게 됩니다.
3. 두 번째 단계: 카드 정보 입력

로그인 및 비밀번호를 입력한 후, 사용자는 결제 확인 페이지로 리디렉션됩니다.
이 단계에서 시나리오는 Netflix에 등록된 카드를 확인해야 하는 것처럼 위장합니다. 사용자는 정식 결제 절차와 유사한 인터페이스를 보고 결제 정보를 입력합니다.
이 단계의 목적은 다음 정보를 수집하는 것입니다:
- 카드 소지자 이름
- 카드 번호
- 유효 기간
- CVV/CVC
이 과정에서 지속적으로 텔레메트리 데이터가 전송됩니다:

4. 세 번째 단계: 로딩 화면 및 상담원 대기

카드 정보를 입력한 후 사용자는 대기 페이지로 이동합니다. 바로 이 HTML 코드가 우리가 분석한 아티팩트에서 확인된 것입니다.
페이지에는 다음과 같은 메시지가 표시됩니다:
카드 인증을 완료하려면 추가 검증이 필요합니다
휴대폰으로 짧은 메시지를 받게 될 것입니다...
겉보기에는 일반적인 은행 확인 대기 화면처럼 보입니다. 하지만 기술적으로 이는 단순한 “대기 화면”이 아니라, 백엔드나 운영자가 다음 단계를 결정하는 동안 사용자의 세션을 유지하는 지점입니다.
5. WebSocket을 통한 실시간 제어

주요 제어 메커니즘은 WebSocket입니다. 요청 하단에 열린 wss:// 요청이 열려 있는 것을 확인할 수 있습니다. 페이지는 WebSocket에 연결되어 백엔드로부터 명령을 기다립니다. HTML에는 운영자가 사용자를 다양한 화면으로 안내할 수 있는 로직이 구현되어 있습니다:
| 코드 | 경로 | 설명 |
|---|---|---|
| 1 | ./app.php | 은행 앱의 인증 요청 페이지 |
| 2 | ./payment.php | 오류 발생 시 카드 정보 재입력 요청 |
| 3 | ./sms.php | SMS에서 받은 코드 입력 페이지 |
| 4 | ./pin.php | 카드 PIN 입력 페이지 |
| 5 | https://netflix.com | 실제 Netflix 사이트로 리디렉션 |
사용자가 입력한 카드는 자동 또는 반자동 모드로 다양한 상점에서 결제에 사용되기 시작합니다. 이는 악의적인 공격자가 통제하는 가짜 상점일 가능성이 높습니다.
바로 이 지점에서 실시간(real-time) 요소가 특히 위험해집니다. 공격자는 결제 시스템이 어떤 유형의 인증을 요청했는지 파악하고, 공격 시점에 맞춰 피싱 페이지를 조정할 수 있습니다. 때로는 앱 내 인증을, 때로는 SMS 코드나 카드 PIN 코드를 요청하는 식입니다.
6. 관리자 패널을 통한 인증
피싱 사이트의 작동 방식을 분석한 후, 우리는 해당 패널의 취약점을 찾아보기로 결정했습니다. 그 과정에서 해당 패널 제작자로부터 꽤 이상한 ‘이스터 에그’를 발견하기도 했습니다.

로그를 통해 볼 때, 24시간 동안 최소 4명의 서로 다른 관리자가 4~7시간 간격으로 관리자 패널에 접속한 것으로 확인할 수 있습니다.
또한 패널에서 2082, 2095, 8880, 1010번 포트가 추가로 열려 있는 것을 발견했는데, 이를 통해 사기 사이트가 CloudFlare 뒤에 숨어 있음에도 실제 IP를 파악할 수 있었습니다.
인터넷 서비스 제공업체에 알림을 보냈습니다.
7. 침해 징후
도메인
*.solvecaptcha.help
8. 결론
이 캠페인은 현대의 피싱 서비스가 평범한 로그인 페이지를 실시간으로 제어되는 작전으로 어떻게 변모시키는지 보여줍니다.
공격자는 먼저 로그인 정보와 비밀번호를 확보한 뒤, 결제 정보를 수집하고, 이후 사용자를 로딩 화면에 묶어둡니다. 이 시점에서 백엔드/관리자 패널의 운영자는 다음 단계로 SMS 코드, PIN 코드, 앱 내 확인 절차, 또는 실제 Netflix 사이트로의 최종 리디렉션 중 어떤 것을 표시할지 결정합니다.
이 수법의 주요 기술적 특징은 WebSocket 제어입니다. 바로 이 기능 덕분에 공격이 상호작용적으로 이루어지며, 운영자가 특정 피해자와 특정 은행 업무 흐름에 맞춰 시나리오를 조정할 수 있게 됩니다.
이것은 더 이상 단순한 “피싱 페이지”가 아닙니다. 이는 실시간 피싱 작전(live phishing operation)입니다.