5 неочевидных фишек Bash👋 Приветствую в мире цифровой безопасности!Bash умеет не только запускать команды. Некоторые его особенности помогают находить подозрительный код, скрытые обработчики и ошибки безопасности в скриптах.⏺Проверяем подмену команд. В Bash функция может называться так же, как системная утилита:
type -a ssh
declare -f ssh
Если вместо /usr/bin/ssh вызывается функция, стоит проверить её содержимое. Она может незаметно выполнять дополнительные действия.
⏺Ищем скрытые обработчики. Bash позволяет запускать код перед командами через DEBUG trap:
trap -p DEBUG
А PROMPT_COMMAND выполняется перед появлением приглашения интерактивной оболочки:
declare -p PROMPT_COMMAND
Оба механизма могут использоваться для незаметного выполнения команд.
⏺Записываем трассировку отдельно. Вместо смешивания вывода bash -x с ошибками отправим трассировку в файл:
exec 9>trace.log
BASH_XTRACEFD=9 bash -x suspicious.sh
exec 9>&-
Удобно при разборе сложных скриптов. Но запускать неизвестный код нужно в изоляции: трассировка не защищает от его действий и может раскрыть секреты.
⏺Разбираемся с косвенными переменными. Bash позволяет обращаться к переменной, имя которой хранится в другой:
target=PATH
printf ‘%s\n’ «${!target}»
В подозрительных скриптах ${!var} может усложнять анализ: заранее не всегда очевидно, какая переменная будет прочитана.
⏺Ловим ошибки в конвейерах. По умолчанию Bash возвращает статус последней команды:
false | true
echo $? # 0
Но с pipefail ошибка не потеряется:
set -o pipefail
false | true
echo $? # 1
Особенно полезно в скриптах проверки целостности, обработки логов и резервного копирования.
ZeroDay |
Бункер Хакера |
#bash