РЕДАКТИРОВАТЬ 2 :
Есть одна веская причина, по которой этот пост привлекает такое большое внимание: вам удалось записать на своем компьютере целую живую сессию злоумышленника. Это очень отличается от нашего повседневного опыта, когда мы имеем дело с обнаружением последствий его действий и пытаемся исправить их. Здесь мы видим его на работе, видим, что у него есть некоторые проблемы с установкой черного хода, проследить его шаги, лихорадочно работать (возможно, потому что он сидел за вашим столом, как предложено выше, или, возможно, и, на мой взгляд, более вероятно, потому что он был не в состоянии заставить свою вредоносную программу работать в системе, прочитайте ниже), и попытайтесь развернуть полностью автономные инструменты контроля. Это то, что исследователи безопасности ежедневно наблюдают со своими ловушками . Для меня это очень редкий шанс и источник некоторых развлечений.
Вы определенно были взломаны. Доказательства это не происходят из фрагмента из auth.log
файла, отображаемого, поскольку это сообщает неудачную попытку входа, происходит в течение короткого промежутка времени (два ИКС). Вы заметите, что вторая строка сообщает Failed password
, а третья сообщает об pre-auth
отключении: парень попытался и потерпел неудачу.
Доказательства приходят вместо от содержания двух файлов http://222.186.30.209:65534/yjz
и http://222.186.30.209:65534/yjz1
которые злоумышленник загруженных на вашу систему.
Сайт в настоящее время открыт для всех желающих их скачать, что я и сделал. Я сначала побежал file
на них, которые показали:
$ file y*
yjz: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
yjz1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
Затем я перенес их на имеющуюся у меня 64-битную виртуальную машину Debian; проверка их содержимого с помощью strings
команды показала много подозрительного (ссылки на различные известные атаки, команды, которые должны быть заменены, скрипт, который явно использовался для настройки новой службы и т. д.).
Затем я создал MD5-хэши обоих файлов и передал их в хеш-базу данных Cymru, чтобы узнать, являются ли они известными агентами вредоносного ПО. Пока yjz
нет, yjz1
есть, и Cymru сообщает о вероятности обнаружения антивирусным программным обеспечением 58%. В нем также говорится, что этот файл в последний раз видели около трех дней назад, так что это достаточно недавно.
Запуск clamscan (часть clamav
пакета) для двух полученных мной файлов:
$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND
так что теперь мы уверены, что стандартное программное обеспечение Linux может идентифицировать его.
Что вы должны сделать?
Хотя и довольно новая, ни одна из систем не очень новая, см. , Например , эту статью за январь 2015 года о XorDdos . Поэтому большинство бесплатных пакетов должно быть в состоянии удалить его. Вы должны попробовать: clamav
, rkhunter
, chkrootkit
. Я погуглил вокруг и увидел, что они утверждают, что могут его заметить. Используйте их для проверки работы предшественника, но после запуска этих трех программ вы должны быть готовы к работе.
Что касается более крупного вопроса what should you do to prevent future infections
, ответ Journeyman - хороший первый шаг. Просто помните, что это постоянная борьба, которую все мы (включая меня!) Вполне могли проиграть, даже не зная об этом.
РЕДАКТИРОВАТЬ :
По косвенной подсказке Виктора Тота я хотел бы добавить несколько комментариев. Конечно, злоумышленник столкнулся с некоторыми трудностями: он загружает два разных хакерских инструмента, несколько раз меняет их разрешения, несколько раз перезапускает и много раз пытается отключить брандмауэр. Легко догадаться, что происходит: он ожидает, что его хакерские инструменты откроют канал связи с одним из его зараженных ПК (см. Позже), и, когда он не видит, что этот новый канал появляется на его контрольном интерфейсе, боится его взлома. Инструмент блокируется брандмауэром, поэтому он повторяет процедуру установки. Я согласен с Виктором Тотом, что этот конкретный этап его операции, похоже, не приносит ожидаемых результатов, но я хотел бы вас очень воодушевить не стоит недооценивать степень ущерба, нанесенного вашему компьютеру.
Я приведу здесь частичный вывод strings yjz1
:
etc/init.d/%s
/etc/rc%d.d/S90%s
--del
chkconfig
remove
update-rc.d
/etc/cron.hourly/gcc4.sh
/etc/rc.d/rc%d.d/S90%s
--add
defaults
/proc/%d/exe
/proc/self/exe
HOME=/
MYSQL_HISTFILE=/dev/null
#!/bin/sh
# chkconfig: 12345 90 90
# description: %s
### BEGIN INIT INFO
# Provides: %s
# Required-Start:
# Required-Stop:
# Default-Start: 1 2 3 4 5
# Default-Stop:
# Short-Description: %s
### END INIT INFO
case $1 in
start)
stop)
esac
sed -i '/\/etc\/cron.hourly\/gcc4.sh/d' /etc/crontab && echo '*/3 * * * * root /etc/cron.hourly/gcc4.sh' >> /etc/crontab
etc/init.d/%s
GET %s HTTP/1.1
%sHost: %s
POST %s HTTP/1.1
%sHost: %s
Content-Type: application/x-www-form-urlencoded
Content-Length: %d
%s%s
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler ; .NET CLR 1.1.4322)
Connection: Keep-Alive
Это свидетельствует о вмешательстве в службы (в /etc/init.d
и в /etc/rc.d
) crontab
, в файл истории mysql
и в пару файлов, на proc
которые есть ссылки bash
(что указывает на то, что была установлена специальная мошенническая версия вашей оболочки). Затем программа генерирует HTTP-запрос (на китайскоязычный сайт,
Accept-Language: zh-cn
что дает основание для комментария Дэвида Шварца выше), что может создать еще больший хаос. В запросе исполняемые файлы ( Content-Type: application/x-www-form-urlencoded
) должны быть загружены на атакованный компьютер (GET) и загружены на управляющий компьютер (POST). Я не мог определить , что будет загружен на атакуемого компьютера, но, учитывая небольшой размер как yjz
и yjz1
(1.1MB и 600KB, repectively), я могу рискну предположить , что большинство файлов , необходимых для прикрытия руткита, то есть измененный версии ls
, netstat
, ps
, ifconfig
, ..., будет загружен этот путь. И это объясняет лихорадочные попытки злоумышленника запустить эту загрузку.
Нет уверенности в том, что вышесказанное исчерпывает все возможности: нам, безусловно, не хватает части стенограммы (между строками 457 и 481), и мы не видим выхода из системы; кроме того, особенно тревожат линии 495-497,
cd /tmp; ./yd_cd/make
которые ссылаются на файл, который мы не видели загруженным, и который может быть компиляцией: если это так, это означает, что злоумышленник (наконец-то?) понял, в чем заключалась проблема с его исполняемыми файлами, и пытается ее исправить, и в этом случае атакованный компьютер ушел навсегда. [На самом деле две версии вредоносного ПО, загруженного злоумышленником на взломанную машину (а я на мою 64-битную виртуальную машину Debian), предназначены для неподходящей архитектуры, x86, в то время как одно только имя взломанного компьютера выдает тот факт, что он имел дело с архитектурой руки].
Причина, по которой я написал эту редакцию, состоит в том, чтобы как можно сильнее убедить вас либо расчистить вашу систему профессиональным инструментом, либо переустановить ее с нуля.
И, кстати, если это окажется полезным для всех, это список из 331 IP-адресов, к которым yjz
пытается подключиться. Этот список настолько велик (и, вероятно, ему суждено стать еще больше), что я считаю, что это причина подделки mysql
. Список, предоставленный другим бэкдором, идентичен, что, как я полагаю, является причиной того, что такая важная часть информации остается открытой (я думаю, что злоумышленник не хотел прилагать усилия для сохранения их в формате ядра, поэтому он поместил весь список в открытый текстовый файл, который, вероятно, был прочитан всеми его бэкдорами для любой ОС):
61.132.163.68
202.102.192.68
202.102.213.68
202.102.200.101
58.242.2.2
202.38.64.1
211.91.88.129
211.138.180.2
218.104.78.2
202.102.199.68
202.175.3.3
202.175.3.8
202.112.144.30
61.233.9.9
61.233.9.61
124.207.160.110
202.97.7.6
202.97.7.17
202.106.0.20
202.106.46.151
202.106.195.68
202.106.196.115
202.106.196.212
202.106.196.228
202.106.196.230
202.106.196.232
202.106.196.237
202.112.112.10
211.136.17.107
211.136.28.231
211.136.28.234
211.136.28.237
211.147.6.3
219.141.136.10
219.141.140.10
219.141.148.37
219.141.148.39
219.239.26.42
221.130.32.100
221.130.32.103
221.130.32.106
221.130.32.109
221.130.33.52
221.130.33.60
221.176.3.70
221.176.3.73
221.176.3.76
221.176.3.79
221.176.3.83
221.176.3.85
221.176.4.6
221.176.4.9
221.176.4.12
221.176.4.15
221.176.4.18
221.176.4.21
58.22.96.66
218.104.128.106
202.101.98.55
211.138.145.194
211.138.151.161
211.138.156.66
218.85.152.99
218.85.157.99
222.47.29.93
202.101.107.85
119.233.255.228
222.47.62.142
122.72.33.240
211.98.121.27
218.203.160.194
221.7.34.10
61.235.70.98
113.111.211.22
202.96.128.68
202.96.128.86
202.96.128.166
210.21.3.140
210.21.4.130
211.95.193.97
211.98.2.4
211.98.4.1
211.162.61.225
211.162.61.235
211.162.61.255
211.162.62.1
211.162.62.60
221.4.66.66
202.103.176.22
202.96.144.47
210.38.192.33
202.96.134.33
202.96.134.133
202.96.154.15
210.21.196.6
221.5.88.88
202.103.243.112
202.193.64.33
61.235.164.13
61.235.164.18
202.103.225.68
221.7.136.68
202.103.224.68
211.97.64.129
211.138.240.100
211.138.242.18
211.138.245.180
221.7.128.68
222.52.118.162
202.98.192.67
202.98.198.167
211.92.136.81
211.139.1.3
211.139.2.18
202.100.192.68
211.97.96.65
211.138.164.6
221.11.132.2
202.100.199.8
202.99.160.68
202.99.166.4
202.99.168.8
222.222.222.222
202.102.224.68
202.102.227.68
222.85.85.85
222.88.88.88
210.42.241.1
202.196.64.1
112.100.100.100
202.97.224.68
219.235.127.1
61.236.93.33
211.93.24.129
211.137.241.34
219.147.198.230
202.103.0.68
202.103.0.117
202.103.24.68
202.103.44.150
202.114.0.242
202.114.240.6
211.161.158.11
211.161.159.3
218.104.111.114
218.104.111.122
218.106.127.114
218.106.127.122
221.232.129.30
59.51.78.210
61.234.254.5
202.103.96.112
219.72.225.253
222.243.129.81
222.246.129.80
211.142.210.98
211.142.210.100
220.168.208.3
220.168.208.6
220.170.64.68
218.76.192.100
61.187.98.3
61.187.98.6
202.98.0.68
211.93.64.129
211.141.16.99
202.98.5.68
219.149.194.55
211.138.200.69
202.102.3.141
202.102.3.144
58.240.57.33
112.4.0.55
114.114.114.114
114.114.115.115
202.102.24.34
218.2.135.1
221.6.4.66
221.131.143.69
202.102.8.141
222.45.0.110
61.177.7.1
218.104.32.106
211.103.13.101
221.228.255.1
61.147.37.1
222.45.1.40
58.241.208.46
202.102.9.141
202.102.7.90
202.101.224.68
202.101.226.68
211.141.90.68
211.137.32.178
202.96.69.38
211.140.197.58
219.149.6.99
202.96.86.18
101.47.189.10
101.47.189.18
118.29.249.50
118.29.249.54
202.96.64.68
202.96.75.68
202.118.1.29
202.118.1.53
219.148.204.66
202.99.224.8
202.99.224.67
211.90.72.65
211.138.91.1
218.203.101.3
202.100.96.68
211.93.0.81
222.75.152.129
211.138.75.123
202.102.154.3
202.102.152.3
219.146.1.66
219.147.1.66
202.102.128.68
202.102.134.68
211.138.106.19
211.90.80.65
202.99.192.66
202.99.192.68
61.134.1.4
202.117.96.5
202.117.96.10
218.30.19.40
218.30.19.50
116.228.111.118
180.168.255.18
202.96.209.5
202.96.209.133
202.101.6.2
211.95.1.97
211.95.72.1
211.136.112.50
211.136.150.66
119.6.6.6
124.161.97.234
124.161.97.238
124.161.97.242
61.139.2.69
202.98.96.68
202.115.32.36
202.115.32.39
218.6.200.139
218.89.0.124
61.139.54.66
61.139.39.73
139.175.10.20
139.175.55.244
139.175.150.20
139.175.252.16
168.95.1.1
210.200.211.193
210.200.211.225
211.78.130.1
61.31.1.1
61.31.233.1
168.95.192.1
168.95.192.174
61.60.224.3
61.60.224.5
202.113.16.10
202.113.16.11
202.99.96.68
202.99.104.68
211.137.160.5
211.137.160.185
219.150.32.132
202.98.224.68
211.139.73.34
61.10.0.130
61.10.1.130
202.14.67.4
202.14.67.14
202.45.84.58
202.45.84.67
202.60.252.8
202.85.128.32
203.80.96.9
203.142.100.18
203.142.100.21
203.186.94.20
203.186.94.241
221.7.1.20
61.128.114.133
61.128.114.166
218.202.152.130
61.166.150.123
202.203.128.33
211.98.72.7
211.139.29.68
211.139.29.150
211.139.29.170
221.3.131.11
222.172.200.68
61.166.150.101
61.166.150.139
202.203.144.33
202.203.160.33
202.203.192.33
202.203.208.33
202.203.224.33
211.92.144.161
222.221.5.240
61.166.25.129
202.96.103.36
221.12.1.227
221.130.252.200
222.46.120.5
202.96.96.68
218.108.248.219
218.108.248.245
61.130.254.34
60.191.244.5
202.96.104.15
202.96.104.26
221.12.33.227
202.96.107.27
61.128.128.68
61.128.192.68
218.201.17.2
221.5.203.86
221.5.203.90
221.5.203.98
221.7.92.86
221.7.92.98
Следующий код
#!/bin/bash
echo 0 > out
while read i; do
whois $i | grep -m 1 -i country >> out
done < filename
cat out | grep -i cn | wc -l
Из приведенного выше списка видно, что 302 из 331 адресов находятся в материковом Китае, остальные - в Гонконге, Монголии, Тайване. Это добавляет дополнительную поддержку утверждению Дэвида Шварца, что это в основном китайский бот-ринг.
РЕДАКТИРОВАТЬ 3
По запросу @ vaid (автор ОП, прочитайте его комментарий ниже) я добавлю комментарий о том, как усилить безопасность базовой системы Linux (для системы, предоставляющей много сервисов, это гораздо более сложная тема). vaid
утверждает, что он сделал следующее:
Переустановите систему
изменил пароль root на 16-значный пароль со смешанными строчными и прописными буквами, а также символами и цифрами.
Изменил имя пользователя на 6-символьное длинное имя пользователя и применил тот же пароль, что и для пользователя root
изменил порт SSH на что-то выше 5000
отключил вход по SSH root.
Это нормально (за исключением того, что я использую порт выше 10000, так как многие полезные программы используют порты ниже 10000). Но я не могу особо подчеркнуть необходимость использования криптографических ключей для входа по ssh вместо паролей. Я приведу вам личный пример. На одном из моих VPS я не был уверен, стоит ли менять порт ssh; Я оставил его на 22, но использовал криптографические ключи для аутентификации. У меня были сотни попыток взлома в день , но ни одна из них не удалась. Когда, устав от ежедневной проверки того, что ни у кого ничего не получилось, я в итоге переключил порт на что-то более 10000, попытки взлома обнулились. Имейте в виду, дело не в том, что хакеры глупы (они не таковы!), Они просто выслеживают более легкую добычу.
Ключ шифрования легко активировать с помощью RSA в качестве алгоритма подписи, см. Комментарий Яна Худека ниже (спасибо!):
cd; mkdir .ssh; chmod 700 .ssh; cd .ssh; ssh-keygen -t rsa (then hit <kbd>ENTER>/kbd> three times); cat id_rsa.pub >> authorized_keys; chmod 600 *
Теперь все, что вам нужно сделать, это скопировать файл id_rsa
на компьютер, к которому вы хотите подключиться (в каталоге .ssh
, также с chmod
именем 700), затем выполнить команду
ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine
Если вы уверены, что это работает, отредактируйте на сервере (= машине, к которой вы хотите подключиться) файл /etc/ssh/sshd_config
и измените строку
#PasswordAuthentication yes
в
PasswordAuthentication no
и перезапустите ssh
сервис ( service ssh restart
или systemctl restart ssh
, или что-то в этом роде, в зависимости от дистрибутива).
Это выдержит многое. На самом деле, в настоящее время нет известных эксплойтов против текущих версий openssh v2
RSA и их использования openssh v2
.
Наконец, для того, чтобы по-настоящему сбить с толку вашу машину, вам необходимо настроить брандмауэр (netfilter / iptables) следующим образом:
iptables -A INPUT -p tcp --dport YourChosenNonStandardPort -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Это: 1) разрешает ssh-соединения как из локальной сети, так и из глобальной сети, 2) разрешает весь ввод, созданный вашими запросами (например, при загрузке веб-страницы), 3) отбрасывает все остальное на входе, 4) разрешает все, что включено вывод, и 5-6) позволяет все на петлевой интерфейс.
По мере роста ваших потребностей и необходимости открывать больше портов, вы можете сделать это, добавив вверху списка такие правила:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
например, чтобы люди могли получить доступ к вашему веб-браузеру.