Отказ в обслуживании
Отказ в обслуживании возникает, когда доступ к определенной службе должен был быть предоставлен, но на самом деле был отклонен ненадлежащим образом. Например, любая операция, которую может выполнить непривилегированные приложения, которая приводит к тому, что система становится непригодной для использования, фактически является отказом в обслуживании. Это будет включать в себя любую операцию или последовательность операций, которые:
Аварийно завершает работу системы.
Вызывает преждевременное завершение потоков или процессов.
Создает условие взаимоблокировки. Взаимоблокировка возникает, когда два или более потоков перестают ждать в постоянном состоянии тупика. Каждый поток ожидает ресурса, удерживаемого одним из других потоков.
Создает условие динамической блокировки. Динамическая блокировка может возникать, когда два или более процессоров не могут выполнить работу, так как они ожидают получения ресурса (обычно это блокировка в очереди), а поток, которому принадлежит этот ресурс, находится в аналогичном состоянии.
Такие проблемы часто возникают в драйверах, так как они содержат скрытые ошибки, которые могут использоваться обычными приложениями. Эксплойты этого типа могут быть простыми и трудно защититься от них. Распространенные причины таких проблем в драйверах:
Неправильная проверка пользовательского буфера.
Переполнение или переполнение буфера.
Для файловых систем и драйверов фильтров файловой системы существует множество таких проблем. Например, значение MAX_PATH определяется как 260 по историческим причинам в подсистеме Win32. Многие компоненты драйвера предполагают, что это указывает на размер самого большого пути. К сожалению, это не так, так как максимальный путь в файловой системе NTFS составляет 32 767 символов Юникода (65 534 байта). Если драйвер фильтра закодирует предположение о длине MAX_PATH в базу кода, простая атака типа "отказ в обслуживании" возникнет из-за того, что приложение создает путь, превышающий этот, в пути, управляемом драйвером фильтра.
Другая распространенная проблема заключается в том, что приложения часто внедряют указатели пользовательского режима в частные запросы FSCTL. Файловая система подвержена трем широким категориям атак типа "отказ в обслуживании":
Использование всего доступного места на диске.
Использование всей доступной пропускной способности диска.
Блокировка доступа к файлам, к которым пользователи должны иметь доступ.
Как правило, разработчик файловой системы мало что может сделать для предотвращения таких атак. Однако разработчики могут предпринять шаги, позволяющие администраторам ограничить эти типы атак типа "отказ в обслуживании".
Самая простая атака типа "отказ в обслуживании", связанная с файловой системой, заключается в том, чтобы использовать все свободное место на диске. Для этого просто написать приложение, и последствия далеко идущие. Многие приложения и службы в системе не будут работать, если они больше не могут выполнять запись на диск. Технология устранения рисков — это квоты дисков, которые могут ограничить объем свободного места на диске для файлов, принадлежащих пользователю, при правильном использовании администраторами. Поэтому при разработке файловой системы имеет смысл включить поддержку дисковых квот.
Вредоносное или плохо написанное приложение также может попытаться использовать всю пропускную способность диска. Последствия для обычных пользователей, подвергающихся такому типу атак, являются вялыми или неотвеченными системами. В настоящее время операционная система не имеет механизма регулирования пропускной способности, потребляемой приложениями. Файловая система также использует память ядра для каждого открытого объекта файла и дескриптора файла. Вредоносное приложение может постоянно открывать большое количество файлов и сохранять их открытыми до исчерпания памяти. Основным методом устранения этих проблем является аудит и ведение журнала, чтобы администратор может отслеживать компьютер для приложений, которые выполняют большой объем операций ввода-вывода или используют большие объемы других ресурсов. Опять же, было бы разумно, чтобы драйверы фильтров файловой системы и файловой системы включали поддержку аудита, чтобы лучше свести к минимуму этот тип отказа в обслуживании.
Вредоносное приложение может попытаться запретить другим пользователям доступ к файлам, необходимым для нормального использования. Важной стратегией, позволяющей свести к минимуму эти проблемы, является обеспечение правильной реализации сведений о безопасности, связанных с файловыми объектами, при разработке файловой системы.
Наконец, все драйверы должны быть обеспокоены потреблением всей доступной памяти или других ресурсов в ответ на запросы от вредоносного или аберрантного приложения.