windows shellcode mastery - black hat

186
caillat[at]esiea[dot]fr bcaillat[at]security-labs[dot]org

Upload: others

Post on 12-Feb-2022

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Windows Shellcode Mastery - Black Hat

Windows Shellcode Mastery

BlackHat Europe 2009

Benjamin CAILLAT

ESIEA - SI&S lab

caillat[at]esiea[dot]fr

bcaillat[at]security-labs[dot]org

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 1 / 172

Page 2: Windows Shellcode Mastery - Black Hat

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 2 / 172

Page 3: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 3 / 172

Page 4: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A quick reminder. . .

Plan

The use of shellcodes in virology

A quick reminder. . .

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 4 / 172

Page 5: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A quick reminder. . .

Reminder: PE format and creation of a process

Under Windows, executables are in PE format (Portable Executable)

Executables compounded of a header and several sections (code, data,resources. . . )

During creation of a process, Windows loader:

maps sections at the right address (may contain hardcoded addresses)initialises memoryresolves imported functions

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 5 / 172

Page 6: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A quick reminder. . .

Reminder: imported function resolution in Windows

Two mechanisms to resolve imported functions

When process is created

PE �le contains an �import table�: contains names of every importedfunction

Windows loader reads table and �lls another table: the IAT (ImportAddress Table)

Calls to imported functions are done through the IAT

During execution: �dynamic address resolution�

Executable uses two functions to resolve an imported function:

�LoadLibrary�: load a library

�GetProcAddress�: �nd an exported function by its name

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 6 / 172

Page 7: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A quick reminder. . .

Reminder: imported function resolution in Windows

Two mechanisms to resolve imported functions

When process is created

PE �le contains an �import table�: contains names of every importedfunction

Windows loader reads table and �lls another table: the IAT (ImportAddress Table)

Calls to imported functions are done through the IAT

During execution: �dynamic address resolution�

Executable uses two functions to resolve an imported function:

�LoadLibrary�: load a library

�GetProcAddress�: �nd an exported function by its name

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 6 / 172

Page 8: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A quick reminder. . .

Reminder: imported function resolution in Windows

Two mechanisms to resolve imported functions

When process is created

PE �le contains an �import table�: contains names of every importedfunction

Windows loader reads table and �lls another table: the IAT (ImportAddress Table)

Calls to imported functions are done through the IAT

During execution: �dynamic address resolution�

Executable uses two functions to resolve an imported function:

�LoadLibrary�: load a library

�GetProcAddress�: �nd an exported function by its name

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 6 / 172

Page 9: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Plan

The use of shellcodes in virology

A few techniques used by malicious code . . .

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 7 / 172

Page 10: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Context de�nition

Generally, malicious codes try to do several things:

stay undetected by antivirusespropagate to other hosts or executablesexecute their malicious actions (e.g. capture some private user data,open a backdoor on the system . . . )

Use special techniques, not always easy to implement

Let us illustrate this with a few speci�c techniques

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 8 / 172

Page 11: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Encryption of malicious code - Principle

Description

Malicious code is made up of two parts:

the real malicious payload which is encrypted

a decryption part

Objective

Protect malicious payload against an analysis

Could be an automatic analysis (antivirus) or a manual analysis(disassembling code)

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 9 / 172

Page 12: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Encryption of malicious code - Principle

Description

Malicious code is made up of two parts:

the real malicious payload which is encrypted

a decryption part

Objective

Protect malicious payload against an analysis

Could be an automatic analysis (antivirus) or a manual analysis(disassembling code)

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 9 / 172

Page 13: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Encryption - protection against automatic analysis

Malicious code is scanned by a tool that works with signatureidenti�cation

Each copy of malicious code must be di�erent:decryption part is transformed through metamorphismencryption key is changed in each copy (polymorphism)

Decryption key 2

malicious

Decryption key 1

payload

Encrypted

Decryption part

malicious

payload

Encrypted

Decryption part

Figure: Two copies of the same virus that implements polymorphism

Notes:Decryption key may be stored in decryption partSimple encryption algorithm like a XOR with 32-bits key may be used

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 10 / 172

Page 14: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Encryption - protection against manual analysis

Aim: if malicious payload is intercepted during introduction ontargeted system, it cannot be disassembled and analysed manually

Little di�erences with previous encryption:

strong encryption algorithm like AES must be useddecryption key must not be stored in encrypted malicious code

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 11 / 172

Page 15: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of encrypted malware

Hard drive

Memory

Figure: Principle of execution of an encrypted malware

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 12 / 172

Page 16: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of encrypted malware

Hard drive

Memory

Decoder

1

"Decoder" is introduced

on targeted system

Figure: Principle of execution of an encrypted malware

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 13 / 172

Page 17: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of encrypted malware

Hard drive

Memory

DecoderEncrypted

malicious code

introduced on targeted system

Encrypted malicious code is2

Figure: Principle of execution of an encrypted malware

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 14 / 172

Page 18: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of encrypted malware

Hard drive

Memory

DecoderEncrypted

malicious code

Decoder

3

"Decoder" is executed

Figure: Principle of execution of an encrypted malware

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 15 / 172

Page 19: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of encrypted malware

Hard drive

Memory

DecoderEncrypted

malicious code

Decodermalicious code

Encrypted

4

malicious code in memory

"Decoder" loads encrypted

Figure: Principle of execution of an encrypted malware

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 16 / 172

Page 20: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of encrypted malware

Hard drive

Memory

DecoderEncrypted

malicious code

Decodermalicious code

EncryptedMalicious code

5

in memory and executes it

"Decoder" decrypts malicious code

Figure: Principle of execution of an encrypted malware

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 17 / 172

Page 21: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Encryption - protection against manual analysis

Of course, several ways to get malicious payload on infected computer(dump the memory, extract encryption key and decrypt maliciouspayload)

But malicious payload is protected during introduction onto targetedcomputer:

two parts are introduced in di�erent ways at di�erent timesif one introduction fails, we will intercept:

decryption part: totally generic

malicious payload: encrypted

⇒cannot get any information on the attack

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 18 / 172

Page 22: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Encryption of malicious code - Implementation

Encryption of each part of malicious payload in executable not a goodsolution:

complicated: all binary data characteristics of the malicious payloadmust be encrypted (functions, initialised data and strings)not e�cient: PE metadatas cannot be encrypted

Better solution: encrypt the whole executable ∼ a packerBut developing such a tool required some work

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 19 / 172

Page 23: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Execute only in memory - Principle

Description

Malicious code is able to execute without being copied on hard drive

Objective

Cannot be detected by local antivirus

Leaves few traces on targeted system⇒ complicates an eventual forensic analysis

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 20 / 172

Page 24: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Execute only in memory - Principle

Description

Malicious code is able to execute without being copied on hard drive

Objective

Cannot be detected by local antivirus

Leaves few traces on targeted system⇒ complicates an eventual forensic analysis

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 20 / 172

Page 25: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of malware only in memory

Primergy

Server

Memory

Hard drive

Firewall

Attacker

Figure: Principle of execution of malware only in memory

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 21 / 172

Page 26: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of malware only in memory

Primergy

Server

Memory

Hard drive

Firewall

Attacker

Loader"Loader" is running1

on targeted server

Figure: Principle of execution of malware only in memory

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 22 / 172

