macOS (Security): Аудит LaunchAgents/Daemons на «подозрительные» пути и неподписанные бинарники
Боль: Пользователь жалуется на фантомные процессы. В ~/Library/LaunchAgents лежит «что-то», что перезапускается после удаления.
Реакция админа: «Снесём руками».
Реакция архитектора: «Сначала найдём источник автозапуска и оценим риски.»
Скрипт (Bash). Ищет .plist с исполняемыми из пользовательских/временных директорий, помеченные quarantine или неподписанные бинарники.
Взгляд архитектора: Постоянство (persistence) — базовая TTP вредоносов. Мы валидируем автозапуски против критериев доверия пути/подписи/карантина, а не «по чувствам».
#macos #security #incident_response #forensics #bash #скрипты
Боль: Пользователь жалуется на фантомные процессы. В ~/Library/LaunchAgents лежит «что-то», что перезапускается после удаления.
Реакция админа: «Снесём руками».
Реакция архитектора: «Сначала найдём источник автозапуска и оценим риски.»
Скрипт (Bash). Ищет .plist с исполняемыми из пользовательских/временных директорий, помеченные quarantine или неподписанные бинарники.
#!/usr/bin/env bash
# --- macOS LaunchAgents/Daemons Audit ---
set -euo pipefail
echo "--- Начинаю аудит LaunchAgents/Daemons ---"
dirs=( "$HOME/Library/LaunchAgents" "/Library/LaunchAgents" "/Library/LaunchDaemons" )
for d in "${dirs[@]}"; do
[ -d "$d" ] || continue
while IFS= read -r -d '' plist; do
program=$(/usr/libexec/PlistBuddy -c 'Print :Program' "$plist" 2>/dev/null || true)
if [ -z "${program:-}" ]; then
program=$(/usr/libexec/PlistBuddy -c 'Print :ProgramArguments:0' "$plist" 2>/dev/null || true)
fi
suspicious=""
unsigned=""
quarantine=""
if [ -n "${program:-}" ]; then
dir=$(dirname "$program")
# Подозрительные пути: пользовательские/временные директории
if [[ "$program" =~ ^/Users/ ]] || [[ "$program" =~ ^/tmp/ ]] || [[ "$program" =~ ^/private/tmp/ ]]; then
if [ -w "$dir" ]; then suspicious="user-writable"; fi
fi
# quarantine-атрибут
if [ -f "$program" ] && xattr -p com.apple.quarantine "$program" >/dev/null 2>&1; then
quarantine="quarantined"
fi
# неподписанность
if [ -f "$program" ]; then
if ! codesign -dv "$program" >/dev/null 2>&1; then unsigned="unsigned"; fi
fi
fi
if [ -n "$suspicious$quarantine$unsigned" ]; then
echo "plist: $plist"
echo " Program: ${program:-<none>}"
echo " Flags: $suspicious $quarantine $unsigned"
echo "----------------------------------------"
fi
done < <(find "$d" -name '*.plist' -print0 2>/dev/null)
done
echo "--- Аудит завершен ---"
echo "Рекомендация: бэкапнуть plist и бинарь, затем удалить через launchctl (disable/unload), проверить персистентность."
Взгляд архитектора: Постоянство (persistence) — базовая TTP вредоносов. Мы валидируем автозапуски против критериев доверия пути/подписи/карантина, а не «по чувствам».
#macos #security #incident_response #forensics #bash #скрипты
🔥3