02 Лют, 2023

Бінарні уразливості

Vulnerability Assessment as a Service (VAaaS)

Tests systems and applications for vulnerabilities to address weaknesses.

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

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

C/C++: вразливість переповнення буфера:

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

int main(int argc, char *argv[])
{
    char buffer[100];
    strcpy(buffer, argv[1]);
    return 0;
}
				
			


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

Java: Вразливість десеріалізації:

				
					import java.io.*;

public class DeserializationExample {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        FileInputStream fileIn = new FileInputStream("temp.ser");
        ObjectInputStream in = new ObjectInputStream(fileIn);
        in.readObject();
        in.close();
        fileIn.close();
    }
}
				
			


Цей код вразливий для атаки десеріалізації, яка виникає, коли ненадійні дані десериализуются в об'єкт Java. Зловмисник може створити шкідливий сериализованный об'єкт, що містить шкідливий код, який буде виконаний при десеріалізації об'єкта.

Python: Форматування рядка:

				
					def vulnerable_function(input_string):
    print(input_string % 42)

input_string = input("Enter a string: ")
vulnerable_function(input_string)
				
			


Цей код вразливий для атаки на рядок формату, яка виникає, коли рядок формату передається в Друк функція не очищена належним чином. Зловмисник може ввести рядок зі специфікатором формату (наприклад, %x), що призведе до того, що програма отримає доступ до довільній комірці пам'яті і потенційно призведе до збою або витоку конфіденційної інформації.

Приклади використання бінарних вразливостей

Ось кілька прикладів використання бінарних вразливостей в різних популярних мовах програмування:

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

C:

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

void vulnerable_function(char *str) {
  char buffer[10];
  strcpy(buffer, str);
  printf("%s\n", buffer);
}

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

  vulnerable_function(argv[1]);
  return 0;
}
				
			

Python:

				
					def vulnerable_function(str):
    buffer = str[:10]
    print(buffer)

input_str = input("Enter a string: ")
vulnerable_function(input_str)
				
			

2. Уразливість форматного рядка. Ця вразливість виникає, коли зловмисник може керувати аргументом рядка формату, що передаються функції printf(). Зловмисник може використовувати цю уразливість для зміни пам'яті програми та виконання довільного коду. Наприклад, програма може мати наступний код: 

C:

				
					#include <stdio.h>

void vulnerable_function(char *str) {
  printf(str);
}

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

  vulnerable_function(argv[1]);
  return 0;
}

				
			

Python:

				
					def vulnerable_function(str):
    print(str)

input_str = input("Enter a string: ")
vulnerable_function(input_str)
				
			

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

C:

				
					#include <stdio.h>

void vulnerable_function(int size) {
  char buffer[size];
}

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

  int size = atoi(argv[1]);
  vulnerable_function(size);
  return 0;
}
				
			

Python:

				
					def vulnerable_function(size):
    buffer = [0] * size

input_str = input("Enter size: ")
size = int(input_str)
vulnerable_function(size)
				
			

4. Безкоштовне використання після використання. Ця вразливість виникає, коли програма продовжує використовувати пам'ять після її звільнення. Зловмисник може скористатися цією уразливістю для виконання довільного коду. Наприклад, програма може мати наступний код:

C:

				
					#include <stdlib.h>
#include <string.h>

void vulnerable_function() {
  char *ptr = malloc(100);
  free(ptr);
  strcpy(ptr, "user_input");
}

int main() {
  vulnerable_function();
  return 0;
}
				
			

Python:

				
					def vulnerable_function():
    ptr = bytearray(100)
    del ptr
    ptr += bytearray(b'user_input')

vulnerable_function()
				
			

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

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

Методи підвищення привілеїв

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

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

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

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

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

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

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

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

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

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

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

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

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

Загальна методологія та контрольний список для тестування бінарних вразливостей

Методологія:

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

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

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

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

  5. Тестування на проникнення: проведення імітованих атак на двійковий файл для виявлення і використання будь-яких вразливостей.

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

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

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

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

  10. Налагодження та розгортання: Переконайтеся, що двійковий файл розгорнуто надійно, з належною настроюванням та контролем доступу.

  11. Управління оновленнями і виправленнями: регулярно переглядайте і застосовуйте виправлення безпеки для усунення відомих вразливостей в двійковому файлі.

Контрольний список:

• Визначте двійкові компоненти, що використовуються в системі.

• Перевірте наявність відомих вразливостей у двійкових файлах, використовуючи бази даних, такі як база даних Common Vulnerabilities and Exposures (CVE).

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

• Використовуйте методи динамічного аналізу, такі як нечітке тестування, для виявлення вразливостей.

• Використовуйте такі інструменти, як отладчики і дізассемблер, щоб зрозуміти поведінку двійкового коду.

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

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

• Перевірте, чи правильно двійковий файл перевіряє вхідні дані, щоб запобігти атаки, такі як впровадження SQL.

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

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

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