Page 27: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of malware only in memory

Primergy

Server

Memory

Hard drive

Firewall

Attacker

Loader

Malicious

code

payload from server

2

"Loader" gets malicious

Figure: Principle of execution of malware only in memory

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 23 / 172

Page 28: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Principle of execution of malware only in memory

Primergy

Server

Memory

Hard drive

Firewall

Attacker

Loader

Malicious

code

3

"Loader" transfers execution

on malicious payload

Figure: Principle of execution of malware only in memory

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 24 / 172

Page 29: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Execute only in memory - Implementation

Copying executable in memory and jumping on entry point does notwork:

sections must be mapped at the right addressimported functions must be resolved

A few tricks can be used:

use �pragma� directives to group all functions/data in one sectionplay with �preferred load address� so that section is mapped in amemory space �normally� free in processuse dynamic address resolution

⇒ Possible. . . but rather tedious

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 25 / 172

Page 30: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Infect an executable - Principle

Description

Malicious payload is added into another executable

Execution �ow of infected executable is modi�ed to execute maliciouspayload

Objective

Create a Trojan horse; behaviour of the program must not be disrupted

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 26 / 172

Page 31: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Infect an executable - Principle

Description

Malicious payload is added into another executable

Execution �ow of infected executable is modi�ed to execute maliciouspayload

Objective

Create a Trojan horse; behaviour of the program must not be disrupted

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 26 / 172

Page 32: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Infect an executable - Implementation

Malicious payload added at the end of the executable, after last section

Several ways to redirect execution �ow:

patch the executable entry pointpatch some instructions that will probably be executedExample: call to the function �save� in a text editor

Each solution has pros and cons:

Patching instruction requires manual analysis to �nd a suitableinstruction to patchBut execution of malicious code requires action of the user⇒ neither executed, nor analysed by an antivirus, even with codeemulation

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 27 / 172

Page 33: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Infect an executable - Implementation

Malicious payload added at the end of the executable, after last section

Several ways to redirect execution �ow:

patch the executable entry pointpatch some instructions that will probably be executedExample: call to the function �save� in a text editor

Each solution has pros and cons:

Patching instruction requires manual analysis to �nd a suitableinstruction to patchBut execution of malicious code requires action of the user⇒ neither executed, nor analysed by an antivirus, even with codeemulation

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 27 / 172

Page 34: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Infect an executable - Implementation

Header

MyEditor.exe

Header

Section 1

Section 2

...

Section n

MyEditor.exe

Header

Section 1

Section 2

...

Section n

MyEditor.exe

Section 1

Section 2

...

Section n

Malicious code Malicious code

entry point patched

Original executable Infected executableInfected executable

instruction patched

Figure: Principle of infection of an executable

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 28 / 172

Page 35: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Infect an executable - Implementation

Not so easy to implement:

Several sections might have to be added at the end of the executable

Sections must be mapped at the right address

Code must use dynamic address resolution

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 29 / 172

Page 36: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Principle

Description

Malicious code injects some code into another process

Malicious code forces the execution of this injected code in thecontext of the other process

Objectives

Survive to termination of original process

Intercept private data of user using infected computer: injection/APIhooking/analysis of parameters

Bypass bad implemented personal �rewalls

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 30 / 172

Page 37: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Principle

Description

Malicious code injects some code into another process

Malicious code forces the execution of this injected code in thecontext of the other process

Objectives

Survive to termination of original process

Intercept private data of user using infected computer: injection/APIhooking/analysis of parameters

Bypass bad implemented personal �rewalls

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 30 / 172

Page 38: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Implementation

Code injection may be done in several ways:

dll injection

direct code injection

Each technique has pro and cons; we choose to use the second

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 31 / 172

Page 39: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Implementation

Injecter Target

Injection code

Figure: Principle of direct code injection

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 32 / 172

Page 40: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Implementation

Injecter Target

Injection code

Malicious

code

Figure: Principle of direct code injection

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 33 / 172

Page 41: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Implementation

Injecter Target

Injection code

Malicious

code

1

"Injecter" gets a handle

on targeted process

Figure: Principle of direct code injection

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 34 / 172

Page 42: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Implementation

Injecter Target

Injection code

Malicious

code

Free memory

memory in other process

2

"Injecter" allocates

Figure: Principle of direct code injection

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 35 / 172

Page 43: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Implementation

Injecter Target

Injection code

Malicious

code

Malicious

code

"Injecter" copies malicious3

code in allocated memory

Figure: Principle of direct code injection

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 36 / 172

Page 44: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Implementation

Injecter Target

Injection code

Malicious

code

Malicious

code

Thread

4

process that executes malicious code

"Injecter" creates a new thread in other

Figure: Principle of direct code injection

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 37 / 172

Page 45: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Inject code into another process - Implementation

Encounter same problems as execution only in memory:

sections must be mapped at the right addressimported functions must be resolved

⇒ Can use the same tricks

Note that if memory where code must be mapped is already allocated,injection will fail!

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 38 / 172

Page 46: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Summary

Implementation of those techniques in an executable is alwayspossible, but requires lots of work

Di�culties come from several properties of the executable:

code and data are spread in the executableprocess requires some of initialisation normally done by Windows loadercode contains hardcoded addresses ⇒ sections must be mapped at theright addresses

Those techniques could be implemented more easily if the code

was constituted of only one blockwas able to initialise the address spacecontained no hardcoded address

⇒ if the malicious code was a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 39 / 172

Page 47: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology A few techniques used by malicious code . . .

Summary

Implementation of those techniques in an executable is alwayspossible, but requires lots of work

Di�culties come from several properties of the executable:

code and data are spread in the executableprocess requires some of initialisation normally done by Windows loadercode contains hardcoded addresses ⇒ sections must be mapped at theright addresses

Those techniques could be implemented more easily if the code

was constituted of only one blockwas able to initialise the address spacecontained no hardcoded address

⇒ if the malicious code was a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 39 / 172

Page 48: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology Implementation of the techniques from a shellcode

Plan

The use of shellcodes in virology

Implementation of the techniques from a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 40 / 172

Page 49: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology Implementation of the techniques from a shellcode

Principle

Consider now that our malicious code is a shellcode:

constituted of only one block

can run at any address in any process

executes exactly the same operations as the normal executable ifexecution transferred to its �rst byte

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 41 / 172

Page 50: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology Implementation of the techniques from a shellcode

Implementation of the techniques

Encryption of malicious code

Decryption part becomes a simple loop that executes decryption onshellcode ∼ array of bytes

Execution only in memory and code injection

Easy to implement since by de�nition shellcode is able to execute in anyprocess at any address

Executable infection

Shellcode added in last section

Few modi�cations done on PE header

Entry point or instruction patched to jump on shellcode

Jump to original instruction added at end of shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 42 / 172

Page 51: Windows Shellcode Mastery - Black Hat

The use of shellcodes in virology Implementation of the techniques from a shellcode

Summary

Implementation of presented techniques is greatly simpli�ed if themalicious code is a shellcode rather than an executable

Next problem is how to get a shellcode?

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 43 / 172

Page 52: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 44 / 172

Page 53: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Objective of this part - 1

Present an easy way to write the malicious code as a shellcode

Writing shellcode directly in assembly quickly becomes tedious⇒ solution dismissed

Better solution would be:

