macOS ClickFix 미끼, AppleScript Stealer 및 지속적 RAT 배포
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
러시아어를 사용하는 위협 행위자는 ClickFix 사회공학 캠페인을 이용하여 이단계의 macOS 악성코드 감염을 배포하고 있습니다. 공격은 터미널 명령어를 통해 실행되는 무파일 실행 사슬로 시작되며, Meow (DEBUG)라는 AppleScript 기반 정보탈취기와 지속적인 원격 접근 트로이 목마를 전송합니다. 악성코드는 암호화폐 지갑, 브라우저 자격 증명 및 메시징 세션 데이터를 표적으로 하며, 동시에 데스크탑 지갑 애플리케이션에 대해 침입성 코드 주입을 수행합니다.
조사
Netskope Threat Labs는 2026년 5월 31일에 캠페인의 업데이트된 버전을 확인하여 기본 스틸러에서보다 강력한 RAT로의 전환을 보여주었습니다. 그들의 분석은 정교한 무파일 감염 흐름, 러시아어를 사용하는 피해자를 피하기 위해 설계된 지오펜싱 로직, macOS Gatekeeper 보호를 우회하기 위해 사용된 임시 재서명을 밝혀냈습니다. 연구원들은 또한 동일한 등록자 연락처 정보를 공유하는 25개의 단명 미끼 도메인과 캠페인을 연결했습니다.
완화
방어팀은 미끼 도메인을 차단하고 curl and osascript를 포함한 의심스러운 터미널 명령어를 모니터링하는 것을 우선시해야 합니다. 조직은 터미널 접근에 대한 더 엄격한 제어를 적용하고 암호화폐 지갑 애플리케이션 번들의 승인되지 않은 변경을 주시해야 합니다. 호스트 기반 탐지는 지속성 plist com.apple.accountsd 와 /tmp/shub_ 스테이징 패턴에 초점을 맞출 수 있습니다.
대응
이 활동이 감지되면, 추가적인 데이터 도난이나 잠재적인 측면 이동을 막기 위해 즉시 영향을 받은 macOS 호스트를 격리하십시오. 설치된 모든 데스크탑 암호화폐 지갑은 타협된 것으로 취급하고 신뢰할 수 있는 출처에서 다시 설치해야 합니다. 조사관은 또한 승인되지 않은 항목에 대해 LaunchDaemons 및 LaunchAgents에 대한 포렌식 검토를 수행해야 하며, 특히 com.apple.accountsd.
공격 흐름
탐지
의심스러운 명령 및 제어: 이상한 최상위 도메인(TLD) DNS 요청 (dns 사용)
보기
MacOS 브라우저 비밀번호 발견 시도 가능 (cmdline을 통해)
보기
Base64 인코딩된 문자열 조작 가능성 [MacOS] (cmdline 사용)
보기
수정된 애플리케이션 번들의 강제 코드 서명 (cmdline 사용)
보기
MacOS 자격 증명 확인 Dscl Authonly (cmdline 사용)
보기
의심스러운 Curl 실행 시도 [MacOS] (cmdline 사용)
보기
MacOS 임시 폴더에서 아카이브가 생성됨 (file_event 사용)
보기
파일리스 macOS AppleScript 스틸러 실행 탐지 [Linux 프로세스 생성]
보기
시뮬레이션 실행
사전조건: 텔레메트리 및 베이스라인 사전 점검이 통과되었어야 합니다.
이유: 이 섹션은 탐지 규칙을 유발하도록 설계된 적대자 기술(TTP)을 자세히 설명합니다. 명령어와 내러티브는 식별된 TTP를 직접 반영하고 탐지 논리가 기대하는 정확한 텔레메트리를 생성해야 합니다. 추상적이거나 관련이 없는 예시는 잘못된 진단을 초래할 수 있습니다.
-
공격 내러티브 및 명령: 적대자가 악성 웹사이트를 통해 초기 접근을 얻었습니다. 그들은 파일에 기반한 스캐닝을 우회하기 위해 파일리스 macOS AppleScript를 실행합니다. 스크립트의 목표는 합법적인 Chrome 브라우저 사용자 에이전트를 속여 기본 네트워크 검사를 회피하며 2차 페이로드를 다운로드하는 것이며, 사용자가 자금을 확보하지 못하도록 실행 중인 암호화폐 지갑 애플리케이션을 즉시 종료하는 것입니다. 공격자는
osascript을 호출하고curl특정 플래그 및kill -9로 이러한 작업을 수행합니다. -
회귀 테스트 스크립트:
#!/bin/bash # 파일리스 macOS 스틸러 시뮬레이션 echo "[+] 시뮬레이션 시작: 파일리스 macOS 스틸러" # 단계 1: osascript를 통한 curl 페이로드 가져오기 시뮬레이션 (Triggers selection_curl_ua) echo "[+] 단계 1 실행: osascript를 통한 스푸프된 Curl..." osascript -e 'do shell script "curl -k -s --max-time 30 -H "User-Agent: Mozilla/5.0" http://localhost:8080/payload"' 2>/dev/null & # 프로세스 생성 대기 sleep 2 # 단계 2: 프로세스 종료 시뮬레이션 (Triggers selection_kill) # 시스템을 방해하지 않기 위해 더미 프로세스를 종료합니다 echo "[+] 단계 2 실행: osascript를 통한 프로세스 종료..." sleep 1 osascript -e 'do shell script "kill -9 $$"' # 참고: 현재 서브셸을 종료하여 의도 시뮬레이션 # 실질적인 타겟을 모방하는 깨끗한 시뮬레이션을 위해: # sleep 1 && sleep 1 & # osascript -e 'do shell script "kill -9 $!"' echo "[+] 시뮬레이션 명령어 전송 완료." -
정리 명령어:
# 스크립트로 파일이 생성되지 않았지만, 백그라운드에 남아있는 프로세스가 없는지 확인합니다. killall osascript 2>/dev/null echo "[+] 정리 완료."