31 Січ, 2023

Вразливість переповнення буфера на основі КУПИ

Vulnerability Assessment as a Service (VAaaS)

Tests systems and applications for vulnerabilities to address weaknesses.

ПЕРЕПОВНЕННЯ КУПИпереповнення купи або розбивання купи - це тип переповнення буфера, який відбувається в області даних купи.

Абревіатура цієї уразливості зазвичай звучить як "переповнення буфера на основі КУПИ". Повна назва може бути "Вразливість переповнення буфера на основі КУПИ пам'яті".

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

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

  C:

				
					#include <stdio.h>
#include <string.h>

void overflow(char *str) {
    // Allocating a buffer of 16 bytes on the heap
    char *buffer = malloc(16);
    
    // Copying the string into the buffer
    strcpy(buffer, str);
    
    // This is for demonstration purposes only, 
    // in a real program this memory should be freed 
    // when it is no longer needed
    free(buffer);
}

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("Usage: %s <string>\n", argv[0]);
        return 1;
    }
    overflow(argv[1]);
    return 0;
}

				
			


У цьому прикладі переповнення функція приймає рядок у якості аргументу і виділяє буфер з 16 байт в купі, використовуючи malloc. Потім він копіює рядок в буфер, використовуючи strcpy функція. Якщо довжина рядка, що передається у якості аргументу, більше 16, вона буде записуватися за межі буфера, викликаючи переповнення буфера на основі купи.

C++:

				
					#include <iostream>
#include <string>

void overflow(const std::string &str) {
    // Allocating a buffer of 16 bytes on the heap
    char *buffer = new char[16];
    
    // Copying the string into the buffer
    strncpy(buffer, str.c_str(), 16);
    buffer[15] = '\0';
    
    // This is for demonstration purposes only, 
    // in a real program this memory should be deleted 
    // when it is no longer needed
    delete[] buffer;
}

int main(int argc, char *argv[]) {
    if (argc < 2) {
        std::cout << "Usage: " << argv[0] << " <string>" << std::endl;
        return 1;
    }
    overflow(argv[1]);
    return 0;
}

				
			


У цьому прикладі переповнення функція приймає рядок у якості аргументу і виділяє буфер з 16 байт в купі, використовуючи new. Потім він копіює рядок в буфер, використовуючи strncpy функція, що гарантує, що розмір копії не буде перевищувати 16 символів. Якщо довжина рядка, що передається у якості аргументу, більше 16, вона буде записуватися за межі буфера, викликаючи переповнення буфера на основі купи.

Python:

				
					def overflow(str):
    # Allocating a buffer of 16 bytes on the heap
    buffer = bytearray(16)
    
    # Copying the string into the buffer
    buffer[0:len(str)] = str

str = input("Enter a string: ")
overflow(str.encode())

				
			


У цьому прикладі переповнення функція приймає рядок у якості аргументу і створює байтовий масив розміром 16 байт. Потім він намагається скопіювати вхідні дані

Java:

				
					import java.util.Arrays;

public class HeapBasedBufferOverflow {
    public static void overflow(String str) {
        // Allocating a buffer of 16 bytes on the heap
        char[] buffer = new char[16];
        
        // Copying the string into the buffer
        Arrays.fill(buffer, '\0');
        System.arraycopy(str.toCharArray(), 0, buffer, 0, Math.min(str.length(), 16));
    }
    
    public static void main(String[] args) {
        if (args.length < 1) {
            System.out.println("Usage: java HeapBasedBufferOverflow <string>");
            return;
        }
        overflow(args[0]);
    }
}

				
			


У цьому прикладі переповнення функція приймає рядок у якості аргументу і виділяє буфер з 16 символів в купі, використовуючи новий символ[16]. Потім він копіює рядок в буфер, використовуючи System.массивкопия. Якщо довжина рядка, що передається у якості аргументу, більше 16, вона буде записуватися за межі буфера, викликаючи переповнення буфера на основі купи.