write code in C languageuse compiler to generate executableextract some part from this executableform shellcode by assembling them

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 45 / 172

Page 54: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Objective of this part - 2

Binary code produced by normal compilation cannot be directly usedto create a shellcode:

contains lots of hardcoded addresses (reference to a string or a globalvariable)internal functions calls are relative but distances are hardcodedimported function calls rely on IAT

Many ways to solve those problems (patch assembly, work in thestack. . . )

Choose one technique: use a global data

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 46 / 172

Page 55: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Using a global data - 1

Use one structure that stores all global data and that is transmitted inevery internal function call

Structure, called later �GLOBAL_DATA�, will contain:

pointers on internal functionspointers on imported functionsglobal variablesstrings

C code is modi�ed so that every reference to a previously listedelement will be done through GLOBAL_DATA

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 47 / 172

Page 56: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Using a global data - 2

Original function DisplayFile

BOOL DisplayFile(IN CHAR * szFilePath){

...CreateFile(szFilePath, ...)pData = (UCHAR *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwFileSize+1)ReadFile(hFile, pData, ...)PrintMsg(LOG_LEVEL_TRACE, "File successfully read: %s", pData);...

}

Patched function DisplayFile (modifications are colorized in red)

BOOL DisplayFile(IN PGLOBAL_DATA pGlobalData, IN CHAR * szFilePath){

...pGlobalData->CreateFile(szFilePath, ...)pData = (UCHAR *) pGlobalData->HeapAlloc(pGlobalData->GetProcessHeap(), \\

HEAP_ZERO_MEMORY, dwFileSize+1)pGlobalData->ReadFile(hFile, pData, ...)pGlobalData->PrintMsg(pGlobalData, LOG_LEVEL_TRACE, pGlobalData->szString_00000001, \\

pData);...

}

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 48 / 172

Page 57: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Using a global data - 3

The GLOBAL_DATA de�nition looks like the following:

Overview of structure GLOBAL_DATA

typedef struct _GLOBAL_DATA{

/* Internal functions */PrintMsgTypeDef fp_PrintMsg;

/* Imported functions */CreateFileTypeDef fp_CreateFile;HeapAllocTypeDef fp_HeapAlloc;GetProcessHeapTypeDef fp_GetProcessHeap;ReadFileTypeDef fp_ReadFile;

/* Data strings */CHAR szString_00000001[27];

} GLOBAL_DATA, * PGLOBAL_DATA;

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 49 / 172

Page 58: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Using a global data - 4

Number of modi�cations can be considerably reduced by using C macros:

Definitions of macros

/* Add GLOBAL_DATA parameter in definitions of internal function */#define DisplayFileTempDefinition(...) \\

DisplayFileDefinition(PGLOBAL_DATA pGlobalData, __VA_ARGS__)

/* Add redirection and GLOBAL_DATA parameter in call of internal function */#define PrintMsg(...) pGlobalData->fp_PrintMsg(pGlobalData, __VA_ARGS__)#define DisplayFile(...) pGlobalData->fp_DisplayFile(pGlobalData, __VA_ARGS__)

/* Add redirection for imported functions */#define CreateFile pGlobalData->fp_CreateFile#define HeapAlloc pGlobalData->fp_HeapAlloc#define GetProcessHeap pGlobalData->fp_GetProcessHeap#define ReadFile pGlobalData->fp_ReadFile

/* Add redirection for strings */#define STR_00000001(x) pGlobalData->szString_00000001

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 50 / 172

Page 59: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Using a global data - 5

Patched function �DisplayFile� becomes:

Patched function DisplayFile with the macros

BOOL DisplayFileTempDefinition(IN CHAR * szFilePath){

...CreateFile(szFilePath, ...)pData = (UCHAR *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwFileSize+1)ReadFile(hFile, pData, ...)PrintMsg(LOG_LEVEL_TRACE, STR_00000001("File successfully read: %s"), pData);...

}

⇒ there are now very few modi�cations

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 51 / 172

Page 60: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Using a global data - 6

Call of the internal function “DisplayMessage”

DisplayMessage(g_szMessage);00412F99 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; get address of g_szMessage in00412F9C 05 58010000 ADD EAX,158 ; GLOBAL_DATA00412FA1 50 PUSH EAX ; push address of g_szMessage00412FA2 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ; get address of pGlobalData00412FA5 51 PUSH ECX ; push address of pGlobalData00412FA6 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8] ; get address of DisplayMessage00412FA9 8B82 88000000 MOV EAX,DWORD PTR DS:[EDX+88]00412FAF FFD0 CALL EAX ; call DisplayMessage

Call of the internal function “DisplayFile”

if(DisplayFile("test.txt") == FALSE)00412FFC 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; get address of pGlobalData00412FFF 05 A1040000 ADD EAX,4A1 ; get address of string00413004 50 PUSH EAX ; push address of string00413005 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ; get address of pGlobalData00413008 51 PUSH ECX ; push address of pGlobalData00413009 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]0041300C 8B42 78 MOV EAX,DWORD PTR DS:[EDX+78] ; get address of DisplayFile0041300F FFD0 CALL EAX ; call DisplayFile

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 52 / 172

Page 61: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Using a global data - 7

Call of the imported function “CreateFile”

CreateFile(szFilePath, ...)...00412DE2 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ; get address of pGlobalData00412DE5 8B91 D8000000 MOV EDX,DWORD PTR DS:[ECX+D8] ; get address of CreateFile00412DEB FFD2 CALL EDX

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 53 / 172

Page 62: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Using a global data - 8

Generated binary does not contain any hardcoded addresses⇒ binary code can be directly extracted and used to form shellcode

Shellcode may be created simply by concatenating the extractedfunctions and adding the GLOBAL_DATA structure at the end

entrypoint

Shellcode

Internal function

Internal function

...

Internal function pointers

Internal function

Imported function

pointers

Global variables

Strings

GLOBAL_DATA

Figure: Overview of the structure of the shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 54 / 172

Page 63: Windows Shellcode Mastery - Black Hat

Writing the shellcode

Summary

This solution allows a shellcode to be created with little modi�cationof source code

However, still a few problems to solve:

writing the de�nition of the GLOBAL_DATA structure and thede�nition of macros is longthe GLOBAL_DATA structure must be initialisedbinary data must be extracted from generated executable andassembled to create �nal shellcode

⇒ A tool that executes all those operations automatically has beendeveloped: WiShMaster

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 55 / 172

Page 64: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 56 / 172

Page 65: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell Presentation

Plan

WiShMaster in a nutshell

Presentation

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 57 / 172

Page 66: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell Presentation

Presentation

WiShMaster is a tool that automatically generates shellcodes, by usingthe previously described principle

Takes a set of C source �les written �normally� in input and generatesa shellcode in output

Shellcode accomplishes same operations as executable produced bycompilation of original source

Transformation in shellcode called later �shellcodisation�

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 58 / 172

Page 67: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell Presentation

Development progress - WiShMaster version 1

WiShMaster v1 has been available on my web site for one year

Graphical application developed in C#

Works but has several limitationsMost important: C code parsed with regular expressions ⇒ mustconform to a few syntax rules to be successfully analysed

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 59 / 172

Page 68: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell Presentation

Development progress - WiShMaster version 2

WiShMaster v2 is under active development

