Wednesday, November 18, 2015

Windows Sandbox Attack Surface Analysis

Posted by James Forshaw, Quartermaster of Tools

Analysing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack surface of user-mode sandboxed applications is a good way to hunt for elevation of privilege vulnerabilities. Much of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 task of enumerating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack surface could be done manually, but that’s a very tedious and error prone procedure. Obviously automating that process as much as possible is important both for initial analysis as well as detecting potential regressions.

TL;DR; I’ve released my tools I use internally to test out sandboxed code and determine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 likely attack surface exposed to an attacker if a sandboxed process is compromised. You can get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code from https://github.com/google/sandbox-attacksurface-analysis-tools. This blog post will describe a few common use cases so that you can use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to do your own sandbox analysis.

Background

Writing a user-mode sandbox is a difficult challenge for various different reasons (see my  Shmoocon/Nullcon presentation I did this year for some examples, in fact I was planning on releasing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tools for Shmoocon but it didn’t happen in time). However in most user-mode implementations, such as Chrome, IE or Edge cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sandboxing is done through assigning a restrictive process token so that only a very small number of securable resources can be accessed, ideally no resources at all should be accessible.

An obvious example of a securable resource is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file system. We’d like to know, for example, which locations a sandboxed process can access for read and/or write. A well known tool which comes to mind is AccessChk from Sysinternals ( Microsoft cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days). AccessChk allows us to enumerate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file system (as well as many of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 secured resources such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registry or object manager) but only tells you whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r you could write to a resource based on a user or group account. For example, running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command ‘accesschk.exe -w users c:\windows’ will show you what files or directories a process that runs with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BUILTIN\Users group can access. However, that doesn’t really help us when it comes to a sandboxed application, which might have a restrictive token that results in a more complex access checking model.

For example, Chrome and Adobe Reader use Restricted Tokens to limit what resources cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sandboxed process can access; this changes how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 normal kernel access check works. And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are Mandatory Integrity Labels, which also change what resources you can write to. You can summarise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 access check for a restricted token in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 below diagram.
Untitled drawing.png

And let’s not forget cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 introduction of LowBox tokens in Windows 8, which have a similar, but different access checks. And what if you mix both LowBox and restricted tokens? In general this is too complex to replicate accurately; fortunately, Windows provides a means of calculating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 granted access to a resource which allows us to to automate a lot of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analysis of various different resources. For that reason I developed my own set of tools to do this which I’ve released as open-source under an Apache v2 license at https://github.com/google/sandbox-attacksurface-analysis-tools. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest of this blog post I’ll describe some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tools, giving simple examples of use and why you might want to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

The Check* Tools

The core of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 suite is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Check* tools. Their purpose is to determine whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process token for a particular sandboxed application can be used to get access to a specific secured resource. For example CheckFileAccess will scan a given location on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file system comparing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Security Descriptor of a file or directory against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process token and determine whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process would have read and/or write access.

The core to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 operation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tools is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AccessCheck function exposed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Win32 APIs. This is actually a kernel system call, NtAccessCheck under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hood, and uses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same algorithms as a normal access check performed during cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 opening of an existing resource. Therefore we can be reasonably confident that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 result of operation would match what we’d be able to get access to. The AccessCheck function takes an impersonation token; in this case we’ll use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 primary token of a specified process (ideally sandboxed), convert it to an impersonation token, and pass cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Security Descriptor for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 resource we are interested in. We can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n request cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel determines cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 maximum allowed permissions for that token.

The following table is a list of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 available tools for analysing different types of resources. They all take a command --pid parameter, which specifies cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PID of a process to base cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security check on.

Name
Description
CheckDeviceAccess
Checks allowed access to Device Objects such as \Device\HarddiskVolume1
CheckFileAccess
Checks allowed access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file system.
CheckNetworkAccess
Checks allowed access to connecting or binding network sockets. This is for testing AppContainer lockdown.
CheckObjectManagerAccess
Checks allowed access to resources and directories in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 object manager namespace.
CheckProcessAccess
Checks allowed access to processes.
CheckRegistryAccess
Checks allowed access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registry.

For example if you want to check what files and directories a sandboxed process can write to on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 C: drive you can run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
CheckFileAcccess -w -r -p C:\