Набір інструментів для використання бінарної уразливості 

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

  • GDB (GNU Debugger): налагодження вихідного коду для C, C ++, Fortran, Ada та інших мов.

  • Ollydbg: зручний відладчик для Windows, який можна використовувати для аналізу двійкових файлів та виявлення вразливостей.

  • Immunity Debugger: потужний відладчик, який включає в себе такі функції, як візуалізація та аналіз даних, виправлення коду і пам'яті, а також вбудований інтерпретатор Python.

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

  • IDA Pro: комерційний мультиплатформовий дізассемблер і відладчик з великою базою користувачів і великим набором функцій.

  • Binary Ninja: комерційна платформа зворотного проектування з акцентом на бінарний аналіз, включаючи декомпіляцію і візуалізацію.

  • Ghidra: Безкоштовно платформа зворотного інжинірингу з відкритим вихідним кодом, розроблена Агентством національної безпеки (АНБ).

  • Hex-Rays Decompiler: комерційний декомпілятор для дизассемблера IDA Pro.

  • strace: інструмент налагодження, який можна використовувати для моніторингу системних викликів і сигналів у занедбаному двійковому файлі.

  • ltrace: засіб налагодження, яке можна використовувати для відстеження викликів бібліотеки в занедбаному двійковому файлі.

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

  • AFL (American Fuzzy Lop): популярний інструмент фаззинга, який використовує генетичні алгоритми для генерації вхідних даних і тестування на наявність вразливостей.

  • Binsec: інструмент аналізу безпеки на двійковому рівні, який можна використовувати для виявлення вразливостей, таких як переповнення буфера і помилки після звільнення.

  • Binary Analysis Tool (BAT):автоматизований інструмент двійкового аналізу, який можна використовувати для виявлення вразливостей і створення звітів про безпеку.

  • Checksec: інструмент, який можна використовувати для перевірки властивостей безпеки двійкових файлів ELF, таких як stack canaries і NX protection.

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

  • Cppcheck: інструмент статичного аналізу коду на C ++, який можна використовувати для виявлення вразливостей безпеки і помилок кодування.

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

  • LDRA (аналізатор залежностей Lattix): комерційний інструмент тестування програмного забезпечення, який можна використовувати для виявлення вразливостей безпеки в двійковому коді.

  • PEDA (Python Exploit Development Assistance for GDB): плагін GDB, який надає ряд функцій, що допомагають в розробці експлойтів, таких як виправлення коду, перевірка пам'яті і маніпулювання регістрами.

  • ROSA (Runtime Observing System for Analysis): інструмент динамічного аналізу, який можна використовувати для моніторингу поведінки запущеного двійкового файлу і виявлення вразливостей в системі безпеки.

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

  • NoScript: розширення для браузера, яке блокує запуск JavaScript, Java та інших типів скриптів на веб-сайтах, підвищуючи безпеку за рахунок обмеження поверхні атаки.

  • uBlock Origin: розширення для браузера, яке блокує рекламу і трекери, підвищуючи конфіденційність і зменшує поверхню атаки.

  • HTTPS Everywhere: розширення для браузера, яке забезпечує безпечне з'єднання (HTTPS) для веб-сайтів, які його підтримують, підвищуючи конфіденційність і безпеку.

  • Privacy Badger: розширення для браузера, яке блокує сторонні треки

Загальна перерахування слабких місць (CWE)

Загальна перерахування слабких місць (CWE) - це повний список слабких місць програмного і апаратного забезпечення, які можуть призвести до вразливостей в системах. Деякі з CWES, пов'язаних з бінарними уразливими, включають:

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

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

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

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

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

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

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

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

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

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

Експлойти бінарних вразливостей

Існує ряд експлойтів, які використовують переваги бінарних вразливостей, в тому числі:

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

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

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

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

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

Практика в тестуванні бінарних вразливостей

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

Тестування пуху: Автоматичне генерування та надсилання великих обсягів випадкових даних в двійковий файл для його стрес-тестування та виявлення потенційних вразливостей.

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

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

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

Відновлення: Усунення виявлених вразливостей шляхом оновлення коду або конфігурації для запобігання використання вразливостей.

Для вивчення бінарних вразливостей

  1. Онлайн-курси: Такі платформи, як Coursera, Udemy і edX, пропонують курси з комп'ютерної безпеки, безпеки програмного забезпечення і хакерства, в яких часто докладно розглядаються бінарні уразливості.

  2. Книги: Доступно кілька книг по темі бінарних вразливостей, таких як "Злом: мистецтво експлуатації" Джона Еріксона і "Керівництво по шелкодеру" Кріса Энли.

  3. Веб-сайти: Такі як OWASP (Open Web Application Security Project) і NIST (Національний інститут стандартів і технологій) містять велику інформацію про бінарних уразливість і способи їх усунення.

  4. Конференції: Відвідування конференцій з безпеки, таких як Black Hat і DefCon, може забезпечити всебічне розуміння бінарних вразливостей і останніх розробок у цій області.

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