Corrects many problems of the v1:WiShMaster is now a console application written in Python:

shellcodisation process can be scripted

user can intercede at any step of the shellcodisation process, view

results and correct eventual mistakes

parsing of source code with regular expressions has been considerablyreduced ⇒ most of the constrains on C syntax have been removed

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 60 / 172

Page 69: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

Plan

WiShMaster in a nutshell

The shellcodisation process

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 61 / 172

Page 70: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The shellcodisation process in WiShMaster

Shellcodisation accomplished by WiShMaster is divided into 6 steps:

Analysis: identi�es code elements

Obtain the size of global variables

Create environment:

creates �le global_data.h (GLOBAL_DATA structure and macros)creates a patched copy of source �les in a temporary directory

Generation: builds patched sources, extracts binary data andgenerates the shellcode

Customization

Integration:

copy shellcode in a speci�c directoryor transform it in a C array and dump it in a C header �le

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 62 / 172

Page 71: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 1

Principle

Step compounded of a chain of functions that will execute somemodi�cations on the shellcode and transmit the modi�ed shellcode tothe next function

Content of the chain is de�ned by the user

Customization functions implemented in Python module ⇒ user caneasily write their own customization module

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 63 / 172

Page 72: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 2

Example 1: encryption

Customization step may be used to encrypt the shellcode

WiShMaster comes with two �customization� modules that canencrypt a shellcode:

XOR encryption with a 32-bits key (polymorphism)AES-CBC encryption with a 256-bits key

Example 2: setting speci�c values

Example: shellcode that connects to a server

Source code contains two variables: IP address and port of the server

If we put real values directly in those variables:

shellcode must be regenerated to connect to another servershellcode cannot be distributed in its binary form

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 64 / 172

Page 73: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 2

Example 1: encryption

Customization step may be used to encrypt the shellcode

WiShMaster comes with two �customization� modules that canencrypt a shellcode:

XOR encryption with a 32-bits key (polymorphism)AES-CBC encryption with a 256-bits key

Example 2: setting speci�c values

Example: shellcode that connects to a server

Source code contains two variables: IP address and port of the server

If we put real values directly in those variables:

shellcode must be regenerated to connect to another servershellcode cannot be distributed in its binary form

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 64 / 172

Page 74: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 3

Developer of the shellcode

MyProject.cpp

1

The developer writes source code

IP and port set to special values

Figure: Principle of the separation between developer / user of a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 65 / 172

Page 75: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 3

Developer of the shellcode

MyProject.cpp

GLOBAL_DATA

Internal

functions

2

to generate the shellcode

Developer uses WiShMaster

Figure: Principle of the separation between developer / user of a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 66 / 172

Page 76: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 3

Developer of the shellcode

MyProject.cpp

GLOBAL_DATA

Internal

functions

module:

patch values

Cutomization

module in Python

Developer writes a cutomization3

Figure: Principle of the separation between developer / user of a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 67 / 172

Page 77: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 3

Developer of the shellcode

MyProject.cpp

GLOBAL_DATA

Internal

functions

module:

patch values

Cutomization

customization module on Internet

4

Developer puts the shellcode and the

Figure: Principle of the separation between developer / user of a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 68 / 172

Page 78: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 3

Developer of the shellcode

User of the shellcode

MyProject.cpp

GLOBAL_DATA

Internal

functions

module:

patch values

Cutomization

functions

GLOBAL_DATA

Internal

and the cutomization module

A user gets the shellcode5

Figure: Principle of the separation between developer / user of a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 69 / 172

Page 79: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 3

Developer of the shellcode

User of the shellcode

MyProject.cpp

GLOBAL_DATA

Internal

functions

module:

patch values

Cutomization

functions

GLOBAL_DATA

Internal

functions

GLOBAL_DATA

Values

patch values

module:

Cutomization

Internal

The user uses the customization

module to patch special values

6

Figure: Principle of the separation between developer / user of a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 70 / 172

Page 80: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

The customization step - 3

Developer of the shellcode

User of the shellcode

MyProject.cpp

GLOBAL_DATA

Internal

functions

module:

patch values

Cutomization

functions

GLOBAL_DATA

Internal

functions

GLOBAL_DATA

Values

patch values

module:

Cutomization

Internal

Encryption key

Cutomization

module:

encryption

The user uses another customization7

module to encrypt the shellcode

Figure: Principle of the separation between developer / user of a shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 71 / 172

Page 81: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

Implementation of the shellcodisation in WiShMaster v2 - 1

Internally:

Every element discovered in the source code ∼ an object(internal/imported functions, strings. . . )

Every step of the shellcodisation divided into several small sub-steps

Every sub-step implemented by one function

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 72 / 172

Page 82: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell The shellcodisation process

Implementation of the shellcodisation in WiShMaster v2 - 2

WiShMaster can be launched in three modes:

automatic: executes the shellcodisation process automatically

script: executes an external script that can call step/sub-stepfunctions exported by WiShMaster and manipulate objects

interactive: starts a Python shell (same principle as in Scapy)User can then:

call step/sub-step functionsexecute a shellcodisation step by step by calling some functions step(),stepi(), run(). . . (like in a debugger)display objects, change their properties to correct eventual mistakes

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 73 / 172

Page 83: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell Initialising the shellcode

Plan

WiShMaster in a nutshell

Initialising the shellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 74 / 172

Page 84: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell Initialising the shellcode

Initialising the shellcode: objective

Shellcodisation process described previously creates a binary code thatmay run at any address

However, shellcode must initialise the GLOBAL_DATA structure

Operation executed by a function added by WiShMaster, placed at thebeginning of the shellcode:

�nd address of GLOBAL_DATA structure�nd addresses of internal functions and �ll pointers in GLOBAL_DATAresolve imported functions and �ll pointers in GLOBAL_DATA

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 75 / 172

Page 85: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell Initialising the shellcode

Initialising the shellcode: principle

WiShMaster uses tips well-known by Windows shellcode writers:

�nds load address with call/pop instructions

gets address of kernel32.dll through the PEB (Process EnvironmentBlock)

resolves imported functions with LoadLibrary and an internal functionthat found the address of an exported function from a 32-bitschecksum computed from its name

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 76 / 172

Page 86: Windows Shellcode Mastery - Black Hat

WiShMaster in a nutshell Initialising the shellcode

Initialising the shellcode: summary

The shellcode initialisation relies on three functions:

�InitialiseShellcode� : entry point of the shellcode, which initialisesGLOBAL_DATA structure

�GetKernel32Address� : returns the load address of �kernel32.dll�

�GetProcAddressByCksumInDll� : �nds an exported function fromthe checksum of its name (supports dll forwarding)

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 77 / 172

Page 87: Windows Shellcode Mastery - Black Hat

Demonstration: simpletest

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 78 / 172

Page 88: Windows Shellcode Mastery - Black Hat

Demonstration: simpletest

Presentation of simpletest

Very simple program:

prints messages

displays the content of a �le �test.txt�

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 79 / 172

Page 89: Windows Shellcode Mastery - Black Hat

Demonstration: simpletest

A few extracts of simpletest - 1

File user.h.txt

#define SIZE_USERNAME 32#define SIZE_PASSWORD 32

typedef struct _USER{

CHAR szUsername[SIZE_USERNAME];CHAR szPassword[SIZE_PASSWORD];

} USER, *PUSER;

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 80 / 172

