09 Лют, 2023

Уразливості десеріалізації

Vulnerability Assessment as a Service (VAaaS)

Tests systems and applications for vulnerabilities to address weaknesses.

Уразливості десеріалізації зверніться до вразливостей безпеки, які виникають, коли зловмисно створений enter використовується для втручання в нормальне функціонування процесу десеріалізації. Десериализация - це процес перетворення потоку даних у певному форматі, такому як двійковий файл або 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.

Список корисних навантажень Уразливості десеріалізації

GDB

  1. Ланцюжки гаджетів: ланцюжки гаджетів - це набір об'єктів, які об'єднуються для формування шкідливої корисного навантаження. Коли корисна навантаження десериализуется, ланцюжок гаджетів можна використовувати для виконання довільного коду, підвищення привілеїв або крадіжки даних.

  2. Шкідливі класи: Шкідливий клас - це користувальницький клас, спеціально розроблений для використання уразливості десеріалізації. Клас може бути відправлений в якості корисного навантаження і після десеріалізації може використовуватися для виконання довільного коду, підвищення привілеїв або крадіжки даних.

  3. Змінені дані: Змінені дані - це дані, які були якимось чином змінені з метою використання уразливості десеріалізації. Це може включати в себе зміну існуючих даних або додавання нових даних у корисну навантаження.

  4. Корисні навантаження байт-коду: Корисні навантаження байт-коду - це двійкові корисні навантаження, які виконуються при десеріалізації. Вони можуть використовуватися для виконання довільного коду, підвищення привілеїв або крадіжки даних.

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

Як захиститися від Уразливості десеріалізації

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

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

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

  • Білий список: Білий список - це метод безпеки, який дозволяє уразливого додатком обробляти тільки довірені корисні навантаження. Це може включати в себе дозвіл відправляти в додаток тільки довірені корисні дані або обробку тільки корисних даних з надійних джерел.

Заходи по пом'якшенню наслідків для Уразливості десеріалізації

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

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

  3. Використання зворотного проксі-сервера: зворотний проксі-сервер можна використовувати для додавання додаткового рівня безпеки між додатком і Інтернетом. Це може включати використання зворотного проксі-сервера для перевірки вхідних корисних даних або для блокування вхідних корисних даних, що містять шкідливі дані.

Висновок

На закінчення слід зазначити, що уразливості десеріалізації являють собою серйозну загрозу безпеки, яка може бути використана для експлуатації широкого спектру додатків. Ці уразливості виникають, коли додаток десериализует шкідливі дані, що може дозволити зловмисникам виконувати довільний код або отримувати доступ до конфіденційної інформації. Щоб запобігти атакам з десериализацией, важливо реалізувати ряд методів пом'якшення наслідків, включаючи перевірку вхідних даних, внесення в білий список, бібліотеки серіалізації об'єктів, перевірку коду і використання зворотного проксі. Крім того, важливо бути в курсі останніх розробок в області вразливостей десеріалізації і регулярно тестувати і відстежувати програми на предмет потенційних вразливостей. Роблячи ці кроки, організації можуть допомогти захистити свої додатки і дані від небезпек атак з десериализацией.

Інші Послуги

Готові до безпеки?

зв'язатися з нами