Детект privilege escalation через корреляцию sudo с auditd — 12 августа 2026 г. в 11:20:37.007
Детект privilege escalation через корреляцию sudo с auditd 👋 Приветствую в мире цифровой безопасности! Sudo-лог показывает факт вызова команды, но не то что произошло после. Auditd видит всё на уровне ядра - вместе они дают полную картину. ⏺Задача такая: поймать момент когда пользователь через sudo получил привилегированный шелл или сделал что-то за пределами ожидаемого поведения. Один источник логов этого не покажет, нужна корреляция. ⏺Настраиваем auditd на отслеживание процессов запущенных через sudo - ключевой момент это PPID (parent PID): # Следим за fork/exec от процессов с euid=0 auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k priv_exec # Отдельно — запуск интерпретаторов от рута auditctl -a always,exit -F arch=b64 -S execve \ -F path=/bin/bash -F euid=0 -k shell_as_root auditctl -a always,exit -F arch=b64 -S execve \ -F path=/usr/bin/python3 -F euid=0 -k python_as_root ⏺Связываем sudo-событие с последующими действиями через session ID. Каждый sudo-вызов создаёт новую audit-сессию - все дочерние процессы наследуют ses: # Находим session ID конкретного sudo-вызова ausearch -k sudo_exec -i --start today | grep "ses=" # Все события в рамках этой сессии ausearch --session 42 -i | grep -E "execve|open|connect" Один ses объединяет весь граф процессов от момента sudo до завершения сессии. ⏺Автоматическая корреляция через aureport. Строим сводку подозрительных сессий: # Все сессии где был запущен bash от root aureport --executable --start today | grep bash # Сессии с сетевой активностью от root-процессов ausearch -k priv_exec -i | grep "syscall=connect" # Полный timeline конкретной сессии ausearch --session 42 -i --format text | \ awk '/execve|openat|connect/{print $1,$2,$3,$NF}' ⏺Детект классических техник эскалации через паттерны в auditd: # SUID-бинари запущенные в рамках привилегированной сессии ausearch -k priv_exec -i | grep "SUID" # Запись в /etc/passwd или /etc/sudoers после sudo auditctl -w /etc/passwd -p wa -k passwd_write auditctl -w /etc/sudoers -p wa -k sudoers_write ausearch -k passwd_write -i --start today | \ grep -B5 "ses=" | grep "auid=" | sort -u auid - это original user ID который не меняется даже после sudo, именно по нему можно восстановить кто реально выполнил действие. ⏺Собираем итоговый алерт: sudo-вызов плюс последующий запуск шелла в той же сессии - это уже повод разбираться: #!/bin/bash # Находим сессии где после sudo был запущен интерпретатор ausearch -k sudo_exec --start today -i | grep "ses=" | \ grep -oP 'ses=\K\d+' | sort -u | while read ses; do if ausearch --session $ses -i 2>/dev/null | \ grep -q "priv_exec\|shell_as_root"; then echo "ALERT: Suspicious session $ses" ausearch --session $ses -i | grep "execve" | tail -5 fi done 🤖Бесплатный ChatGPT

