09 Лют, 2023

Уразливість умов гонки

Vulnerability Assessment as a Service (VAaaS)

Tests systems and applications for vulnerabilities to address weaknesses.

Абревіатура уразливості в умовах гонки - "RCV", і її назва може бути просто "Уразливість в умовах гонки".

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

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

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

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

C#:

				
					using System.Threading;

class Program {
    static int sharedCounter = 0;

    static void Main(string[] args) {
        // Create two threads to increment the shared counter
        Thread t1 = new Thread(IncrementCounter);
        Thread t2 = new Thread(IncrementCounter);

        // Start the threads
        t1.Start();
        t2.Start();

        // Wait for the threads to finish
        t1.Join();
        t2.Join();

        Console.WriteLine("The final value of the shared counter is: " + sharedCounter);
    }

    static void IncrementCounter() {
        for (int i = 0; i < 10000; i++) {
            // This operation is not atomic and can result in a race condition
            sharedCounter++;
        }
    }
}

				
			

Цей код створює два потоку, t1 и т2, які називають IncrementCounter метод. Метод збільшує загальне ціле число sharedCounter на 1, для 10 000 ітерацій. Оскільки операція збільшення загального лічильника не є атомарною, може виникнути умова гонки, коли два потоку намагаються збільшити одне і те ж значення одночасно. Це може призвести до того, що консоль буде виведено невірне значення загального лічильника.

Java:

				
					import java.util.concurrent.atomic.AtomicInteger;

public class RaceConditionExample {
    static AtomicInteger sharedCounter = new AtomicInteger(0);

    public static void main(String[] args) {
        // Create two threads to increment the shared counter
        Thread t1 = new Thread(new IncrementCounter());
        Thread t2 = new Thread(new IncrementCounter());

        // Start the threads
        t1.start();
        t2.start();

        // Wait for the threads to finish
        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("The final value of the shared counter is: " + sharedCounter.get());
    }

    static class IncrementCounter implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 10000; i++) {
                // This operation is atomic and should not result in a race condition
                sharedCounter.incrementAndGet();
            }
        }
    }
}

				
			

Цей код створює два потоку, t1 и т2, які називають run метод проведення IncrementCounter клас, який реалізує Runnable інтерфейс. Цей метод збільшує AtomicInteger sharedCounter на 1, для 10 000 ітерацій. Операція по збільшенню загального лічильника є атомарною, тому умова гонки не повинно виникати, і правильне значення для загального лічильника повинно бути виведене на консоль.

Python:

				
					import threading

shared_counter = 0

def increment_counter():
    global shared_counter
    for i in range(10000):
        # This operation is not atomic and can result in a race condition
        shared_counter += 1

# Create two threads to increment the shared counter
t1 = threading.Thread
t2 = threading.Thread(target=increment_counter)

# Start the threads
t1.start()
t2.start()

# Wait for the threads to finish
t1.join()
t2.join()

print("The final value of the shared counter is: " + str(shared_counter))
				
			

Цей код створює два потоку, t1 и т2, які називають increment_counter функція. Функція збільшує загальне ціле число shared_counter на 1, для 10 000 ітерацій. Оскільки операція збільшення загального лічильника не є атомарною, може виникнути умова гонки, коли два потоку намагаються збільшити одне і те ж значення одночасно. Це може призвести до того, що консоль буде виведено невірне значення загального лічильника.