JavaScript:

				
					function overflow(str) {
    // Allocating a buffer of 16 bytes on the heap
    let buffer = new Array(16);
    
    // Copying the string into the buffer
    for (let i = 0; i < Math.min(str.length, 16); i++) {
        buffer[i] = str[i];
    }
}

let str = prompt("Enter a string: ");
overflow(str);

				
			


У цьому прикладі переповнення функція приймає рядок у якості аргументу і створює масив з 16 елементів, використовуючи новий масив(16). Потім він намагається скопіювати вхідні рядок у буфер. Якщо довжина рядка, що передається у якості аргументу, більше 16, вона буде записуватися за межі буфера, викликаючи переповнення буфера на основі купи.

Приклади використання вразливостей переповнення буфера на основі КУПИ

				
					import java.util.Scanner;

public class ExploitCode {
  public static void main(String[] args) {
    String payload = "AAAAAAAAAABBBBBBBBBB";
    vulnerable_function(payload);
  }

  static void vulnerable_function(String input) {
    char buffer[] = new char[10];
    input.getChars(0, 10, buffer, 0);
    System.out.println(buffer);
  }
}
				
			


У цьому прикладі створюється рядок з ім'ям "корисне навантаження" довжиною 20 символів, що більше розміру буфера (10 символів) в вразливою функції. Коли вразлива функція викликається з цієї корисним навантаженням, вхідні дані.GetChars(0, 10, буфер 0) рядок копіює перші 10 символів вхідного рядка в буфер, ефективно переписуючи 10 символів. Це переповнення буфера потенційно може дозволити зловмиснику впровадити шкідливий код в цільову систему.

Методи підвищення привілеїв Уразливості переповнення буфера на основі Hep

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

Ось деякі з найбільш поширених методів, що використовуються для підвищення привілеїв з допомогою вразливостей переповнення буфера на основі КУПИ:

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

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

Використання вразливостей, пов'язаних з подальшим звільненням (UAF): викликаючи звільнення виділеного в купі об'єкта, а потім перерозподіляючи його з шкідливим вмістом, зловмисник може змусити додаток виконувати шкідливий код з підвищеними привілеями.

Створення ланцюжка ROP: переповнюючи буфер і створюючи ланцюжок програмування, орієнтованого на повернення (ROP), зловмисник може змусити додаток виконати послідовність пристроїв з підвищеними привілеями.

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

Загальна методологія та контрольний список для тестування Уразливості переповнення буфера на основі КУПИ

Методологія тестування вразливостей переповнення буфера на основі КУПИ включає в себе кілька кроків, які повинні виконуватися систематично і ретельно.

1. Розвідка: цей етап включає в себе збір інформації про цільове додатку, його середовищі і компонентах. Ця інформація може бути отримана з різних джерел, таких як вихідний код програми, комплект для розробки програмного забезпечення (SDK) або керівництво користувача. Мета цього кроку - отримати повне уявлення про програму, його структуру і поведінку, а також визначити потенційні вектори атак, які можуть бути використані для використання вразливостей переповнення буфера на основі КУПИ.

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

3. Експлуатація: цей крок включає в себе створення та виконання шкідливих корисних навантажень для перевірки цільового програми на наявність вразливостей. Корисні навантаження можуть бути створені вручну або за допомогою автоматизованих інструментів. Мета цього кроку - визначити, чи є цільове додаток уразливим для атак з переповненням буфера на основі КУПИ, і оцінити потенційний вплив уразливості.

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

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

Контрольний список для тестування вразливостей переповнення буфера на основі КУПИ:

1. Переконайтеся, що всі вхідні дані належним чином очищені і перевірені, щоб запобігти переповнення буфера.

2. Перевірте довжину вхідних даних і переконайтеся, що вони не перевищують довжину цільового буфера.

3. Переконайтеся, що всі буфери ініціалізується безпечними значеннями і що розподіл пам'яті управляється належним чином.

