SOC Prime Bias: Critical

29 1월 2026 18:34

APT 공격, 인도 정부를 GOGITTER, GITSHELLPAD, GOSHELL로 겨냥 | Part 1

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
APT 공격, 인도 정부를 GOGITTER, GITSHELLPAD, GOSHELL로 겨냥 | Part 1
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

Zscaler ThreatLabz는 인도 정부 기관을 대상으로 한 파키스탄 연계 APT 그룹의 Gopher Strike 및 Sheet Attack이라는 두 캠페인을 발견했습니다. 이 활동은 GOGITTER, GITSHELLPAD 및 GOSHELL을 포함한 Golang 기반 도구를 도입하여 페이로드를 배치하고, 비공개 GitHub 리포지토리를 C2용으로 사용하며, 궁극적으로 Cobalt Strike 비콘을 배포합니다. 초기 접근은 spearphishing PDF를 통해 달성되며, 이는 희생자를 악성 ISO 파일을 다운로드하도록 유도합니다. 운영자는 환경 검사, 파일 채우기 및 예약된 작업 지속성과 같은 여러 회피 방법을 층층이 쌓습니다.

조사

분석 결과 GOGITTER는 windows_api.vbs 스크립트의 존재를 확인하고, 없을 경우 이를 생성하고, 50분마다 이를 실행하는 예약 작업을 등록합니다. GITSHELLPAD는 GitHub REST API를 사용하여 명령을 검색하고 데이터를 탈취하며, GOSHELL은 선택된 호스트명에서만 준비된 Cobalt Strike 비콘을 조건부로 로드합니다. 도구들은 자동화된 분석과 샌드박싱을 방해하기 위해 하드코드된 URL과 사용자 에이전트 문자열을 삽입합니다. 캠페인은 또한 adobe_update.zip과 같은 지원 페이로드를 호스팅하기 위해 비공개 GitHub 리포지토리를 사용했습니다.

완화

신뢰할 수 없거나 서명되지 않은 Golang 바이너리의 실행을 차단하고 엄격한 허용 목록 검토 및 예약 작업 생성 검토를 강제하십시오. 알려진 악성 도메인 및 C2로 사용된 GitHub 자원을 향한 아웃바운드 트래픽, 개발자 엔드포인트가 아닌 곳에서의 비정상적인 GitHub API 사용을 모니터링하십시오. 이메일 보안을 강화하여 PDF 첨부 파일을 스캔하여 난독화 여부를 확인하고 ISO 다운로드로 리디렉션되는 링크를 차단하십시오. windows_api.vbs 생성 및 50분 간격의 정기 작업 실행 패턴에 대한 엔드포인트 감지를 통해 경고해야 합니다.

대응

어떤 IOC가 감지되면 엔드포인트를 격리하고, 예약 작업을 중지 및 제거하며, 관련된 악성 아티팩트를 삭제하십시오. GitHub 기반 C2 활동에 대한 포렌식 검토를 수행하고 명령 실행 로그를 보존하며, 가능할 경우 탈취되거나 업로드된 콘텐츠를 제거하십시오. 영향을 받은 계정의 자격 증명을 재설정하고, 횡적 이동을 검색하며, 환경 전반에 걸쳐 관련 활동을 식별하기 위해 추출된 지표로 감지를 업데이트하십시오.

