Отказ в обслуживании

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

  • Приводит к сбою системы.

  • Вызывает преждевременное завершение потоков или процессов.

  • Создает условие взаимоблокировки. Взаимоблокировка возникает, когда два или более потоков останавливаются в состоянии постоянного тупика. Каждый поток ожидает ресурса, удерживаемого одним из других потоков.

  • Создает условие динамической блокировки. Живая блокировка может возникать, если два или более процессоров не могут прогрессировать, так как они ожидают получения ресурса (как правило, блокировка очереди), а поток, владеющий этим ресурсом, находится в аналогичном состоянии без прогресса.

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

  • Неправильная проверка буфера пользователя.

  • Переполнение буфера или его недостаток.

Для файловых систем и драйверов фильтров файловой системы существуют многочисленные случаи таких проблем. Например, значение MAX_PATH определяется как 260 по историческим причинам подсистемы Win32. Многие компоненты драйвера предполагают, что это указывает размер наибольшего пути. К сожалению, это не так, как максимальный путь к файловой системе NTFS составляет 32 767 символов Юникода (65 534 байта). Если драйвер фильтра закодирует предположение о длине MAX_PATH в свой код, то простая атака типа "отказ в обслуживании" может возникнуть, если приложение создаст путь, превышающий эту длину, внутри пути, управляемых драйвером фильтра.

Еще одна распространенная проблема заключается в том, что приложения часто внедряют указатели пользовательского режима в частные запросы FSCTL. Файловая система подвержена трем широким категориям атак типа "отказ в обслуживании":

  • Использование всего доступного места на диске.

  • Использование всей доступной пропускной способности диска.

  • Блокировка доступа к файлам, к которым должны иметь доступ пользователи.

Как правило, разработчик файловой системы может сделать мало, чтобы предотвратить эти типы атак. Однако существуют шаги, которые можно предпринять разработчиками, чтобы разрешить администраторам ограничить эти типы атак типа "отказ в обслуживании".

Простейшая атака типа "отказ в обслуживании", связанная с файловой системой, заключается в том, чтобы использовать все свободное место на диске. Написать приложение для этого просто, и последствия будут далеко идущими. Многие приложения и службы в системе не будут работать, если они больше не могут записывать на диск. Технология устранения неполадок — это квоты дисков, которые могут ограничить объем свободного места на диске для файлов, принадлежащих пользователю при правильном использовании администраторами. Поэтому при разработке файловой системы имеет смысл включить поддержку квот дисков.

Вредоносное или плохо написанное приложение также может попытаться использовать всю пропускную способность диска. Последствиями для обычных пользователей, подвергшихся этому типу атаки, может стать медленная или неотвечающая система. В настоящее время операционная система не имеет механизма регулирования пропускной способности, потребляемой приложениями. Файловая система также использует память ядра для каждого открытого объекта файла и дескриптора файлов. Вредоносное приложение может пытаться постоянно открывать большое количество файлов и сохранять их открытыми до тех пор, пока память не будет исчерпана. Основным способом устранения этих проблем является аудит и ведение журнала, чтобы администратор может отслеживать компьютер для приложений, выполняющих большое количество операций ввода-вывода или использовать большие объемы других ресурсов. Опять же, было бы разумно, чтобы драйверы файловой системы и фильтры драйверов файловой системы включали поддержку аудита, чтобы лучше минимизировать этот вид отказа в обслуживании.

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

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