4. Перевірте, чи не використовуються небезпечні функції, такі як “strcpy", що може призвести до переповнення буфера.

5. Переконайтеся, що в коді немає проблем з витоком пам'яті, так як вони можуть бути використані для управління купою пам'яті.

6. Переконайтеся, що в коді немає вразливостей, які можуть бути використані для виконання шкідливого коду.

7. Переконайтеся, що код скомпільовано з відповідними прапорами безпеки і що він оновлено до останніх виправлень безпеки.

8. Переконайтеся, що код розроблений з використанням надійних механізмів обробки помилок для запобігання переповнення буфера на основі купи.

9. Переконайтеся, що код протестований з використанням різних типів вхідних даних, включаючи допустимі і неприпустимі вхідні дані, для виявлення потенційних вразливостей переповнення буфера.

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

Корисні поради:

1. Виконайте ретельний аналіз коду, щоб визначити області коду, вразливі до переповнення буфера на основі КУПИ.

2. Використовуйте інструменти і сценарії, щоб допомогти ідентифікувати

Набір інструментів для експлуатації Уразливості переповнення буфера на основі КУПИ

Ручні Інструменти:

GDB: Популярний відладчик, який використовується для ручного відстеження та аналізу виконання додатків.

Valgrind: Інструмент динамічного аналізу з відкритим вихідним кодом, який може виявляти уразливості переповнення буфера на основі купи шляхом виявлення помилки доступу до пам'яті.

EDB (Evan’s Debugger): Відладчик на основі графічного інтерфейсу користувача, який підтримує Linux, Windows і macOS.

OllyDbg: Популярний відладчик Windows, який широко використовується для зворотного проектування і експлуатації вручну.

WinDbg: Потужний відладчик, що надається Корпорацією Майкрософт для систем на базі Windows.

Immunity Debugger: Відладчик на основі графічного інтерфейсу користувача, спеціально розроблений для використання в галузі безпеки.

Radare2: Платформна платформа зворотного проектування з відкритим вихідним кодом, яку можна використовувати для ручного експлуатації.

Ghidra: Безкоштовний інструмент зворотного інжинірингу з відкритим вихідним кодом, розроблений АНБ.

Автоматизовані інструменти:

AFL (American Fuzzy Lop): Популярний фаззер на основі покриття, який можна використовувати для пошуку вразливостей переповнення буфера на основі купи.

AddressSanitizer: Інструмент инструментирования середовища виконання, який може виявляти уразливості переповнення буфера на основі купи в режимі реального часу.

LibFuzzer: Фаззер для коду на C і C ++, спеціально розроблений для використання з компілятором LLVM.

PwnFuzz: Фаззер на основі Python, який можна використовувати для пошуку вразливостей переповнення буфера на основі купи.

honggfuzz: Фаззер загального призначення, який можна використовувати для пошуку вразливостей переповнення буфера на основі купи.

ClangSanitizer: Інструмент аналізу середовища виконання, який може виявляти уразливості переповнення буфера на основі купи в режимі реального часу.

LLVM-Fuzzer: Фаззер для коду на C і C ++, інтегрований з компілятором LLVM.

AFLSmart: Розширення AFL, яке використовує машинне навчання для управління процесом фаззинга.

Плагіни для браузера:

AddressSanitizer for Chrome: Плагін для браузера, який використовує AddressSanitizer для виявлення вразливостей переповнення буфера на основі купи в режимі реального часу.

WebAssembly Sanitizer: Плагін для браузера, який використовує інструмент аналізу середовища виконання на основі WebAssembly для виявлення вразливостей переповнення буфера на основі купи в режимі реального часу.

Fuzz-O-Matic: Плагін для браузера, який використовує AFL для пошуку вразливостей переповнення буфера на основі купи в веб-додатках.

Середній бал CVSS Уразливості переповнення буфера на основі КУПИ

