Wie kann ich feststellen, ob meine Drupal-Site aus dem Exploit SA-CORE-2018-002 - 2018 March besteht?

9

Gerade veröffentlichter Exploit: https://www.drupal.org/sa-core-2018-002 --- Drupal-Kern - Sehr kritisch - Remote-Code-Ausführung - SA-CORE-2018-002

  • Wie kann ich feststellen, ob jemand diesen Exploit verwendet hat, um meine Website zu hacken?
  • Was können sie mit diesem Exploit machen, wenn er richtig ausgeführt wird?
  • Ich kann meine Drupal-Sites jetzt nicht aktualisieren. Was ist eine gute Alternative, um dieses Loch einfach zu reparieren?
Patoshi パ ト シ
quelle
1
Ich wollte dies mit Ihrem Beitrag über den letzten großen Exploit verknüpfen, falls er für jemanden hilfreich ist: drupal.stackexchange.com/questions/133996/…
Christia
2
Es ist in Ihren Zugriffsprotokollen nachverfolgbar. Remote Code Execution macht dies äußerst kritisch. Jeder PHP-Code kann ausgeführt werden!. Wenden Sie die Patches so schnell wie möglich an - siehe Antwort von Christia
rémy
1
To our knowledge the issue is not currently being exploited.Die Chancen stehen schlecht.
Kein Sssweat
1
Die Chancen sind sehr gering, dass es bereits vor der Veröffentlichung des Sicherheitshinweises ausgenutzt wurde, aber nicht so gering, dass es nicht sehr bald ausgenutzt wird.
Rooby
4
Es ist trivial. Warten Sie nicht, bis es ausgenutzt ist, sondern patchen Sie es einfach.
Kevin

Antworten:

8

Was könnte passieren

Ich hatte eine persönliche Drupal-Site während Drupalgeddon gehackt, ein Exploit von ähnlichem Schweregrad (wenn auch von einem anderen Typ). In Bezug auf "Was könnte passieren" hat der Hacker in diesem Fall mehrere "Hintertür" -Dateien in meine Codebasis gestellt (ich wusste damals sehr wenig über die Entwicklung und hatte kein Git-Repository), von denen aus er Spam-E-Mails versenden konnte . Die betroffene Domain wurde in Spam-Filtern auf die schwarze Liste gesetzt, und es war ein großes Durcheinander, E-Mails von dieser Domain für die Monate senden zu können, die ich danach aufbewahrt hatte.

Da diese Sicherheitsanfälligkeit die Ausführung von Remotecode ermöglicht, könnte der Angreifer vermutlich Module installieren, um Phishing-Angriffe auszuführen, Befehle in der Befehlszeile mit php exec () auszuführen, Kennwörter zu stehlen und dadurch einen Großteil Ihres Servers zu gefährden. Der Schaden kann von etwas so Einfachem wie der Rekrutierung Ihres Computers als Spam-Engine oder Botnet-Knoten reichen. Wenn Sie vertrauliche Informationen haben, kann der Angreifer diese stehlen und entweder weiterverkaufen oder Sie erpressen, abhängig von den Informationen und den Motiven des Angreifers.

Wie Sie feststellen können, ob Sie gehackt wurden

In den meisten Fällen wird Ihre Website nicht unkenntlich gemacht. Wenn zwei Gruppen von 14-jährigen Script-Kiddies aufeinander losgehen, sehen Sie möglicherweise eine Site, die mit Goatse-Bildern (NSFW) unkenntlich gemacht ist. Wenn der Hacker jedoch nichts gegen Sie persönlich hat, wird er dies nicht tun. Das Ziel für den Hacker ist entweder Geld oder die Fähigkeit, Verbrechen mit dem Computer eines anderen zu begehen.

