Как определить, входит ли мой сайт в Drupal из эксплойта SA-CORE-2018-002 - 2018?


9

Только что выпущенный эксплойт: https://www.drupal.org/sa-core-2018-002 --- Ядро Drupal - Очень критично - Удаленное выполнение кода - SA-CORE-2018-002

  • Как я могу узнать, использовал ли кто-нибудь этот эксплойт для взлома моего сайта?
  • Что они могут сделать с этой уязвимостью, если она выполняется правильно?
  • Сейчас я не могу обновить свои сайты на Drupal. Какая хорошая альтернатива, чтобы легко исправить эту дыру?

1
Я хотел связать это с вашим постом о последнем большом подвиге на случай, если он кому-нибудь пригодится
Christia

2
Это прослеживается в ваших журналах доступа. Удаленное выполнение кода делает это очень важным. Любой код PHP может быть выполнен! Примените патчи как можно скорее - см. Ответ от
Кристиа

1
To our knowledge the issue is not currently being exploited.шансы у каждого низкие.
Нет Sssweat

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

4
Это тривиально. Не ждите, чтобы увидеть, если он эксплуатируется, просто исправьте его.
Кевин

Ответы:


8

Что может случиться

У меня был личный сайт Drupal, взломанный во время Drupalgeddon, эксплойта аналогичной серьезности (хотя и другого типа). С точки зрения «что может произойти», в этом случае хакер поместил несколько файлов «задней двери» в мою кодовую базу (я тогда очень мало знал о разработке и не имел Git-репозитория), из которой он мог рассылать спам по электронной почте. , Соответствующий домен был занесен в черный список в фильтрах спама, и это было огромным беспорядком, чтобы иметь возможность отправлять электронную почту с этого домена в течение нескольких месяцев, которые я хранил впоследствии.

Поскольку эта уязвимость делает возможным удаленное выполнение кода, злоумышленник может предположительно установить модули для проведения фишинговых атак, выполнения команд в командной строке с помощью php exec (), кражи паролей и тем самым поставить под угрозу большую часть вашего сервера. Ущерб может варьироваться от чего-то простого: от того, что ваша машина завербована в спам-движок или узел бот-сети, или если у вас есть конфиденциальная информация, злоумышленник может украсть ее и либо перепродать, либо шантажировать вас, в зависимости от информации и мотивов злоумышленника.

Как определить, что вас взломали?

В большинстве случаев ваш сайт не будет поврежден. Когда две группы 14-летних сценаристов сталкиваются друг с другом, вы можете увидеть сайт, испорченный изображениями Гоатса (NSFW), но если хакер не имеет ничего против вас лично, он не собирается этого делать. Цель хакера - либо деньги, либо возможность совершать преступления с чужим компьютером.

Имея это в виду, общие вещи, которые вы увидите, - это создание новых пользователей (особенно администраторов), и в журналах вы можете увидеть определенный IP-адрес, отправляющий только один тип (ненормальный) запрос. В случае с Drupalgeddon я смог понять это, увидев запросы POST к файлу php в моем журнале доступа.

Если вы не можете исправить свой сайт сразу

Если вы не можете исправить сайт сейчас, я бы порекомендовал вырезать сервер apache / nginx, чтобы никто не мог попасть на ваш сайт. Или попросите сервер перенаправить весь трафик на страницу HTML, объясняющую, что вы не хотите обслуживать, то есть «режим жесткого обслуживания». В любом случае, вы не хотите, чтобы посетитель мог делать какие-либо попытки при загрузке Drupal, пока вы не получите обновление или патч на месте.

И вспоминая, как мой сайт взломали, помните, что первые атаки Drupalgeddon начались через 7 часов после релиза, и это было в форме скрипта, который автоматически взломал тысячи сайтов. Быстро двигаться!

Если вас взломали