CVSS (Common Vulnerability Scoring System) - широко поширений відкритий галузевий стандарт для оцінки серйозності уразливості. CVSS присвоює уразливості оцінку на основі її потенційного впливу та простоти використання. Оцінка CVSS визначається на основі трьох основних категорій: базова, Тимчасова і екологічна.

Базова оцінка уразливості переповнення буфера на основі КУПИ зазвичай коливається від 7,5 до 10,0, причому 10,0 є найбільш серйозною. Базова оцінка враховує такі чинники, як доступ, необхідний для використання уразливості, складність атаки і вплив на вразливу систему. Для переповнення буфера на основі КУПИ необхідний доступ зазвичай є Локальним", що означає, що зловмисник повинен мати доступ до вразливою системі для виконання атаки. Складність атаки зазвичай вважається "низькою", що дозволяє зловмисникові відносно легко скористатися уразливістю. Вплив на вразливу систему може варіюватися від "Повної компрометації" до "Відмовлення в обслуговуванні", в залежності від специфіки уразливості.

Тимчасова оцінка враховує поточний стан уразливості, в тому числі, доступно виправлення і наскільки широко використовується уразливість. Якщо виправлення доступне і широко поширене, Тимчасова оцінка буде нижчою, що відображає менший ризик, пов'язаний з уразливістю.

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

Таким чином, середня оцінка CVSS для вразливостей переповнення буфера на основі КУПИ зазвичай знаходиться в діапазоні від 7,5 до 10,0, причому точна оцінка залежить від специфіки уразливості, стану уразливості і середовища, в якій розгорнута вразлива система.

Загальна перерахування слабких місць (CWE) для вразливостей переповнення буфера на основі КУПИ

У цьому списку представлені деякі з найбільш поширених CWE:

CWE-119: Неправильне обмеження операцій в межах буфера пам'яті: Ця вразливість виникає, коли додаток виконує операції в буфері пам'яті без належних обмежень, що може призвести до переповнення буфера на основі купи.

CWE-120: Копіювання буфера без перевірки розміру вхідних даних ("Класичне переповнення буфера"): ця вразливість виникає, коли програма копіює дані з вхідного буфера в буфер фіксованого розміру без належної перевірки розміру вхідних даних, що може призвести до переповнення буфера на основі купи.

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

CWE-122: Переповнення буфера на основі купи: ця вразливість виникає, коли додаток записує у виділений для купи буфер більше даних, ніж він призначався для зберігання, що призводить до перезапису важливих даних у пам'яті і потенційно дозволяє зловмисникові виконати довільний код або аварійно завершити роботу додатка.

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

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

CWE-127: Перезапис буфера (на основі купи): ця вразливість виникає, коли програма записує в буфер, виділений для купи, менше даних, ніж передбачалося для зберігання, що може призвести до перезапису важливих даних у пам'яті.

CWE-129: Неправильна перевірка індексу масиву: ця вразливість виникає, коли додаток неправильно перевіряє індекс, що використовується для доступу до елементів масиву, що може призвести до переповнення буфера.

CWE-131: Неправильне обчислення розміру буфера: Ця вразливість виникає, коли додаток неправильно обчислює розмір буфера, що призводить до переповнення буфера.

CWE-134: Неконтрольована рядок формату: Ця вразливість виникає, коли додаток використовує неконтрольовану рядок формату при виклику функції, яка обробляє рядка формату, такі як printf(). Це може призвести до переповнення буфера.

CWE-170: Неправильне завершення нулем – ця вразливість виникає, коли рядок у програмі неправильно завершується нулем, що дозволяє зловмисникові зчитувати дані після кінця рядка. Це може призвести до витоку конфіденційних даних або збою. Нульове завершення рядка використовується для вказівки кінця рядка, і відсутність нульового завершітеля може призвести до зчитуванню даних після кінця рядка.

