Làm thế nào để biết trang web Drupal của tôi có bao gồm từ khai thác SA-CORE-2018-002 - 2018 tháng 3 không?


9

Khai thác vừa được phát hành: https://www.drupal.org/sa-core-2018-002 --- Lõi Drupal - Rất quan trọng - Thực thi mã từ xa - SA-CORE-2018-002

  • Làm cách nào để biết ai đó đã sử dụng khai thác này để hack trang web của tôi?
  • Họ có thể làm gì với khai thác này nếu được thực hiện đúng?
  • Tôi không thể cập nhật các trang web Drupal của mình ngay bây giờ, đâu là một lựa chọn tốt để vá lỗ hổng này một cách dễ dàng?

1
Tôi muốn liên kết bài này với bài đăng của bạn về khai thác lớn cuối cùng trong trường hợp nó hữu ích với bất kỳ ai: drupal.stackexchange.com/questions/133996/ Lỗi
Christia

2
Nó có thể truy nguyên trong nhật ký truy cập của bạn. Thực thi mã từ xa làm cho điều này rất quan trọng. Bất kỳ mã PHP nào cũng có thể được thực thi!. Áp dụng các bản vá càng sớm càng tốt - xem câu trả lời từ Christia
rémy

1
To our knowledge the issue is not currently being exploited.cơ hội là mọi mức thấp.
Không có

1
Cơ hội rất thấp mà nó đã bị khai thác trước khi phát hành thông báo bảo mật, nhưng không phải tất cả đều thấp đến mức nó sẽ không được khai thác sớm.
rooby

4
Nó tầm thường. Đừng chờ đợi để xem nếu nó được khai thác, chỉ cần vá nó.
Kevin

Câu trả lời:


8

Điều gì có thể xảy ra

Tôi đã có một trang web Drupal cá nhân bị tấn công trong Drupalgeddon, một khai thác với mức độ nghiêm trọng tương tự (mặc dù thuộc một loại khác). Xét về "điều gì có thể xảy ra", trong trường hợp đó, tin tặc đã đưa một số tệp "cửa sau" vào cơ sở mã của tôi (tôi biết rất ít về sự phát triển vào thời điểm đó và không có kho lưu trữ Git), từ đó anh ta có thể gửi email spam . Tên miền liên quan đã bị liệt vào danh sách đen trong các bộ lọc thư rác và thật khó để gửi email từ tên miền đó trong vài tháng tôi đã giữ nó sau đó.

Vì lỗ hổng này cho phép thực thi mã từ xa, kẻ tấn công có thể cài đặt các mô-đun để thực hiện các cuộc tấn công lừa đảo, thực hiện các lệnh trên dòng lệnh với php exec (), đánh cắp mật khẩu và do đó xâm phạm phần lớn máy chủ của bạn. Thiệt hại có thể từ một thứ đơn giản như máy của bạn được tuyển dụng làm công cụ spam hoặc nút botnet hoặc nếu bạn có thông tin nhạy cảm, kẻ tấn công có thể đánh cắp nó và bán lại hoặc tống tiền bạn, tùy thuộc vào thông tin và động cơ của kẻ tấn công.

Làm thế nào để biết bạn đã bị hack

Hầu hết thời gian, trang web của bạn sẽ không bị xóa. Khi hai nhóm những đứa trẻ kịch bản 14 tuổi đi vào nhau, bạn có thể thấy một trang web bị xóa bằng hình ảnh Dê (NSFW), nhưng trừ khi tin tặc có điều gì đó chống lại cá nhân bạn, anh ta sẽ không làm điều này. Mục tiêu của tin tặc là tiền hoặc khả năng phạm tội với máy tính của người khác.

Bây giờ với ý nghĩ đó, những điều phổ biến bạn sẽ thấy là người dùng mới được tạo (đặc biệt là người dùng quản trị viên) và trong nhật ký bạn có thể thấy một IP cụ thể chỉ gửi một loại yêu cầu (bất thường). Trong trường hợp Drupalgeddon, tôi có thể tìm ra nó bằng cách xem các yêu cầu POST đến tệp php trong nhật ký truy cập của tôi.

Nếu bạn không thể vá trang web của bạn ngay lập tức

Nếu bạn không thể vá trang web ngay bây giờ, tôi khuyên bạn nên cắt máy chủ apache / nginx để không ai có thể truy cập trang web của bạn. Hoặc, yêu cầu máy chủ chuyển tất cả lưu lượng truy cập đến một trang HTML giải thích bạn ngừng bảo trì, còn gọi là "chế độ bảo trì cứng". Trong mọi trường hợp, bạn không muốn cho phép khách truy cập có bất kỳ cú đánh nào khi khởi động Drupal, cho đến khi bạn có thể nâng cấp hoặc vá lỗi tại chỗ.

Và nghĩ lại trang web của tôi bị hack, hãy nhớ rằng các cuộc tấn công Drupalgeddon đầu tiên đã bắt đầu 7 giờ sau khi phát hành, và nó ở dạng một kịch bản tự động hack hàng ngàn trang web. Di chuyển một cách nhanh chóng!

Nếu bạn bị hack

Hy vọng rằng bạn có một bản sao lưu, trong trường hợp đặt cược tốt nhất là "nuke toàn bộ trang web từ quỹ đạo" và bắt đầu lại với một máy chủ mới. Tôi đã thực hiện kiểm tra DB và tệp thủ công một lần vì tôi không có Git và sao lưu thường xuyên tại chỗ - phải mất một thời gian rất dài, nhưng nếu điều đó xảy ra, hãy hít thở sâu, học Git và tìm hiểu cách thiết lập môi trường dự phòng thích hợp. Nếu bạn có một doanh nghiệp và một trang web của khách hàng, hãy nói cho họ biết sự thật. Bạn có thể sẽ mất họ, nhưng tốt hơn là mất một khách hàng (bạn có thể có được những khách hàng mới) hơn là danh tiếng của bạn.


