공격자는 피해자의 시스템에 침투한 이후, 지속성(Persistence)을 확보하기 위한 과정을 수행합니다. 지속성을 확보하지 못한다면, 침투에 성공해도 시스템 재시작, 계정 변경 등의 이유로 액세스를 유지하지 못해 정보 유출, 파일 암호화 등의 최종적인 목표를 이룰 수 없기 때문입니다.
따라서 공격자들은 지속성을 유지하는 기술을 연구하며, 발전시키고 있습니다. MITRE ATT&CK에서도 이를 하나의 공격 전술(Tactic)로 분류해 지속성에 사용되는 기술(Technique)을 업데이트 하고 있습니다.
2. Persistence Techniques
macOS의 기본 셸인 zsh는 실행될 때 환경 변수 로딩과 초기 명령 실행을 위해 먼저 zshenv 파일을 읽습니다. 이 파일은 사용자가 직접 터미널을 실행하는 경우 뿐만 아니라, 다른 프로그램이나 스크립트가 내부적으로 zsh를 자동으로 실행할 때도 항상 로드되는 특성을 가지고 있습니다.
zshenv 파일은 일반적인 경우에는 존재하지 않지만, 환경 변수 설정이나 PATH 지정 등의 목적으로 생성하여 사용됩니다. 하지만, 공격자는 zshenv 파일을 생성하고 악성 명령을 삽입하여 zsh가 실행되는 모든 상황에서 악성 코드가 자동 실행되도록 지속성을 확보하는데 악용합니다.
공격자가 zshenv 파일을 통해 지속성을 확보한다면, 터미널 실행, SSH 접속, 자동화 스크립트 실행 등 zsh가 호출되는 모든 상황에서 악성 스크립트가 반복적으로 실행되기 때문에, 은밀한 악성 행위 유지가 가능하게 됩니다.
| 경로 | 생성 권한 | 실행 시점 |
| /Users/[사용자 이름]/.zshenv | 일반 사용자 | 해당 사용자가 zsh를 실행할 때 |
| /root/zshenv | 관리자(Root) | 모든 사용자가 zsh를 실행할 때 |
[표 01] zshenv파일의 경로 및 특징
Hidden Risk는 2024년 11월 SentinelOne에서 공개한 macOS 다단계 악성코드 캠페인으로, 북한 해킹 그룹인 BlueNoroff가 배후로 알려져 있습니다.
이 캠페인은 가상 자산 내용의 피싱 메일을 통해 감염을 유도하고 있으며, 메일에 포함된 링크를 클릭할 경우, 아래 그림과 같은 악성 app 파일이 다운로드 됩니다.
해당 app 파일을 실행하면, 정상 PDF 파일을 다운로드 후, 실행해 피해자의 의심을 피하고 추가 악성코드를 다운로드해 실행합니다. 다운로드된 추가 악성코드 중 growth는 지속성을 확보하기 위해 ~/ 경로에 .zshenv 파일을 생성합니다.
생성된 .zshenv 파일은 /tmp/.zsc_init_success 파일의 존재 유무에 따라 growth를 지속적으로 실행하는 지속성 유지 행위를 수행하게 됩니다.
지속성을 확보한 growth는 공격자의 C2 서버와 통신하며, 피해 단말의 정보를 수집해 전송하고 공격자의 명령을 대기합니다 .
Genian EDR에서는 지속성 확보를 목적으로 생성되는 zshenv 파일을 MITRE ATT&CK 태그를 통해 탐지하고 있으며, 위협 스토리라인을 통해 악성코드의 추가 행위까지 확인할 수 있습니다.
macOS 운영체제에서는 launchctl 을 사용해 LaunchDaemon 및 LaunchAgent 와 같은 시스템 서비스(Launchd 기반 서비스)를 로드·언로드하거나, 서비스의 상태를 제어하고 관리합니다. 정상적인 환경에서는 애플리케이션의 자동 실행, 백그라운드 작업 처리, 시스템 구성 유지 등을 위해 사용됩니다.
하지만, 공격자들은 이 launchctl 를 악용하여 악성코드를 실행하는 .plist 파일을 생성하거나 수정해 launchd 에 강제로 등록하고 로드합니다. 공격자는 이 방법을 통해 시스템이 재부팅 되더라도 악성코드가 자동으로 다시 실행되도록 하는 지속성 확보 수단으로 사용합니다.
| 경로 | 생성 권한 | 실행 시점 |
| Users/[사용자 이름]/Library/LaunchAgents/[악성 .plist] | 일반 사용자 | 해당 사용자 로그인 시 |
| /Library/LaunchAgents/[악성 .plist] | 관리자(Root) | 모든 사용자 로그인 시 |
| /Library/LaunchDaemons/[악성 .plist] | 관리자(Root) | 부팅 시 |
[표 02] 악용되는 launchctl 경로
CloudMensis 악성코드는 Object-C로 개발된 macOS 악성코드로, 일반적인 C2 서버 대신 pCloud와 Yandex 같은 퍼블릭 클라우드 스토리리지를 C2 서버로 사용한다는 특징이 있습니다.
해당 악성코드가 실행되면, 먼저 공격자 C2 서버에서WindowServer라는 추가 악성 파일을 다운로드합니다. 이후, /Library/LaunchDaemons 경로에 “.”으로 시작하는 숨겨진 plist 파일을 생성하여 시스템 부팅 시마다 WindowServer 파일이 실행되도록 지속성을 확보합니다.
plist 파일을 통해 지속성을 확보한 CloudMensis는 hwp, pptx, xlsx 등의 다양한 문서 파일과 이메일 및 녹음 파일을 수집해 공격자의 C2 서버에 전송합니다.
/Library/LaunchDaemons 에 의심스러운 plist 파일이 생성되는 행위는 Genian EDR에서 T1543.004 - Create or Modify System Process: Launch Daemon으로 탐지하고 있으며, 아래 그림을 통해 확인할 수 있습니다.
Macma 악성코드는 중국의 해킹 그룹 Evasive Panda가 운용하는 macOS 대상 백도어로, 2019년 처음 등장한 이후, 현재까지도 기능이 개선된 변종이 지속적으로 발견되고 있습니다.
이 악성코드는 초기 실행 시 키로거, 화면캡쳐 등 기능별로 모듈화된 각 악성 파일과 plist 파일을 임시 경로에 생성하고 cp 명령을 통해 공격자가 지정한 각 경로에 복사합니다.
지속성을 확보한 Macma 악성코드는 지속적으로 실행되며, 오디오 녹음과 화면 캡쳐 및 키로깅 등의 악성 행위를 통해 정보를 수집하고 공격자의 C2에 전송합니다.
Genian EDR은 cp 명령을 통해 /Library/LaunchAgents 경로에 생성되는 의심스러운 plist 파일을 탐지하고 있습니다. 또한, 해당 이벤트에 태깅된 MITRE ATT&CK 정보를 통해 해당 행위를 보다 쉽게 파악하고 이해할 수 있습니다.
Genian EDR은 MITRE ATT&CK을 기반으로 다양한 사이버 공격 전술 및 기술을 탐지할 수 있습니다. Genian EDR을 통해 macOS 환경에서 지속성을 확보하기 위한 위한 공격자들의 악성 행위를 탐지할 수 있으며, 해당 이벤트에 태깅된 MITRE ATT&CK을 통하여 공격 흐름을 파악하고 신속하게 대응할 수 있도록 도와줍니다.
또한, 검색 필터의 MITRE ATT&CK분류를 통해 Tactic 및 Technique 기준으로 의심스러운 이벤트를 확인할 수 있습니다. 이를 통해 각 단말들의 전체적인 위협 현황을 쉽게 파악하고 신속하게 대응할 수 있습니다.
Matrix - Enterprise - macOS l MITRE ATT&CK
BlueNoroff Hidden Risk l Threat Actor Targets Macs with Fake Crypto News and Novel Persistence
지니언스 GSC(Genians Security Center)에서 위협 분석을 담당하고 있습니다.