CWE-190: Цілочисельне переповнення або обтікання ця вразливість виникає, коли додаток виконує арифметичну операцію, яка призводить до целочисленному переповнення або обтеканию, що може призвести до переповнення буфера на основі купи.

CWE-191: Переповнення цілих чисел: ця вразливість виникає, коли додаток виконує арифметичну операцію, яка призводить до переповнення цілих чисел, що може призвести до переповнення буфера на основі купи.

CWE-416: Використовувати після звільнення: ця вразливість виникає, коли програма продовжує використовувати звільнений блок пам'яті, що може призвести до переповнення буфера на основі купи.

CWE-476: Розіменування нульового покажчика: ця вразливість виникає, коли додаток разыменовывает нульовий покажчик, що може призвести до переповнення буфера на основі купи.

CWE-478: Відсутній реєстр за замовчуванням в інструкції Switch: Ця вразливість виникає, коли додаток використовує оператор switch без регістра за замовчуванням, що може призвести до переповнення буфера на основі купи.

CWE-787: Запис за межі: ця вразливість виникає, коли додаток записує дані за межі буфера, що може призвести до переповнення буфера на основі купи.

CWE-788: Доступ до комірки пам'яті перед запуском буфера: ця вразливість виникає, коли програма звертається до комірки пам'яті перед запуском буфера, що може призвести до переповнення буфера на основі купи.

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

Топ-10 останніх CVE, пов'язаних із вразливостями переповнення буфера на основі КУПИ

CVE-2023-23582 – Snap One Wattbox WB-300-IP-3 версії WB10.9a17 і більш ранні уразливі для переповнення буфера на основі купи, що може дозволити зловмиснику виконати довільний код або віддалено вивести пристрій з ладу.

CVE-2023-23456 – Проблема переповнення буфера на основі купи була виявлена в UPX в PackTmt::pack() в p_tmt.cpp досьє. Потік дозволяє зловмисникові викликати відмову в обслуговуванні (переривання) з допомогою створеного файлу.

CVE-2023-21605 – Adobe Acrobat Reader версії 22.003.20282 (і більш ранніх версій), 22.003.20281 (і більш ранніх версій) і 20.005.30418 (і більш ранніх версій) схильні до вразливості переповнення буфера на основі купи, яка може призвести до виконання довільного коду в контексті поточного користувача. Використання цієї проблеми вимагає взаємодії з користувачем, оскільки жертва повинна відкрити шкідливий файл.

CVE-2023-21594 Adobe InCopy версій 18.0 (і більш ранніх), 17.4 (і більш ранніх) схильні до вразливості переповнення буфера на основі купи, яка може призвести до виконання довільного коду в контексті поточного користувача. Використання цієї проблеми вимагає взаємодії з користувачем, оскільки жертва повинна відкрити шкідливий файл.

CVE-2023-21587 Adobe InDesign версій 18.0 (і більш ранніх), 17.4 (і більш ранніх) схильні до вразливості переповнення буфера на основі купи, яка може призвести до виконання довільного коду в контексті поточного користувача. Використання цієї проблеми вимагає взаємодії з користувачем, оскільки жертва повинна відкрити шкідливий файл.

CVE-2023-0433 – Переповнення буфера на основі купи в репозиторії GitHub vim / vim до версії 9.0.1225.

CVE-2023-0288 – Переповнення буфера на основі купи в репозиторії GitHub vim / vim до версії 9.0.1189.

CVE-2023-0051 – Переповнення буфера на основі купи в репозиторії GitHub vim / vim до версії 9.0.1144.

CVE-2022-48281 – processCropSelections в tools / tiffcrop.c LibTIFF до версії 4.5.0 має переповнення буфера на основі купи (наприклад, "ЗАПИС розміру 307203") через створене зображення TIFF.

CVE-2022-47942 – У ksmbd була виявлена проблема в ядрі Linux з 5.15 за 5.19 до 5.19.2. У set_ntacl_dacl відбувається переповнення буфера на основі купи, пов'язане з використанням SMB2_QUERY_INFO_HE після неправильної команди SMB2_SET_INFO_HE.