Page 90: Windows Shellcode Mastery - Black Hat

Demonstration: simpletest

A few extracts of simpletest - 2

File display.cpp

CHAR g_szMessage[]="This is a message stored as a global variable";

VOID DisplayMessage(IN CHAR * szMessage){

PrintMsg(LOG_LEVEL_TRACE, ">>> %s <<<", szMessage);}

BOOL DisplayFile(IN CHAR * szFilePath){

...CreateFile(szFilePath, ...)pData = (UCHAR *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwFileSize+1)ReadFile(hFile, pData, ...)PrintMsg(LOG_LEVEL_TRACE, "File successfully read: %s", pData);...

}

BOOL DisplayData(VOID){

DisplayMessage(g_szMessage);PrintMsg(LOG_LEVEL_TRACE, "Username: %s", g_User.szUsername);PrintMsg(LOG_LEVEL_TRACE, "Password: %s", g_User.szPassword);if(DisplayFile("test.txt") == FALSE)

return FALSE;return TRUE;

}

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 81 / 172

Page 91: Windows Shellcode Mastery - Black Hat

Demonstration: simpletest

A few extracts of simpletest - 3

File main.cpp

USER g_User ={"jmerchat","password"};

BOOL DisplayData(VOID);

int main(int argc, char * argv[]){

DisplayUser();return 0;

}

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 82 / 172

Page 92: Windows Shellcode Mastery - Black Hat

Demonstration: simpletest

A few extracts of simpletest - 4

File print_msg.cpp

VOID PrintMsg(IN UINT uiMessageLevel, IN const CHAR * fmt, ...){

CHAR szBuffer[SIZE_OF_LOCAL_LOG_BUFFER+1];

UINT i = 0;if(uiMessageLevel == LOG_LEVEL_ERROR)

i += _snprintf(&szBuffer[i], SIZE_OF_LOCAL_LOG_BUFFER-i, "[ERROR] : ");else if(uiMessageLevel == LOG_LEVEL_WARNG)

...

va_list ap;va_start(ap, fmt);i += _vsnprintf(&szBuffer[i], SIZE_OF_LOCAL_LOG_BUFFER-i, fmt, ap);va_end(ap);

printf("[%.4d] %s\n ", GetCurrentThreadId() , szBuffer);fflush(stdout);

}

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 83 / 172

Page 93: Windows Shellcode Mastery - Black Hat

Demonstration: simpletest

A few extracts of simpletest - 5

To sum up, �simpletest� contains:

New type �USER�

Two global variables;

�g_User� : type �USER��g_szMessage� : string

Five internal functions:

�DisplayMessage� : displays �g_szMessage��DisplayFile� : opens a �le �test.txt� and displays its content�DisplayData� : function that really executes all operations�main� : program entry point that only calls �DisplayData��PrintMsg� : displays log messages

Several strings

Several calls to imported functions: CreateFile, HeapAlloc. . .

⇒ not really useful but contains most elements of C program

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 84 / 172

Page 94: Windows Shellcode Mastery - Black Hat

Demonstration: simpletest

Demonstrations

Video �simpletest_exe.avi�: generation of �simpletest� as anexecutable

Video �simpletest_shellcode.avi�: generation of �simpletest� as ashellcode

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 85 / 172

Page 95: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 86 / 172

Page 96: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Objectives of WiShMaster

Version 1 of WiShMaster: creation of monolithic shellcodes

With version 2, objectives have been considerably extended:

development of modular applicationsuser chooses output format: an executable, a dll or a shellcodeallows code reusabilitydevelopment in the very powerful IDE Visual Studioprojects can be distributed either in source or in binary format

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 87 / 172

Page 97: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Overview of the application structure - 1

A WiShMaster application is compounded of one or several �modules�

A module can be in one of the following 4 forms:

an executablea dlla shellcodeinlined into another module

Each module can export some of its functions so that they can becalled by other modules⇒ each module contains an �export� table and an �import� table

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 88 / 172

Page 98: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Overview of the application structure - 2

Module1.cpp

Mod3_func2

Mod1_func1

Mod1_func2

Mod2_func1

Imported function

Internal function exported

Mod3_func1

Mod3_func2

Mod2_func1

Module2.cpp

Module3.cpp

Mod3_func1

Mod3_func2

Mod1_func1

Mod2_func1

1

and exporting some functions

Three modules importing

Figure: Structure of an application developed with WiShMaster v2

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 89 / 172

Page 99: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Overview of the application structure - 2

Module1.cpp

Mod3_func2

Mod1_func1

Mod1_func2

Mod2_func1

Imported function

Internal function exported

Mod3_func1

Mod3_func2

Mod2_func1

Module2.cpp

Module3.cpp

Mod3_func1

Mod3_func2

Mod1_func1

Mod2_func1

Mod3_func2

Module1.bin

Mod1_func1

Mod1_func2

Mod2_func1

Mod3_func1

2

Module 1 output = shellcode

Module 2 output = inlined in module 1

Figure: Structure of an application developed with WiShMaster v2

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 90 / 172

Page 100: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Overview of the application structure - 2

Module1.cpp

Mod3_func2

Mod1_func1

Mod1_func2

Mod2_func1

Imported function

Internal function exported

Mod3_func1

Mod3_func2

Mod2_func1

Module2.cpp

Module3.cpp

Mod3_func1

Mod3_func2

Mod1_func1

Mod2_func1

Mod3_func2

Module1.bin

Mod1_func1

Mod1_func2

Mod2_func1

Mod3_func1

Import and export tables

of both modules are merged

3

Figure: Structure of an application developed with WiShMaster v2

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 91 / 172

Page 101: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Overview of the application structure - 2

Module1.cpp

Mod3_func2

Mod1_func1

Mod1_func2

Mod2_func1

Imported function

Internal function exported

Mod3_func1

Mod3_func2

Mod2_func1

Module2.cpp

Module3.cpp

Mod3_func1

Mod3_func2

Mod1_func1

Mod2_func1

Mod3_func2

Module1.bin

Mod1_func1

Mod1_func2

Mod2_func1

Mod3_func1

Mod3_func2

Mod2_func1

Mod1_func1

Module3.exe

Mod3_func1

4

Module 3 output = executable

Figure: Structure of an application developed with WiShMaster v2

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 92 / 172

Page 102: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Overview of the application structure - 2

Module1.cpp

Mod3_func2

Mod1_func1

Mod1_func2

Mod2_func1

Imported function

Internal function exported

Mod3_func1

Mod3_func2

Mod2_func1

Module2.cpp

Module3.cpp

Mod3_func1

Mod3_func2

Mod1_func1

Mod2_func1

Mod3_func2

Module1.bin

Mod1_func1

Mod1_func2

Mod2_func1

Mod3_func1

Mod3_func2

Mod2_func1

Mod1_func1

Module3.exe

Mod3_func1

Module3.exe

Mod1_func2

Mod2_func1

Mod1_func1

Module1.bin

Mod3_func2

Mod3_func1

Mod3_func1

Mod3_func2

Mod1_func1

Mod2_func1

During execution, imported5

symbols are resolved

Figure: Structure of an application developed with WiShMaster v2

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 93 / 172

Page 103: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Binary format of a WiShMaster module - 1

Module must be able to:

load without generating an error even if a required module is missing

call function exported by a module independently of the format of thismodule (exe, dll, shellcode)

⇒ PE format cannot be used: WiShMaster de�nes its own binary format

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 94 / 172

Page 104: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Binary format of a WiShMaster module - 2

Structure of GLOBAL_DATA is normalized and contains:

an export table: contains the checksum of the name of each exportedfunction

an import table: contains the checksum of the names of eachimported function

an optional entry point: pointer on an internal function that must becalled after module initialisation

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 95 / 172

Page 105: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Standard modules - 1

Presentation

WiShMaster comes with a few standard modules = modules that exposesome functions frequently used by other modules

Module �Log�

Exposes a function �PrintMsg� which allows the print of formattedmessages

Module �InitSh�

Exposes all the functions needed to initialise a shellcode (notablyInitialiseShellcode and GetProcAddressByCksumInDll)

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 96 / 172

Page 106: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Standard modules - 1

Presentation

WiShMaster comes with a few standard modules = modules that exposesome functions frequently used by other modules

Module �Log�

Exposes a function �PrintMsg� which allows the print of formattedmessages

Module �InitSh�

Exposes all the functions needed to initialise a shellcode (notablyInitialiseShellcode and GetProcAddressByCksumInDll)

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 96 / 172

Page 107: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Standard modules - 1

Presentation

WiShMaster comes with a few standard modules = modules that exposesome functions frequently used by other modules

Module �Log�

Exposes a function �PrintMsg� which allows the print of formattedmessages

Module �InitSh�

Exposes all the functions needed to initialise a shellcode (notablyInitialiseShellcode and GetProcAddressByCksumInDll)

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 96 / 172

Page 108: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Standard modules - 2

Module �Loader�

Manages a set of modules

Exposes a function �AddModuleToLoad�: handles all the load and theinitialisation of a module (dll, shellcode, executable):

loads the module in memorydecrypts the module if this one is an encrypted shellcoderesolves all imported symbols (from standard libraries or other modules)calls the entry point

Note: �Loader� inlines �InitSh�

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 97 / 172

Page 109: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Shellcode encryption - Two kinds of encryption. . .

�Loader� can handle shellcodes encrypted in AES-CBC with a 256-bitskey

Two kinds of encryption:

One secret key: all modules are encrypted with a secret key stored in�Loader�Shared secret key

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 98 / 172

Page 110: Windows Shellcode Mastery - Black Hat

Developing applications with WiShMaster

Shellcode encryption - Principle of shared secret key

Following algorithm is used:

each module has a 256-bits private keythe shared key is the sum byte to byte of all private keysall modules are encrypted with the �nal shared keyall modules contain their own private key (in clear)

All modules are required to compute shared key

Having N-1 private keys does not give any information on shared key

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 99 / 172

Page 111: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 100 / 172

Page 112: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Plan

Demonstration: RvShell

Presentation of RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 101 / 172

Page 113: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Presentation of RvShell - 1

�RvShell� is a simple reverse shell: backdoor that establishes aconnection between a �cmd� process and a remote server

Backdoor compounded of two layers:

the network layer that establishes the communication with the serverthe application layer that creates the �cmd� process and uses theservices exposed by the network layer

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 102 / 172

Page 114: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Presentation of RvShell - 2

Primergy

Memory

Hard drive

Firewall

Attacker Server

Figure: Working principle of RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 103 / 172

Page 115: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Presentation of RvShell - 2

Primergy

Memory

Hard drive

Firewall

Attacker Server

RvShellstarted on server

"RvShell" is1

Figure: Working principle of RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 104 / 172

Page 116: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Presentation of RvShell - 2

Primergy

Memory

Hard drive

Firewall

Attacker Server

RvShell

NETCAT

"RvShell" connects on2

attacker’s computer

Figure: Working principle of RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 105 / 172

Page 117: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Presentation of RvShell - 2

Primergy

Memory

Hard drive

Firewall

Attacker Server

RvShell

NETCAT

CMD

with stdin/stdout redirected in socket

3"RvShell" spawns a hidden cmd process

Figure: Working principle of RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 106 / 172

Page 118: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Implementation of RvShell

Two modules have been developed:

�NtStackSmpl� implements the network layer and exports twofunctions:

BOOL OpenConnection(IN UINT uiServerAddressNt, IN USHORT usServerPortNt, OUT SOCKET * pSock);BOOL CloseConnection(IN SOCKET sock);

�RvShell� implements the application layer:

does not export any functionhas an entry point, the function �ExecuteShell�:

uses �OpenConnection� to open a TCP connection on the server

creates the �cmd� process

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 107 / 172

Page 119: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Generating RvShell as an executable - 1

Configuration file used to generate RvShell as an executable

<solution><module name="rvshell" config="rvshell/rvshell.cfg" input_type="code"

specific_config="" output_type="exe"/><module name="ntstacksmpl" config="ntstacksmpl/ntstacksmpl.cfg" specific_config=""

input_type="code" output_type="inline" inline_destination="rvshell"/><module name="log" config="log/log.cfg" specific_config="" input_type="code"

output_type="inline" inline_destination="rvshell"/></solution>

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 108 / 172

Page 120: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Generating RvShell as an executable - 2

RvShell.cpp

ExecuteShell

RvShell.exe

NtStackSmpl.cpp

OpenConnection

ExecuteShell

PrintMsg

CloseConnection

CloseConnection

PrintMsg

OpenConnection

PrintMsg

CloseConnection

PrintMsg

OpenConnection

Log.cpp

Figure: Result of the creation of the reverse shell as an executable

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 109 / 172

Page 121: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Generating a polymorphic RvShell - 1

�RvShell� is generated as a shellcode and then included in an executablethat decrypts RvShell and jumps on it

Configuration file used to generate RvShell as a shellcode

<solution><module name="rvshell" config="rvshell/rvshell.cfg" specific_config=""

input_type="code" output_type="="shellcode"/><module name="ntstacksmpl" config="ntstacksmpl/ntstacksmpl.cfg" specific_config=""

input_type="code" output_type="="inline" inline_destination="="rvshell"/><module name="initsh" config="initsh/initsh.cfg" specific_config=""

output_type="="inline" inline_destination="="rvshell"/><module name="log" config="log/log.cfg" specific_config="" input_type="code"

output_type="="inline" inline_destination="="rvshell" /></solution>

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 110 / 172

Page 122: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Presentation of RvShell

Generating a polymorphic RvShell - 2

RvShell.exeRvShell.cpp

OpenConnection

ExecuteShell

OpenConnection

CloseConnection

PrintMsg

OpenConnection

CloseConnection

PrintMsg

Log.cpp

PrintMsg

Log.cpp

InitShellcode

GetProcAddr...

PrintMsg

ExecuteShell

OpenConnection

CloseConnection

PrintMsg

GetProcAddr...

InitShellcode

RvShell.bin

Decryption loop

RvShell.bin

CloseConnection

ExecuteShell

GetProcAddr...

InitShellcode

PrintMsg

NtStackSmpl.cpp

Figure: Result of the creation of a polymorphic reverse shell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 111 / 172

Page 123: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Plan

Demonstration: RvShell

Simulation of an attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 112 / 172

Page 124: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Context

Objective

Take control of a targeted computer with a backdoor (reverse shell)

Context of the attack