10

Làm cách nào để biết ai đó đã sử dụng khai thác này để hack trang web của tôi?

Trang web Drupal 7 hoặc 8 của bạn có thể bị mất hoặc đánh cắp dữ liệu, dữ liệu có thể bị xóa, xóa hoặc thay đổi, tàn phá trang web theo nhiều cách khác nhau.

Xem bài đăng Stack Stack này để biết thông tin chung về việc kiểm tra xem trang web của bạn đã bị hack hay chưa.

Họ có thể làm gì với khai thác này nếu được thực hiện đúng?

Khai thác là một lỗ hổng thực thi mã từ xa, có nghĩa là bất kỳ dữ liệu nào cũng có khả năng bị ảnh hưởng.

Khai thác này đã được cho một số điểm rủi ro 21/25, gần như là mức cao nhất mà nó nhận được. Điểm rủi ro này cũng xác định các lỗ hổng sau, trong số các lỗ hổng khác:

  • AC (Độ phức tạp truy cập): dễ dàng (không có kỹ năng) để truy cập và khai thác
  • A (Xác thực): không cần xác thực đặc biệt
  • Cl (Tác động bảo mật): tất cả dữ liệu ngoài công cộng đều có thể truy cập được
  • II (Tác động toàn vẹn): Tất cả dữ liệu có thể được sửa đổi hoặc xóa

Tìm hiểu thêm về chấm điểm rủi ro và định nghĩa ở đây .

Tôi không thể cập nhật các trang web Drupal của mình ngay bây giờ, đâu là một lựa chọn tốt để vá lỗ hổng này một cách dễ dàng?

Có một bản vá có sẵn nếu bạn không thể cập nhật lõi ngay lập tức. Từ Drupal.org:

Nếu bạn đang chạy 7.x, hãy nâng cấp lên Drupal 7.58 . (Nếu bạn không thể cập nhật ngay lập tức, bạn có thể thử áp dụng bản vá này để khắc phục lỗ hổng cho đến khi bạn có thể cập nhật hoàn toàn.)

Nếu bạn đang chạy 8.5.x, hãy nâng cấp lên Drupal 8.5.1 . (Nếu bạn không thể cập nhật ngay lập tức, bạn có thể thử áp dụng bản vá này để khắc phục lỗ hổng cho đến khi bạn có thể cập nhật hoàn toàn.)

Để đọc thêm, đây là một Câu hỏi thường gặp về khai thác


2
Tôi cũng muốn thêm một liên kết đến thông báo dịch vụ công cộng này vào ngày 21 tháng 3. Khai thác có thể được dự kiến ​​trong vài giờ hoặc vài ngày. Vì vậy, cập nhật càng sớm càng tốt.
Neograph734

Dưới đây là hướng dẫn Drupal cho các trang web bị tấn công, trong trường hợp bất cứ ai cần nó: drupal.org/drupal-security-team/ mẹo
Christia

1
Tôi muốn nói rằng cách hành động tốt nhất là áp dụng bản vá ngay lập tức, sau đó cập nhật trang web của bạn lên phiên bản mới nhất. Lý do là vì, trừ khi trang web của bạn luôn được cập nhật cực kỳ, một loạt các bản cập nhật bảo mật mô-đun sẽ mất nhiều thời gian hơn để đưa ra số lượng thử nghiệm thích hợp và cũng có thể yêu cầu triển khai nhiều hơn. Vì vậy, nhận được sửa chữa quan trọng nhất càng nhanh càng tốt nên là phương pháp ưa thích.
rooby

1

Cách vá Drupal 7.x bằng tay chống lại lõi Drupal - Rất quan trọng - Thực thi mã từ xa - SA-CORE-2018-00

Nếu bạn đang sử dụng Drupal 7.x và không thể cập nhật trang web trực tiếp của mình lên 7.58, thì bạn không quen với việc áp dụng các bản vá hoặc trên phiên bản Drupal mà bản vá không thực hiện được như sau:

1> Tải xuống và giải nén Drupal 7.58.

2> Sao chép tệp /includes/request-sanitizer.inc từ bản phân phối 7.58 vào thư mục / bao gồm trang web của bạn (dễ dàng nhất qua FTP hoặc trình quản lý tệp bảng điều khiển lưu trữ của bạn).

3> Chỉnh sửa phiên bản /includes/bootstrap.inc trên trang web trực tiếp của bạn (sao lưu trước!). Tìm hàm _drupal_bootstrap_configuration (). Thêm 3 dòng sau sau câu lệnh drupal_sinstall_initialize (); :

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

Tiết kiệm.

Thư giãn.


0

Đây là một quá trình 1-2-3 đơn giản tất cả ở đây:

  1. Sao chép mã vào clipboard từ đây https://cgit.drupalcode.org/drupal/rawdiff/?h=7.x&id=2266d2a83db50e2f97682d9a0fb8a18e2722cba5 hoặc như được trích dẫn dưới đây.
  2. tạo một tệp trống có tên 2018march.patch trong thư mục gốc của thư mục drupal của bạn.
  3. Dán mã vào tập tin
  4. Chạy lệnh trong thiết bị đầu cuối: patch -p1 <2018march.patch

Nếu bạn không có quyền truy cập SSH hoặc thiết bị đầu cuối. Bạn sẽ cần phải làm thủ công bằng tay bằng cách sử dụng giải pháp @elb của người dùng.

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

Bạn cần cài đặt git để làm điều này.
user2924019
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.