09 Фев, 2023

Уязвимости десериализации

Vulnerability Assessment as a Service (VAaaS)

Tests systems and applications for vulnerabilities to address weaknesses.

Уязвимости десериализации обратитесь к уязвимостям безопасности, которые возникают, когда злонамеренно созданный ввод используется для вмешательства в нормальное функционирование процесса десериализации. Десериализация - это процесс преобразования потока данных в определенном формате, таком как двоичный файл или JSON, в объект или структуру данных в памяти.

Уязвимости десериализации могут быть использованы злоумышленниками для внедрения произвольного кода в уязвимое приложение, выполнения произвольных команд или доступа к конфиденциальной информации. Этот тип уязвимости может быть особенно опасен, поскольку он часто остается незамеченным, поскольку он может быть вызван злоумышленником, просто отправляющим специально созданное сообщение или запрос в приложение.

Примеры уязвимого кода на разных языках программирования

 Java

 
				
					import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeserializationExample {
  public static void main(String[] args) {
    try {
      FileInputStream fileIn = new FileInputStream("data.ser");
      ObjectInputStream in = new ObjectInputStream(fileIn);
      Object obj = in.readObject();
      in.close();
      fileIn.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
				
			

Этот код уязвим для атак десериализации, поскольку он слепо десериализует объект из файла данных без проверки его целостности или проверки его источника. Злоумышленник может создать злонамеренно созданный файл данных и использовать его для выполнения произвольного кода в системе, которая запускает этот код.

 .NET (C#):

 
				
					using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

class DeserializationExample {
  static void Main(string[] args) {
    try {
      Stream stream = File.Open("data.bin", FileMode.Open);
      BinaryFormatter formatter = new BinaryFormatter();
      Object obj = formatter.Deserialize(stream);
      stream.Close();
    } catch (Exception e) {
      Console.WriteLine(e.Message);
    }
  }
}

				
			

Этот код также уязвим для атак десериализации, поскольку он не проверяет входные данные перед их десериализацией. Злоумышленник может создать вредоносный двоичный файл и использовать его для выполнения произвольного кода в системе, которая запускает этот код.

 PHP:

				
					<?php
$data = unserialize(file_get_contents('data.txt'));

class DeserializationExample {
  public function __wakeup() {
    exec("rm -rf /");
  }
}

				
			

Этот код уязвим для атак десериализации, поскольку он не проверяет входные данные перед их отменой. Злоумышленник может создать вредоносный файл данных, содержащий сериализованный объект DeserializationExample класс и использовать его для выполнения произвольного кода в системе, которая запускает этот код. В __wakeup магический метод будет вызван автоматически во время процесса десериализации, и в этом случае он выполнит exec функция для удаления всех файлов в системе.

Важно всегда проверять входные данные перед их десериализацией и очищать любые данные, которые будут использоваться в процессе десериализации. Кроме того, рекомендуется использовать защищенные библиотеки десериализации, которые были специально разработаны для устранения этих типов уязвимостей.

Примеры использования уязвимостей десериализации

  • Удаленное выполнение кода: злоумышленник может создать злонамеренно сериализованный объект, содержащий вредоносный код, и отправить его уязвимому приложению. Когда приложение десериализует объект, вредоносный код будет выполнен, что позволит злоумышленнику получить контроль над системой.

  • Кража данных: злоумышленник может создать злонамеренно сериализованный объект, содержащий конфиденциальные данные, такие как пароли или финансовую информацию, и отправить его уязвимому приложению. Когда приложение десериализует объект, конфиденциальные данные будут извлечены и отправлены обратно злоумышленнику.

  • Отказ в обслуживании (DoS): злоумышленник может создать злонамеренно сериализованный объект, содержащий большое количество объектов или циклическую ссылку, в результате чего приложению не хватает памяти или оно переходит в бесконечный цикл при попытке десериализации объекта. Это может привести к атаке типа "отказ в обслуживании", в результате чего приложение перестанет отвечать на запросы или выйдет из строя.

  • Инъекционные атаки: злоумышленник может создать злонамеренно сериализованный объект, содержащий вредоносные данные, которые могут быть использованы для внедрения вредоносного кода в приложение. Например, злоумышленник может создать объект, содержащий полезную нагрузку SQL-инъекции, которая будет выполнена, когда приложение попытается десериализовать объект и получить доступ к вредоносным данным.

Методы повышения привилегий для Уязвимости десериализации

Уязвимости десериализации могут использоваться как метод повышения привилегий, который заключается в использовании уязвимости в системе для получения повышенных разрешений. Вот несколько способов использования уязвимостей десериализации для повышения привилегий:

  1. Захват объекта: злоумышленник может создать злонамеренно сериализованный объект, содержащий код, который изменяет разрешения выполняющегося пользователя или процесса. Когда приложение десериализует объект, вредоносный код будет выполнен, повышая привилегии злоумышленника.

  2. Злоупотребление отношениями доверия: если уязвимое приложение доверяет другому компоненту, например библиотеке или API, злоумышленник может создать злонамеренно сериализованный объект, который принимается доверенным компонентом. Когда уязвимое приложение десериализует объект, оно выполняет вредоносный код, повышая привилегии злоумышленника.

  3. Обход контроля доступа: злоумышленник может создать злонамеренно сериализованный объект, который обходит средства контроля доступа, такие как изолированная среда безопасности или ограниченная среда. Когда приложение десериализует объект, код злоумышленника будет выполняться с повышенными привилегиями.

 

Общая методология и контрольный список для тестирования на Уязвимости десериализации

Вот контрольный список для тестирования уязвимостей десериализации:

  1. Проверка входных данных: убедитесь, что приложение правильно проверяет входные данные перед их десериализацией. Убедитесь, что входные данные имеют правильный тип и формат и что они не были созданы злонамеренно.

  2. Безопасные библиотеки десериализации: убедитесь, что приложение использует безопасные библиотеки десериализации, такие как те, которые обеспечивают встроенную проверку входных данных и управление доступом.

  3. Типы объектов: Убедитесь, что приложение десериализует только объекты доверенных типов и не десериализует ненадежные объекты.

  4. Контроль доступа: Убедитесь, что приложение реализует строгий контроль доступа для предотвращения несанкционированного доступа к конфиденциальным данным и функциям.

  5. Размер сериализованного объекта: убедитесь, что приложение ограничивает размер сериализованных объектов для предотвращения атак типа "отказ в обслуживании".

  6. Выполнение кода: протестируйте приложение, чтобы увидеть, выполняет ли оно код из десериализованного объекта.

  7. Кража данных: протестируйте приложение, чтобы узнать, возможно ли извлечь конфиденциальные данные из десериализованного объекта.

  8. Инъекционные атаки: протестируйте приложение, чтобы узнать, возможно ли внедрить вредоносный код в десериализованный объект.

  9. Повышение привилегий: протестируйте приложение, чтобы узнать, можно ли использовать уязвимость десериализации для повышения привилегий.

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

Набор инструментов для эксплуатации Уязвимости десериализации

Ручные инструменты:

  1. Burp Suite: популярная платформа тестирования безопасности веб-приложений, включающая плагин под названием “SerializedObjects”, который можно использовать для проверки уязвимостей десериализации.

  2. OWASP ZAP: платформа тестирования безопасности веб-приложений с открытым исходным кодом, включающая плагин под названием “Serialized Objects Scanner”, который можно использовать для проверки уязвимостей десериализации.

  3. Ручное тестирование: уязвимости десериализации также можно протестировать вручную, отправив в приложение специально созданные сериализованные объекты и наблюдая за поведением приложения.

Автоматические инструменты:

  1. YSoSerial: инструмент, который автоматически генерирует полезные нагрузки для тестирования уязвимостей десериализации.

  2. Java Deserialization Scanner: инструмент, который можно использовать для сканирования приложений Java на наличие уязвимостей десериализации.

  3. Serialize-Me: инструмент, который можно использовать для сканирования.СЕТЕВЫЕ приложения для выявления уязвимостей десериализации.

  4. deser-scan: инструмент, который можно использовать для сканирования приложений Python на наличие уязвимостей десериализации.

  5. Сканер десериализации: инструмент, который можно использовать для сканирования PHP-приложений на наличие уязвимостей десериализации.

  6. JexBoss: инструмент, который можно использовать для проверки уязвимостей десериализации в приложениях Java.

  7. Daru: Инструмент, который можно использовать для проверки уязвимостей десериализации в приложениях Ruby.

  8. NoSQLMap: инструмент, который можно использовать для проверки уязвимостей десериализации в базах данных NoSQL.

  9. JDeserialize: инструмент, который можно использовать для проверки уязвимостей десериализации в приложениях Java.

  10. Deserialization fuzzer: инструмент, который автоматически генерирует и отправляет злонамеренно созданные сериализованные объекты в приложение для проверки на наличие уязвимостей десериализации.

Средний балл CVSS Уязвимости десериализации

Общая система оценки уязвимостей (CVSS) является широко используемым методом количественной оценки серьезности уязвимостей в системе безопасности. Средний балл CVSS уязвимостей десериализации может сильно варьироваться в зависимости от специфики уязвимости.

В целом, уязвимости десериализации могут варьироваться от проблем низкой серьезности до критических уязвимостей. Например, уязвимость десериализации, которая позволяет злоумышленнику выполнять произвольный код с повышенными привилегиями, скорее всего, получит высокий балл CVSS, например 9.0 или выше. С другой стороны, уязвимость десериализации, которая позволяет злоумышленнику вводить данные в сериализованный объект, но не приводит к какому-либо другому значительному воздействию, может получить более низкую оценку CVSS, например 4.0 или 5.0.

Общее перечисление слабых мест (CWE)

Общее перечисление слабых мест (CWE) - это система классификации уязвимостей безопасности программного обеспечения, которая обеспечивает общий язык для описания слабых мест безопасности и управления ими. В контексте уязвимостей десериализации следующие CWE обычно ассоциируются с этими типами уязвимостей:

 CWE-502: Десериализация ненадежных данных
 CWE-89: Неправильная нейтрализация специальных элементов, используемых в команде SQL ("SQL-инъекция")
 CWE-114: Управление технологическим процессом
 CWE-94: Неправильный контроль генерации кода (‘Внедрение кода’)
 CWE-276: неправильные разрешения по умолчанию
 CWE-78: неправильная нейтрализация специальных элементов, используемых в команде операционной системы ("Внедрение команды операционной системы’)
 CWE-79: неправильная нейтрализация ввода во время генерации веб-страницы (‘Межсайтовый скриптинг’)
 CWE-22: Неправильное ограничение имени пути к каталогу с ограниченным доступом (‘Обход пути’)
 CWE-284: Неправильный контроль доступа
 CWE-94: Неправильный контроль генерации кода (‘Внедрение кода’)

Уязвимости десериализации подвиги

Уязвимости десериализации могут быть использованы несколькими способами, в зависимости от специфики уязвимости и среды, в которой она возникает. Некоторые распространенные методы использования уязвимостей десериализации включают:

  1. Удаленное выполнение кода: злоумышленник может предоставить вредоносный сериализованный объект приложению, который затем десериализуется и выполняется с привилегиями приложения.

  2. Манипулирование данными: злоумышленник может изменять данные в сериализованном объекте, чтобы изменить поведение приложения или получить несанкционированный доступ к конфиденциальной информации.

  3. Раскрытие информации: злоумышленник может использовать уязвимость десериализации для извлечения конфиденциальной информации из приложения, такой как пароли, секретные ключи или другие конфиденциальные данные.

  4. Отказ в обслуживании (DoS): злоумышленник может создать вредоносный сериализованный объект, который заставляет приложение потреблять чрезмерные ресурсы или аварийно завершать работу при десериализации.

  5. Внедрение кода: злоумышленник может внедрить вредоносный код в сериализованный объект, который затем выполняется при десериализации объекта.

  6. Межсайтовый скриптинг (XSS): злоумышленник может внедрить вредоносный JavaScript в сериализованный объект, который затем выполняется в контексте уязвимого веб-приложения при десериализации объекта.

Практикуясь в тестировании на Уязвимости десериализации

Существует несколько способов проверки на наличие уязвимостей десериализации, в том числе:

  1. Уязвимые сервисы: Многие онлайн-сервисы и приложения могут быть уязвимы для уязвимостей десериализации, и их можно протестировать, отправив в сервис специально созданные сериализованные объекты и наблюдая за результатами.

  2. Уязвимые репозитории: Многие репозитории программного обеспечения с открытым исходным кодом содержат уязвимый код, который можно использовать для проверки на наличие уязвимостей десериализации. Это может включать программные библиотеки, фреймворки и другие компоненты кода, которые реализуют функциональность сериализации и десериализации.

  3. Изолированные среды: вы можете настроить изолированную среду, имитирующую реальное развертывание, а затем протестировать уязвимости десериализации, отправив в среду специально созданные сериализованные объекты. Это может быть полезно для тестирования влияния уязвимостей десериализации на конкретную цель или для тестирования поведения пользовательских функций сериализации и десериализации.

  4. Автоматизированные инструменты: Для тестирования на наличие уязвимостей десериализации доступно множество автоматизированных инструментов, включая сканеры веб-приложений, инструменты нечеткого тестирования и инструменты динамического анализа. Эти инструменты могут помочь выявить потенциальные уязвимости десериализации и предоставить информацию о специфике уязвимости и способах ее использования.

Для изучения Уязвимости десериализации

Существует множество доступных ресурсов для изучения уязвимостей десериализации, а также способов их обнаружения и использования. Вот несколько ресурсов, которые могут оказаться вам полезными:

  • Курсы: Доступно множество онлайн-курсов, посвященных уязвимостям десериализации и способам их обнаружения и использования, включая курсы, предлагаемые такими платформами, как Udemy, Coursera и Pluralsight.

  • Практические сайты: Существует несколько веб-сайтов, которые предоставляют возможности для практического обнаружения и использования уязвимостей десериализации, включая такие сайты, как HackTheBox и VulnHub.

  • Видеоролики: На таких платформах, как YouTube и Vimeo, доступно множество обучающих видеороликов, в которых содержится информация об уязвимостях десериализации, а также о том, как их обнаруживать и использовать. Эти видеоролики могут стать отличным способом узнать об основах этих уязвимостей и получить практическое представление о том, как они работают.

  • Книги: Доступно несколько книг, посвященных уязвимостям десериализации и способам их обнаружения и использования, в том числе “Руководство хакера веб-приложений” Дафида Штуттарда и Маркуса Пинто и “Black Hat Python” Джастина Сейтца.

Книги с обзором Уязвимости десериализации

  • “Справочник хакера веб-приложений” Дэвида Штуттарда и Маркуса Пинто: Эта книга широко известна как классика в области безопасности веб-приложений и представляет собой всеобъемлющее руководство по обнаружению и использованию уязвимостей десериализации.

  • “Black Hat Python” Джастина Сейтца: Эта книга представляет собой введение в язык программирования Python и демонстрирует, как его можно использовать для тестирования и эксплуатации безопасности, включая использование уязвимостей десериализации.

  • “Безопасное кодирование в .NET” Брайана Хастингса: Эта книга содержит руководство по написанию безопасного кода в .NET, включая советы о том, как избежать уязвимостей десериализации и других угроз безопасности.

  • “Освоение безопасности PHP” Шахзада Сахайба: Эта книга представляет собой всеобъемлющее руководство по безопасности PHP, включая раздел о том, как предотвращать и устранять уязвимости десериализации в приложениях PHP.

Список полезных нагрузок Уязвимости десериализации

Уязвимости десериализации могут быть использованы путем отправки специально созданных полезных нагрузок в уязвимое приложение. Вот несколько примеров полезных нагрузок, которые можно использовать для использования уязвимостей десериализации:

  1. Цепочки гаджетов: цепочки гаджетов - это набор объектов, которые объединяются для формирования вредоносной полезной нагрузки. Когда полезная нагрузка десериализуется, цепочку гаджетов можно использовать для выполнения произвольного кода, повышения привилегий или кражи данных.

  2. Вредоносные классы: Вредоносный класс - это пользовательский класс, специально разработанный для использования уязвимости десериализации. Класс может быть отправлен в качестве полезной нагрузки и после десериализации может использоваться для выполнения произвольного кода, повышения привилегий или кражи данных.

  3. Измененные данные: Измененные данные - это данные, которые были каким-либо образом изменены с целью использования уязвимости десериализации. Это может включать в себя изменение существующих данных или добавление новых данных в полезную нагрузку.

  4. Полезные нагрузки байт-кода: Полезные нагрузки байт-кода - это двоичные полезные нагрузки, которые выполняются при десериализации. Они могут использоваться для выполнения произвольного кода, повышения привилегий или кражи данных.

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

Как защититься от Уязвимости десериализации

  • Правила брандмауэра: правила брандмауэра можно использовать для блокирования входящего трафика, содержащего полезные нагрузки, которые, как известно, используют уязвимости десериализации. Это может включать блокировку входящего трафика, который содержит определенные типы данных или структуры полезной нагрузки, или блокировку входящего трафика с определенных IP-адресов или доменов.

  • Правила Сигмы: Правила сигмы представляют собой набор правил обнаружения с открытым исходным кодом, которые могут использоваться с системами обнаружения вторжений (IDSS) для обнаружения атак с десериализацией. Эти правила можно использовать для обнаружения и оповещения о подозрительных действиях, таких как входящий трафик, содержащий полезные нагрузки, которые, как известно, используют уязвимости десериализации.

  • Проверка входных данных: проверка входных данных может использоваться для предотвращения отправки вредоносных полезных данных в уязвимое приложение. Это может включать проверку типа данных и структуры входящих полезных нагрузок, а также проверку данных, чтобы убедиться, что они не являются вредоносными.

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

Меры по смягчению последствий для Уязвимости десериализации

  1. Библиотеки сериализации объектов: Библиотеки сериализации объектов можно использовать для управления типами объектов, которые могут быть десериализованы. Это может включать использование пользовательской библиотеки сериализации, которая позволяет десериализовать только объекты определенного типа, или использование библиотеки, предоставляющей расширенные функции безопасности, такие как подпись и шифрование.

  2. Проверка кода: проверка кода может использоваться для выявления и устранения уязвимостей десериализации в исходном коде приложения. Это может включать в себя проверку кода на наличие областей, в которых выполняется десериализация, а также проверку кода на наличие областей, в которых вредоносная полезная нагрузка может быть отправлена в приложение.

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

Заключение

В заключение следует отметить, что уязвимости десериализации представляют собой серьезную угрозу безопасности, которая может быть использована для эксплуатации широкого спектра приложений. Эти уязвимости возникают, когда приложение десериализует вредоносные данные, что может позволить злоумышленникам выполнять произвольный код или получать доступ к конфиденциальной информации. Чтобы предотвратить атаки с десериализацией, важно реализовать ряд методов смягчения последствий, включая проверку входных данных, внесение в белый список, библиотеки сериализации объектов, проверку кода и использование обратного прокси. Кроме того, важно быть в курсе последних разработок в области уязвимостей десериализации и регулярно тестировать и отслеживать приложения на предмет потенциальных уязвимостей. Предпринимая эти шаги, организации могут помочь защитить свои приложения и данные от опасностей атак с десериализацией.

Другие Услуги

Готовы к безопасности?

Связаться с нами