Vor diesem Hintergrund werden häufig neue Benutzer erstellt (insbesondere Administratorbenutzer). In den Protokollen wird möglicherweise eine bestimmte IP-Adresse angezeigt, die nur eine Art von (abnormaler) Anforderung sendet. Im Fall Drupalgeddon konnte ich es herausfinden, indem ich POST-Anfragen an eine PHP-Datei in meinem Zugriffsprotokoll sah.

Wenn Sie Ihre Site nicht sofort patchen können

Wenn Sie die Site jetzt nicht patchen können, würde ich empfehlen, den Apache / Nginx-Server zu kürzen, damit niemand auf Ihre Site gelangen kann. Oder lassen Sie den Server den gesamten Datenverkehr auf eine HTML-Seite leiten, auf der erklärt wird, dass Sie wegen Wartungsarbeiten nicht erreichbar sind. Dies wird auch als "harter Wartungsmodus" bezeichnet. In allen Fällen möchten Sie einem Besucher nicht erlauben, einen Versuch zu unternehmen, Drupal zu booten, bis Sie ein Upgrade oder einen Patch erhalten.

Wenn Sie daran denken, dass meine Website gehackt wurde, denken Sie daran, dass die ersten Drupalgeddon-Angriffe 7 Stunden nach der Veröffentlichung begannen und in Form eines Skripts Tausende von Websites automatisch gehackt wurden. Schnell bewegen!

Wenn Sie gehackt werden

Hoffentlich haben Sie ein Backup. In diesem Fall ist es am besten, "die gesamte Site aus dem Orbit zu entfernen" und mit einem neuen Server von vorne zu beginnen. Ich habe einmal eine manuelle DB- und Dateiprüfung durchgeführt, weil ich kein Git und keine regelmäßigen Backups eingerichtet hatte - es dauert sehr lange, aber wenn es passiert, atme tief ein und lerne Git und lerne, wie man ein richtige Backup-Umgebung. Wenn Sie ein Unternehmen und einen Kundenstandort haben, sagen Sie ihm die Wahrheit im Voraus. Sie werden sie wahrscheinlich verlieren, aber es ist besser, einen Kunden zu verlieren (Sie können neue bekommen) als Ihren Ruf.

Mike Nolan
quelle
10

Wie kann ich feststellen, ob jemand diesen Exploit verwendet hat, um meine Website zu hacken?

Auf Ihrer Drupal 7- oder 8-Site können Daten verloren gehen oder gestohlen werden. Daten können entfernt, gelöscht oder geändert werden, was auf viele verschiedene Arten zu Chaos auf der Site führt.

In diesem Beitrag zu Stack Exchange finden Sie allgemeine Informationen zum Überprüfen, ob Ihre Website gehackt wurde.

Was können sie mit diesem Exploit machen, wenn er richtig ausgeführt wird?

Der Exploit ist eine Sicherheitsanfälligkeit bezüglich Remotecodeausführung. Dies bedeutet, dass alle Daten möglicherweise betroffen sind.

Dieser Exploit wurde mit einem Risiko von 21/25 bewertet, was fast dem höchsten Wert entspricht, den er erzielt. Diese Risikobewertung definiert unter anderem auch die folgenden Schwachstellen:

  • AC (Zugriffskomplexität): Einfach (ohne Kenntnisse) zugänglich und ausnutzbar
  • A (Authentifizierung): Keine spezielle Authentifizierung erforderlich
  • Cl (Auswirkungen auf die Vertraulichkeit): Auf alle nicht öffentlichen Daten kann zugegriffen werden
  • II (Auswirkungen auf die Integrität): Alle Daten können geändert oder gelöscht werden

Lesen Sie hier mehr über Risikobewertung und Definitionen .

Ich kann meine Drupal-Sites jetzt nicht aktualisieren. Was ist eine gute Alternative, um dieses Loch einfach zu reparieren?

Es ist ein Patch verfügbar, wenn Sie den Core nicht sofort aktualisieren können. Von Drupal.org:

Wenn Sie 7.x ausführen, aktualisieren Sie auf Drupal 7.58 . (Wenn Sie nicht sofort aktualisieren können, können Sie versuchen, diesen Patch anzuwenden , um die Sicherheitsanfälligkeit zu beheben, bis Sie vollständig aktualisieren können.)

Wenn Sie 8.5.x ausführen, aktualisieren Sie auf Drupal 8.5.1 . (Wenn Sie nicht sofort aktualisieren können, können Sie versuchen, diesen Patch anzuwenden , um die Sicherheitsanfälligkeit zu beheben, bis Sie vollständig aktualisieren können.)

Um mehr zu lesen, finden Sie hier eine FAQ zum Exploit

Christia
quelle
2
Ich möchte auch einen Link zu dieser öffentlichen Bekanntmachung vom 21. März hinzufügen . Exploits könnte innerhalb von Stunden oder Tagen zu erwarten. Also so schnell wie möglich aktualisieren.
Neograph734
Hier ist der Drupal-Leitfaden für gehackte Websites, falls jemand ihn benötigt: drupal.org/drupal-security-team/…
Christia
1
Ich würde sagen, die beste Vorgehensweise ist, den Patch sofort anzuwenden und dann Ihre Websites auf die neueste Version zu aktualisieren. Der Grund dafür ist, dass eine Runde von Sicherheitsupdates für Module mehr Zeit in Anspruch nimmt, um die richtige Menge an Tests durchzuführen, sofern Ihre Site nicht immer auf dem neuesten Stand gehalten wird, und wahrscheinlich auch eine aufwändigere Bereitstellung erfordert. Daher sollte es der bevorzugte Ansatz sein, die wichtigste Lösung so schnell wie möglich zu finden.
Rooby
1

So patchen Sie Drupal 7.x von Hand gegen den Drupal-Kern - Sehr kritisch - Remote-Code-Ausführung - SA-CORE-2018-00

Wenn Sie Drupal 7.x verwenden und Ihre Live-Site nicht auf 7.58 aktualisieren können, mit dem Anwenden von Patches nicht vertraut sind oder eine Drupal-Version verwenden, für die der Patch fehlschlägt, gehen Sie wie folgt vor:

1> Laden Sie Drupal 7.58 herunter und extrahieren Sie es.

2> Kopieren Sie die Datei /includes/request-sanitizer.inc aus der 7.58-Distribution in das Verzeichnis / includes Ihrer Website (am einfachsten über FTP oder den Dateimanager Ihres Hosting-Control-Panels).

3> Bearbeiten Sie die Version von /includes/bootstrap.inc auf Ihrer Live-Website (Backup zuerst!). Suchen Sie die Funktion _drupal_bootstrap_configuration (). Fügen Sie nach der Anweisung drupal_settings_initialize () die folgenden 3 Zeilen hinzu. ::

// Sanitize unsafe keys from the request.
require_once DRUPAL_ROOT . '/includes/request-sanitizer.inc';
DrupalRequestSanitizer::sanitize();

Speichern.

Entspannen.

elb
quelle
0

Hier ist ein einfacher 1-2-3-Prozess:

  1. Kopieren Sie den Code von https://cgit.drupalcode.org/drupal/rawdiff/?h=7.x&id=2266d2a83db50e2f97682d9a0fb8a18e2722cba5 oder wie unten angegeben in die Zwischenablage .
  2. Erstellen Sie eine leere Datei mit dem Namen 2018march.patch im Stammordner Ihres Drupal-Verzeichnisses.
  3. Fügen Sie den Code in die Datei ein
  4. Führen Sie den Befehl im Terminal aus: patch -p1 <2018march.patch

Wenn Sie keinen SSH- oder Terminalzugriff haben. Sie müssen dies manuell von Hand mit der @ elb-Lösung des Benutzers tun.

diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 655db6d..880557e 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -2632,6 +2632,10 @@ function _drupal_bootstrap_configuration() {
   timer_start('page');
   // Initialize the configuration, including variables from settings.php.
   drupal_settings_initialize();
+
+  // Sanitize unsafe keys from the request.
+  require_once DRUPAL_ROOT . '/includes/request-sanitizer.inc';
+  DrupalRequestSanitizer::sanitize();
 }

 /**
diff --git a/includes/request-sanitizer.inc b/includes/request-sanitizer.inc
new file mode 100644
index 0000000..1daa6b5
--- /dev/null
+++ b/includes/request-sanitizer.inc
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * @file
+ * Contains code for sanitizing user input from the request.
+ */
+
+/**
+ * Sanitizes user input from the request.
+ */
+class DrupalRequestSanitizer {
+
+  /**
+   * Tracks whether the request was already sanitized.
+   */
+  protected static $sanitized = FALSE;
+
+  /**
+   * Modifies the request to strip dangerous keys from user input.
+   */
+  public static function sanitize() {
+    if (!self::$sanitized) {
+      $whitelist = variable_get('sanitize_input_whitelist', array());
+      $log_sanitized_keys = variable_get('sanitize_input_logging', FALSE);
+
+      // Process query string parameters.
+      $get_sanitized_keys = array();
+      $_GET = self::stripDangerousValues($_GET, $whitelist, $get_sanitized_keys);
+      if ($log_sanitized_keys && $get_sanitized_keys) {
+        _drupal_trigger_error_with_delayed_logging(format_string('Potentially unsafe keys removed from query string parameters (GET): @keys', array('@keys' => implode(', ', $get_sanitized_keys))), E_USER_NOTICE);
+      }
+
+      // Process request body parameters.
+      $post_sanitized_keys = array();
+      $_POST = self::stripDangerousValues($_POST, $whitelist, $post_sanitized_keys);
+      if ($log_sanitized_keys && $post_sanitized_keys) {
+        _drupal_trigger_error_with_delayed_logging(format_string('Potentially unsafe keys removed from request body parameters (POST): @keys', array('@keys' => implode(', ', $post_sanitized_keys))), E_USER_NOTICE);
+      }
+
+      // Process cookie parameters.
+      $cookie_sanitized_keys = array();
+      $_COOKIE = self::stripDangerousValues($_COOKIE, $whitelist, $cookie_sanitized_keys);
+      if ($log_sanitized_keys && $cookie_sanitized_keys) {
+        _drupal_trigger_error_with_delayed_logging(format_string('Potentially unsafe keys removed from cookie parameters (COOKIE): @keys', array('@keys' => implode(', ', $cookie_sanitized_keys))), E_USER_NOTICE);
+      }
+
+      $request_sanitized_keys = array();
+      $_REQUEST = self::stripDangerousValues($_REQUEST, $whitelist, $request_sanitized_keys);
+
+      self::$sanitized = TRUE;
+    }
+  }
+
+  /**
+   * Strips dangerous keys from the provided input.
+   *
+   * @param mixed $input
+   *   The input to sanitize.
+   * @param string[] $whitelist
+   *   An array of keys to whitelist as safe.
+   * @param string[] $sanitized_keys
+   *   An array of keys that have been removed.
+   *
+   * @return mixed
+   *   The sanitized input.
+   */
+  protected static function stripDangerousValues($input, array $whitelist, array &$sanitized_keys) {
+    if (is_array($input)) {
+      foreach ($input as $key => $value) {
+        if ($key !== '' && $key[0] === '#' && !in_array($key, $whitelist, TRUE)) {
+          unset($input[$key]);
+          $sanitized_keys[] = $key;
+        }
+        else {
+          $input[$key] = self::stripDangerousValues($input[$key], $whitelist, $sanitized_keys);
+        }
+      }
+    }
+    return $input;
+  }
+
+}
Patoshi パ ト シ
quelle
Dazu muss git installiert sein.
user2924019