COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
ClickFix(T1204.004) 기법이 macOS로 확장한 과정을 분석합니다. 2025년 11월~2026년 2월 3차 캠페인과 MacSync 인포스틸러의 기술 진화, Terminal 우회 방식까지 다룹니다.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
ClickFix가 macOS를 겨냥하다: 3차 캠페인과 MacSync의 진화
2025년 초기 침해 사고의 47%가 ClickFix 기법을 거쳤다. 사용자를 속여 악성 명령을 직접 실행하게 만드는 이 기법이 이제 macOS까지 확장됐다. 2025년 11월부터 2026년 2월까지 세 차례 캠페인을 거치며 MacSync 인포스틸러가 진화했다. MacSync는 macOS를 겨냥해 설계된 자격증명 탈취 도구로, 첫 등장 후 10개월 만에 인메모리 실행과 API 키 게이트 C2를 갖춘 3세대 변종으로 발전했다. "맥은 안전하다"는 통념이 흔들리는 이유를 살펴본다.
ClickFix는 2024년 3월 처음 관측된 사회공학 기법이다. 공격자가 사용자에게 가짜 오류 메시지 또는 CAPTCHA 페이지를 보여주고, "이 문제를 해결하려면 아래 명령을 실행하세요"라고 유도해 Terminal이나 PowerShell에 악성 명령을 직접 붙여 넣도록 만든다. 취약점 익스플로잇이 아니라 사용자 행동 자체를 악용하기 때문에 파일 기반 탐지와 IP 차단이 통하지 않는다. 2025년에는 전년 대비 500% 이상 급증했다.
MITRE ATT&CK는 이 기법을 T1204.004(Malicious Copy and Paste) 로 분류한다. 전술은 실행(Execution, TA0002).
MITRE 공식 기록에서 이 기법을 채택한 행위자:
핵심 차이는 페이로드 전달 방식이다. Windows에서 PowerShell이 직접 악성코드를 내려받는다면, macOS에서는 Bash → osascript(AppleScript 인터프리터) 체인이 동작한다. 2026년 2월 변종부터는 최종 페이로드가 디스크에 기록되지 않고 인메모리로 실행돼 파일 기반 탐지를 피한다.
1차 캠페인: Google 검색 결과 스폰서 광고에 "OpenAI Atlas browser" 다운로드 링크가 게재됐다. 클릭하면 가짜 설치 페이지로 이동하고, Base64 인코딩된 Terminal 명령 붙여 넣기를 유도했다.
2차 캠페인: 실제 ChatGPT 공유 대화처럼 보이는 페이지를 활용했다. 대화 안에서 특정 도구 설치를 권고하고, GitHub 테마 설치 페이지로 연결했다. Sophos가 추적한 stats.php 엔드포인트 기록에 따르면 2025년 12월 5일간 클릭 수가 3,512 → 18,100 → 29,180으로 누적됐다. 이 수치는 감염 수가 아닌 "복사(Copy)" 버튼 클릭 수다.
3차 캠페인: Apple 공식 사이트를 모방한 페이지에서 멀티스테이지 로더를 배포했다. 이 단계에서 처음 등장한 API 키 게이트 C2는 올바른 API 키를 제시하는 클라이언트에게만 페이로드를 반환한다. 키를 모르면 C2 서버 접속 자체가 차단되므로 연구자나 샌드박스가 페이로드를 수집하기 어렵다. AppleScript 페이로드 인메모리 실행과 러시아어 주석이 포함된 스크립트도 확인됐다. Sophos는 이 인프라를 "러시아어권 생태계" 운영자로 추정했다.
Datadog Security Labs가 분석한 실행 흐름이다. MacSync는 2025년 4월 "Mac.c"라는 이름으로 처음 등장했다. SHub 스틸러 v2.0이라는 고급 파생 버전도 확인됐다.
디스크에 파일을 남기지 않는 인메모리 실행, Cloudflare CDN 뒤에 숨은 C2, User-Agent 핑거프린팅으로 샌드박스 환경을 걸러내는 조합이 파일 기반 탐지와 IP 차단 두 경로를 동시에 막는다.
Infiniti Stealer(Malwarebytes, 2026년 3월) 변종은 Nuitka로 컴파일된 Apple Silicon Mach-O 바이너리(약 8.6 MB)를 사용한다. PyInstaller 기반보다 정적 분석이 어렵고, 샌드박스 탐지 로직도 포함한다.
| 범주 | 탈취 항목 |
|---|---|
| 브라우저 | 쿠키, 저장 로그인, 자동완성, 방문 기록, 암호화폐 확장 DB |
| 시스템·개발 | macOS Keychain DB, SSH 개인키, AWS 자격증명, Kubernetes 설정, shell 히스토리 |
| 암호화폐 | Exodus·Ledger·Trezor·Atomic 지갑 DB, 시드 구문, Ledger app.asar 패치 |
Ledger 처리 방식이 특이하다. MacSync는 Ledger Live 앱의 app.asar 파일을 패치해 시드 구문 탈취 코드를 삽입한다. 하드웨어 지갑을 사용하더라도 macOS 호스트가 감염됐다면, 다음 Ledger Live 실행 시 시드가 유출될 수 있다.
지속성은 ~/Library/LaunchAgents/com.google.keystone.agent.plist로 유지한다. Google 소프트웨어 업데이트 에이전트와 동일한 이름을 사용해 위장한다.
Apple은 최신 macOS 업데이트에서 Terminal에 붙여 넣는 명령을 실행 전 스캔하는 보안 기능을 추가했다. ClickFix 기법에 직접 대응한 조치다.
Apple의 패치가 나오자 공격자는 Terminal을 아예 우회하는 방향을 택했다. applescript:// URL 스킴은 Terminal을 거치지 않고 macOS Script Editor를 직접 열어 AppleScript를 실행한다. Terminal 보안 스캔 대상이 아닌 별도 경로다. Jamf Threat Labs는 이 스킴을 이용해 Atomic Stealer를 전달하는 변종을 관측했다.
공격자가 남길 수밖에 없는 흔적:
| 흔적 | 탐지 포인트 |
|---|---|
base64 -d | bash 패턴 | Terminal 로그에서 Base64 디코딩 후 셸 실행 |
| osascript가 curl·bash를 자식 프로세스로 생성 | T1059.002 → T1059.004 체인. 2026년 2월 변종의 핵심 서명 |
com.google.keystone.agent.plist 신규 생성 | 기존 파일 없는 상태에서 생성되면 의심 |
/tmp/osalogging.zip, /tmp/shub_log.zip | 탈취 데이터 압축 후 임시 디렉토리 저장 |
applescript:// URL 외부 트리거 | Script Editor 원격 실행 — Terminal 우회 변종 서명 |
Sigma 관점에서 핵심 규칙: osascript가 curl을 자식 프로세스로 생성하는 이벤트를 macOS 로그 또는 EDR에서 탐지한다.
ClickFix가 macOS에서 작동하는 이유는 기술적 결함이 아니라 신뢰에 있다. 개발자 환경에서는 Terminal 명령 실행이 일상적이어서, 가짜 설치 안내를 의심 없이 따를 가능성이 있다.
GitHub 레포지토리 위장, ChatGPT 대화 모방, Apple 사이트 모방. 이 캠페인이 사용한 신뢰 위장 벡터는 모두 개발자와 기술 사용자를 겨냥했다. AWS 자격증명, SSH 키, 암호화폐 시드 구문을 우선 수집하는 데이터 타깃도 같은 맥락이다.
MacSync 첫 등장은 2025년 4월이다. 약 10개월 만에 3차 캠페인까지 진화했고, 3차 변종에서는 API 키 게이트 C2와 인메모리 실행으로 기존 탐지 경로 두 가지를 동시에 닫았다. Apple이 Terminal 보안 기능을 추가하자 Script Editor 우회가 등장했다. "맥은 안전하다"는 통념은 기술적 사실이 아니라 공격자가 아직 집중하지 않았다는 의미였다. 3차 캠페인은 그 조건이 바뀌고 있음을 보여준다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.
KW_PROTECT_0