Надеемся, у вас есть резервная копия, и в этом случае лучше всего «обстреливать весь сайт с орбиты» и начинать заново с нового сервера. Однажды я провел ручной аудит БД и файлов, потому что у меня не было Git и регулярных резервных копий - это занимает очень много времени, но если это произойдет, сделайте глубокий вдох, изучите Git и научитесь настраивать правильная среда резервного копирования. Если у вас есть бизнес и сайт для клиентов, скажите им правду заранее. Вы, вероятно, потеряете их, но лучше потерять клиента (вы можете получить новых), чем свою репутацию.


10

Как я могу узнать, использовал ли кто-нибудь этот эксплойт для взлома моего сайта?

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

Посмотрите эту публикацию Stack Exchange для получения общей информации о том, как проверить, был ли ваш сайт взломан.

Что они могут сделать с этой уязвимостью, если она выполняется правильно?

Эксплойт - это уязвимость удаленного выполнения кода, которая означает, что любые данные могут быть затронуты.

Этот эксплойт получил оценку риска 21/25, которая является почти самой высокой оценкой. Этот показатель риска также определяет следующие уязвимости, среди прочего:

  • AC (сложность доступа): легко (без навыков) для доступа и использования
  • A (Аутентификация): специальная аутентификация не требуется
  • Cl (влияние на конфиденциальность): все непубличные данные доступны
  • II (влияние на целостность): все данные могут быть изменены или удалены

Узнайте больше о оценке рисков и определениях здесь .

Сейчас я не могу обновить свои сайты на Drupal. Какая хорошая альтернатива, чтобы легко исправить эту дыру?

Патч доступен, если вы не можете сразу обновить ядро. С Drupal.org:

Если вы используете 7.x, обновитесь до Drupal 7.58 . (Если вы не можете обновить немедленно, вы можете попытаться применить этот патч, чтобы исправить уязвимость до тех пор, пока вы не сможете полностью обновить.)

Если вы используете 8.5.x, обновитесь до Drupal 8.5.1 . (Если вы не можете обновить немедленно, вы можете попытаться применить этот патч, чтобы исправить уязвимость до тех пор, пока вы не сможете полностью обновить.)

Чтобы узнать больше, вот FAQ о эксплойте


2
Я хотел бы добавить ссылку на это объявление о государственной службе 21 марта. Эксплойты могут ожидаться в течение нескольких часов или дней. Так что обновите как можно скорее.
Neograph734

Вот руководство по Drupal для взломанных сайтов, на случай, если оно кому-нибудь понадобится: drupal.org/drupal-security-team/…
Christia

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

1

Как установить патч Drupal 7.x вручную на ядро ​​Drupal - Очень критично - Удаленное выполнение кода - SA-CORE-2018-00

Если вы пользуетесь Drupal 7.x и не можете обновить свой действующий сайт до 7.58, не знакомы с применением исправлений или используете версию Drupal, для которой исправление не выполняется, выполните следующие действия:

1> Скачать и распаковать Drupal 7.58.

2> Скопируйте файл /include/request-sanitizer.inc из дистрибутива 7.58 в каталог / include вашего сайта (проще всего через FTP или файловый менеджер панели управления хостингом).

3> Отредактируйте версию /include/bootstrap.inc на своем действующем веб-сайте (сначала сделайте резервную копию!). Найдите функцию _drupal_bootstrap_configuration (). Добавьте следующие 3 строки после оператора drupal_settings_initialize (); :

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

Сохранить.

Расслабьтесь.


0

Вот простой процесс 1-2-3 все здесь:

  1. Скопируйте код в буфер обмена отсюда https://cgit.drupalcode.org/drupal/rawdiff/?h=7.x&id=2266d2a83db50e2f97682d9a0fb8a18e2722cba5 или как указано ниже.
  2. создайте пустой файл с именем 2018march.patch в корневой папке вашего каталога drupal.
  3. Вставьте код в файл
  4. Запустите команду в терминале: patch -p1 <2018march.patch

Если у вас нет SSH или терминального доступа. Вам нужно будет сделать это вручную, используя пользовательское решение @elb.

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;
+  }
+
+}

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