DrupalサイトがSA-CORE-2018-002 — 2018年3月のエクスプロイトで構成されているかどうかを確認するにはどうすればよいですか?


9

リリースされたばかりのエクスプロイト:https : //www.drupal.org/sa-core-2018-002 --- Drupalコア-非常に重要-リモートコード実行-SA-CORE-2018-002

  • 誰かがこのエクスプロイトを使用して自分のサイトをハッキングしたかどうかを確認するにはどうすればよいですか?
  • 適切に実行された場合、このエクスプロイトで何ができますか?
  • 現在、Drupalサイトを更新できません。この穴を簡単にパッチするための良い代替手段は何ですか?

1
誰かに役立つ場合に備えて、これを最後の大きなエクスプロイトに関するあなたの投稿にリンクしたいと思います。drupal.stackexchange.com
Christia

2
アクセスログで追跡可能です。リモートコード実行は、これを非常に重要にします。任意のPHPコードを実行できます!。できるだけ早くパッチを適用します- Christiaからの回答を参照してください
レミー

1
To our knowledge the issue is not currently being exploited.可能性は低いです。
2018年

1
セキュリティ通知のリリース前に既に悪用されている可能性は非常に低いですが、すぐに悪用される可能性はそれほど高くありません。
rooby

4
ささいなことです。それが悪用されるかどうかを待つのではなく、パッチを当ててください。
ケビン

回答:


8

起こり得ること

個人的なDrupalサイトがDrupalgeddonの間にハッキングされました。これは、同じような重大度の攻撃です(タイプは異なります)。「何が起こるか」という点で、その場合、ハッカーはいくつかの「バックドア」ファイルをコードベースに入れました(私は当時開発についてほとんど知らず、Gitリポジトリを持っていませんでした)そこからスパムメールを送信できました。関係するドメインはスパムフィルターでブラックリストに登録されており、私が後で保持していた数か月間、そのドメインからメールを送信できるようにするのは非常に面倒でした。

この脆弱性によりリモートでコードが実行されるため、攻撃者はおそらくフィッシング攻撃を実行するためのモジュールをインストールし、php exec()を使用してコマンドラインでコマンドを実行し、パスワードを盗み、サーバーの多くを危険にさらす可能性があります。被害は、マシンがスパムエンジンまたはボットネットノードとして募集されているような単純なものから、機密情報がある場合、攻撃者がそれを盗み、再販するか、または情報や攻撃者の動機に応じて脅迫する可能性があります。

ハッキングされたかどうかを確認する方法

ほとんどの場合、サイトは改ざんされません。14歳のスクリプトキディの2つのグループが互いに近づくと、Goatse画像(NSFW)で改ざんされたサイトが表示される可能性がありますが、ハッカーが個人的に何かをしている場合を除いて、ハッカーはこれを行いません。ハッカーの目標は、お金か、他の誰かのコンピューターで犯罪を犯す能力のどちらかです。

これを念頭に置いて、一般的に表示されるのは新しいユーザー(特に管理ユーザー)の作成であり、ログでは特定のIPが1種類の(異常な)リクエストのみを送信しているのを確認できます。Drupalgeddonのケースでは、アクセスログのphpファイルへのPOSTリクエストを確認することで、それを理解することができました。

すぐにサイトにパッチを適用できない場合

今すぐサイトにパッチを適用できない場合は、apache / nginxサーバーをカットして、誰もサイトにアクセスできないようにすることをお勧めします。または、メンテナンスのためダウンしていることを説明するHTMLページ(すべて「ハードメンテナンスモード」)にすべてのトラフィックを送信するようサーバーに指示します。すべての場合において、アップグレードまたはパッチを配置できるまで、訪問者がDrupalをブートストラップすることを許可しないでください。

ハッキングされた私のサイトを思い出してください。最初のDrupalgeddon攻撃はリリースから7 時間後に始まり、スクリプトの形で何千ものサイトを自動ハッキングしたことを思い出してください。素早く移動!

ハッキングされた場合

うまくいけば、あなたはバックアップを持っているでしょう。その場合の最善の策は、「サイト全体を軌道から核にかけ」、新しいサーバーでやり直すことです。Gitと定期的なバックアップを用意していなかったため、手動でDBとファイルの監査を1回実行しました- 非常に長い時間がかかりますが、それが起こった場合は深呼吸してGitを学び、設定方法を学びます適切なバックアップ環境。あなたがビジネスとその顧客サイトを持っているなら、真実を彼らに前もって伝えなさい。あなたはおそらくそれらを失うでしょうが、あなたの評判よりも顧客を失う(あなたは新しいものを得ることができます)方が良いです。


10

誰かがこのエクスプロイトを使用して自分のサイトをハッキングしたかどうかを確認するにはどうすればよいですか?

Drupal 7または8サイトでは、データの損失や盗難が発生したり、データが削除、削除、または変更されたりして、さまざまな方法でサイトに大混乱をもたらす可能性があります。

Webサイトがハッキングされていないかどうかを確認する一般的な情報については、この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
3 月21日のこの公共サービスの発表へのリンクも追加したいと思います。攻撃数時間または数日以内に予想される可能性あります。したがって、できるだけ早く更新してください。
Neograph734 2018年

ここでは誰もがそれを必要とする場合にはハッキングされたサイトのための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> /includes/request-sanitizer.incファイルを7.58ディストリビューションからWebサイトの/ includesディレクトリにコピーします(FTPまたはホスティングコントロールパネルのファイルマネージャーを使用するのが最も簡単です)。

3>ライブWebサイトで/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.