События

В Windows обнаружена ошибка, вызывающая взаимную блокировку

Пользователь GitHub под псевдонимом leo-yuriev сообщил об уязвимости в версиях Windows с 8-й по 10-ю, вызывающей взаимную блокировку (deadlock) в файловых операциях. По словам leo-yuriev, уязвимы, скорее всего, все версии Windows, однако на версиях ниже 8-й попытки воспроизвести ее не предпринимались.

  • Процедуры из трех операций LockFile + WriteFile + UnlockFile;

  • Два потока, конкурентно выполняющие процедуру;

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

В качестве побочного эффекта замечено, что в результате взаимной блокировки утилита Process Hacker для мониторинга системных процессов и служб не может получить имя файла по проблемному хендлу. Хендл становится "unnamed" и исчезает из отображаемого набора (при наличии соответствующего флажка по умолчанию).

Примерные трейсы из ядра из 8.1-ent

Стек первого потока:

nt!KiSwapContext+0x7a
nt!KiCommitThreadWait+0x1d2
nt!KeWaitForSingleObject+0x19f
nt!IopSynchronousServiceTail+0x2a9
nt!NtLockFile+0x514
nt!KiSystemServiceCopyEnd+0x13
Стек второго потока:
nt!KiSwapContext+0x7a
nt!KiCommitThreadWait+0x1d2
nt!KeWaitForSingleObject+0x19f
nt!IopAcquireFileObjectLock+0x84
nt! ?? ::NNGAKEGL::`string'+0x491d5
nt!KiSystemServiceCopyEnd+0x13

С работающим тест-кейсом можно ознакомиться здесь .

После воспроизведения проблемы хендл становится "отравленным", т.е. будут блокироваться все функции, которые попытаются работать с файлом (объектом FileObject внутри ядра). Теоретически, ошибка позволяет спровоцировать отказ в обслуживании многопоточность приложения, в котором LockFile используется для разделения доступа с последующим WriteFile. Удаленная атака тоже возможна, если приложение обрабатывает какие-либо приходящие снаружи запросы.

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

Источник

Автор: Сергей Куприянов
1.02.2018 (18:57)
Пройди тест и узнай об этом!
Информер новостей
Расширение для Google Chrome
Пишите нам

Редакция: info@alterprogs.ru

Реклама: adv@alterprogs.ru

Все права защищены © 2010-2018

"Alterprogs.ru" - технологии будущего

Контакты  | Карта сайта

Использование любых материалов, размещенных на сайте, разрешается при условии ссылки на alterprogs.ru. Для интернет-изданий - обязательна прямая открытая для поисковых систем гиперссылка. Ссылка должна быть размещена в независимости от полного либо частичного использования материалов. Материалы в рубрике "Новости партнеров" публикуются на правах рекламы.