T1059.002 AppleScript
Adversaries may abuse AppleScript for execution. AppleScript is a macOS scripting language designed to control applications and parts of the OS via inter-application messages called AppleEvents.1 These AppleEvent messages can be sent independently or easily scripted with AppleScript. These events can locate open windows, send keystrokes, and interact with almost any open application locally or remotely.
Scripts can be run from the command-line via osascript /path/to/script
or osascript -e “script here”
. Aside from the command line, scripts can be executed in numerous ways including Mail rules, Calendar.app alarms, and Automator workflows. AppleScripts can also be executed as plain text shell scripts by adding #!/usr/bin/osascript
to the start of the script file.3
AppleScripts do not need to call osascript
to execute. However, they may be executed from within mach-O binaries by using the macOS Native APIs NSAppleScript
or OSAScript
, both of which execute code independent of the /usr/bin/osascript
command line utility.
Adversaries may abuse AppleScript to execute various behaviors, such as interacting with an open SSH connection, moving to remote machines, and even presenting users with fake dialog boxes. These events cannot start applications remotely (they can start them locally), but they can interact with applications if they’re already running remotely. On macOS 10.10 Yosemite and higher, AppleScript has the ability to execute Native APIs, which otherwise would require compilation and execution in a mach-O binary file format.2 Since this is a scripting language, it can be used to launch more common techniques as well such as a reverse shell via Python.4
Item | Value |
---|---|
ID | T1059.002 |
Sub-techniques | T1059.001, T1059.002, T1059.003, T1059.004, T1059.005, T1059.006, T1059.007, T1059.008, T1059.009 |
Tactics | TA0002 |
Platforms | macOS |
Version | 1.1 |
Created | 09 March 2020 |
Last Modified | 19 October 2022 |
Procedure Examples
ID | Name | Description |
---|---|---|
S0482 | Bundlore | Bundlore can use AppleScript to inject malicious JavaScript into a browser.6 |
S0281 | Dok | Dok uses AppleScript to create a login item for persistence.9 |
S1048 | macOS.OSAMiner | macOS.OSAMiner has used osascript to call itself via the do shell script command in the Launch Agent .plist file.7 |
S0595 | ThiefQuest | ThiefQuest uses AppleScript‘s osascript -e command to launch ThiefQuest‘s persistence via Launch Agent and Launch Daemon. 8 |
Mitigations
ID | Mitigation | Description |
---|---|---|
M1045 | Code Signing | Require that all AppleScript be signed by a trusted developer ID before being executed - this will prevent random AppleScript code from executing.5 This subjects AppleScript code to the same scrutiny as other .app files passing through Gatekeeper. |
M1038 | Execution Prevention | Use application control where appropriate. |
Detection
ID | Data Source | Data Component |
---|---|---|
DS0017 | Command | Command Execution |
DS0009 | Process | OS API Execution |
References
-
Apple. (2016, January 25). Introduction to AppleScript Language Guide. Retrieved March 28, 2020. ↩
-
Phil Stokes. (2019, December 5). macOS Red Team: Calling Apple APIs Without Building Binaries. Retrieved July 17, 2020. ↩
-
Phil Stokes. (2020, March 16). How Offensive Actors Use AppleScript For Attacking macOS. Retrieved July 17, 2020. ↩
-
Yerko Grbic. (2017, February 14). Macro Malware Targets Macs. Retrieved July 8, 2017. ↩
-
Steven Sande. (2013, December 23). AppleScript and Automator gain new features in OS X Mavericks. Retrieved September 21, 2018. ↩
-
Sushko, O. (2019, April 17). macOS Bundlore: Mac Virus Bypassing macOS Security Features. Retrieved June 30, 2020. ↩
-
Phil Stokes. (2021, January 11). FADE DEAD | Adventures in Reversing Malicious Run-Only AppleScripts. Retrieved September 29, 2022. ↩
-
Patrick Wardle. (2020, June 29). OSX.EvilQuest Uncovered part i: infection, persistence, and more!. Retrieved March 18, 2021. ↩
-
Patrick Wardle. (n.d.). Mac Malware of 2017. Retrieved September 21, 2018. ↩