숨겨진 npm 게시자를 드러내는 42개의 무기화된 GitHub 저장소
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
다음과 같은 이름으로 추적되는 정교한 캠페인 testmetest 은(는) 악성 npm 패키지와 손상된 GitHub 리포지토리를 사용하여 자격 증명을 탈취하고 악성 패키지 릴리스를 자동화합니다. 공격자는 탐지를 회피하기 위해 다형성 래퍼, 네이티브 Node.js 애드온 및 암호화된 페이로드에 의존합니다. 이 캠페인은 또한 cPanel 취약점을 스캔하고 공격하는 데 사용되는 인프라를 포함합니다.
조사
JFrog 시큐리티 연구원들은 42개의 무기화된 GitHub 리포지토리와 여러 악성 npm 패키지를 식별했습니다. 그들은 공격자가 컴파일된 .node 파일이 런타임에 잠복된 페이로드를 해독하는 네이티브 애드온 위장 기술을 사용했다는 것을 발견했습니다. 조사 결과 또한 이 활동은 shellpanel 스캐너가 CVE-2026-41940을 통해 cPanel 시스템을 표적으로 삼고 있다는 것과 연결되었습니다.
대응
사용자는 식별된 악성 npm 패키지를 제거하고 신뢰할 수 있는 소스에서 영향을 받은 시스템을 재구축해야 합니다. 조직은 GitHub, npm 및 클라우드 토큰을 포함한 모든 잠재적으로 손상된 자격 증명을 회전시켜야 합니다. 또한 .github/init.js 와 같은 비인가된 설정 파일 및 package.json 파일 또는 Makefiles에 예상치 못한 실행 훅이 있는지 확인하는 것이 중요합니다.
대응
악성 활동이 감지되면 노출된 비밀을 취소하고 자격 증명을 즉시 회전하십시오. 지속성 메커니즘을 찾고 net-health-checker or pkg-runtime을/를 조사하십시오. GitHub Actions 로그에서 비인가된 워크플로를 검토하고 임시 디렉토리에 기록된 해독된 페이로드를 모니터링하십시오.
공격 흐름
이 부분은 아직 업데이트 중입니다.
탐지
숨겨진 파일이 리눅스 호스트에서 생성됨 (file_event 통해)
수상한 NodeJS 자식 프로세스 [Windows] (cmdline 통해)
비정상적 프로세스에 의해 시작된 가능성 있는 Github 파일 다운로드 (network_connection 통해)
Nohup 사용 (cmdline 통해)
수상한 NodeJS 자식 프로세스 [Linux] (cmdline 통해)
수상한 디렉토리를 가리키는 수상한 Chmod 실행 (cmdline 통해)
수상한 폴더로의 다운로드 (cmdline 통해)
탐지할 IOCs (HashSha256): Beyond testmetest: 네이티브 Addon 위장 및 42개의 무장된 GitHub 리포지토리가 숨겨진 npm 퍼블리셔를 밝히다
탐지할 IOCs (SourceIP): Beyond testmetest: 네이티브 Addon 위장 및 42개의 무장된 GitHub 리포지토리가 숨겨진 npm 퍼블리셔를 밝히다
탐지할 IOCs (DestinationIP): Beyond testmetest: 네이티브 Addon 위장 및 42개의 무장된 GitHub 리포지토리가 숨겨진 npm 퍼블리셔를 밝히다
IsDebuggerPresent 또는 CheckRemoteDebuggerPresent를 통한 디버거 존재 확인 [윈도우 보안 이벤트 로그]
수상한 프로세스 생성 및 임시 JS 파일 실행 [Windows 프로세스 생성]
네이티브 Node.js Addon 실행의 탐지 [Windows 이미지 로드]
악성 Node Addon 프로세스의 실행 감지 [Linux 프로세스 생성]
수상한 네이티브 Addon 메모리 맵 읽기 [Google Cloud Platform]
시뮬레이션 실행
-
공격 서술 및 명령: 적은 사용자의 임시 디렉토리에 악성 JavaScript 페이로드를 성공적으로 떨어뜨렸고, 이를
.nc네트캣 관련 파일을 흉내 내거나 그 목적을 흐리기 위해 이름을 붙였습니다. 이를 실행하기 위해 적은 로더를 사용하여CreateProcessAWin32 API를 사용하여 Windows 스크립트 호스트 (wscript.exe)를 임시 파일을 인수로 하여 실행합니다. 프로세스 생성 API의 ANSI 버전을 사용하여%TEMP%에서 스크립트를 실행하는 이 특정 시퀀스는 탐지 규칙이 가로채도록 설계된 정확한 패턴입니다. -
회귀 테스트 스크립트:
# 시뮬레이션 스크립트: '수상한 프로세스 생성 및 임시 JS 파일 실행' 트리거 # 1. 경로 정의 $tempPath = $env:TEMP $targetFile = Join-Path $tempPath ".nc" # 2. %TEMP% 디렉토리에 임시 악성 JS 파일 생성 # 참고: 탐지 로직 요구에 따라 이름을 .nc로 지정합니다 "WScript.Echo('악성 활동 시뮬레이션');" | Out-File -FilePath $targetFile -Encoding ascii Write-Host "[+] 악성 파일 생성 위치: $targetFile" # 3. wscript.exe를 통한 실행 시뮬레이션 # 실제 시나리오에서는 'CreateProcessA'를 포함한 'CallTrace'는 # 멀웨어 로더가 사용하는 기본 Windows API 호출에 의해 생성됩니다. # 이를 PowerShell/CMD를 통해 실행하면 프로세스 생성 이벤트가 생성됩니다. Write-Host "[+] 탐지를 트리거하기 위한 스크립트 실행..." Start-Process "wscript.exe" -ArgumentList "`"$targetFile`"" Write-Host "[+] 시뮬레이션 명령 보냄." -
정리 명령:
# 정리 스크립트: 시뮬레이션 아티팩트 제거 $tempPath = $env:TEMP $targetFile = Join-Path $tempPath ".nc" if (Test-Path $targetFile) { Remove-Item -Path $targetFile -Force Write-Host "[+] 정리 성공: $targetFile 제거됨." } else { Write-Host "[!] 정리 실패: 파일이 존재하지 않음." }