The -w parameter specifies only display files or directories with at least one Write permission available (for example Write File, or Add File for directories, or a standard right such as Write DACL). The -r parameter performs cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 check recursively and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 -p specifies cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PID of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sandboxed process to test. It’s recommended to run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool as an administrator as that ensures cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool can recurse into as many directories as possible. If we do this for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Chrome GPU process we find some interesting entries such as being able to write to c:\ProgramData\Microsoft\Windows\DRM.

The CheckDeviceAccess tool deviates from most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs as it has to actually attempt to open a device node while impersonating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sandboxed token. This is because while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 device object itself might have a Security Descriptor, Windows devices by default are considered to be file systems. This means that if you have a device object with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name \Device\Harddisk1 you can also try and access \Device\Harddisk1\SomeName and depending on how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 device was registered it might be up to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 driver itself to enforce security when accessing SomeName. The only reliable way of determining whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case for a particular device object is to just open cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 path and see if it works.

DeviceNameSpace.png

A simple example is just to recursively check all Device objects in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 object manager namespace using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command:
CheckDeviceAccess -r -l -p \

The -l parameter will try and map cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 device name to a symbolic link; this is quite useful for automatically named devices (which look like \Device\00000abc) as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 symbolic link is generally more descriptive. For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Chrome renderer sandbox this simple command shows we can access devices such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NTFS file system driver and AFD (which is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 socket driver) but admittedly only if you access it through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 namespace. Code running within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Chrome renderer sandbox cannot open any Device object itself.

Of course not all Devices can be tested in this manner; by default, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool tries to open DeviceName\Dummy but some drivers require a specific path name ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y won’t open (you can change Dummy using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 --suffix parameter). Still it gives you a quick list of drivers to go hunting for sandbox escape vulnerabilities.

And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Best of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Rest

Not all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tools in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 suite are for checking direct access checking, I’ll summarise a few of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r tools which you might find useful.

DumpProcessMitigations

This tool dumps a list of process mitigations which have been applied through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SetProcessMitigationPolicy API. This only works on Windows 8 and above. Examples of mitigations that could be enabled include Win32k Syscall Disable, Forced ASLR and Custom Font Disable. For example, to dump all processes with Win32k System Call Disable Policy run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command as an Administrator:
DumpProcessMitigations -t DisallowWin32kSystemCalls

EditSection

This is a GUI tool which allows you to view cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 contents of a shared memory section, modify it in a hex editor, and execute a couple of ways of corrupting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 section to test for trivial security issues. A section can be opened through its object name or via extracting handles from a running process. I developed this tool for investigating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Chrome section issue I documented in my blog here.

sections.PNG

GetHandles

This is just a generic command line tool to dump open handles in all processes in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system. While that in itself wouldn’t differentiate it from ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r similar tools already available (such as SysInternals Handle utility) it does have one interesting feature. You can group handles by certain properties such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 address of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel mode object. This allows you to find instances where an object is shared between two processes at different privilege levels (say between a browser process and its sandboxes tabs) which might allow for privilege escalation attacks to occur. For example running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command as an Administrator will dump cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 section objects shared between different Chrome processes.

GetHandles.exe -n chrome -t Section -g object -s partial

This will produce output similar to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following, which shows two section objects shared between different processes:
Object: FFFFC00128086060
11020/0x2B0C/chrome 4/0x4:              Section 00000006 (unknown)
10264/0x2818/chrome 15636/0x3D14:       Section 000F0007 (unknown)

Object: FFFFC00135F82A00
13644/0x354C/chrome 4/0x4:              Section 00000006 (unknown)
10264/0x2818/chrome 11956/0x2EB4:       Section 000F0007 (unknown)

There’s also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CommonObjects tool, which does a similar job but doesn’t have as many ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r features.

TokenViewer

This GUI tool allows you to inspect and manipulate access tokens as well as do some basic tests of what you can do with that token (such as opening files). You can eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 token for a specific process (or even open token handles inside those processes) or you can create ones using common APIs.

anonymous_token.PNG

Wrapup

Hopefully cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se tools will be useful for your own investigations into Windows sandboxes and finding exploitable attack surface. It’s open-source under a permissive license so I hope it benefit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security community and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wider users at large. Still if you have any ideas or changes please consider contributing back to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original project.

1 comment: