Leaked Handle — эта атака несколько отличается от Handle Duplicating, хотя во многом похожа. Она основана на том, что привилегированный процесс запускает с открытыми и наследуемыми дескрипторами другой процесс, непривилегированный, предоставляя ему доступ к своим дескрипторам.
Еще по теме: Как убить процесс системы обнаружения атак
Взлом дескрипторов в Windows с помощью Leaked Handle
Итак, пусть процесс запущен от лица NT AUTHORITY\SYSTEM. У этого процесса есть свои дескрипторы каких‑то объектов. Затем этот системный процесс дергает CreateProcess(), указывая bInheritHandles равным TRUE.
Это приводит к тому, что процесс, который запускается через CreateProcess(), во‑первых, становится дочерним по отношению к системному (родительскому) процессу, во‑вторых, наследует все хендлы родительского процесса. Например, если родительский процесс получил дескриптор на какой‑нибудь другой процесс, а затем создал дочерний с наследованием дескрипторов, то дочерний процесс получит доступ к этому дескриптору.
В результате у дочернего процесса с низкими привилегиями появляется возможность использовать хендлы родительского процесса.
Как ни странно, но здесь используются плюс‑минус те же вызовы API. С помощью NtQuerySystemInformation() перечисляем хендлы, обнаруживаем те, которые принадлежат нашему родительскому процессу, после чего копируем их и эксплуатируем!
На эту атаку чуть больше PoC’ов, но вообще алгоритм такой же, как и у Handle Duplicating, поэтому можно считать Leaked Handle более частным случаем стандартного Handle Duplicating. Вот несколько вариантов PoC:
- ReHacks;
- ExploitLeakedHandle — моя любимая реализация;
- LeakedHandlesFinder.
Второй и третий наиболее интересны из‑за возможности автоматической эксплуатации множества различных хендлов.
В следующей статье я расскажу о технике Handle Hijacking.
ПОЛЕЗНЫЕ ССЫЛКИ: