# yaml-language-server: $schema=../../../../schema/control.schema.json id: CB-DEB-AUDIT-018 title: Audit changes to the host name and network configuration finding: title: Changes to the host identity and network settings are not recorded description: Name resolution, banners and interfaces can be changed to redirect traffic or mislead users without a record. status: active profiles: [server-hardened, desktop-hardened] risk: severity: low assessment: automated tags: [auditd, network] description: | auditd rules in `/etc/audit/rules.d/60-cirsec-network.rules`, key `system-locale`: `sethostname` and `setdomainname`, and writes to `/etc/issue`, `/etc/issue.net`, `/etc/hosts`, `/etc/hostname`, `/etc/networks`, `/etc/network/`, `/etc/netplan/` and `/etc/NetworkManager/`. rationale: | An attacker who edits `/etc/hosts` or the network configuration can redirect traffic to a host they control. Recording these changes shows when and by whom the identity or network setup of the system was modified. impact: | None known. Watches on paths that do not exist (for example `/etc/NetworkManager/` on a server) are accepted and start working when the path is created. setting: location: /etc/audit/rules.d/60-cirsec-network.rules default_value: No audit rules recommended_value: "Rules loaded (auditctl -l) and present in /etc/audit/rules.d/60-cirsec-network.rules" audit: manual: | 1. Run `auditctl -l` as root. It must list the rules shown below (keys `system-locale`). 2. Run `grep -h . /etc/audit/rules.d/*.rules`. The same rules must be present, so they load at boot. Expected rules, as `auditctl -l` prints them: ``` -a always,exit -F arch=b64 -S sethostname,setdomainname -F key=system-locale -a always,exit -F arch=b32 -S sethostname,setdomainname -F key=system-locale -w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale -w /etc/hosts -p wa -k system-locale -w /etc/hostname -p wa -k system-locale -w /etc/networks -p wa -k system-locale -w /etc/network -p wa -k system-locale -w /etc/netplan -p wa -k system-locale -w /etc/NetworkManager -p wa -k system-locale ``` checks: - id: rules engine: shell description: Rules loaded in the kernel and present in /etc/audit/rules.d. spec: script: | command -v auditctl >/dev/null 2>&1 || { echo "auditctl not found: auditd is not installed"; exit 1; } want() { cat <<'RULES' -a always,exit -F arch=b64 -S sethostname,setdomainname -F key=system-locale -a always,exit -F arch=b32 -S sethostname,setdomainname -F key=system-locale -w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale -w /etc/hosts -p wa -k system-locale -w /etc/hostname -p wa -k system-locale -w /etc/networks -p wa -k system-locale -w /etc/network -p wa -k system-locale -w /etc/netplan -p wa -k system-locale -w /etc/NetworkManager -p wa -k system-locale RULES } loaded=$(auditctl -l 2>&1) || { echo "$loaded"; exit 3; } disk=$(cat /etc/audit/rules.d/*.rules 2>/dev/null) n=0 rc=0 while IFS= read -r r; do [ -n "$r" ] || continue n=$((n + 1)) printf '%s\n' "$loaded" | grep -Fxq -- "$r" || { echo "not loaded: $r"; rc=1; } printf '%s\n' "$disk" | grep -Fxq -- "$r" || { echo "not in /etc/audit/rules.d: $r"; rc=1; } done </dev/null 2>&1 || { echo "auditd is not installed" >&2; exit 1; } want() { cat <<'RULES' -a always,exit -F arch=b64 -S sethostname,setdomainname -F key=system-locale -a always,exit -F arch=b32 -S sethostname,setdomainname -F key=system-locale -w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale -w /etc/hosts -p wa -k system-locale -w /etc/hostname -p wa -k system-locale -w /etc/networks -p wa -k system-locale -w /etc/network -p wa -k system-locale -w /etc/netplan -p wa -k system-locale -w /etc/NetworkManager -p wa -k system-locale RULES } f=/etc/audit/rules.d/60-cirsec-network.rules t=$(mktemp) { echo '# Written by CIRSEC Baselines CB-DEB-AUDIT-018'; want; } >"$t" if ! cmp -s "$t" "$f"; then cb_backup "$f" cat "$t" >"$f" fi rm -f "$t" chmod 640 "$f" if auditctl -s | grep -q '^enabled 2'; then echo "audit rules are locked (-e 2): reboot to load $f" else augenrules --load >/dev/null fi references: - title: audit.rules(7), Debian manual pages url: https://manpages.debian.org/trixie/auditd/audit.rules.7.en.html publisher: Debian kind: vendor-doc accessed: 2026-10-18 - title: auditctl(8), Debian manual pages url: https://manpages.debian.org/trixie/auditd/auditctl.8.en.html publisher: Debian kind: vendor-doc accessed: 2026-10-18 - title: ANSSI-BP-028 v2.0 - Recommandations de configuration d'un système GNU/Linux (R73) url: https://messervices.cyber.gouv.fr/documents-guides/fr_np_linux_configuration-v2.0.pdf publisher: ANSSI kind: guide accessed: 2026-10-18 mappings: - framework: anssi-linux framework_version: "2.0" id: "R73" relation: partial - framework: nist-800-53r5 framework_version: "5.1.1" id: "AU-12" relation: related - framework: cis-debian-12 framework_version: "2.0.0" id: "6.2.3.5" relation: equivalent - framework: cis-debian-12 framework_version: "2.0.0" id: "6.2.3.6" relation: equivalent - framework: cis-debian-12 framework_version: "2.0.0" id: "6.2.3.7" relation: equivalent - framework: cis-debian-12 framework_version: "2.0.0" id: "6.2.3.8" relation: equivalent - framework: cis-debian-12 framework_version: "2.0.0" id: "6.2.3.9" relation: equivalent - framework: cis-debian-13 framework_version: "1.1.0" id: "6.2.3.5" relation: equivalent - framework: cis-debian-13 framework_version: "1.1.0" id: "6.2.3.6" relation: equivalent - framework: cis-debian-13 framework_version: "1.1.0" id: "6.2.3.7" relation: equivalent - framework: cis-debian-13 framework_version: "1.1.0" id: "6.2.3.8" relation: equivalent - framework: cis-debian-13 framework_version: "1.1.0" id: "6.2.3.9" relation: equivalent threats: - framework: mitre-attack id: T1565.001 related_controls: - id: CB-DEB-AUDIT-011 type: requires - id: CB-DEB-AUDIT-029 type: related authors: - name: Alice github: Sn0wAlice verified: - date: 2026-10-18 by: Sn0wAlice versions: ["12"] environment: Proxmox VM, Debian 12 genericcloud image, kernel 6.1.0-54-cloud-amd64, auditd 1:3.0.9-1, BIOS boot notes: "Rules fail on fresh install; fix writes /etc/audit/rules.d/60-cirsec-network.rules and loads it; rules match auditctl -l, kept after reboot; second run idempotent." - date: 2026-10-18 by: Sn0wAlice versions: ["13"] environment: Proxmox VM, Debian 13 genericcloud image, kernel 6.12.113+deb13-cloud-amd64, auditd 1:4.0.2-2+deb13u1, BIOS boot notes: "Rules fail on fresh install; fix writes /etc/audit/rules.d/60-cirsec-network.rules and loads it; rules match auditctl -l, kept after reboot; second run idempotent." introduced_in: 0.1.0 created: 2026-10-18 updated: 2026-10-18