Drupal sitemin SA-CORE-2018-002-2018 Mart istismarından oluşup oluşmadığını nasıl anlarım?


9

Yeni yayınlanan istismar: https://www.drupal.org/sa-core-2018-002 --- Drupal çekirdek - Son derece kritik - Uzaktan Kod Yürütme - SA-CORE-2018-002

  • Birinin sitemi hacklemek için bu istismarı kullanıp kullanmadığını nasıl anlayabilirim?
  • Düzgün çalıştırılırsa bu istismarla ne yapabilirler?
  • Drupal sitelerimi şimdi güncelleyemiyorum, bu deliği kolayca düzeltmek için iyi bir alternatif nedir?

1
Herkes için yararlı olması durumunda bunu son büyük istismar hakkında gönderinize bağlamak istedim: drupal.stackexchange.com/questions/133996/…
Christia

2
Erişim günlüklerinizde izlenebilir. Uzaktan Kod Yürütme bunu son derece kritik hale getirir. Herhangi bir PHP kodu yürütülebilir !. Yamaları en kısa zamanda uygulayın - Christia'nın cevabına bakın
rémy

1
To our knowledge the issue is not currently being exploited.şansı her düşük.
Hayır Sssweat

1
Güvenlik bildiriminin yayınlanmasından önce zaten sömürülme olasılığı çok düşüktür, ancak çok yakında sömürülmeyeceği kadar düşük değildir.
rooby

4
Önemsiz. Sömürüldüğünü görmek için beklemeyin, sadece yama yapın.
Kevin

Yanıtlar:


8

Neler olabilir

Drupalgeddon sırasında benzer şiddetten yararlanan kişisel bir Drupal sitem vardı (farklı türden olsa da). "Ne olabilir" açısından, bu durumda bilgisayar korsanı kod tabanıma birkaç "arka kapı" dosyası koydu (o zaman geliştirme hakkında çok az şey biliyordum ve Git deposu yoktu), bu da spam e-posta gönderebiliyordu . İlgili alan spam filtrelerinde kara listeye alındı ​​ve daha sonra sakladığım birkaç ay boyunca bu alan adından e-posta gönderebilmek çok büyük bir karışıklıktı.

Bu güvenlik açığı uzaktan kod yürütülmesine izin verdiğinden, saldırgan kimlik avı saldırıları gerçekleştirmek, php exec () ile komut satırında komutlar yürütmek, parolaları çalmak ve böylece sunucunuzun çoğunu tehlikeye atmak için modüller yükleyebilir. Hasar, makinenizin spam motoru veya botnet düğümü olarak alınması kadar basit bir şey olabilir veya hassas bilgileriniz varsa, saldırgan bilgiye ve saldırganın motiflerine bağlı olarak onu çalabilir ve size satabilir veya şantaj yapabilir.

Saldırıya uğradığınızı nasıl anlarsınız

Çoğu zaman, siteniz tahrif edilmeyecektir. 14 yaşındaki senaryo çocuklarının iki grubu birbirlerine gittiğinde, Goatse görüntüleri (NSFW) ile tahrif edilmiş bir site görebilirsiniz, ancak bilgisayar korsanının size karşı bir şeyi olmadığı sürece bunu yapmayacaktır. Bilgisayar korsanının amacı ya paradır ya da başka birinin bilgisayarıyla suç işlemek.

Şimdi bunu göz önünde bulundurarak, göreceğiniz yaygın şeyler yeni kullanıcılar oluşturuluyor (özellikle yönetici kullanıcılar) ve günlüklerde belirli bir IP'nin yalnızca bir tür (anormal) istek gönderdiğini görebilirsiniz. Drupalgeddon davasında, erişim günlüğümde bir php dosyasına POST isteklerini görerek anlayabildim.

Sitenizi hemen yamyamıyorsanız

Siteyi şimdi yamalayamıyorsanız, kimse sitenize ulaşamayacak şekilde apache / nginx sunucusunu kesmenizi tavsiye ederim. Ya da sunucunun, tüm trafiği bakım için kapalı olduğunuzu açıklayan bir HTML sayfasına yönlendirmesini sağlayın, "sabit bakım modu". Her durumda, bir yükseltme veya düzeltme eki alana kadar bir ziyaretçinin Drupal önyüklemesinde herhangi bir çekim yapmasına izin vermek istemezsiniz.

Siteme saldırıya uğradığını düşündüğümde, ilk Drupalgeddon saldırılarının yayınlandıktan 7 saat sonra başladığını ve binlerce siteyi otomatik olarak hackleyen bir komut dosyası biçiminde olduğunu unutmayın. Hızlı hareket et!

Saldırıya uğradıysanız

Umarım bir yedeğiniz vardır, bu durumda en iyi bahis "tüm siteyi yörüngeden çekip çıkarmak" ve yeni bir sunucuyla başlamaktır. Bir kez manuel DB ve dosya denetimi yaptım çünkü Git ve düzenli yedeklemeler yoktu - çok uzun zaman alıyor, ancak gerçekleşirse, derin bir nefes alın ve Git'i öğrenin ve bir uygun yedekleme ortamı. Eğer bir iş ve onun bir müşteri sitesi varsa, onlara ön gerçeği söyle. Muhtemelen onları kaybedersiniz, ancak bir müşteri kaybetmek (yenilerini alabilirsiniz) itibarınızdan daha iyidir.


