27 Лют, 2023

Умови гонки від часу перевірки до часу використання (TOCTTOU)

Vulnerability Assessment as a Service (VAaaS)

Tests systems and applications for vulnerabilities to address weaknesses.

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

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


в Python:

				
					import os

def check_file(filename):
    if os.path.exists(filename):
        print("File exists, opening...")
        with open(filename, "r") as f:
            contents = f.read()
            # Do something with contents
    else:
        print("File does not exist")

# Main code
filename = "example.txt"
check_file(filename)

				
			


У цьому коді на Python функція check_file спочатку перевіряє, чи існує файл з іменем файлу, використовуючи os.path.exists функція. Якщо він дійсно існує, код відкриває файл і зчитує його вміст. Однак, якщо інший процес або потік видалить файл між os.path.exists викликається і в момент відкриття файлу цей код викличе виключення.

• В Java:

				
					import java.io.File;

public class CheckFile {
    public static void main(String[] args) {
        String filename = "example.txt";
        File file = new File(filename);

        if (file.exists()) {
            System.out.println("File exists, opening...");
            // Do something with file
        } else {
            System.out.println("File does not exist");
        }
    }
}

				
			


Цей Java-код виконує перевірку, аналогічну коду Python, використовуючи File.exists спосіб перевірити, чи існує файл, перш ніж відкривати його. Тим не менш, він залишається вразливим для умов гонки TOCTTOU, якщо інший процес або потік видалить файл між File.exists викликається і час відкриття файлу.

• в C:

				
					#include <stdio.h>
#include <unistd.h>

void check_file(char *filename) {
    if (access(filename, F_OK) != -1) {
        printf("File exists, opening...\n");
        FILE *f = fopen(filename, "r");
        // Do something with file
        fclose(f);
    } else {
        printf("File does not exist\n");
    }
}

int main() {
    char filename[] = "example.txt";
    check_file(filename);
    return 0;
}

				
			


Цей код на мові Сі використовує access функція для перевірки, чи існує файл, а потім відкриває файл з допомогою fopen якщо це станеться. Однак цей код залишається вразливим для умов TOCTTOU race, якщо інший процес або потік видалить файл між access викликається і час відкриття файлу.

Приклади умов гонки від часу перевірки до часу використання (TOCTTOU)

Умова гонки при видаленні файлу:

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

Умова гонки дозволів:

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

Умова гонки за часом використання:

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

Методи підвищення привілеїв для умов гонки від часу перевірки до часу використання (TOCTTOU)

Беріть участь в гонці за чеком:

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

Тимчасові атаки:

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

Вичерпання ресурсів:

Зловмисник може скористатися уразливістю TOCTTOU, щоб викликати атаки типу "відмова в обслуговуванні" (DoS) або атаку з вичерпанням ресурсів. Наприклад, якщо програма перевіряє стан ресурсу, а потім використовує його, зловмисник може неодноразово змінювати стан ресурсу між перевіркою і використанням, в результаті чого програма буде споживати більше ресурсів або вийде з ладу із-за вичерпання ресурсів.

Ланцюжки умов гонки:

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

Загальна методологія та контрольний список for Умови гонки від часу перевірки до часу використання (TOCTTOU)

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

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

  2. Визначте стан гонки: Потім визначте конкретна умова гонки, яке може бути присутнім в коді. Це може бути умова гонки видалення файлу, умова гонки дозволів або умова гонки часу використання.

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Проаналізуйте результати: Проаналізуйте результати тестування, щоб визначити першопричину стану гонки TOCTTOU.

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

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

