Put a safety on that toggle! Automating SAFE Dynamic Mitigation
How to Build tuned Profiles for Dynamic Linux Kernel Mitigations
The recent introduction of "Dynamic Mitigations" for the Linux kernel provides a powerful new capability: the ability to enable or disable CPU security mitigations at runtime without a reboot. This is managed by writing to a special file at /sys/devices/system/cpu/mitigations
.
While you can do this manually with a simple echo
command, a more robust and manageable approach is to use the tuned
daemon. tuned
is a system service designed to switch between performance profiles, making it the perfect tool for this job.
This guide will show you how to create custom tuned
profiles to easily manage your system's security and performance posture.
Start Somewhere : Create a Custom tuned Profile
Creating a custom profile is straightforward. First, you need to create a new directory for your profile inside /etc/tuned/
. User-created profiles in this directory take precedence over the system-default profiles located in /usr/lib/tuned/
.
DISCLAIMER : USE AT YOUR OWN RISK, WHAT WORKS ON MINE DOESNT NECESSARILY WORK ON YOURS! TREAT ANY AND ALL CODE AS A TEMPLATE TO BUILD UPON FOR YOUR OWN PURPOSES. TEST IT, TEST IT, TEST IT, BREAK IT ON PURPOSE & UNDERSTAND IT BEFORE YOU EVER CONSIDER USE ON A PRODUCTION ENVIRONMENT!
you've agreed to the disclaimer...
Inside your new directory, you'll create a configuration file named tuned.conf
. This file uses a simple INI-style format and is where you define your tuning settings.
# Create a directory for our new profile
sudo mkdir /etc/tuned/full-security
Create the configuration file
sudo nano /etc/tuned/full-security/tuned.conf
A basic tuned.conf
file starts with a [main]
section where you can provide a summary and, most importantly, inherit settings from an existing profile using the include=
directive. This saves you from having to redefine common settings.
Willing? Here's A way : The sysfs Plugin
+-+Simple & Declarative+-+
The easiest way to set the mitigation level is with the sysfs
plugin. This plugin allows you to directly write a specific value to any file in the sysfs
filesystem. It's declarative, simple, and perfect for static configurations.
Let's create a full-security
profile that inherits from the latency-performance
profile but ensures all mitigations are enabled and Simultaneous Multi-Threading (SMT) is disabled.
full-security/tuned.conf
# /etc/tuned/full-security/tuned.conf
[main]
summary=Full mitigations for speculative execution vulnerabilities
include=latency-performance
[sysfs]
/sys/devices/system/cpu/mitigations="auto,nosmt"
In this example, the [sysfs]
section contains a single line. The key is the full path to the file, and the value is the exact string that tuned
will write to it when the profile is activated.
Built it? : Here's one more
The script Plugin
+-+Flexible & Powerful+-+
For more complex scenarios where you might need conditional logic, custom logging, or to run other commands, the script
plugin is the ideal choice. This plugin executes an external shell script when the profile is activated or deactivated.
Let's create a profile for a high-performance computing (HPC) workload that disables all optional mitigations to maximize performance and logs the change for auditing purposes.
hpc-performance/tuned.conf
First, create the profile directory and the tuned.conf
file:
# /etc/tuned/hpc-performance/tuned.conf
[main]
summary=Disable all optional CPU mitigations for maximum performance
include=throughput-performance
[script]
script=/etc/tuned/hpc-performance/mitigation-script.sh
Next, create the corresponding script specified in the config file. The script will be called with either a "start" or "stop" argument.
hpc-performance/mitigation-script.sh
#!/bin/bash
/etc/tuned/hpc-performance/mitigation-script.sh
LOG_FILE="/var/log/tuned/mitigations.log"
MITIGATIONS_FILE="/sys/devices/system/cpu/mitigations"
The script is called with 'start' when the profile is activated,
and 'stop' when it is deactivated.
if [ "1" == "start" ]; then
echo "(date): Activating hpc-performance profile. Setting mitigations to OFF." >> ${LOG_FILE}
echo "mitigations=off" > ${MITIGATIONS_FILE}
elif [ "$1" == "stop" ]; then
When a profile is stopped, tuned automatically reverts settings.
This block is for logging or any other cleanup needed.
echo "$(date): Deactivating hpc-performance profile. Mitigations will be reverted." >> ${LOG_FILE}
fi
exit 0
Finally, make the script executable:
sudo chmod +x /etc/tuned/hpc-performance/mitigation-script.sh
Make it so...
+-+Activate and Verify+-+
Once you've created your profile, you can activate it using the tuned-adm
command.
# Activate the full-security profile
sudo tuned-adm profile full-security
Check which profile is currently active
sudo tuned-adm active
When you switch profiles, tuned
automatically handles reverting the settings of the old profile before applying the new one, ensuring a clean transition.
By using custom tuned
profiles, you can create a library of well-defined, auditable, and easily switchable security postures for your Linux systems, allowing you to balance performance and security with a single command.
Comments
Post a Comment