Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Adversaries may abuse systemctl to execute commands or programs.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | 203% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 356% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 572% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 283% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 551% | 0% |
> Sub-technique of: T1569
Adversaries may abuse systemctl to execute commands or programs. Systemctl is the primary interface for systemd, the Linux init system and service manager. Typically invoked from a shell, Systemctl can also be integrated into scripts or applications.
Adversaries may use systemctl to execute commands or programs as Systemd Services. Common subcommands include: systemctl start, systemctl stop, systemctl enable, systemctl disable, and systemctl status.
Platforms: Linux
The following tests are from Atomic Red Team and provide actionable ways to test this technique:
Creates a new systemd service unit file in /etc/systemd/system/ and enables it using systemctl enable followed by systemctl start. Adversaries commonly abuse this workflow to establish persistence or execute arbitrary commands under the context of systemd.
This simulates the full attacker workflow: writing the unit file, reloading the systemd daemon, enabling the service to survive reboots, and starting it immediately. This is consistent with techniques observed in ransomware precursor activity and post-exploitation frameworks targeting Linux infrastructure.
Supported Platforms: linux Elevation Required: Yes
bashecho "[Unit]" > /etc/systemd/system/#{service_name}.service echo "Description=Atomic Test Service" >> /etc/systemd/system/#{service_name}.service echo "After=network.target" >> /etc/systemd/system/#{service_name}.service echo "" >> /etc/systemd/system/#{service_name}.service echo "[Service]" >> /etc/systemd/system/#{service_name}.service echo "ExecStart=#{command_to_run}" >> /etc/systemd/system/#{service_name}.service echo "Restart=on-failure" >> /etc/systemd/system/#{service_name}.service echo "" >> /etc/systemd/system/#{service_name}.service echo "[Install]" >> /etc/systemd/system/#{service_name}.service echo "WantedBy=multi-user.target" >> /etc/systemd/system/#{service_name}.service systemctl daemon-reload systemctl enable #{service_name}.service systemctl start #{service_name}.service systemctl status #{service_name}.service
Dependencies:
Creates a systemd service unit file in /tmp and loads it using systemctl start with an absolute path. Adversaries may write service unit files to world-writable directories such as /tmp to avoid triggering alerts on new file creation in standard service directories, or to execute payloads transiently without permanently installing a service.
Loading a service unit from an arbitrary path rather than a standard systemd directory is unusual behaviour that should be detectable by monitoring systemctl command arguments.
Supported Platforms: linux Elevation Required: Yes
bashecho "[Unit]" > #{service_path} echo "Description=Atomic Tmp Service" >> #{service_path} echo "" >> #{service_path} echo "[Service]" >> #{service_path} echo "ExecStart=#{command_to_run}" >> #{service_path} echo "" >> #{service_path} echo "[Install]" >> #{service_path} echo "WantedBy=multi-user.target" >> #{service_path} systemctl link #{service_path} systemctl start $(basename #{service_path}) systemctl status $(basename #{service_path})
Dependencies:
Creates a systemd service unit file in /dev/shm and loads it using systemctl. /dev/shm is a memory-backed filesystem that is world-writable on most Linux systems and does not persist across reboots, making it particularly attractive to adversaries seeking to execute transient payloads while evading file-based forensic detection.
This technique has been observed in post-exploitation scenarios where attackers deliberately avoid writing to disk-backed locations to limit forensic artefacts.
Supported Platforms: linux Elevation Required: Yes
bashecho "[Unit]" > #{service_path} echo "Description=Atomic SHM Service" >> #{service_path} echo "" >> #{service_path} echo "[Service]" >> #{service_path} echo "ExecStart=#{command_to_run}" >> #{service_path} echo "" >> #{service_path} echo "[Install]" >> #{service_path} echo "WantedBy=multi-user.target" >> #{service_path} systemctl link #{service_path} systemctl start $(basename #{service_path}) systemctl status $(basename #{service_path})
Dependencies:
Creates a service unit file that initially runs a benign command, then modifies the ExecStart directive using sed to substitute a malicious command before reloading and restarting the service. Adversaries may hijack existing services to blend in with normal service activity and avoid triggering detections focused solely on new service creation.
This technique reflects the tradecraft observed in more sophisticated intrusions where blending into existing process trees is a priority over creating net-new services.
Supported Platforms: linux Elevation Required: Yes
bashecho "[Unit]" > /etc/systemd/system/#{service_name}.service echo "Description=Legitimate Looking Service" >> /etc/systemd/system/#{service_name}.service echo "" >> /etc/systemd/system/#{service_name}.service echo "[Service]" >> /etc/systemd/system/#{service_name}.service echo "ExecStart=/bin/true" >> /etc/systemd/system/#{service_name}.service echo "" >> /etc/systemd/system/#{service_name}.service echo "[Install]" >> /etc/systemd/system/#{service_name}.service echo "WantedBy=multi-user.target" >> /etc/systemd/system/#{service_name}.service systemctl daemon-reload sed -i 's|ExecStart=.*|ExecStart=#{malicious_command}|' /etc/systemd/system/#{service_name}.service systemctl daemon-reload systemctl start #{service_name}.service systemctl status #{service_name}.service
Dependencies:
Uses systemd-run to execute a command as a transient systemd service without creating a persistent unit file on disk. Adversaries may use systemd-run to execute arbitrary commands under the context of systemd while bypassing controls that monitor for new unit file creation, since transient services exist only in memory for their lifetime.
This is a particularly stealthy technique as it leaves minimal on-disk artefacts and the service disappears from systemctl list-units once execution completes.
Supported Platforms: linux Elevation Required: Yes
bashsystemd-run --unit=#{unit_name} --wait #{command_to_run} systemctl status #{unit_name}.service 2>/dev/null || echo "Transient service has already completed and exited."
Dependencies:
If Atomic Red Team tests are not applicable, manually verify the technique by:
Limit user access to systemctl to only users who have a legitimate need.
| Finding | Severity | Impact | | ------------------------------ | -------- | --------- | | Systemctl technique applicable | Low | Execution |
| CWE ID | Title | | ------ | -------------------------------------- | | CWE-94 | Improper Control of Generation of Code |
Other measured skills in the registry, with their headline benchmark lift.