북한 사파리 캠페인, RAT 배포
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
이 기사는 라자루스 그룹의 유명한 Chollima 단위와 연결된 Mach-O Man이라는 새로운 macOS 멀웨어 프레임워크를 설명합니다. 이 멀웨어는 손상된 텔레그램 계정과 피해자가 클릭픽스 명령을 장치에서 실행하도록 유도하는 가짜 회의 초대를 통해 배포됩니다. 툴킷에는 호스트 세부 정보를 수집하고, 지속성을 유지하고, 자격 증명 및 브라우저 데이터를 훔치기 위한 여러 Mach-O 바이너리가 포함되어 있으며, 탈취는 텔레그램을 통해 이루어집니다. 이 캠페인은 주로 암호화폐 거래소 및 금융 부문의 기타 조직에 초점을 맞추고 있습니다.
조사
연구원들은 스테이징 바이너리 teamsSDK.bin 을 악성 명령 시퀀스를 통해 다운로드하고 실행함을 확인했습니다. 추가 컴포넌트로는 D1yCPUyk.bin, minst2.bin 및 macrasv2가 있으며, 시스템을 열거하고, 지속성을 위한 LaunchAgent를 생성하고, 브라우저 확장 기능, 키체인 데이터, 쿠키를 수집하는 데 사용되었습니다. 명령 및 제어 통신은 인증되지 않은 /info 엔드포인트를 노출하고 텔레그램 봇 API 토큰을 유출하는 Go 기반 HTTP 서버에 의존했습니다. 조사관들은 또한 C2 호스트에 노출된 RDP, WinRM, Chrome 원격 데스크톱과 같은 원격 액세스 서비스를 발견했습니다.
완화 조치
사용자는 원치 않는 회의 링크와의 상호 작용을 피하고, 예상치 못한 대화 중에 제안된 모든 터미널 명령어의 정당성을 확인해야 합니다. 조직은 승인되지 않은 LaunchAgents를 모니터링하고, macOS 바이너리에 신뢰할 수 있는 코드 서명을 요구하며, 알려지지 않은 파일의 실행을 제한해야 합니다. 네트워크 방어는 의심스러운 Go 기반 HTTP 서버로의 아웃바운드 연결을 차단해야 하며 Go-http-client 사용자 에이전트를 사용하는 트래픽을 플래그해야 합니다. 텔레그램 봇 토큰은 노출로부터 보호되어야 하며, 원격 데스크톱 서비스는 최소 권한 접근 제어로 잠겨야 합니다.
대응 조치
보안 팀은 알 수 없는 .bin 파일의 실행을 감지하고 com.onedrive.launcher이름의 LaunchAgents 생성 모니터링을 수행해야 합니다. 또한 Go-http-client 사용자 에이전트를 사용하여 의심스러운 인프라로의 아웃바운드 연결에 대한 경고가 활성화되어야 하며, /info 엔드포인트로의 반복적인 POST 요청에서도 경고가 트리거되어야 합니다. 방어자는 알 수 없는 봇 토큰과 연결된 예상치 않은 텔레그램 API 활동을 주시해야 합니다. 모든 악성 바이너리를 식별하고 제거하기 위한 전체 호스트 포렌식이 수행되어야 하며, 타협되었을 가능성이 있는 계정의 자격 증명 재설정이 수행되어야 합니다.
공격 흐름
시뮬레이션 실행
전제 조건: Telemetry & Baseline Pre-flight Check를 통과해야 합니다.
이유: 이 섹션은 적의 기술(T1546.006 / T1587.001) 실행을 정확하게 설명하여 탐지 규칙을 발동하도록 설계되었습니다. 명령어는 Mach-O Man 바이너리의 현실적인 “living-off-the-land” 배포 형태를 반영합니다.
-
공격 서사 및 명령어:
- macOS 호스트에 이미 발판을 마련한 공격자는 스테이징 위치(
/tmp/stage)에서 쓰기 가능한 디렉토리(/usr/local/bin). - 으로 네 개의 Mach-O Man 바이너리를 복사합니다. 바이너리는 실행 가능하게 만들어져 초기화, 정찰, 지속성, 자격 증명 절도 단계를 모방하여 순차적으로 실행됩니다.
- 지속성은
minst2.bin.
# Step 1 – Stage the binaries (simulated by copying from a test assets folder) mkdir -p /usr/local/bin/macho cp ./assets/teamsSDK.bin /usr/local/bin/macho/ cp ./assets/D1YrHRTg.bin /usr/local/bin/macho/ cp ./assets/minst2.bin /usr/local/bin/macho/ cp ./assets/macrasv2 /usr/local/bin/macho/ # Step 2 – Make them executable chmod +x /usr/local/bin/macho/*.bin # Step 3 – Execute the stager and reconnaissance binaries /usr/local/bin/macho/teamsSDK.bin & /usr/local/bin/macho/D1YrHRTg.bin & # Step 4 – Install persistence (launch daemon) for minst2.bin cat <<'EOF' > /Library/LaunchDaemons/com.macho.minst2.plist EOF sudo launchctl load -w /Library/LaunchDaemons/com.macho.minst2.plist # Step 5 – Execute the credential-theft/exfil component /usr/local/bin/macho/macrasv2 &Label com.macho.minst2 ProgramArguments /usr/local/bin/macho/minst2.bin RunAtLoad - macOS 호스트에 이미 발판을 마련한 공격자는 스테이징 위치(
-
회귀 테스트 스크립트: (위의 단계를 재현하는 자체 포함 bash 스크립트)
#!/usr/bin/env bash set -euo pipefail # --- VARIABLES ------------------------------------------------- BIN_DIR="/usr/local/bin/macho" ASSET_DIR="$(pwd)/assets" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # --- PRE-CHECK ------------------------------------------------- if [[ $(id -u) -ne 0 ]]; then echo "Script requires root to install launch daemon. Re-run with sudo." exit 1 fi # --- DEPLOY BINARIES ------------------------------------------- mkdir -p "$BIN_DIR" for bin in teamsSDK.bin D1YrHRTg.bin minst2.bin macrasv2; do cp "$ASSET_DIR/$bin" "$BIN_DIR/$bin" chmod +x "$BIN_DIR/$bin" done # --- EXECUTE STAGER & RECON ------------------------------------ "$BIN_DIR/teamsSDK.bin" & "$BIN_DIR/D1YrHRTg.bin" & # --- PERSISTENCE (launch daemon) ------------------------------- cat <<'EOF' > "$PLIST" EOF launchctl load -w "$PLIST" # --- EXECUTE CREDENTIAL THEFT COMPONENT ----------------------- "$BIN_DIR/macrasv2" & echo "Simulation executed – wait a few seconds for telemetry to appear."Label com.macho.minst2 ProgramArguments /usr/local/bin/macho/minst2.bin RunAtLoad -
클린업 명령:
#!/usr/bin/env bash set -euo pipefail BIN_DIR="/usr/local/bin/macho" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # Unload launch daemon if [[ -f "$PLIST" ]]; then sudo launchctl unload -w "$PLIST" sudo rm -f "$PLIST" fi # Kill any lingering malicious processes pkill -f teamsSDK.bin || true pkill -f D1YrHRTg.bin || true pkill -f minst2.bin || true pkill -f macrasv2 || true # Remove binaries sudo rm -rf "$BIN_DIR" echo "Cleanup complete."