10

Birinin sitemi hacklemek için bu istismarı kullanıp kullanmadığını nasıl anlayabilirim?

Drupal 7 veya 8 siteniz veri kaybı veya çalınmasıyla karşılaşabilir, veriler kaldırılabilir, silinebilir veya değiştirilebilir, sitede çok farklı şekillerde hasara yol açabilir.

Web sitenizin saldırıya uğramış olup olmadığını kontrol etme hakkında genel bilgi için bu Stack Exchange yayınına bakın.

Düzgün çalıştırılırsa bu istismarla ne yapabilirler?

İstismar, herhangi bir verinin etkilenme potansiyeli olduğu anlamına gelen bir uzaktan kod yürütme güvenlik açığıdır.

Bu sömürüye, aldığı en yüksek puan olan 21/25 risk puanı verilmiştir. Bu risk puanı, diğerlerinin yanı sıra aşağıdaki güvenlik açıklarını da tanımlar:

  • AC (Erişim karmaşıklığı): erişmek ve kullanmak için kolay (beceri yok)
  • A (Kimlik Doğrulama): özel kimlik doğrulama gerekmez
  • Cl (Gizlilik etkisi): herkese açık olmayan tüm verilere erişilebilir
  • II (Bütünlük etkisi): Tüm veriler değiştirilebilir veya silinebilir

Risk puanlaması ve tanımları hakkında daha fazla bilgiyi burada bulabilirsiniz .

Drupal sitelerimi şimdi güncelleyemiyorum, bu deliği kolayca düzeltmek için iyi bir alternatif nedir?

Çekirdeği hemen güncelleyemiyorsanız bir yama var. Drupal.org'dan:

7.x çalıştırıyorsanız, Drupal 7.58'e yükseltin . (Hemen güncelleyemiyorsanız, bu güncelleştirmeyi tamamen güncelleyebileceğinize kadar bu güvenlik açığını gidermek için uygulamayı deneyebilirsiniz .)

8.5.x kullanıyorsanız Drupal 8.5.1 sürümüne geçin . (Hemen güncelleyemiyorsanız, bu güncelleştirmeyi tamamen güncelleyebileceğinize kadar bu güvenlik açığını gidermek için uygulamayı deneyebilirsiniz .)

Daha fazla okumak için , istismar hakkında bir SSS


2
21 Mart tarihli bu kamu hizmeti duyurusuna bir bağlantı eklemek istiyorum . Kahramanlık olabilir saat veya gün içinde beklenebilir. Yani en kısa sürede güncelleyin.
Neograph734

Herkesin ihtiyaç duyması durumunda, saldırıya uğramış siteler için Drupal kılavuzu: drupal.org/drupal-security-team/…
Christia

1
En iyi eylemin yamayı hemen uygulamak, ardından sitelerinizi en son sürüme güncellemektir. Bunun nedeni, siteniz her zaman son derece güncel tutulmadıkça, uygun miktarda test yapmak için bir dizi modül güvenlik güncellemesinin daha fazla zaman alacağı ve muhtemelen daha fazla dağıtım gerektirmesidir. Bu nedenle en önemli düzeltmeyi olabildiğince hızlı bir şekilde almak tercih edilen yaklaşım olmalıdır.
rooby

1

Drupal 7.x'i Drupal çekirdeğine karşı elle nasıl eklerim - Son derece kritik - Uzaktan Kod Yürütme - SA-CORE-2018-00

Drupal 7.x sürümündeyseniz ve canlı sitenizi 7.58 olarak güncelleyemiyorsanız, yamaları uygulama hakkında bilginiz yoksa veya düzeltme ekinin başarısız olduğu bir Drupal sürümündeyseniz aşağıdakileri yapın:

1> Drupal 7.58'i indirin ve çıkarın.

2> 7.58 dağıtımından /includes/request-sanitizer.inc dosyasını web sitenizin / include dizinine kopyalayın (en kolay FTP veya barındırma kontrol paneli dosya yöneticiniz aracılığıyla).

3> Canlı web sitenizde /includes/bootstrap.inc sürümünü düzenleyin (önce yedekleyin!). _Drupal_bootstrap_configuration () işlevini bulun. Aşağıdaki 3 satırı drupal_settings_initialize () ifadesinden sonra ekleyin. :

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

Kayıt etmek.

Rahatlayın.


0

Burada basit bir 1-2-3 işlemi var:

  1. Kodu buradan panoya kopyalayın https://cgit.drupalcode.org/drupal/rawdiff/?h=7.x&id=2266d2a83db50e2f97682d9a0fb8a18e2722cba5 veya aşağıda alıntılandığı gibi.
  2. drupal dizininizin kök klasöründe 2018march.patch dosyası adlı boş bir dosya oluşturun.
  3. Kodu dosyaya yapıştırın
  4. Terminalde komutu çalıştırın: patch -p1 <2018march.patch

SSH veya terminal erişiminiz yoksa. Bunu kullanıcının @elb çözümünü kullanarak elle yapmanız gerekir.

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

Bunu yapmak için git'in kurulu olması gerekir.
user2924019
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.