Malicious payload must be protected against forensic analysis:

malicious payload is transferred after encryption on targeted computer

malicious payload is decrypted only in memory

decryption code is introduced by another way

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 113 / 172

Page 125: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Context

Objective

Take control of a targeted computer with a backdoor (reverse shell)

Context of the attack

Malicious payload must be protected against forensic analysis:

malicious payload is transferred after encryption on targeted computer

malicious payload is decrypted only in memory

decryption code is introduced by another way

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 113 / 172

Page 126: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader Attacker generates a Trojan that

contains "Loader" (XOR encryption)

1

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 114 / 172

Page 127: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

Attacker generates shellcodes "RvShell"

and "NtStackSmpl" (AES encryption)

2

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 115 / 172

Page 128: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 116 / 172

Page 129: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

to targeted user

3

Attacker sends Trojan

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 117 / 172

Page 130: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

MyEditor.exe

Decryption

Loader

4

User starts "MyEditor"

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 118 / 172

Page 131: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

MyEditor.exe

Decryption

Loader

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 119 / 172

Page 132: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

MyEditor.exe

Decryption

LoaderLoader

5

"Loader" is decrypted and executed

User uses to trapped functionnality

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 120 / 172

Page 133: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

MyEditor.exe

Decryption

LoaderLoader

Firefox.exe

instance of default browser

"Loader" starts a hidden6

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 121 / 172

Page 134: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

MyEditor.exe

Decryption

LoaderLoader

Firefox.exe

Loader

"Loader" injects itself7

in the hidden instance

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 122 / 172

Page 135: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

Firefox.exe

Loader

stays in browser, waiting for USB key

8

"MyEditor" may be closed. "Loader"

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 123 / 172

Page 136: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

USB key

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

Firefox.exe

Loader

Attacker puts "RvShell" and

"NtStackSmpl" on a USB key

9

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 124 / 172

Page 137: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

USB key

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

Firefox.exe

Loader

USB key

NtStackSmpl

RvShellthe USB key in their computer

10

Attacker asks the user to plug in

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 125 / 172

Page 138: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

USB key

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

Firefox.exe

Loader

USB key

NtStackSmpl

RvShell

NtStackSmpl

RvShell

11

"Loader" detects plug, finds the modules

loads, decrypts and executes them

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 126 / 172

Page 139: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Principle of the attack

USB key

Hard drive

Memory

MyEditor.exe

XOR / 32−bits keys

Decryption

Loader

AES−CBC / 256−bits key

RvShell

NtStackSmpl

MyEditor.exe

Decryption

Loader

Firefox.exe

Loader

USB key

NtStackSmpl

RvShell

NtStackSmpl

RvShell CMD

NETCAT

remote cmd access to attacker

12"RvShell" connects back and gives a

Figure: Principle of the attack with RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 127 / 172

Page 140: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of secret keys

key_generator.py

Figure: Principle of the generation of 256-bits keys

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 128 / 172

Page 141: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of secret keys

key_generator.py

RANDOM

NtStackSmpl.key

Figure: Principle of the generation of 256-bits keys

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 129 / 172

Page 142: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of secret keys

key_generator.py

NtStackSmpl.key

RANDOM

RvShell.key

Figure: Principle of the generation of 256-bits keys

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 130 / 172

Page 143: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of secret keys

key_generator.py

NtStackSmpl.key RvShell.key

RANDOM

Loader.key

Figure: Principle of the generation of 256-bits keys

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 131 / 172

Page 144: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of secret keys

key_generator.py

NtStackSmpl.key RvShell.key Loader.key

ADDITION

Shared.key

Figure: Principle of the generation of 256-bits keys

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 132 / 172

Page 145: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - key generation

Video �rvshell_1_genkey.avi�: generation of encryption keys

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 133 / 172

Page 146: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of Loader

SearchModInDir.cpp

Log.cpp

Loader.cpp

InitSh.cpp

DetectUsbKey.cpp

Figure: Generation of Loader

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 134 / 172

Page 147: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of Loader

SearchModInDir.cpp

Log.cpp

Loader.cpp

InitSh.cpp

DetectUsbKey.cpp

InitSh

DetectUsbKey

Loader

inlined in Loader

Shellcodisation

inlined in Loader

inlined in Loader

Log

SearchModInDir

inlined in Loader

Figure: Generation of Loader

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 135 / 172

Page 148: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of Loader

SearchModInDir.cpp

Log.cpp

Loader.cpp

InitSh.cpp

DetectUsbKey.cpp

InitSh

DetectUsbKey

Loader

inlined in Loader

Shellcodisation

inlined in Loader

inlined in Loader

Log

SearchModInDir

inlined in Loader

InitShCustomization:

Log

Patch secret key

Loader

SearchModInDir

DetectUsbKey

Figure: Generation of Loader

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 136 / 172

Page 149: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - generation of customized loader

video �rvshell_2_genloader.avi�: generation of customized loader

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 137 / 172

Page 150: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of RvShell and NtStackSmpl

NtStackSmpl.cpp

RvShell.cpp

Figure: Generation of RvShell and NtStackSmpl

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 138 / 172

Page 151: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of RvShell and NtStackSmpl

NtStackSmpl.cpp

RvShell.cpp

NtStackSmpl.bin

RvShell.bin

Shellcodisation

Shellcodisation

Figure: Generation of RvShell and NtStackSmpl

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 139 / 172

Page 152: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of RvShell and NtStackSmpl

NtStackSmpl.cpp

RvShell.cpp

NtStackSmpl.bin

RvShell.bin

Shellcodisation

Shellcodisation

Customization:

Patch IP/port

IP address / port

RvShell.bin

Figure: Generation of RvShell and NtStackSmpl

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 140 / 172

Page 153: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of RvShell and NtStackSmpl

NtStackSmpl.cpp

RvShell.cpp

NtStackSmpl.bin

RvShell.bin

Shellcodisation

Shellcodisation

Customization:

Patch IP/port

IP address / port

RvShell.bin

Customization:

AES encryption

Customization:

RvShell.bin

AES encryption

NtStackSmpl.bin

Figure: Generation of RvShell and NtStackSmpl

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 141 / 172

Page 154: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - generation of shellcode RvShell

video �rvshell_3_genrvshell.avi�: generation of shellcode RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 142 / 172

Page 155: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of Injecter

Injecter.cpp

InitSh.cpp

Log.cpp

Figure: Generation of Injecter

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 143 / 172

Page 156: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of Injecter

Injecter.cpp

InitSh.cpp

Log.cpp

Log

InitSh

inlined in Loader

inlined in Loader

Shellcodisation

Injecter

Figure: Generation of Injecter

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 144 / 172

Page 157: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of Injecter

Injecter.cpp

InitSh.cpp

Log.cpp

Log

InitSh

inlined in Loader

inlined in Loader

Shellcodisation

Injecter

SearchModInDir

Customization:

DetectUsbKey

InitSh

InitSh

Log

Log

Add shellcode to inject

Loader

DetectUsbKey

SearchModInDir

InitSh

Log

Injecter

Loader

Figure: Generation of Injecter

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 145 / 172

Page 158: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of Injecter

Injecter.cpp

InitSh.cpp

Log.cpp

Log

InitSh

inlined in Loader

inlined in Loader

Shellcodisation

Injecter