graph TB %% Class definitions classDef action fill:#99ccff classDef technique fill:#b3e5fc classDef tool fill:#ffe0b2 classDef malware fill:#ffcccb classDef process fill:#d5f5e3 classDef operator fill:#ff9900 %% Nodes – Attack Steps step1_initial_access[“<b>기술</b> – T1204.002 사용자 실행: 악성 파일<br/><b>설명</b>: 사회공학을 통해 전달된 악성 파일을 사용자가 실행함.<br/><b>세부사항</b>: Adobe Acrobat 업데이트로 위장한 스피어피싱 PDF로, 가짜 버튼을 클릭하면 페이로드가 포함된 ISO가 다운로드됨.”] class step1_initial_access technique step2_recon[“<b>기술</b> – T1593.003 공개 웹사이트/도메인 검색: 코드 저장소<br/><b>설명</b>: 공격자는 공개 코드 호스팅 사이트에서 정보를 수집함.<br/><b>세부사항</b>: 위협 행위자는 이후 C2 및 페이로드를 호스팅할 개인 GitHub 저장소를 생성함.”] class step2_recon technique step3_exec_vbscript[“<b>기술</b> – T1059.005 명령 및 스크립트 인터프리터: Visual Basic<br/><b>설명</b>: Visual Basic 스크립트를 실행하여 명령을 수행함.<br/><b>세부사항</b>: GOGITTER는 windows_api.vbs를 드롭하고 실행하여 웹 서버에서 추가 명령을 가져옴.”] class step3_exec_vbscript technique step4_exec_cmd[“<b>기술</b> – T1059.003 명령 및 스크립트 인터프리터: Windows 명령 셸<br/><b>설명</b>: 기본 Windows 명령 셸을 사용하여 실행함.<br/><b>세부사항</b>: GITSHELLPAD는 net user, systeminfo, tasklist, curl 등의 명령을 실행함.”] class step4_exec_cmd technique step5_persistence[“<b>기술</b> – T1053.005 예약된 작업/잡: 예약된 작업<br/><b>설명</b>: 악성 코드를 주기적으로 실행하기 위해 예약된 작업을 생성함.<br/><b>세부사항</b>: GOGITTER는 MicrosoftEdge_ConfigurationUpdate_<random>라는 이름의 작업을 생성하여 50분마다 VBScript를 실행함.”] class step5_persistence technique step6_masquerade[“<b>기술</b> – T1036.008 위장: 파일 형식 위장 및 T1036.007 이중 파일 확장자<br/><b>설명</b>: 파일 이름을 정상적으로 보이게 하여 실제 유형을 숨김.<br/><b>세부사항</b>: windows_api.vbs, adobe_update.zip, edgehost.exe라는 이름의 파일이 생성됨.”] class step6_masquerade technique step7_obfuscation[“<b>기술</b> – T1027.015 난독화된 파일 또는 정보: 압축<br/><b>설명</b>: 압축을 사용하여 악성 페이로드를 숨김.<br/><b>세부사항</b>: 페이로드는 개인 GitHub 저장소에 ZIP/RAR 아카이브로 저장됨.”] class step7_obfuscation technique step8_account_disc[“<b>기술</b> – T1087.001 계정 검색: 로컬 계정<br/><b>설명</b>: 시스템의 로컬 사용자 계정을 열거함.<br/><b>세부사항</b>: GITSHELLPAD는 \”net user\”를 실행하여 계정을 나열함.”] class step8_account_disc technique step9_network_disc[“<b>기술</b> – T1016.001 시스템 네트워크 구성 검색: 인터넷 연결 검색<br/><b>설명</b>: 인터넷 연결 및 접근 가능한 C2 엔드포인트를 확인함.<br/><b>세부사항</b>: curl을 사용하여 공격자 도메인에 대한 연결성을 테스트함.”] class step9_network_disc technique step10_collection[“<b>기술</b> – T1560.002 수집된 데이터 아카이브: 라이브러리를 통한 아카이브<br/><b>설명</b>: 수집된 데이터를 나중에 사용하기 위해 아카이브로 압축함.<br/><b>세부사항</b>: 침해 이후 도구는 ZIP/RAR 아카이브 형태로 전달됨.”] class step10_collection technique step11_c2[“<b>기술</b> – T1102.001 웹 서비스: Dead Drop Resolver<br/><b>설명</b>: Dead-drop 역할을 하는 웹 서비스를 통해 C2와 통신함.<br/><b>세부사항</b>: GitHub REST API를 사용하여 info.txt를 업로드하고 command.txt를 폴링함.”] class step11_c2 technique step12_exfil[“<b>기술</b> – T1567.001 웹 서비스를 통한 데이터 유출: 코드 저장소로의 유출<br/><b>설명</b>: 데이터를 코드 저장소에 업로드하여 유출함.<br/><b>세부사항</b>: 수집된 info.txt는 공격자가 제어하는 GitHub 저장소로 업로드됨.”] class step12_exfil technique %% Connections – Attack Flow step1_initial_access –>|로_이어짐| step2_recon step2_recon –>|로_이어짐| step3_exec_vbscript step3_exec_vbscript –>|로_이어짐| step4_exec_cmd step4_exec_cmd –>|로_이어짐| step5_persistence step5_persistence –>|로_이어짐| step6_masquerade step6_masquerade –>|로_이어짐| step7_obfuscation step7_obfuscation –>|로_이어짐| step8_account_disc step8_account_disc –>|로_이어짐| step9_network_disc step9_network_disc –>|로_이어짐| step10_collection step10_collection –>|로_이어짐| step11_c2 step11_c2 –>|로_이어짐| step12_exfil

공격 흐름

시뮬레이션 실행

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

근거: 이 섹션은 탐지 규칙을 유발하도록 설계된 적대자 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령과 서술은 식별된 TTP를 직접 반영해야 하며 감지 논리에 의해 예상되는 정확한 텔레메트를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련이 없는 예는 오진을 초래할 것입니다.

  • 공격 서사 및 명령:
    APT 그룹은 적대적인 GITSHELLPAD 백도어 (edgehost.exe)를 손상된 Windows 호스트에 배포합니다. 일반적인 시스템 동작과 어울리기 위해 공격자는 Windows 명령 셸 (cmd /c)를 통해 백도어를 실행합니다. 추가 모듈을 다운로드하는 등 페이로드를 완료한 후, 백도어는 taskkill /F /PID <PID>를 사용하여 자신의 프로세스를 종료함으로써 “정리”를 수행합니다. 두 동작 모두 이진 파일 이름 및 필요한 명령줄 하위 문자열을 포함하는 프로세스 생성 이벤트를 생성하여 Sigma 규칙을 충족시킵니다.

  • 회귀 테스트 스크립트:

    # -------------------------------------------------
    # GITSHELLPAD 백도어 실행 및 정리 시뮬레이션
    # -------------------------------------------------
    # 1. 플레이스홀더 edgehost.exe (모든 안전한 실행 파일) 드롭
    $src = "$env:SystemRootSystem32notepad.exe"
    $dst = "$env:TEMPedgehost.exe"
    Copy-Item -Path $src -Destination $dst -Force
    
    # 2. cmd /c를 통해 edgehost.exe 실행 (cmd_cmd 패턴과 일치)
    $proc = Start-Process -FilePath "cmd.exe" -ArgumentList "/c `"$dst`"" -PassThru
    
    # 3. 프로세스가 활성 상태임을 보장하기 위해 몇 초간 대기
    Start-Sleep -Seconds 5
    
    # 4. 정리: taskkill을 사용하여 edgehost.exe 프로세스 종료 (taskkill_cmd 패턴과 일치)
    $pid = $proc.Id
    cmd /c "taskkill /F /PID $pid"
    
    # 5. 드롭된 파일 제거
    Remove-Item -Path $dst -Force
  • 정리 명령:

    # 어떤 남은 edgehost.exe 인스턴스도 종료하도록 보장
    Get-Process -Name "edgehost" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # 여전히 존재하는 경우 임시 실행 파일 삭제
    $tempPath = "$env:TEMPedgehost.exe"
    if (Test-Path $tempPath) { Remove-Item $tempPath -Force }