Набір інструментів для експлуатації Умови гонки від часу перевірки до часу використання (TOCTTOU)

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

  • Burp Suite: це популярна платформа тестування веб-додатків, яка включає в себе проксі-сервер, сканер та інші інструменти. Його можна використовувати для ручного тестування веб-додатків на предмет умов TOCTTOU race шляхом перехоплення запитів і маніпулювання ними.

  • Wireshark: це аналізатор мережевих протоколів, який дозволяє користувачам захоплювати і аналізувати мережевий трафік. Його можна використовувати для ручного перевірки умов гонки TOCTTOU, перевіряючи час і порядок мережевих пакетів.

  • IDA Pro: це дізассемблер і відладчик, який можна використовувати для аналізу і зворотного проектування двійкового коду. Його можна використовувати для ручного перевірки умов гонки TOCTTOU шляхом вивчення коду та виявлення потенційних проблем з синхронізацією.

  • Visual Studio Debugger: це потужний відладчик , який можна використовувати для аналізу та налагодження .МЕРЕЖЕВІ додатки. Його можна використовувати для ручного перевірки умов гонки TOCTTOU, покроково переглядаючи код та перевіряючи стан загальних ресурсів.

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

  • Procmon: це засіб моніторингу системи Windows, яке можна використовувати для моніторингу файлової системи, реєстру і активності процесів. Його можна використовувати для ручного перевірки умов TOCTTOU race шляхом перевірки часу і порядку операцій файлової системи.

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

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

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

  • ThreadSanitizer: це інструмент, вбудований компілятор LLVM, який можна використовувати для виявлення стрибків даних і інших проблем з синхронізацією в багатопоточних програмах. Його можна використовувати для автоматичної перевірки умов гонки TOCTTOU, виявляючи проблеми з синхронізацією і умови гонки.

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

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

  • Bandit: це інструмент тестування безпеки для коду Python, який можна використовувати для виявлення вразливостей безпеки, таких як умови гонки TOCTTOU. Його можна використовувати для автоматичного тестування умов гонки TOCTTOU у програмах на Python.

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

  • ESLint: це популярний інструмент компонування JavaScript, який можна використовувати для виявлення широкого спектру проблем з кодуванням, включаючи уразливості в системі безпеки, такі як умови гонки TOCTTOU. Це може

Середній бал CVSS умови гонки від часу перевірки до часу використання (TOCTTOU)

Середній бал CVSS уразливості, пов'язаний з умовами перегонів "Час перевірки - час використання" (TOCTTOU), може змінюватись в залежності від специфіки уразливості, такий як серйозність впливу, простота експлуатації і складність вразливою системи. Однак, в цілому, уразливості в умовах гонки TOCTTOU можуть бути досить серйозними і часто мають високі оцінки CVSS, що варіюються від 6.0 до 9.0 або навіть вище.

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

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

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

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

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

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

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

• CWE-390: виявлення стану помилки без дій – цей CWE відноситься до вразливостей, в яких виявляється стан помилки, але не робиться ніяких належних дій для усунення проблеми.

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

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

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

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

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

Топ-10 CVE, пов'язаних з умовами перегонів від часу перевірки до часу використання (TOCTTOU)

• CVE-2019-17102 – У розділі відновлення Bitdefender BOX 2 версії 2.0.1.91 існує вразливість для використання при виконанні команд. Метод API `/api/update_setup` не виконує перевірки підпису мікропрограми атомарно, що призводить до уразливого стану гонки (TOCTTOU), яке дозволяє довільне виконання системних команд. Ця проблема зачіпає: Bitdefender Bitdefender BOX 2 версії до версії 2.1.47.36.

• CVE-2017-6512 – Умова гонки у функціях rmtree і remove_tree в модулі File-Path до версії 2.13 для Perl дозволяє зловмисникам встановлювати режим для довільних файлів за допомогою векторів, що включають логіку ослаблення дозволів каталогів.

• CVE-2013-0913 – Переповнення цілих чисел у drivers / gpu / drm /i915 / i915_gem_execbuffer.c в драйвері i915 в підсистемі Direct Rendering Manager (DRM) у ядрі Linux через 3.8.3, яке використовувалося в Google Chrome OS до 25.0.1364.173 та інших продуктах, що дозволяє локальним користувачам викликати відмову в обслуговуванні (на основі купи переповнення буфера) або, можливо, мають невизначений інше вплив через створене додаток, яке запускає безліч копій переміщення і потенційно призводить до стану гонки.

• CVE-2012-3748 – Стан гонки в WebKit в Apple iOS до версії 6.0.1 і Safari до версії 6.0.2 дозволяє віддаленим зловмисникам виконувати довільний код або викликати відмову в обслуговуванні (збій програми) з допомогою векторів, що включають масиви JavaScript.

• CVE-2010-5184 – ** ОСПОРЮВАНЕ ** Стан гонки в ZoneAlarm Extreme Security 9.1.507.000 в Windows XP дозволяє локальним користувачам обходити обробники перехоплень в режимі ядра і виконувати небезпечний код, який в іншому випадку був би заблокований обробником, але не заблокований виявленням шкідливих програм на основі сигнатур, за допомогою певних змін пам'яті користувацького простору під час обробки перехоплення страту, вона ж атака з перемиканням аргументу або атака ХОБЬО. ПРИМІТКА: ця проблема заперечується деякими третіми сторонами, оскільки вона є недоліком в механізмі захисту для ситуацій, коли створена програма вже почала виконуватися.