SearchModInDir

Customization:

DetectUsbKey

InitSh

InitSh

Log

Log

Add shellcode to inject

Loader

DetectUsbKey

SearchModInDir

InitSh

Log

Injecter

Loader

Log

Loader

SearchModInDir

Customization:

Injecter

InitSh

DetectUsbKey

XOR encryption

InitSh

Log

Figure: Generation of Injecter

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 146 / 172

Page 159: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - generation of injecter

video �rvshell_4_geninjecter.avi�: generation of injecter

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 147 / 172

Page 160: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of the Trojan

Header

Section 1

Section 2

...

Section n

Injecter

MyEditor.exe

Figure: Generation of the Trojan

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 148 / 172

Page 161: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of the Trojan

Header

Section 1

Section 2

...

Section n

Injecter

MyEditor.exe

Infector.exe

Section n

...

Section 2

Section 1

Decryption

Injecter

Header

MyEditor.exe

Figure: Generation of the Trojan

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 149 / 172

Page 162: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - Generation of the Trojan

Header

Section 1

Section 2

...

Section n

Injecter

MyEditor.exe

Infector.exe

Section n

...

Section 2

Section 1

Decryption

Injecter

Header

MyEditor.exe

Figure: Generation of the Trojan

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 150 / 172

Page 163: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Preparing attack - generation of the Trojan

video �rvshell_5_gentrojan.avi�: generation of the Trojan

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 151 / 172

Page 164: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Attack - execution of Trojan

video �rvshell_6_executetrojan.avi�: execution of Trojan

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 152 / 172

Page 165: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Attack - execution of RvShell

video �rvshell_7_executervshell.avi�: execution of RvShell

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 153 / 172

Page 166: Windows Shellcode Mastery - Black Hat

Demonstration: RvShell Simulation of an attack with RvShell

Attack - summary

Techniques used during this attack:

Encryption of malicious payload:

�Injecter� in �MyEditor�: polymorphism�NtStackSmpl� and �RvShell�: shared secret

Execution only in memory : �NtStackSmpl� and �RvShell� loaded fromUSB key and decrypted in memory

Code injection: �Loader� executed in a hidden process

Executable infection: Trojan created from �MyEditor�

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 154 / 172

Page 167: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 155 / 172

Page 168: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Context

Objective

Take control of a web server; steal username/password of web site users

Description of the target

Windows 2003

Two services:

Apache with a phpbb (target)FTP server used to update web site

Server protected by a �rewall (allows only incoming HTTP/FTP)

Context of the attack

Attacker found a valid user/pass for FTP server

File system regularly checked⇒ impossible to leave a backdoor on system⇒ attacker decides to use a personal tool: �WebDoor�

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 156 / 172

Page 169: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Context

Objective

Take control of a web server; steal username/password of web site users

Description of the target

Windows 2003

Two services:

Apache with a phpbb (target)FTP server used to update web site

Server protected by a �rewall (allows only incoming HTTP/FTP)

Context of the attack

Attacker found a valid user/pass for FTP server

File system regularly checked⇒ impossible to leave a backdoor on system⇒ attacker decides to use a personal tool: �WebDoor�

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 156 / 172

Page 170: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Context

Objective

Take control of a web server; steal username/password of web site users

Description of the target

Windows 2003

Two services:

Apache with a phpbb (target)FTP server used to update web site

Server protected by a �rewall (allows only incoming HTTP/FTP)

Context of the attack

Attacker found a valid user/pass for FTP server

File system regularly checked⇒ impossible to leave a backdoor on system⇒ attacker decides to use a personal tool: �WebDoor�

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 156 / 172

Page 171: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Presentation of WebDoor

Webdoor executes the following actions:

Finds a targeted process that represents a web server

Injects a shellcode in this process that will install a hook on function�WSARecv�

Hook analyses every web request and extracts parameters:

parameter �shell� ⇒ interpretes command in a mini-shellExample: �shell=cmd� gives access to a remote cmd on serverotherwise compares every name of parameter with list of keywords todetect username/password

Web server work not disrupted

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 157 / 172

Page 172: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 158 / 172

Page 173: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

FTP

i.exe

WebDoor

WebDoor on server

Attacker uploads1

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 159 / 172

Page 174: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

i.exe

WebDoor

WebDoor

injects itself in Apache

WebDoor is started and2

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 160 / 172

Page 175: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

WebDoor

deleted from hard drive

WebDoor can now be3

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 161 / 172

Page 176: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

WebDoor

NETCAT

CMD

GET /index.php?shell=cmd HTTP/1.0

HTTP

cmd access

4User gets remote

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 162 / 172

Page 177: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

WebDoor

NETCAT

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 163 / 172

Page 178: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

WebDoor

NETCAT

HTTP

BROWSER

POST /login.php HTTP/1.0

username=admin&password=rdp700!

5Another user authenticate

theirself on web site

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 164 / 172

Page 179: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

WebDoor

NETCAT

HTTP

BROWSER

POST /login.php HTTP/1.0

username=admin&password=rdp700!

rdp_700!

admin

WebDoor intercepts6

username and password

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 165 / 172

Page 180: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

WebDoor

NETCAT

BROWSERrdp_700!

admin

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 166 / 172

Page 181: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Principle of web server attack

Primergy

Memory

Hard drive

Firewall

Attacker Server

User

Apache

WebDoor

NETCAT

GET /index.php?shell=get_pwd HTTP/1.0

HTTP

BROWSERrdp_700!

admin

admin

rdp_700!

captured credentials

7Attacker gets list of

Figure: Principle of web server attack with WebDoor

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 167 / 172

Page 182: Windows Shellcode Mastery - Black Hat

Demonstration: WebDoor

Demonstration

Video �webdoor_1_presentation.avi�: quick presentation ofarchitecture

Video �webdoor_2_attack.avi�: attack of web server

Video �webdoor_3_still_working.avi�: web server work not disrupted

Video �webdoor_4_control.avi�: getting remote cmd and stealingpassword

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 168 / 172

Page 183: Windows Shellcode Mastery - Black Hat

Conclusion

Plan

1 The use of shellcodes in virology

2 Writing the shellcode

3 WiShMaster in a nutshell

4 Demonstration: simpletest

5 Developing applications with WiShMaster

6 Demonstration: RvShell

7 Demonstration: WebDoor

8 Conclusion

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 169 / 172

Page 184: Windows Shellcode Mastery - Black Hat

Conclusion

Conclusion

Techniques implemented in tools used in two attacks are well-known

Interesting point : developed very quicklyExample: integration of the AES of PolarSSL in �Loader� ∼ 2 hours

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 170 / 172

Page 185: Windows Shellcode Mastery - Black Hat

Conclusion

Future work

Continue development of WiShMaster:

Main objective: improve analysis of C code and remove the latestconstraints on the code imposed by the parsing with regular expressionsExample: integrate �pycparser�: C parser and an AST generator

Shellcodise well-known application like netcat ⇒ polymorphic netcat

Develop more funny applications with WiShMaster

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 171 / 172

Page 186: Windows Shellcode Mastery - Black Hat

Conclusion

Thank you for your attention. . .

Any questions?

Shellcodisation is painless. No C code was harmed during this presentation

Benjamin CAILLAT (ESIEA - SI&S lab) Windows Shellcode Mastery 172 / 172