Detect LC_LOAD_DYLIB Addition in Microsoft Sentinel
Adversaries may establish persistence by executing malicious content triggered by the loading of a dynamically linked shared library. Mach-O binaries on macOS have a series of load commands that dictate how/when the binary is executed, including a set of libraries to load. The LC_LOAD_DYLIB command in a Mach-O binary tells macOS to load a specific dynamic library (.dylib) when that binary executes. Adversaries can add their own LC_LOAD_DYLIB load command to any Mach-O binary, causing their malicious library to be loaded whenever the modified binary is executed. This provides persistence that is triggered by the execution of legitimate binaries.
MITRE ATT&CK
- Tactic
- Privilege Escalation Persistence
- Technique
- T1546 Event Triggered Execution
- Sub-technique
- T1546.006 LC_LOAD_DYLIB Addition
- Canonical reference
- https://attack.mitre.org/techniques/T1546/006/
KQL Detection Query
DeviceProcessEvents
| where Timestamp > ago(24h)
| where DeviceOSPlatform has_any ("macOS", "Mac", "Darwin")
| where FileName in~ ("install_name_tool", "otool", "codesign", "lipo", "jtool", "jtool2", "macho_tool")
| extend IsDylibOperation = ProcessCommandLine has_any (
"-add_rpath", "-change", "-rpath", "LC_LOAD_DYLIB",
"@rpath", "@loader_path", "@executable_path"
)
| extend TargetBinary = extract(@"(?:install_name_tool|otool)\s+(?:-[\w]+\s+){0,5}([\S]+\.(dylib|app|bundle|bin|[a-z]+))", 1, ProcessCommandLine)
| where IsDylibOperation
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
TargetBinary, IsDylibOperation,
InitiatingProcessFileName, InitiatingProcessCommandLine
| sort by Timestamp desc Detects use of macOS binary manipulation tools (install_name_tool, otool) with flags that add or modify LC_LOAD_DYLIB entries in Mach-O binaries. Monitors for -add_rpath operations and @rpath/@loader_path substitutions that are commonly used to inject malicious dylib load commands. Also covers code signing operations that might follow a binary modification to re-sign altered binaries.
Data Sources
Required Tables
False Positives & Tuning
- Developers legitimately modifying Mach-O binaries during build processes (install_name_tool is commonly used in Xcode build scripts to fix dylib paths)
- Homebrew and MacPorts package managers that use install_name_tool to relocate dylib paths when installing packages
- Codesigning workflows that modify binary metadata as part of CI/CD pipelines for macOS application development
- Security researchers and reverse engineers using otool/jtool for binary analysis on their own machines
Other platforms for T1546.006
Testing Methodology
Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1Inspect Mach-O Binary Load Commands with otool
Expected signal: Process creation event for otool with -l /bin/ls arguments. The output reveals all existing dylib dependencies. This is reconnaissance activity that precedes actual injection.
- Test 2Add RPATH to Binary with install_name_tool
Expected signal: Process creation event for install_name_tool with -add_rpath flag. File modification event for /tmp/argus_test_binary. The combination of install_name_tool + -add_rpath + target binary is the key signal.
- Test 3Create Malicious Dylib in User Library Path
Expected signal: Process creation events for gcc. File creation event for libpayload.dylib in ~/Library/Application Support/.hidden — a hidden directory in a user-writable location. The .dylib file creation in a non-system path is the detection trigger.
References (5)
- https://attack.mitre.org/techniques/T1546/006/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1546.006/T1546.006.md
- https://www.virusbulletin.com/virusbulletin/2015/03/dylib-hijacking-os-x
- https://objective-see.org/blog.html
- https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html
Unlock Pro Content
Get the full detection package for T1546.006 including response playbook, investigation guide, and atomic red team tests.