SOC Prime Bias: 심각

12 Jan 2026 12:59 UTC

BlueDelta (APT28) 자격 증명 피싱: 무료 호스팅 및 Ngrok 사용

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon 팔로우
BlueDelta (APT28) 자격 증명 피싱: 무료 호스팅 및 Ngrok 사용
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

APT28/Fancy Bear로도 알려진 청갈 매, GRU 소속 그룹은 2025년 2월부터 9월 사이에 여러 차례의 자격 증명 수집 캠페인을 진행했습니다. 이 캠페인에서는 무료 호스팅 및 터널링 서비스를 사용하여 스푸핑된 Outlook, Google 및 Sophos VPN 로그인 페이지를 호스트하고 캡처된 자격 증명을 유출했습니다. 유인책에는 합법적인 PDF 문서와 지역별 언어가 포함되어 신뢰성을 높였습니다. 이 작전은 터키, 북마케도니아, 우즈베키스탄의 에너지, 핵 연구, 정부 및 학술 기관을 표적으로 삼았습니다.

조사

Recorded Future의 Insikt Group은 Webhook.site, InfinityFree, Byet Internet Services 및 ngrok과 같은 서비스에 호스팅 된 수십 개의 피싱 페이지를 수집했습니다. 페이지의 JavaScript는 사용자 이름, 비밀번호 및 피해자 식별자를 캡처하여 공격자가 제어하는 웹훅으로 신호를 보내고 피해자를 실제 포털로 리디렉션했습니다. 다수의 변형은 코드를 재사용하고 변수 이름을 수정하여 배포를 단순화했습니다. 인프라는 단명했고 ShortURL.at와 같은 링크 단축기를 활용했습니다.

완화

알려진 무료 호스팅 및 터널링 도메인을 차단하고, 웹훅 서비스로의 외부 트래픽을 모니터링하며, 모든 외부 계정에 대해 MFA를 강제 적용하세요. 특히 PDF 유인책이 첨부된 경우 OWA, Google 및 VPN 포털을 모방한 피싱 페이지에 대해 사용자에게 교육하세요. 알려진 악의적인 URL을 탐지하기 위해 네트워크 필터링을 구현하고 의심스러운 PDF 링크를 감지하기 위해 이메일 보안 제어를 적용하세요.

응답

알려진 웹훅 엔드포인트에 대한 HTTP POST가 관찰되고 자격 증명 수확 페이지가 로드될 때 SOC 분석가에게 알림을 전송합니다. 악성 페이지를 격리하고, 영향을 받은 사용자 계정을 격리하며, 비밀번호를 강제로 재설정하고 횡적 이동을 위해 로그를 검토합니다. 같은 인프라를 사용하는 다른 페이지를 탐지하고 차단 목록을 업데이트하세요.

공격 흐름

시뮬레이션 실행

전제 조건: 텔레메트리 및 기본 상태 체크를 통과해야 합니다.

이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적 공격 기술(TTP)의 정확한 실행을 설명합니다. 명령어와 설명은 식별된 TTP를 직접 반영하고 탐지 논리에 의해 예상되는 정확한 텔레메트리를 생성해야 합니다. 추상적이거나 관련 없는 예시는 오진의 원인이 될 것입니다.

  • 공격 서사 및 명령어:

    1. 초기 피싱 전달: 공격자는 단축 URL을 포함한 피싱 이메일을 보내고, 해당 URL은 악성으로 리디렉션됩니다 webhook.site 페이지.
    2. 피해자 행동: 피해자는 링크를 클릭하고, 브라우저는 리디렉션을 따라가며 HTTP GET 요청을 수행합니다 https://webhook.site/e8ae3bbd-ab02-46b7-b84c-f5f4baa5d7c7.
    3. 자격 증명 캡처 페이지: 페이지는 입력한 자격 증명을 훔쳐 같은 웹훅 URL로 POST하지만, 프록시는 초기 GET 요청만 기록하며 이는 규칙을 발동시키기에 충분합니다.
    4. 테스트에서는피해자를 모방하여 PowerShell의 Invoke-WebRequest 를 사용하여 정확한 악성 URL을 요청하고 동일한 프록시 로그 항목을 재현합니다.
  • 회귀 테스트 스크립트:

    # -------------------------------------------------
    # BlueDelta Webhook 사이트 액세스 시뮬레이션 (TC-20260109-9X3BZ)
    # -------------------------------------------------
    $maliciousUrls = @(
        "https://webhook.site/e8ae3bbd-ab02-46b7-b84c-f5f4baa5d7c7",
        "https://webhook.site/3791f8c0-1308-4c5b-9c82-0dc416aeb9c4"
    )
    
    foreach ($url in $maliciousUrls) {
        try {
            Write-Host "Requesting malicious URL: $url"
            Invoke-WebRequest -Uri $url -UseBasicParsing -Method GET -TimeoutSec 10 | Out-Null
            Write-Host "✅ Request sent."
        } catch {
            Write-Warning "Request to $url failed: $_"
        }
    }
  • 정리 명령:

    # 프록시 캐시 플러시 (해당하는 경우) 잔류 항목을 피하기 위해
    net stop "Squid Service"
    net start "Squid Service"
    
    # 스크립트에 의해 생성된 모든 임시 파일 삭제 (해당 없음)
    Write-Host "정리 완료."