Список CVE постійно оновлюється і доповнюється актуальний список всіх існуючих поширених загроз і вразливостей (CVE) для вразливостей, пов'язаних з контрабандою HTTP-запитів, можна знайти на офіційному веб-сайті CVE https://cve.mitre.org/

Список популярних експлойтів, пов'язаних із вразливостями переповнення буфера на основі КУПИ

Ось список деяких популярних експлойтів, пов'язаних із вразливостями переповнення буфера на основі КУПИ:

1. House of Spirit – це метод експлуатації купи, який використовує уразливості переповнення буфера на основі купи шляхом створення підроблених фрагментів купи і маніпулювання метаданими купи для перезапису критично важливих структур даних.

2. House of Force – це метод експлуатації купи, який використовує уразливості переповнення буфера на основі купи шляхом перезапису верхнього фрагмента купи, який контролює розмір купи, для перенаправлення виконання програми на код, контрольований зловмисником.

3. House of Einherjar – це метод експлуатації купи, який використовує уразливості переповнення буфера на основі купи шляхом маніпулювання розміром блоків в купі, що призводить до переповнення безперервного блоку.

4. Атака FastBins – це метод експлуатації купи, який використовує уразливості переповнення буфера на основі купи шляхом пошкодження швидких бинов в купі і перезапису критично важливих структур даних.

5. Атака без прив'язки – це метод експлуатації купи, який використовує уразливості переповнення буфера на основі купи шляхом маніпулювання метаданими блоків в купі, що призводить до переповнення безперервного блоку.

6. Атака Tcache – це метод експлуатації купи, який використовує уразливості переповнення буфера на основі купи шляхом пошкодження структур tcache в купі і перезапису критично важливих структур даних.

7. Атака "один за одним" - це метод експлуатації купи, який використовує уразливості переповнення буфера на основі купи шляхом переповнення буфера на один байт, що може бути використано для перезапису критично важливих структур даних.

8. Атака з використанням після звільнення - це метод використання купи, який використовує уразливості переповнення буфера на основі купи шляхом звільнення виділеного купою фрагмента і подальшого використання вказівника на звільнений фрагмент для перезапису критично важливих структур даних.

9. Атака з подвійним звільненням – це метод використання купи, який використовує уразливості переповнення буфера на основі купи, двічі звільняючи один і той же фрагмент пам'яті, що може бути використано для перезапису критично важливих структур даних.

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

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

Практика виявлення та використання вразливостей переповнення буфера на основі КУПИ

Нижче наведені деякі рекомендації щодо практичного вивчення вразливостей переповнення буфера на основі КУПИ:

Розуміння основ комп'ютерної пам'яті: Перед вивченням вразливостей переповнення буфера на основі купи важливо мати гарне уявлення про комп'ютерної пам'яті і про те, як вона працює, включаючи стек і купу.

Знайомство з програмуванням на C: C - найбільше поширена мова, що використовується для демонстрації вразливостей переповнення буфера на основі купи, і важливо бути знайомим з основами програмування на C.

Практика роботи з відладчиком: Налагодження є невід'ємною частиною використання вразливостей переповнення буфера на основі купи, і рекомендується попрактикуватися у використанні відладчика, такого як GDB або OllyDbg, щоб зрозуміти, як розподілена пам'ять і як нею управляти.

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

Практика роботи з вразливою програмою: Існує безліч доступних програм, які навмисно уразливі для вразливостей переповнення буфера на основі купи, і рекомендується попрактикуватися у використанні цих вразливостей, щоб отримати практичний досвід. Деякі популярні програми включають переповнення купи, bof і pwntools.

