Привет, сетевой друг!
Сегодня расскажу, как поймал коллегу, который передавал пароль в открытом виде через SSH.🟣Что случилось: Во время проверки процессов на сервере увидел команду:
sshpass -p 'Qwerty123' ssh admin@10.0.5.21
Пароль был явно виден в аргументах - любой юзер мог его прочитать через ps или в /proc. Коллега признался, что так сделал скрипт для удобства, чтобы не вводить пароль каждый раз 🤷♂️. Но это классический антипаттерн.
🟣Почему это опасно: Пароли, переданные через аргументы, видны в списке процессов (ps), в файловой системе /proc/[PID]/cmdline, в менеджерах задач и даже в логах CI/CD. Это значит, что хакер может получить доступ без прямого взлома SSH-сервера.
🟣Как искать такие случаи?
На Linux можно использовать:
ps -eo pid,user,command --no-header | while read PID USER CMD; do
if [[ "$CMD" =~ -p ]] || [[ "$CMD" =~ -pw ]] || [[ "$CMD" =~ --password= ]] || [[ "$CMD" =~ /password= ]]; then
echo "PID=$PID USER=$USER CMD=$CMD"
fi
done
На Windows - PowerShell:
$insecureProcs = Get-CimInstance Win32_Process | Where-Object {
$_.CommandLine -match '\-p\s' -or $_.CommandLine -match '\-pw\s' -or $_.CommandLine -match '--password=' -or $_.CommandLine -match '/password='
} | Select-Object ProcessId, Name, CommandLine
$insecureProcs | Format-Table -AutoSize🟣Чем это закончилось: Мы обнаружили, что ночной бэкап запускался с паролем в cron и команда логировалась в Jenkins. Быстро заменили ключи, почистили конфигурации и усилили контроль доступа.
🟣Как делать правильно: Используйте ssh-ключи с ssh-agent, храните секреты в Vault, ограничивайте видимость процессов, удаляйте утилиты типа sshpass и используйте линтеры и pre-commit хуки, чтобы запретить передачу паролей в аргументах.
Серверная Админа | #network