• CVE-2010-5183 – ** ОСПОРЮВАНЕ ** Стан гонки в Kaspersky Internet Security Essentials 6.1.0.145 в Windows XP дозволяє локальним користувачам обходити обробники перехоплень в режимі ядра і виконувати небезпечний код, який в іншому випадку був би заблокований обробником, але не заблокований виявленням шкідливих програм на основі сигнатур, за допомогою певних змін пам'яті користувацького простору під час перехоплення.виконання обробника, він же атака з перемиканням аргументів або атака ХОБЬО. ПРИМІТКА: ця проблема заперечується деякими третіми сторонами, оскільки вона є недоліком в механізмі захисту для ситуацій, коли створена програма вже почала виконуватися.

• CVE-2010-5182 – ** ОСПОРЮВАНЕ ** Стан гонки в VirusBuster Internet Security Suite 3.2 Windows XP дозволяє локальним користувачам обходити обробники перехоплень в режимі ядра і виконувати небезпечний код, який в іншому випадку був би заблокований обробником, але не заблокований виявленням шкідливих програм на основі сигнатур, за допомогою певних змін пам'яті користувацького простору під час перехоплення.виконання обробника, він же атака з перемиканням аргументів або атака ХОБЬО. ПРИМІТКА: ця проблема заперечується деякими третіми сторонами, оскільки вона є недоліком в механізмі захисту для ситуацій, коли створена програма вже почала виконуватися.

• CVE-2010-5181 – ** ОСПОРЮВАНЕ ** Стан гонки в VIPRE Antivirus Premium 4.0.3272 в Windows XP дозволяє локальним користувачам обходити обробники перехоплень в режимі ядра і виконувати небезпечний код, який в іншому випадку був би заблокований обробником, але не заблокований виявленням шкідливих програм на основі сигнатур, за допомогою певних змін пам'яті користувацького простору під час обробки перехоплення страту, вона ж атака з перемиканням аргументів або атака ХОБЬО. ПРИМІТКА: ця проблема заперечується деякими третіми сторонами, оскільки вона є недоліком в механізмі захисту для ситуацій, коли створена програма вже почала виконуватися.

• CVE-2010-5180 – ** ОСПОРЮВАНЕ ** Стан гонки в VBA32 Personal 3.12.12.4 в Windows XP дозволяє локальним користувачам обходити обробники перехоплень в режимі ядра і виконувати небезпечний код, який в іншому випадку був би заблокований обробником, але не заблокований виявленням шкідливих програм на основі сигнатур, за допомогою певних змін пам'яті користувацького простору під час виконання обробника перехоплень, він же атака з перемиканням аргументу або атака ХОБЬО. ПРИМІТКА: ця проблема заперечується деякими третіми сторонами, оскільки вона є недоліком в механізмі захисту для ситуацій, коли створена програма вже почала виконуватися.

• CVE-2010-5179 – ** ОСПОРЮВАНЕ ** Стан гонки в Trend Micro Internet Security Pro 2010 17.50.1647.0000 в Windows XP дозволяє локальним користувачам обходити обробники перехоплень в режимі ядра і виконувати небезпечний код, який в іншому випадку був би заблокований обробником, але не заблокований виявленням шкідливих програм на основі сигнатур, через певні зміни пам'яті в користувацькому просторі під час виконання обробника перехоплення, він же атака з перемиканням аргументів або атака ХОБЬО. ПРИМІТКА: ця проблема заперечується деякими третіми сторонами, оскільки вона є недоліком в механізмі захисту для ситуацій, коли створена програма вже почала виконуватися.

Умови гонки від часу перевірки до часу використання (TOCTTOU) подвиги

  • Брудна КОРОВА – Цей експлойт використовує умова гонки в механізмі копіювання при записі, використовуваному в ядрі Linux, для отримання кореневого доступу до системи.

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

  • Час перевірки використання (TOCTTOU) експлуатація – Цей тип експлойта використовує переваги вікна можливостей між виконанням перевірки і використанням ресурсу, дозволяючи зловмиснику змінювати ресурс у проміжний період.

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

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

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

Практикуючись в тестуванні на Умови гонки від часу перевірки до часу використання (TOCTTOU)

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

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

