Drupal 사이트가 SA-CORE-2018-002 — 2018 년 3 월 익스플로잇으로 구성되어 있는지 확인하는 방법?


9

방금 공개 된 익스플로잇 : https://www.drupal.org/sa-core-2018-002 --- Drupal core-매우 중요-원격 코드 실행-SA-CORE-2018-002

  • 누군가이 사이트를 해킹하기 위해이 취약점을 악용했는지 어떻게 알 수 있습니까?
  • 제대로 실행되면이 익스플로잇으로 무엇을 할 수 있습니까?
  • 지금 Drupal 사이트를 업데이트 할 수 없습니다.이 구멍을 쉽게 패치 할 수있는 좋은 대안은 무엇입니까?

1
: 나는 누군가에게 도움이 경우에 악용 마지막으로 큰에 대한 귀하의 게시물이 연결 싶었다 drupal.stackexchange.com/questions/133996/...
Christia

2
액세스 로그에서 추적 할 수 있습니다. 원격 코드 실행은이를 매우 중요하게 만듭니다. 모든 PHP 코드를 실행할 수 있습니다!. 가능한 빨리 패치를 적용하십시오
-Christia의

1
To our knowledge the issue is not currently being exploited.기회는 매번 낮습니다.
No Sssweat

1
보안 공지가 릴리스되기 전에 이미 악용 될 가능성은 매우 낮지 만 곧 악용 될 가능성은 낮습니다.
rooby

4
사소한 일입니다. 악용되는지를 기다리지 말고 패치하십시오.
Kevin

답변:


8

일어날 수있는 일

Drupalgeddon 중에 개인용 Drupal 사이트가 해킹 당했는데 비슷한 심각성을 악용했습니다 (다른 유형 임에도 불구하고). "어떻게 일어날 수 있는가"라는 관점에서 해커는 몇 개의 "백도어"파일을 내 코드베이스에 넣었습니다 (당시에는 개발에 대해 거의 알지 못했고 Git 리포지토리가 없었습니다). . 관련 도메인은 스팸 필터에 블랙리스트에 올랐으며 그 이후 몇 달 동안 도메인에서 이메일을 보낼 수있게 된 것은 큰 혼란이었습니다.

이 취약점으로 인해 원격 코드 실행이 허용되므로 공격자는 아마도 모듈을 설치하여 피싱 공격을 수행하고, php exec ()를 사용하여 명령 줄에서 명령을 수행하고, 비밀번호를 도용하여 많은 서버를 손상시킬 수 있습니다. 시스템이 스팸 엔진이나 봇넷 노드로 모집되는 것처럼 단순한 피해 나 민감한 정보가있는 경우 공격자는 정보와 공격자의 동기에 따라 정보를 훔쳐서 재판매하거나 협박 할 수 있습니다.

해킹 당했는지 확인하는 방법

대부분의 경우 사이트가 손상되지 않습니다. 14 살짜리 스크립트 키드로 구성된 두 그룹이 서로 갈 때, Goatse 이미지 (NSFW)로 손상된 사이트를 볼 수 있지만, 해커가 당신을 상대로 무언가를 가지고 있지 않다면 그는 그렇게하지 않을 것입니다. 해커의 목표는 돈이나 다른 사람의 컴퓨터와 범죄를 저지르는 능력입니다.

이제 이러한 점을 염두에두고 새로운 사용자 (특히 관리자)가 생성되고 로그에 특정 IP가 한 가지 유형의 (비정상) 요청 만 보내는 것을 볼 수 있습니다. Drupalgeddon의 경우 액세스 로그에서 PHP 요청에 대한 POST 요청을 확인하여 알아낼 수있었습니다.

사이트를 바로 패치 할 수없는 경우

지금 사이트를 패치 할 수 없다면, 아무도 아파치 / nginx 서버를 잘라내어 사이트에 접근 할 수 없도록하는 것이 좋습니다. 또는 서버가 "하드 유지 관리 모드"라고하는 유지 관리를 위해 다운되었다고 설명하는 HTML 페이지로 모든 트래픽을 보내도록합니다. 모든 경우에, 업그레이드 나 패치를 얻을 수있을 때까지 방문자가 드루팔을 부트 스트랩 할 수있는 기회를주지 않으려 고합니다.

그리고 제 사이트가 해킹 당했다고 생각하면 최초의 Drupalgeddon 공격 은 릴리스 7 시간 후에 시작 되었으며 수천 개의 사이트를 자동으로 해킹 한 스크립트 형식이었습니다. 빠르게 움직이다!

해킹당한 경우

바라건대 백업이있는 경우, 가장 좋은 방법은 "전체 사이트를 궤도에서 빼내고"새로운 서버로 다시 시작하는 것입니다. 그것이 소요 - 내가 힘내과 장소에서 정기적으로 백업을하지 않았기 때문에 일단 내가 수동으로 DB 및 파일 감사했다 매우 오랜 시간이 있지만, 일이없는 경우, 심호흡을하고 힘내을 배우고을 설정하는 방법 적절한 백업 환경. 비즈니스와 고객 사이트가있는 경우 진실을 알려주십시오. 당신은 아마 그것들을 잃을 것이지만, 당신의 평판보다 고객을 잃는 것이 낫습니다 (새로운 고객을 얻을 수 있습니다).


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
최선의 조치는 즉시 패치를 적용한 다음 사이트를 최신 버전으로 업데이트하는 것입니다. 그 이유는 사이트를 항상 최신 상태로 유지하지 않으면 적절한 모듈 테스트를 수행하는 데 많은 시간이 걸리고 더 많은 배포가 필요할 수 있기 때문입니다. 따라서 가능한 빨리 가장 중요한 문제를 해결하는 것이 선호되는 방법입니다.
rooby

1

Drupal 코어에 대해 Drupal 7.x를 직접 패치하는 방법-매우 중요-원격 코드 실행-SA-CORE-2018-00

Drupal 7.x를 사용 중이고 라이브 사이트를 7.58로 업데이트 할 수 없거나 패치 적용에 익숙하지 않거나 패치가 실패한 Drupal 버전에있는 경우 다음을 수행하십시오.

1> Drupal 7.58을 다운로드하고 추출하십시오.

2> 7.58 배포에서 /includes/request-sanitizer.inc 파일을 웹 사이트의 / includes 디렉토리 (FTP 또는 호스팅 제어판 파일 관리자를 통해 가장 쉽게)에 복사합니다.

3> 라이브 웹 사이트에서 /includes/bootstrap.inc의 버전을 편집하십시오 (먼저 백업!). _drupal_bootstrap_configuration () 함수를 찾으십시오. 명령문 drupal_settings_initialize () 뒤에 다음 3 행을 추가하십시오. :

// 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. drupal 디렉토리의 루트 폴더에 2018march.patch 파일이라는 빈 파일을 만듭니다.
  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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.