Читання про методи використання купи: Існує багато різних методів, використовуваних для використання вразливостей переповнення буфера на основі купи, і рекомендується вивчити і зрозуміти ці методи, в тому числі House of Spirit, House of Force, House of Einherjar, атаку FastBins, атаку Unlink, атаку Tcache, атаку Off-by-One, Атака з використанням після звільнення, атака з подвійним звільненням і атака з разыменованием нульового покажчика.

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

Пам'ятайте, що практичний досвід і практичне навчання є найбільш важливими аспектами вивчення вразливостей переповнення буфера на основі купи.

Книги з оглядом вразливостей переповнення буфера на основі КУПИ

Список книг, які можуть виявитися корисними для вивчення вразливостей, пов'язаних з контрабандою HTTP-запитів:

"Хакерство: мистецтво експлуатації" Джон Еріксон: Ця книга являє собою всеосяжне введення в вразливості переповнення буфера на основі купи, включаючи основи управління пам'яттю і способи використання цих вразливостей.

"Керівництво по шеллкодеру: виявлення і використання дірок в безпеці" автор: Кріс Энли: У цій книзі докладно розглядаються уразливості переповнення буфера на основі купи і способи їх використання, включаючи докладний опис пошкодження пам'яті і методів експлуатації.2. "Black Hat Python: програмування на Python для хакерів і пентестеров" Джастіна Сейтца: Ця книга являє собою практичне введення в вразливості переповнення буфера на основі купи, в тому числі про те, як писати експлойти і використовувати їх для захоплення уразливих систем.

"Використання програмного забезпечення: як зламати код" автор: Грег Хоглунд і Гері Макгроу: У цій книзі дається всебічний огляд основ вразливостей переповнення буфера на основі купи, включаючи базову теорію і практичні методи використання цих вразливостей.

"Реверсування: секрети реверс-інжинірингу" автор: Эльдад Эйлам: У цій книзі представлено всебічний огляд уязвімостей переповнення буфера на основі купи, включаючи основи управління пам'яттю і зворотного проектування, а також докладний опис методів експлуатації купи.

"Gray Hat Python: програмування на Python для хакерів і реверс-інженерів" автор: Джастін Сейтц: Ця книга являє собою всеосяжне введення в вразливості переповнення буфера на основі купи, в тому числі про те, як писати експлойти і перепроектувати програмне забезпечення для виявлення цих вразливостей.

"Керівництво хакера веб-додатків: пошук і використання недоліків безпеки" автор: Дафидд Штуттард і Маркус Пінто: У цій книзі дається вичерпний огляд уязвімостей переповнення буфера на основі купи, включаючи способи виявлення та використання цих уразливостей у веб-додатках.

Ці книги є гарною відправною точкою для вивчення вразливостей переповнення буфера на основі КУПИ і можуть допомогти вам створити міцну основу для подальшого вивчення і практичного досвіду.

Список корисних навантажень для вразливостей переповнення буфера на основі КУПИ

Шелл - код: Невеликий фрагмент коду, який здійснюється безпосередньо в процесі використовується, зазвичай використовується для запуску командної оболонки або створення зворотного командної оболонки, щоб дати зловмисникові контроль над цільовою системою.

Повернення до libc: Метод експлуатації, який перенаправляє потік виконання функції стандартної бібліотеки, зазвичай використовується для обходу заходів безпеки, таких як неисполняемые стеки або запобігання виконання даних.

JMP ESP: Команда, яка переходить до значення, що зберігається в регістрі ESP, часто використовується для перенаправлення потоку виконання на введений шелл-код.

ROP (програмування, орієнтоване на повернення): Технологія експлуатації, яка використовує ряд невеликих, вже існуючих програмних пристроїв для виконання довільних обчислень і обходу заходів безпеки, таких як неисполняемые стеки або запобігання виконання даних.

НУЛЬОВІ байти: Корисні навантаження, містять НУЛЬОВИЙ байт (0x00) для завершення рядків або буферів раніше, ніж очікувалося, часто використовуються для обходу заходів безпеки, таких як перевірка довжини рядка або буфера.

