05.08.2016 Views

WINDOWS 10 VIRTUALIZATION-BASED SECURITY

us-16-Wojtczuk-Analysis-Of-The-Attack-Surface-Of-Windows-10-Virtualization-Based-Security-wp

us-16-Wojtczuk-Analysis-Of-The-Attack-Surface-Of-Windows-10-Virtualization-Based-Security-wp

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

The situation is still improved in comparison to the case without CG: attacker needs to launch<br />

the lateral movement from the same machine that the encrypted blob was collected on.<br />

Also, after reboot, the encrypted blob is no longer valid – if we pass the saved encrypted blob<br />

to NtlmIumLm20GetNtlm3ChallengeResponse then it returns STATUS_DECRYPTION_FAILED.<br />

4) There is still a problem with how the unencrypted credentials are initially delivered to VTL1<br />

(which happens during logon). Attacker can entice the user to perform logon again, while the<br />

machine is under attacker’s control, e.g. by locking the workstation (just run “rundll32.exe<br />

user32.dll,LockWorkStation”). If not using smart-card based authentication, then the<br />

plaintext credentials can be captured by keylogger and used anywhere, anytime. In case of<br />

smart-card based authentication, the NTOWF hashes sent by KDC can be captured and<br />

reused. This problem is solved below – but it requires much more configuration, and limiting<br />

flexibility.<br />

Scenario 2: Credential Guard with armor key protection and smartcard-based<br />

authentication<br />

As described in [sop], it is possible to configure an account so that it can authenticate only from a<br />

single machine. Another key (machine key, specific to the machine) is needed in order to decrypt the<br />

authentication material received from KDC. With CG enabled, the machine key is available only in<br />

VTL1 (protected against rogue root partition), so only CG running on a particular machine can decrypt<br />

the authentication material.<br />

In such case, the above problem no 4 goes away. Still, same as before, the scenarios 2 and 3 are<br />

possible: until reboot, attacker can interact with CG and have it perform all necessary authentications<br />

(supported by SSO) for remote resources; again, all attacker’s actions must originate from the<br />

initially-compromised machine. There is no reliable way to deliver “user has logged out, refuse SSO”<br />

message to VTL1 – it would have to be produced by the root partition. The threat model it that it has<br />

been compromised, so even if such a message was supported and recognized by VTL1, compromised<br />

lsass could just elect to not send it.<br />

One thing worth noting is that the only secret needed permanently by CG is the machine key, and it<br />

is why TPM is required in order to protect it reliably against rogue root partition. Without TPM, there<br />

is no way to store the machine key permanently in a manner preventing the root partition from<br />

reading it 3 .<br />

VBS-enforced code integrity<br />

One can configure Windows <strong>10</strong> to enforce code integrity of usermode binaries, usermode scripts 4<br />

and kernelmode code. In this paper, we will talk about details of implementation of VBS-enforced<br />

kernelmode code integrity.<br />

The goal is ambitious – not allow execution of any unsigned code in kernel context, even if the kernel<br />

has been compromised 5 . The basic idea is that the trusted code (running in VTL1) agrees to grant<br />

3 See also the below discussion on protecting keys used during S4.<br />

4 Judging by [pow], powershell scripts integrity is enforced in usermode and can be easily bypassed by<br />

attaching a debugger to the powershell process.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!