Беріть участь у заходах Capture the Flag (CTF): Заходи CTF - це змагання, в яких учасникам доручено виявляти і використовувати уразливості безпеки в наборі цільових програм або систем. Багато проблем CTF пов'язані з умовами перегонів і можуть надати можливість попрактикуватися у тестуванні на наявність цих типів вразливостей.

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

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

Для вивчення умов гонки від часу перевірки до часу використання (TOCTTOU)

Загальна перерахування слабких місць (CWE) – CWE-367: умова перегонів перевірки часу використання (TOCTOU): це офіційна сторінка CWE-367, на якій міститься докладний опис уразливості, її наслідків та способів їх усунення.

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

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

Інструменти тестування: Існує кілька інструментів тестування, які можна використовувати для визначення умов гонки від часу перевірки до часу використання (TOCTTOU), включаючи Burp Suite, Zed Attack Proxy (ZAP) і OWASP Dependency Check. Використовуючи ці інструменти для сканування додатків і систем на наявність вразливостей, ви можете практикуватися у виявленні і пом'якшення умов гонки від часу перевірки до часу використання (TOCTTOU).

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

Книги з оглядом умов гонки від часу перевірки до часу використання (TOCTTOU)

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

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

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

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

"Злом сірої капелюхи: керівництво етичного хакера" автор: Аллен Харпер, Даніель Регаладо, Райан Лінн, Стівен Сімс, Бранко Спасоевич і Лінда Мартінес: У цій книзі представлений всеосяжний огляд етичного злому, включаючи висвітлення умов гонки від часу перевірки до часу використання (TOCTTOU).

"Кулінарна книга з тестування веб-безпеки: виявлення, діагностика і усунення вразливостей в своїх веб-додатках" Пако Хоуп і Бен Вальтер: Ця книга містить практичні рекомендації з тестування веб-додатків на наявність вразливостей в системі безпеки, включаючи умови перегонів перевірки і часу використання (TOCTTOU).

"Інженерія безпеки: керівництво по створенню надійних розподілених систем" Росс Дж. Андерсон: У цій книзі розглядається широке коло питань, пов'язаних з розробкою систем безпеки, включаючи умови гонки від часу перевірки до часу використання (TOCTTOU).

"Моделювання загроз: проектування в інтересах безпеки" автор: Адам Шостак: Ця книга містить керівництво з моделювання загроз, процесу виявлення і усунення погроз безпеки, включаючи умови перегонів перевірки і часу використання (TOCTTOU).

"Безпечне кодування на C та C ++" Роберт С. Сикорд: У цій книзі розглядаються кращі практики безпечного кодування на C і C ++, включаючи умови гонки від часу перевірки до часу використання (TOCTTOU).

"Основи злому і тестування на проникнення: етичний злом і тестування на проникнення стали простіше" Патрік Энгебретсон: Ця книга являє собою введення в етичний злом і тестування на проникнення, включаючи висвітлення умов гонки від часу перевірки до часу використання (TOCTTOU).

Список корисних навантажень від часу перевірки до часу використання (TOCTTOU) Умови гонки

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

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

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

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

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

Як бути захищеним від часу перевірки до часу використання (TOCTTOU) в умовах гонки

  1. Уникайте використання функцій, які можуть привести до вразливостей TOCTTOU, таких як symlink(), rename() і stat().

  2. Використовуйте механізми блокування файлів, такі як flock() або fcntl(), щоб запобігти одночасний доступ до критично важливих файлів.

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

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

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

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

  7. Використовуйте системи виявлення та запобігання вторгнень (IDPS), щоб відстежувати вашу систему на предмет підозрілої активності і запобігати успішні атаки.

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

Пом'якшення умов гонки від часу перевірки до часу використання (TOCTTOU)

  1. Використовуйте атомарні файлові операції: Атомарні файлові операції, призначені для забезпечення виконання файлової операції за один неподільний крок. Використовуючи атомарні операції, такі як linkat() або renameat2() замість symlink(), ви можете уникнути створення умов гонки між перевіркою і використанням файлу.

  2. Використовуйте Контроль доступу: Обмежте доступ до конфіденційних ресурсів тільки тим користувачам, яким потрібен доступ. Використовуйте права доступу до файлів і списки управління доступом (ACL), щоб при необхідності обмежити доступ до файлів і каталогів.

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

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

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

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

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

Висновок

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

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

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

Інші Послуги

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

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