Приклади використання / підвищення привілеїв для вразливостей в умовах гонки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. Перевірте додаток або систему на наявність умов гонки, спробувавши обійти елементи управління аутентифікацією.

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

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

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

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

  1. GDB – Відладчик проекту GNU - це потужний інструмент налагодження, який можна використовувати для ручного визначення умов гонки.

  2. Valgrind – Valgrind - це інструмент для налагодження пам'яті, виявлення витоків пам'яті та визначення стану гонки.

  3. Fuzzers – Фаззеры - це інструменти, які автоматично генерують випадкові вхідні дані для виявлення потенційних вразливостей в програмному забезпеченні.

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

  5. strace – strace - це інструмент, який можна використовувати для моніторингу системних викликів, виконуваних процесом, що може бути корисно для визначення умов гонки.

  6. ltrace – ltrace - це інструмент, який можна використовувати для моніторингу викликів бібліотеки, виконуваних процесом, що може бути корисно для визначення умов гонки.

  7. ptrace – ptrace - це інструмент, який можна використовувати для моніторингу системних викликів, виконуваних процесом, що може бути корисно для визначення умов гонки.

  8. GDB scripts – сценарії GDB можна використовувати для автоматизації процесу визначення умов гонки.

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

  1. AFL (American Fuzzy Lop) – AFL - популярний фаззер для визначення умов гонки.

  2. Address Sanitizer – засіб очищення адрес - це інструмент, який можна використовувати для автоматичного визначення умов гонки в коді на C та C ++.

  3. ThreadSanitizer – ThreadSanitizer - це інструмент, який можна використовувати для автоматичного визначення умов гонки в багатопотокових застосуваннях.

  4. RaceDetector – RaceDetector - це інструмент, який можна використовувати для автоматичного визначення умов гонки в коді Java.

  5. Tsan – Tsan - це інструмент, який можна використовувати для автоматичного визначення умов гонки в коді на C та C ++.

  6. CHESS – CHESS - це інструмент, який можна використовувати для автоматичного визначення умов гонки в коді на C та C ++.

  7. Clang – Clang - це інструмент, який можна використовувати для автоматичного визначення умов гонки в коді на C та C ++.

  8. Helgrind – Helgrind - це інструмент, який можна використовувати для автоматичного визначення умов гонки в багатопотокових застосуваннях.

  9. Verve – Verve - це інструмент, який можна використовувати для автоматичного визначення умов гонки в коді на C та C ++.

  10. KLEE – KLEE - це інструмент, який можна використовувати для автоматичного визначення умов гонки в коді на C та C ++.

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

  1. OWASP ZAP (Zed Attack Proxy) – OWASP ZAP - це плагін для браузера, який можна використовувати для визначення умов гонки у веб-додатках.

  2. Burp Suite – Burp Suite - це плагін для браузера, який можна використовувати для визначення умов гонки у веб-додатках.

  3. W3af – W3af - це плагін для браузера, який можна використовувати для визначення умов гонки у веб-додатках.

Рамки:

  1. Django – Django - це веб-платформа на основі Python, яка забезпечує вбудовану підтримку паралелізму та умов гонки.

  2. Ruby on Rails – Ruby on Rails - це веб-платформа, яка забезпечує вбудовану підтримку паралелізму та умов гонки.

  3. Node.js – Node.js являє собою платформу на основі JavaScript для створення масштабованих і паралельних веб-додатків.

Середній бал CVSS вразливостей умов гонки

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

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

Оцінка CVSS для уразливості в умовах гонки може варіюватися від 3,0 (низька) до 9,0 (критична) в залежності від серйозності уразливості.

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

Список деяких CWES, пов'язаних з уразливими в умовах гонки:

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

  2. CWE-366: Стан гонки в потоці – ця вразливість виникає, коли стан гонки існує в одному потоці, що призводить до несподіваних результатів і потенційних проблем безпеки.

  3. CWE-367: Умова перегонів перевірки часу використання (TOCTOU) – ця вразливість виникає, коли зловмисник може змінювати ресурс між часом його перевірки і часом його використання, що призводить до несподіваних результатів і потенційних проблем безпеки.

  4. CWE-370: Умова гонки у змінній середовища – ця вразливість виникає, коли при маніпулюванні змінними середовища існує умова гонки, що приводить до несподіваних результатів і потенційних проблем безпеки.

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

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

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

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

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

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

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

Топ-15 останніх CVE, пов'язаних з уразливими в умовах гонки

CVE-2023-24042 – Умова гонки в LightFTP через 2.2 дозволяє зловмисникові виконати обхід шляху з допомогою неправильно сформованого FTP-запиту. Потік обробника може використовувати перезаписанный контекст-> Ім'я файлу.

CVE-2023-22402 – Вразливість After Use Free в ядрі Juniper Networks Junos OS Evolved дозволяє зловмисникові, який не пройшов перевірку автентичності мережі, викликати відмову в обслуговуванні (DoS). У сценарії невпинної маршрутизації (NSR) може спостерігатися несподіваний перезапуск ядра, якщо включена функція "автоматичне виявлення bgp" і якщо з якої-небудь причини відбувається відключення сеансів автоматичного виявлення по сусідству з BGP. Це стан гонки, яке знаходиться поза прямого контролю зловмисників, і виникнення цієї проблеми залежить від внутрішнього часу системи. Ця проблема зачіпає Juniper Networks Junos OS Evolved: 21.3 версії до 21.3R3-EVO; 21.4 версії до 21.4R2-EVO; 22.1 версії до 22.1R2-EVO; 22.2 версії до 22.2R1-S1-EVO, 22.2R2-EVO.