Використання рядка формату: Метод експлуатації, який використовує специфікатори рядка формату функції форматування рядків для управління пам'яттю і виконання довільного коду.

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

Кучное розпилення: Метод експлуатації, який заповнює купу даними, контрольованими зловмисником, часто використовується для збільшення шансів успішного використання уразливості переповнення буфера на основі купи.

Як захиститися від вразливостей переповнення буфера на основі КУПИ

Кращі практики та технології, які можуть бути використані.

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

2. Використання захищених бібліотек: використовуйте бібліотеки, які були розроблені з урахуванням вимог безпеки та пройшли широке тестування і перевірку для зниження ризику вразливостей.

3. Stack canaries: використовуйте stack canaries для виявлення і запобігання переповнення буфера на основі стека.

4. Рандомізація розташування адресного простору (ASLR): дозволяє ASLR випадково розташування пам'яті програми, що ускладнює зловмиснику прогнозування можливих вразливостей.

5. Запобігання виконанню даних (DEP): увімкніть DEP, щоб запобігти виконання зловмисниками коду з певних областей пам'яті, таких як купа або стек.

6. Правила брандмауера: налаштуйте правила брандмауера для блокування вхідного трафіку, який може бути шкідливим, наприклад пакетів, що містять відомі уразливості.

7. Системи виявлення та запобігання вторгнень (IDS / IPS): використовуйте системи IDS / IPS для виявлення і запобігання атак, включаючи атаки на переповнення буфера на основі КУПИ.

8. Системи управління інформацією про безпечність та подіями (SIEM): Використовуйте системи SIEM для збору, аналізу та оповіщення про даних, пов'язаних з безпекою, з різних джерел, включаючи брандмауер і журнали IDS / IPS.

9. Регулярні оновлення програмного забезпечення: постійно оновлюйте і виправляйте програмне забезпечення для усунення будь-яких відомих вразливостей, включаючи переповнення буфера на основі КУПИ.

Важливо відзначити, що ні одне єдине рішення не може гарантувати повний захист від всіх вразливостей переповнення буфера на основі КУПИ. Поєднання цих та інших заходів безпеки, поряд з регулярним тестуванням і моніторингом безпеки, може забезпечити надійний захист від подібних типів атак.

Заходи по пом'якшенню наслідків та способи захисту від вразливостей переповнення буфера на основі КУПИ

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

2. Перевірка кордонів даних: перевірте межі масивів і буферів, щоб переконатися, що дані не записуються за межі кінця буфера.

3. Захист стека: використовуйте методи захисту стека, такі як stack canaries і stack smashing protection, щоб запобігти використання вразливостей переповнення буфера.

4. Рандомізація розташування адресного простору (ASLR): ASLR рандомизирует розташування сторінок пам'яті, ускладнюючи зловмисникам передбачення розташування даних і коду в пам'яті.

5. Запобігання виконанню даних (DEP): DEP позначає певні сторінки пам'яті як нездійсненні, так що шкідливий код, введений в пам'ять, не може бути виконаний.

6. Використання безпечних мов програмування: використовуйте мови програмування, які мають вбудований захист від експлойтів переповнення буфера, такі як Java і Python.

7. Перевірка коду: регулярно переглядайте і тестуйте код на наявність вразливостей переповнення буфера, а також виправляйте будь-які виявлені вразливості.

8. Сегментація: сегментируйте код і дані в окремі області пам'яті, що ускладнює зловмисникам контроль над потоком виконання.

Висновок

Переповнення буфера на основі КУПИ - це тип уразливості, що може привести до небезпечних наслідків, таких як виконання довільного коду або витік інформації. Щоб уникнути цієї проблеми, вкрай важливо дотримуватися правила безпечного кодування, використовувати безпечні мови програмування, використовувати засоби безпеки та постійно оновлювати програмне забезпечення з допомогою виправлень безпеки.

Інші Послуги

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

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