EreTIk's Box » Cтатьи, исходники » Новый бит маски доступа к объекту нити (thread) в Windows 8.1: THREAD_RESUME


До Windows 8.1 операции приостановки и возобновления нити контролировались одной маской доступа, что отражает статья Thread Security and Access Rights:


THREAD_SUSPEND_RESUME (0x0002) Required to suspend or resume a thread (see SuspendThread and ResumeThread).

И это подтверждалось телом функции NtResumeThread (6.2.9200.16384):


mov          edx,2
mov          rcx,r10
call         ObReferenceObjectByHandleWithTag
                

Но в ядре Windows 8.1 маска доступа сменилась (6.3.9600.16384):


mov          edx,000001000
mov          rcx,r10
call         ObReferenceObjectByHandleWithTag
test         eax,eax
js          .00000001`403B2F3C
...
; .00000001`403B2F3C:
add          rsp,040
pop          rbx
retn
                

Что характерно, новое ядро полностью потеряло совместимость со старой маской доступа. Новую константу 0x1000 можно найти в wdm.h от WDK 8.1:


#define THREAD_RESUME                    (0x1000)  
                

MSDN про новый флаг ничего не рассказывает, но есть косвенное упоминание у Alex Ionescu в статье The Evolution of Protected Processes Part 2: Exploit/Jailbreak Mitigations, Unkillable Processes and Protected Services:


and THREAD_RESUME are the rights normally given, the latter being another new Windows 8.1 access bit

Остается только порадоваться, что теперь операции приостановки и возобновления нити являются разными с точки зрения безопасности.



ΞρεΤΙκ