CVE-2023-22397 – Розподіл ресурсів без обмежень або обмеження слабкості в управлінні пам'яттю механізму пересилання пакетів (PFE) в Juniper Networks На пристроях серії PTX10003, розроблених Junos OS, дозволяє зловмисникові, що знаходиться по сусідству, який встановив певні попередні умови і знає середу, відправляти певні конкретні справжні пакети, щоб почати перевірку часу Атака стану гонки по часу використання (TOCTOU), яка призведе до початку витоку пам'яті. Як тільки ця умова починається, і до тих пір, поки зловмисник здатний підтримувати порушує трафік, відбувається подія розподіленого відмови в обслуговуванні (DDoS). У разі DDoS-атаки пакети-порушники, надіслані зловмисником, будуть продовжувати надходити з одного пристрою на інший до тих пір, поки вони будуть отримані і оброблені будь-якими пристроями, що в кінцевому підсумку призведе до каскадне відключення всіх вразливих пристроїв. Пристрої, які не піддаються витоку пам'яті, будуть обробляти і пересилати пакети-порушники на сусідні пристрої. З-за того, що внутрішні засоби захисту від повеней і механізми безпеки сягають максимальної межі спрацьовування в найгіршому сценарії, всі порушені пристрою Junos OS Evolved перезавантажаться всього за 1,5 дня. Перезавантаження для відновлення служб неможливо уникнути, як тільки починається втрата пам'яті. Пристрій самостійно відновиться після збою і перезавантаження. Для перезапуску пристрою втручання оператора не потрібно. Ця проблема зачіпає: Juniper Networks ОС Junos, розроблена на PTX10003: всі версії до 20.4R3-S4-EVO; 21.3 версії до 21.3R3-S1-EVO; 21.4 версії до 21.4R2-S2-EVO, 21.4R3-EVO; 22.1 версії до 22.1R1-S2-EVO, 22.1R2-EVO; 22.2 версії до 22.2R2-EVO. Щоб перевірити пам'ять, клієнти можуть підключитися до PFE, а потім виконати наступний оператор show: показати jexpr jtm вхід-мікросхема основної пам'яті 255 | ні-більш Альтернативно можна виконати RE CLI: запит pfe виконати цільову команду fpc0 "показати jexpr jtm вхід-мікросхема основної пам'яті 255 | ні-докладніше" Ітерація 1: Приклад виводу: Тип Mem: NH, тип розподілу: JTM використовується 136776 байт (максимально використовується 138216 байт) доступно 911568 байт (909312 байт зі вільних сторінок) Ітерація 2: Приклад виводу: Тип Mem: NH, тип розподілу: JTM 137288 використаних байт (максимум 138216 використаних байт) доступно 911056 байт (909312 байт зі вільних сторінок) Те ж саме можна побачити у наведеному нижче інтерфейс командного рядка, припускаючи, що масштаб не зміниться: показати інформацію про пам'ять npu Приклад виводу: FPC0: NPU16 mem-util-jnh-nh-size 2097152 FPC0: NPU16 mem-util-jnh-nh-виділений 135272 FPC0: NPU16 mem-util-jnh-nh-використання 6

CVE-2023-20611 – У графічному процесорі можливе використання після звільнення з-за стану гонки. Це може призвести до локального підвищення привілеїв при необхідних системних привілеї виконання. Взаємодія з користувачем не потрібно для експлуатації. Ідентифікатор виправлення: ALPS07588678; Ідентифікатор проблеми: ALPS07588678.

CVE-2023-20610 – У display drm можливо пошкодження пам'яті з-за стану гонки. Це може призвести до локального підвищення привілеїв при необхідних системних привілеї виконання. Взаємодія з користувачем не потрібно для експлуатації. Ідентифікатор виправлення: ALPS07363469; Ідентифікатор проблеми: ALPS07363469.

CVE-2023-20608 – У display drm можливе використання після безкоштовного з-за стану гонки. Це може призвести до локального підвищення привілеїв при необхідних системних привілеї виконання. Взаємодія з користувачем не потрібно для експлуатації. Ідентифікатор виправлення: ALPS07363599; Ідентифікатор проблеми: ALPS07363599.

CVE-2023-20607 – В ccu можливо пошкодження пам'яті з-за стану гонки. Це може призвести до локального підвищення привілеїв при необхідних системних привілеї виконання. Взаємодія з користувачем не потрібно для експлуатації. Ідентифікатор виправлення: ALPS07512839; Ідентифікатор проблеми: ALPS07512839.

CVE-2023-0739 – Стан гонки в комутаторі в репозиторії GitHub answerdev / answer до версії 1.0.4.

CVE-2023-0705 – Переповнення цілих чисел в ядрі в Google Chrome до версії 110.0.5481.77 дозволяло віддаленого зловмиснику, у якого була одна умова гонки, потенційно використовувати пошкодження купи через створену HTML-сторінку. (Рівень безпеки Chromium: низький)

CVE-2023-0468 – Помилка використання після звільнення була виявлена в io_uring/poll.c io_poll_check_events в подкомпоненте io_uring в ядрі Linux з-за стану гонки poll_refs. Цей недолік може привести до разыменованию нульового покажчика.

CVE-2022-47331 – Драйвер wlan є умова гонки. Це може призвести до локального відмови в обслуговуванні в службах wlan.

CVE-2022-46689 – Умова гонки було усунуто з допомогою додаткової перевірки. Ця проблема вирішується в tvOS 16.2, macOS Monterey 12.6.2, macOS Ventura 13.1, macOS Big Sur 11.7.2, iOS 15.7.2 і iPadOS 15.7.2, iOS 16.2 і iPadOS 16.2, watchOS 9.2. Додаток може мати змогу виконувати довільний код з правами ядра.

CVE-2022-46174 – efs-utils - це набір утиліт для Amazon Elastic File System (EFS). Потенційна проблема зі станом гонки існує в помічнику монтування Amazon EFS у версіях efs-utils v1.34.3 і нижче. При використанні TLS для монтування файлових систем помічник монтування виділяє локальний порт для stunnel для прийому підключень NFS перед застосуванням тунелю TLS. В порушених версіях паралельні операції монтування можуть виділяти один і той самий локальний порт, що приводить або до невдалих операцій монтування, або до неправильного зіставлення локальних точок монтування клієнта EFS з файловими системами EFS цього клієнта. Ця проблема виправлена у версії v1.34.4. Обійти її не рекомендується. Ми рекомендуємо порушених користувачам оновити встановлену версію efs-utils до версії v1.34.4 або більш пізньої.

CVE-2022-45888 – Проблема була виявлена в ядрі Linux через 6.0.9. drivers/char/xillybus/xillyusb.c має стан гонки і використання після звільнення при фізичному видалення пристрою USB.

CVE-2022-45886 – В ядрі Linux була виявлена проблема через 6.0.9. drivers/media/dvb-core/dvb_net.c має умова .disconnect порівняно з dvb_device_open, яке призводить до використання після звільнення.

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

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

  1. Експлойт TOCTOU (час перевірки, час використання) – цей експлойт використовує уразливість в умовах гонки для зміни ресурсу в період між перевіркою і використанням. Це може бути використано для отримання несанкціонованого доступу до ресурсів або підвищення привілеїв.

  2. Експлойт стану гонки файлових дескрипторів – цей експлойт використовує уразливість стану гонки в обробці файлових дескрипторів для отримання несанкціонованого доступу до файлів або підвищення привілеїв.

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

  4. Експлойт асинхронного обробника сигналів – цей експлойт використовує уразливість стану гонки при обробці сигналів для отримання несанкціонованого доступу до ресурсів або підвищення привілеїв.

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

  6. Експлойт використання після звільнення – цей експлойт використовує уразливість стану гонки в управлінні пам'яттю для використання пам'яті після її звільнення, що потенційно призводить до виконання довільного коду.

  7. Експлойт переповнення купи – цей експлойт використовує уразливість стану гонки при виділенні пам'яті для переповнення купи і потенційно виконання довільного коду.

  8. Експлойт пулу потоків – цей експлойт використовує уразливість стану гонки в управлінні пулом потоків для підвищення привілеїв або отримання несанкціонованого доступу до ресурсів.

Список популярних експлойтів, пов'язаних з уразливими в умовах гонки

  1. Експлойт TOCTOU (час перевірки, час використання) – цей експлойт використовує уразливість в умовах гонки для зміни ресурсу в період між перевіркою і використанням. Це може бути використано для отримання несанкціонованого доступу до ресурсів або підвищення привілеїв.

  2. Експлойт стану гонки файлових дескрипторів – цей експлойт використовує уразливість стану гонки в обробці файлових дескрипторів для отримання несанкціонованого доступу до файлів або підвищення привілеїв.

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

  4. Експлойт асинхронного обробника сигналів – цей експлойт використовує уразливість стану гонки при обробці сигналів для отримання несанкціонованого доступу до ресурсів або підвищення привілеїв.

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

  6. Експлойт використання після звільнення – цей експлойт використовує уразливість стану гонки в управлінні пам'яттю для використання пам'яті після її звільнення, що потенційно призводить до виконання довільного коду.

  7. Експлойт переповнення купи – цей експлойт використовує уразливість стану гонки при виділенні пам'яті для переповнення купи і потенційно виконання довільного коду.

  8. Експлойт пулу потоків – цей експлойт використовує уразливість стану гонки в управлінні пулом потоків для підвищення привілеїв або отримання несанкціонованого доступу до ресурсів.

Практика виявлення та використання вразливостей в умовах гонки

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

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

    2. Створіть багатопотокову програму і навмисно введіть умови гонки – Аналогічно до попереднього підходу, ви можете створити багатопотокову програму і навмисно ввести умови гонки. Це допоможе вам зрозуміти, як можуть виникати умови гонки в багатопоточних середовищах.

    3. Беріть участь в програмах винагороди за помилки – Програми винагороди за помилки - відмінний спосіб перевірити свої навички. Ви можете знаходити і повідомляти про уразливість в умовах гонки в реальному програмному забезпеченні і отримувати винагороду за свої зусилля.

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

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

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

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

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

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

Популярні книжки з акцентом на уразливості в умовах гонки:

  1. "Безпечне кодування на C та C ++" Роберта С. Сикорда – У цій книзі подано практичні рекомендації з написання безпечного коду на C і C ++, включаючи главу про умовах гонки і про те, як їх запобігти. Книга охоплює широке коло питань безпеки, що робить її всеосяжним ресурсом для розробників програмного забезпечення.

  2. "Основи біткойнів і блокчейнов" Ентоні Льюїса – Ця книга являє собою всеосяжне введення в світ біткойнів і блокчейнов, включаючи розділ про умовах гонки, які можуть виникнути в цих системах. Книга написана в зрозумілому та доступному стилі, що робить її відмінним ресурсом для всіх, хто цікавиться цією областю.

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

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

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

  6. "The Web Application hacker's Handbook" Дэфидда Штуттарда і Маркуса Пінто – Ця книга являє собою всеосяжне керівництво у сфері безпеки веб-додатків, включаючи розділ про умовах гонки і про те, як їх використовувати. Книга написана в зрозумілому та доступному стилі, що робить її відмінним ресурсом для всіх, хто цікавиться цією областю.

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

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

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

  1. Корисне навантаження зміни файлу: зловмисник створює корисну навантаження, яка безперервно записується у файл до тих пір, поки файл не буде повністю перезаписаний. Наприклад, зловмисник може записати корисну навантаження, яка безперервно записує рядок "A" в файл до тих пір, поки вона не досягне певного розміру.

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

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

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

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

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

Щоб усунути уразливості в умовах гонки у вашому програмному забезпеченні:

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

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

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

  4. Обмежити доступ до ресурсів: обмежити доступ до загальних ресурсів, дозволивши доступ до них тільки авторизованим користувачам.

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

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

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

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

  9. Використовуйте стандарти безпечного кодування: дотримуйтесь стандартів безпечного кодування, таких як OWASP Top 10 і SANS Top 25, щоб знизити ризик вразливостей в умовах гонки.

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

Як бути захищеним від вразливостей в умовах гонки

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

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

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

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

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

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

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

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

Висновок

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

Інші Послуги

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

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