Links

macOS Proces Abuse

MacOS Process Abuse

MacOS, like any other operating system, provides a variety of methods and mechanisms for processes to interact, communicate, and share data. While these techniques are essential for efficient system functioning, they can also be abused by threat actors to perform malicious activities.

Library Injection

Library Injection is a technique wherein an attacker forces a process to load a malicious library. Once injected, the library runs in the context of the target process, providing the attacker with the same permissions and access as the process.

Function Hooking

Function Hooking involves intercepting function calls or messages within a software code. By hooking functions, an attacker can modify the behavior of a process, observe sensitive data, or even gain control over the execution flow.

Inter Process Communication

Inter Process Communication (IPC) refers to different methods by which separate processes share and exchange data. While IPC is fundamental for many legitimate applications, it can also be misused to subvert process isolation, leak sensitive information, or perform unauthorized actions.

Electron Applications Injection

Electron applications executed with specific env variables could be vulnerable to process injection:

.Net Applications Injection

It's possible to inject code into .Net applications by abusing the .Net debugging functionality (not protected by macOS protections such as runtime hardening).

Python Injection

If the environment variable PYTHONINSPECT is set, the python process will drop into a python cli once it's finished.
Other env variables such as PYTHONPATH and PYTHONHOME could also be useful to make a python command execute arbitrary scode.
Note that executables compiled with pyinstaller won't use these environmental variables even if they are running using an embedded python.

Detection

Shield

​Shield (Github) is an open source application that can detect and block process injection actions:
  • Using Environmental Variables: It will monitor the presence of any of the following environmental variables: DYLD_INSERT_LIBRARIES, CFNETWORK_LIBRARY_PATH, RAWCAMERA_BUNDLE_PATH and ELECTRON_RUN_AS_NODE
  • Using task_for_pid calls: To find when one process wants to get the task port of another which allows to inject code in the process.
  • Electron apps params: Someone can use --inspect, --inspect-brk and --remote-debugging-port command line argument to start an Electron app in debugging mode, and thus inject code to it.
  • Using symlinks or hardlinks: Typically the most common abuse is to place a link with our user privileges, and point it to a higher privilege location. The detection is very simple for both hardlink and symlinks. If the process creating the link has a different privilege level than the target file, we create an alert. Unfortunately in the case of symlinks blocking is not possible, as we don’t have information about the destination of the link prior creation. This is a limitation of Apple’s EndpointSecuriy framework.

Calls made by other processes

In this blog post you can find how it's possible to use the function task_name_for_pid to get information about other processes injecting code in a process and then getting information about that other process.
Note that to call that function you need to be the same uid as the one running the process or root (and it returns info about the process, not a way to inject code).

References