Книги з оглядом бінарних вразливостей

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

  • "Black Hat Python: програмування на Python для хакерів і пентестеров" автор: Джастін Сейтц: Ця книга вчить читачів, як використовувати Python для різних завдань злому і тестування на проникнення. В ньому розглядаються такі теми, як сканування мережі, створення бекдорів і використання вразливостей. Книга призначена для програмістів на Python середнього та просунутого рівня.

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

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

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

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

  • "Криптографічний інженерія: принципи проектування та практичне застосування" Нільс Фергюсон, Брюс Шнайер і Тадаєсі Коно: Ця книга являє собою всеосяжне керівництво з проектування і впровадження криптографічних систем. Вона охоплює широке коло тем, включаючи симетричну та асиметричну криптографію, управління ключами і захищені протоколи. Книга призначена для фахівців, що займаються проектуванням, впровадженням та розгортанням криптографічних систем.

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

  • "Інженерія безпеки: керівництво по створенню надійних розподілених систем" Росс Андерсон: Ця книга являє собою всеосяжне керівництво по створенню безпечних і надійних розподілених систем. Вона охоплює широке коло тем, включаючи контроль доступу, мережеву безпеку та безпеку програмного забезпечення. Книга призначена для фахівців, що займаються проектуванням, впровадженням та розгортанням розподілених систем.

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

  • "Реагування на інциденти та комп'ютерна експертиза, Третє видання" Джейсон Т. Латтгенс, Метью Пепе і Кевін Мандиа: Ця книга являє собою всеосяжне керівництво з реагування на інциденти та комп'ютерної експертизи. Він охоплює широке коло тем, включаючи збір даних, аналіз і звітність. Книга призначена для фахівців, що займаються реагуванням на інциденти та комп'ютерної криміналістики, а також для працівників правоохоронних органів і військовослужбовців.

  • "Тестування на проникнення: практичне введення у злом" автор Джорджія Вайдман: Ця книга являє собою практичне введення в тестування на проникнення. Вона охоплює широке коло тем, включаючи розвідку, експлуатацію та постэксплуатационную діяльність. Книга призначена для людей, які є новачками в області тестування на проникнення і хочуть отримати чітке уявлення про використовуваних інструментах і методах.

  • "Основи комп'ютерної безпеки" автор: Чак Исттом: Ця книга являє собою всеосяжне введення в основи комп'ютерної безпеки. Вона охоплює широке коло тем, включаючи контроль доступу, криптографію і мережеву безпеку. Книга призначена для людей, які є новачками в області комп'ютерної безпеки і хочуть отримати чітке уявлення про основи.

Список корисних навантажень, що підходять для бінарних вразливостей

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

ROP-гаджети: невеликі фрагменти коду, які вже присутні в пам'яті програми і можуть бути використані для виконання довільного коду, як в атаках, орієнтованих на повернення (ROP).

NOP sleds: послідовність інструкцій NOP (no-operation), які можна використовувати для збільшення шансів успішного використання уразливості переповнення буфера за рахунок надання більшої мети для корисного навантаження зловмисника.

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

Корисні навантаження для розпилення купи: корисні навантаження, які розпорошують купу великою кількістю об'єктів у спробі збільшити шанси на успішне використання уразливості переповнення буфера на основі купи.

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

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

Як захиститися від бінарної уразливості

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

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

  3. Включити запобігання виконання даних: DEP - це функція безпеки, яка допомагає запобігти виконання коду з розділів пам'яті з даними, таких як стек і купа, які є загальними цілями для атак переповнювання буфера.

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

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

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

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

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

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

Висновок

Бінарні уразливості відносяться до слабкостей або недоліків у двійковому коді, які можуть призвести до інцидентів безпеки, таких як виконання коду, розкриття інформації або компрометація системи. Бінарні уразливості можуть бути виявлені в різних програмних компонентах, таких як бібліотеки, системні утиліти і вбудоване програмне забезпечення. Ці уразливості часто використовуються зловмисниками для отримання несанкціонованого доступу до систем, крадіжки конфіденційної інформації або виконання шкідливого коду. Щоб запобігти бінарні уразливості, важливо дотримуватися правила безпечного кодування, виконувати регулярні перевірки коду і використовувати такі інструменти, як статичний аналіз і захист під час виконання. Вплив бінарних вразливостей може бути різним, і його серйозність часто вимірюється оцінкою CVSS. Поширені приклади бінарних вразливостей включають переповнення буфера на основі стека, уразливості рядків формату і помилки використання після звільнення. Для виявлення і усунення двійкових вразливостей рекомендується використовувати такі інструменти, як двійковий аналіз та інструменти зворотного проектування, сканери вразливостей і методи пом'якшення наслідків, такі як рандомізація розташування адресного простору (ASLR) і запобігання виконанню даних (DEP).

Інші Послуги

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

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