ece 4112 internetwork securityusers.ece.gatech.edu/riley/ece4112/projects/binary... · web viewtake...

40
ECE 4112 Internetwork Security Binary Auditing Group Number: _______________ Member Names: _______________ _______________ Date Assigned: Date Due: Last Edited: Please read the entire lab and any extra materials carefully before starting. Be sure to start early enough so that you will have time to complete the lab. Answer ALL questions and be sure you turn in ALL materials listed in the Turn-in Checklist ON or BEFORE the Date Due. Goal: This lab will introduce you to binary auditing. This is a technique used to assess the security of closed source software beyond the capabilities of fuzz-testing. The reverse engineering process allows for inspecting of binaries without the risk of running them. Summary: In this lab you will be examining numerous binaries for Linux and for Windows. The first one is a binary named simple, which implements a very basic authentication system. To bypass the protection scheme we will perform two techniques with two different programs to modify the binary. Afterwards, through binary analysis, we analyze a malicious piece of software to reveal information on how the botnet operates and how it can be stopped. Furthermore, malware developers are actively trying to foil binary analysis of programs. In one 1

Upload: others

Post on 22-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

ECE 4112 Internetwork SecurityBinary Auditing

Group Number: _______________

Member Names: _______________ _______________

Date Assigned:Date Due:Last Edited:

Please read the entire lab and any extra materials carefully before starting. Be sure to start early enough so that you will have time to complete the lab. Answer ALL questions and be sure you turn in ALL materials listed in the Turn-in Checklist ON or BEFORE the Date Due.

Goal: This lab will introduce you to binary auditing. This is a technique used to assess the security of closed source software beyond the capabilities of fuzz-testing. The reverse engineering process allows for inspecting of binaries without the risk of running them.

Summary: In this lab you will be examining numerous binaries for Linux and for Windows. The first one is a binary named simple, which implements a very basic authentication system. To bypass the protection scheme we will perform two techniques with two different programs to modify the binary. Afterwards, through binary analysis, we analyze a malicious piece of software to reveal information on how the botnet operates and how it can be stopped. Furthermore, malware developers are actively trying to foil binary analysis of programs. In one exercise we circumvents anti-virtual machine detection of redpill. Finally, we examine how executable packers.

Background and Theory: It is amazing and rather disconcerting to realize how much software we run without

knowing for sure what it does. We run setup utilities that install numerous files, change system settings, delete or disable older versions, and modify critical registry files. We blindly hope that the latest change to each program keeps it compatible with all of the rest of the programs on our system. We rely on much software that we do not understand and do not know very well at all.

Reverse engineering is a way to understand software from the bottom up. It is the process of analyzing a system to identify the system’s components and their inter-relationships and to re-create the system’s behavior. This allows us to visualize the software’s structure and

1

Page 2: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

its ways of operation. Reverse engineering is particularly useful in modern software analysis for a wide variety of purposes:

Finding malicious code. Many virus and malware detection techniques use reverse engineering to understand how code is structured and how it functions.

Reverse engineering can allow open source software to be created that accomplishes the same tasks as proprietary software.

Reverse engineering techniques can enable the study of advanced software approaches and allow new students to explore advanced coding styles.

Prelab Questions: None.

Section 1: Simple Password authentication is a simple authentication system used for validation of a user. The authentication process consists of character-by-character comparison of the user input to the reference value stored inside the program.

The advantage of such protection is its simple software implementation. In the C language, such algorithm could be written as follows:

if (strcmp (password entered, reference password)){/* Password is incorrect */}

else{/* Password is OK*/}.

Let's implement this code with procedures to prompt for a password and display the comparison, and then examine the compiled program for ways to bypass the authentication. The binary called simple is on the NAS, in the folder “Binary Auditing”.

2

Page 3: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Figure 1. Source code of simple with the password censored.

Q1.1 Execute the binary simple and describe the results.

Guessing the password is like looking for a needle in a haystack, and there's no guarantee of success. The reference password is stored in the program, and isn't encrypted in some artful manner. It can be found by simply looking at the binary code.

Try the following commands to figure out the password.

# hexdump –C simple | lessNote: less navigation# Arrows/Page Up/Page Down/Home/End# Space bar: Next page

3

Page 4: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

# objdump –s simple | less# strings simple | less

Q.1.2 What is the correct password?

Section 2: Getting Acquainted with the Dissembler

In the previous section, the password was stored in plain text ASCII in the binary file. This allowed for several simple ways of discovering the password. Wouldn't it be better to modify the program so that no password is requested, or so that any password is accepted?

Assembling is the translation of assembly instructions into machine code, disassembling is the translation of machine code into assembly instructions. In other words, through a dissembler is it possible to obtain the assembly code of a program from its machine code. However, compilation is a unidirectional process. Labels and comments aren't included but we can get the gist of the source code.

Begin by typing the following:

# readelf –x 14 simple

Q2.1 What is the offset location of the password?

Q2.2 What is length of the password in bytes?

Because the password is located at a particular offset, the pointer must equal the offset.

Disassemble simple with the following command:

# objdump –D simple > disassemble_simple# less !$

Search for the offset value within the less command by typing the forward-slash key and entering the offset.

For example,/4112The above would yield pattern not found

4

Page 5: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Figure 2. Portion of disassembled binary simple.

Highlighted above is the password offset. This is one of two arguments of the 0x8048318 function placed on the stack by the push assembly instruction. The second argument is a pointer to a local buffer, probably containing the user input. It's clear that this function checks the password. What we're really interested in is the return value of the function.

The TEST EAX, EAX instruction checks if the value returned by the function equals zero. If it does, the JE instruction following it jumps to line 0x8048c6.

Otherwise (i.e., if EAX !=0):

It seems to be a pointer, doesn't it?

Q2.3 By using hexdump to search the offset, what data segment does it correspond with?

A nonzero EAX value indicates a wrong password, and a zero value indicates a correct one. Let's look at the branch of the program that handles a valid password.

Q2.4 What data segment those 0x8048614 correspond with?

Section 3: Patching of Simple Copy both biew-564.tgz and hexedit.tgz from the NAS, in the folder “Binary Auditing”.

5

Page 6: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Type the following:

# tar –zxf biew-564.tgz# tar –zxf hexedit.tgz

BIEW is a multiplatform, portable viewer of binary files with a built-in editor that functions in binary, hexadecimal and disassembler modes. BIEW is not stable in GNOME terminal. As a result, execute the program in a console (Ctrl+Alt+f1) or through xterm.

In GNOME terminal, type the following:

# xterm &# cp simple simple_biew# ./biew-564/biew –d simple_biew

Press <F5> (Goto)o Proceed to address 0000049b

Press <F4> (Modify) Press Right Arrow to obtain a cursor Press 3 Press Left Arrow (Three Times) Press 3 Press <F2> to update Press <F10> to quit

Figure 3. BIEW modification of simple_biew.

In the above we replaced TEST EAX, EAX with XOR EAX.

Q3.1 Upon executing this instruction, the EAX register will always contain what value, no matter what password is entered?

Q3.2 Execute the binary simple_biew and describe the results?

# cp simple simple_hexedit# ./hexedit/hexedit simple_hexedit

6

Page 7: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Press Returno Type 49d

Change the hex value from 74 to 75 Press <F2> to update Press Ctrl+c to quit

Q3.3 Execute simple_hexedit, type the real password, and describe the results?

Q3.4 Using BIEW in disassemble mode compare the difference between simple and simple_hexedit at offset 0x49b?

Section 4: Malware Analysis

Over the years bots have become more and more complex in order to hide their malicious activities from various security mechanisms. These days reverse engineering is often utilized to reveal information on how the botnet operates and how it can be stopped. Binary analysis in general and malware analysis in particular, is a constant search for clues to which the analyst must pay attention. You are to analyze a malicious piece of software but have no source code and absolutely no knowledge of its behavior.

Copy both malware and PEview.exe from the NAS, in the folder “Binary Auditing”, to the Windows XP virtual machine and Red Hat 4.0 WS physical machine.

Lets begin by determining the file type.

# file malware

Q4.1 What type of file is the malware binary?

Switch to the Windows XP virtual machine. Open malware in PEView.exe.

HINT: Look in the .data segment

Q4.2 What is the name of the server, channel name, port number, and the name of the bot it attempts to join the channel?

Q4.3 Name at least five functions of this particular botnet?

7

Page 8: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Based on the work of previous sections, it would certainly be possible to edit the binary and force the malware to join an irc server of your choice for further analysis. Finally, Appendix A includes an advanced analysis of the Storm Worm, “the Baddest of the Bad”.

Section 5: Red Pill

Malicious software writers go through a great deal of work in order to disguise their software’s behavior. They plant false clues, obfuscate code, encrypt data and use a lot of programming trickery to hide their actions from prying eyes.The main areas of malware protection are as follows:

Anti-Virtual Machine Binary Compression Binary Encoding Anti-Debugger

Because so many security researchers rely on virtual environments to analyze malicious code, malware developers are actively trying to foil such analysis by detecting those environments. If malicious code detects a virtualized environment, it can shut off some of its more powerful malicious functionality so that researchers cannot observe it and devise complete defenses.

A researcher named Joanna Rutkowska introduced code called "The Red Pill", which runs a single machine language instruction, called SIDT. This instruction stores the contents of the Interrupt Descriptor Table Register. Rutkowska observed that on VMware guest machines, the IDT is typically located at 0xffXXXXXX, while on VirtualPC guests, it is located at 0xe8XXXXXX. For host operating systems, the IDT is located far lower in memory. To handle both conditions, the Red Pill checks to see if the IDTR is greater than 0xd0000000. If so, the Red Pill prints a message saying that it is running in a guest operating system.

Copy both idafree49.exe and biew564d.zip from the NAS, in the folder “Binary Auditing”, to the Windows XP virtual machine.

Click the Start menu Click the run icon Type cmd.exe Navigate to the folder containing redpill.exe

8

Page 9: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Q5.1 Execute redpill.exe and describe the results?

The purpose of this exercise is to circumvent anti-virtual machine detection to allow for binary auditing of malware. Redpill.exe should have detected the Windows XP virtual machine.

Now, begin by initiating the installation of IDA Pro freeware v4.9.

Run the program Click New Click the PE Executable icon

o Click OK Select redpill.exe Click Next (Twice) Click Finish Press <F12>

Observe the conditional branch. False leads to virtual environment detection and true leads to a physical OS detection.jle short loc_401064The above instruction is responsible for the decision

Close the Graph of _main window Select Jump

o Jump to to file offset… Type 1064 Double Click loc_401064

Observe how another loc_401064 yellow label appears above the original.

Q5.2 What is the address of the instruction that contains the second yellow label?

Unzip biew564d.zip Open a command-propmt BIEW.exe –d redpill.exe Press <F5> (Goto)

o Proceed to address 00001049 Press <F4> (Modify) Press e Press b Press <F2> to update Press <F10> to quit

9

Page 10: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Screenshot 1: Capture a screenshot of a redpill.exe with a yield of no virtual environment detection where both host and virtual OS are visible.

Another method that can be used to achieve the same results is to change the value that is being compared. This involves the same process, but the hex value that needs to be changed is on the 00001040 line.

Q5.3 What value needs to be changed and what should it be changed to? Why does this not work on some virtual machines?

Section 6: Binary Packing.

Another method to attempt to foil reverse engineering attempts is called binary packing. A packed binary file has a short header with the instructions on how to unpack the rest of the binary. A normal disassembler will only be able to read the first few instructions and then the rest of the file will look like garbage. To reverse engineer a binary packed file, you need to unpack it and then run it through a disassembler.

A useful packing utility is called UPX. This can be found at upx.sf.net. The UPX packer will compress binary files so that they will take up less disk space.

For this exercise, obtain upx301w.zip and redpill.exe from the NAS, in the folder “Binary Auditing”.

From Windows XP virtual Machine: Click the Start menu Click the run icon Type cmd.exe Navigate to the folder containing upx.exe Type upx.exe -9 -o redpill_packed.exe redpill.exe

Once redpill is packed, open both redpill versions in IDA and press <F12> to display the flow chart.

Screenshot 2,3. Take a screen shot of each version opened in IDA showing the difference.

References:

1

Page 11: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

BIEW http://biew.sourceforge.net/

Ultimate Packer for executables, UPX http://upx.sourceforge.net/

IDA Pro 4.9 Freeware http://www.datarescue.com/

Simple Binary Kaspersky, K., Tarkova, N., and Laing, J. 2003 Hacker Disassembling Uncovered. A-List

Publishing.Peacomm.C Cracking the nutshell

http://www.antirootkit.com/articles/eye-of-the-storm-worm/Peacomm-C-Cracking-the-nutshell.html

Redpill.exe http://invisiblethings.org/papers/redpill.html

Appendix A: Peacomm.C Cracking the nutshell

1

Page 12: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Peacomm.C Cracking the nutshell

Version: 1.0

Last Update: 21th September 2007

Author: Frank Boldewin / www.reconstructer.org

Table of Contents

ABSTRACTINTRODUCTIONTARGET OVERVIEW 1ST STAGE DECRYPTER OR HOW TO FOOL ANTIVIRUS EMULATOR-ENGINESANTI-DEBUGGING AND DEFEATINGTEA DECRYPTION AND THE TIBS UNPACKERFILES DROPPING AND WINDOWS DRIVER-CODE INFECTIONFINDING THE OEP AND DUMPING THE NATIVE PEACOMM.C BINARYCLEANING THE NATIVE CODE FROM VME DETECTION TRICKSDISSECTING THE ROOTKIT DRIVERCONCLUSIONREFERENCES

1. Abstract "No nutshell is as hard as it can't be cracked with the right tools. My tools are my teeth and I'm mad about nuts of every kind!"

The nutcracker

On 22th August 2007 I received an email informing me about "New Member Confirmation", including Confirmation Number, Login-ID and Login-Password. To stay secure I should immediately change my Login info on a provided website link. So I've started investigating what surprises are awaiting people clicking on such kind of links. Next to a friendly message telling me that my download should start in some seconds, I also got a browser exploit for free, to

1

Page 13: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

ensure the "software package" gets really shipped. "Hey that's cool", I thought by myself. "It's like Kinder Surprise® - three in one!" Unfortunately, at this time I hadn't enough incentive for a deep analysis and so I just stored the malicious file called applet.exe in my archive for later fun with it. Last week I had enough free time to throw it into IDA and my debuggers. After approximately one hour of investigation it was clear for me that the time had come for a new research paper, as this malware disclosed several interesting techniques, especially in the rootkit area. The opponent for this paper is called "Peacomm.C" and outlines the currently latest variant of this infamous P2P malware. The security industry gave it also several other names like "Storm Worm", "Nuwar" or "Zhelatin". The first variant "Peacomm.A" was detected in the mid of January 2007 and since then it has grown to one of the most successful botnets ever seen in the wild. It uses an adjusted Overnet protocol for spreading and communication. Its main intense is spamming and DDoS attacking. Also the fast-flux service network which is being used by the criminals behind the attacks is really amazing and frightening at the same time. As its botnet activities are not the focus of this essay, I've included interesting other papers covering these topics.

2. Introduction This paper mainly focuses on two topics. The first one aims to extract the native Peacomm.C code from the original crypted/packed code, which means the following issues are covered in detail:

First stage XOR decrypter

Second stage TEA decrypter

TIBS Unpacker

Anti-Debugging code

Files dropping

The driver-code infection

Finding the OEP to the native Peacomm code

Finding and patching the VM-detection tricks

 

The second topic covers all the rootkit techniques of the spooldr.sys driver. These issues are:

Security products monitoring/disabling

SSDT file hiding

1

Page 14: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Shellcode injection for process spawning

System files locking

As goody to this paper, also included are the different binary dumps and commented IDA .idb files.

As always use caution when reproducing the work described here. Consider employing a virtual machine like VMWare or Virtual PC and perform the analysis on an isolated network to avoid the damage that could be caused by this malware. Use at your own risk!

3. Target Overview

To get an overview of our target first let's have a look at the chart in figure 3.1

Figure 3.1:

The first thing that happens in "area 1" right after the start of applet.exe is an easy XOR decryption of the data in "area 3" followed by jumping to this area which contains code now and performs several tasks, like files dropping, decrypting and unpacking the native Peacomm code in "area 2" and so forth. In the end all the imports for the native binary are being collected/set

1

Page 15: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

and the code in "area 2" gets executed to attend to its "real business". But let's cover this step by step.

4. 1st Stage decrypter or how to fool Antivirus emulator-engines

The figure 4.1 shows the complete routine used to decrypt the code in "area 3". The instruction at 0x40101e tells us the data of EAX it getting XORed with the value of 0x0149594f. But also take a look at the instructions above. Next to XORing the data the return value of a call to the function FreeIconList is added at 0x401019 as well.

Figure 4.1:

Why this? - You might ask now, because the FreeIconList call should always return the same value in EAX. So, this is a really useless behaviour, right? The solution is, that this is an often used malware trick, to crash or trigger an exception in Antivirus sandbox engines, because FreeIconList is a legacy function of windows and thus often not emulated by AV engines. While doing the research for this paper I've downloaded several samples of applet.exe and found out

1

Page 16: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

that next to the XOR key also lot's of other legacy API functions are used. Additionally, I've also discovered that the decryption engine completely changes from time to time. All of these routines were easy to understand for a reverser, but definitely doing its jobs to hide from AV signature based malware detection. Right after all the data has been decrypted (0x38d0 bytes) a jump at 0x40102d executes the code in "area 3" at 0x42321f. If you try to load applet.exe into the IDA disassembler, you won't be able to see the decrypted data at 0x42xxxx, because the binary works with fake PE- Header information. This could be fixed to see everything in the idb file, but you still would have crypted data in this area and an extra idc-script would be needed to emulate the decryption. A much faster way is to load applet.exe into Ollydbg, setting a breakpoint at 0x40102d with F2, running the code until breakpoint occurs, pressing F7 for one single step into "area 3" at 0x42321f and then dumping the whole binary using the Ollydump plugin. This is what I have done to have one idb file for commenting.

5. Anti-debugging and defeating

The next step before we can start reading the disassembly on a relaxed basis is to defeat a small anti-debugging trick. If you load the lately dumped "after 1st stage decryption" binary into IDA the new entry point will be 0x42321f. If you scroll down a little bit to address 0x42330d now, you'll see (figure 5.1) a lot of junk instructions (insb, arpl ...). As this code runs in user mode and insb/arpl instructions are privileged, meaning only usable from kernel mode without an exception and further the last instruction that makes sense at 0x423308 calls 0x423324, this junk must be something other than code. A short look using the "hexview" of IDA discloses that these "instructions" are for real data or better a string.

Figure 5.1:

1

Page 17: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

So, to get a "clean" disassembly, just mark the area between 0x42330d and 0x423322, press `U' and then `A' in IDA. This should give the result seen in figure 5.2 There are several of these little anti-debugging tricks in the second stage and it's wise to clean the complete disassembly before moving on with manual decompilation. Fortunately for this binary, I have already done all the boring work. ;)

Figure 5.2:

1

Page 18: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

6. TEA decryption and the TIBS unpacker

Like in many other sophisticated malware, also Peacomm makes use of an established cryptographic algorithm. One of the first things that can be done to quickly find signatures of well-known crypto functions is to scan for them. Ilfak Guilfanov, the developer of IDA Pro, wrote a small plugin called findcrypt to do this job. Also an Ollydbg port of this tool is available, but personally I always count on KANAL v2.82 (figure 6.1), a PEID plugin, which has the most signatures from my experience.

Figure 6.1:

As we can see from the snapshot above two signatures were found. The first one at 0x423f44 and the second one at 0x423f93. Furthermore, we get the information, that KANAL found a single DWORD which is used by multiple algorithms like TEA/N, RC 5/6, SERPENT and ISAAC, which means we have to read some disassembly.

Figure 6.2:

1

Page 19: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

In figure 6.2 you can see the main function of the TEA algorithm. It uses a 128bit key (at 0x426A90) for decryption and will be called several times in a loop until all the data of every PE-section was decrypted. For further infos and sample implementations of the TEA algorithm consult the link in the references

Right after decrypting all the data with the tiny encryption algorithm the TIBS unpacker routine is called. It enumerates all PE-sections as well and then unpacks its data. The unpacking code can be found between 0x4269f7 0x426a6e.

This non-public packer is used very often in malware nowadays and most Antivirus companies have a generic detection implemented in their scanning engines by now. So, if a malicious code is not detected by its variant, e.g. because of its polymorphic behaviour, most AV-engines still detect it by reporting something like: Trojan:Win32/Tibs.DU.

7. Files dropping and Windows driver-code infection

After all that decrypting/unpacking has been done, a routine at 0x4239df is called, which disables the windows file protection for tcpip.sys and its cached copy using the non-exported sfc_os.dll function 5 called SfcFileException (see the reference link for further information). Confusingly enough, no more action is done with this file, so I thought it must be an artefact from former variants. First I believed an earlier version of Peacomm patched the max number of

1

Page 20: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

outbound connections, which is typical for malware used for DDoS attacks, but friends like Elia Florio from Symantec research told me, that older variants infected tcpip.sys to load the rootkit driver spooldr.sys. But for this special case the kbdclass.sys driver and its cached copy gets infected with additional code for loading the spooldr rootkit driver. Nicolas Falliere added the info, that the SFC infection trick was broken for about 3 weeks. So they've started infecting other driver like kbdclass.sys or cdrom.sys.

Next to the infection of kbdclass.sys two files are dropped. First one is a self-copy of applet.exe saved as spooldr.exe in %systemroot% and the second file is the overlay containing the spooldr.sys driver, which gets detached to %systemroot%\system32.

8. Finding the OEP and dumping the native Peacomm.C binary

Right after dropping the files and infecting the keyboard driver, a routine at 0x423e5b scans the decrypted/unpacked native Peacomm binary for its libraries and belonging function names and stores the matching addresses to the functions.

Then a system command is executed to allow spooldr.exe at the windows firewall with the following command:

netsh firewall set allowed program "%systemroot%\spooldr.exe" enable

The last action is a jump to the OEP at 0x403531 (see figure 8.1).

Figure 8.1:

To get a clean native Peacomm.C binary, just load applet.exe into Ollydbg, set a breakpoint with F2 at 0x40102d, run using F9, clean bp with F2, step into with F7, set a breakpoint at 0x423283, run again, clean bp, step into the allocated memory and search for the jump instructions to the OEP, as this is a dynamic address for sure. Then set a bp, run again, clean bp, step into with again and use the Ollydump plugin to save the binary. That's all! Or if you are lazy, just use my dumped version, shipped with this paper. ;)

9. Cleaning the native code from VME detection tricks2

Page 21: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Ok, now as we have a clean native Peacomm.C code for analysis it would also be nice to run it on a virtual machine like VMWare or VirtualPC.Unfortunately, we have to defeat two vm-detection routines before achieving this. The first check is right after the OEP at 0x403389, calling a routine at 0x4031bc. It's a VMWare detection using the ComChannel VMXh magic trick (see Figure 9.1)

Figure 9.1:

Just some instructions away from the VMWare detection is the second call to a virtual machine detection routine at 0x40339c jumping to 0x40314e. This time it is a Microsoft VirtualPC detection using the illegal Opcode exception trick (see Figure 9.2). For further information on both VM- detection tricks, read Peter Ferries excellent

2

Page 22: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

paper on virtual machine attacks v2. A Link to this paper is included in the references.

Figure 9.2:

If one of the environments is being detected, a jump to a "sleep forever" loop at 0x403524 is called. One easy way to circumvent this, would be to patch 2 bytes at 0x40338f with a direct jump to 0x4033a9 (push ebx).Use your favourite hex-editor or just Ollydbg, if want to do this.

10. Dissecting the rootkit driver

Ok, you've reached the last part of this small essay. In my opinion the most interesting one, as this rootkit uses some techniques I haven't seen in the past. But before I get into detail, first let's

2

Page 23: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

observe what the RkUnhooker report said.

The figure 10.1 just shows an oldschool SSDT hook of the native function NtQueryDirectoryFile and the figures 10.2 and 10.3 reveal the therewith related hidden processes/files.

Figure 10.1:

Figure 10.2:

Figure 10.3:

The figure 10.4 also shows the call to the hooking code for all spooldr* files.

Figure 10.4:

But this is definitely not really a cutting edge rootkit, right? And any run-of-the-mill AV solution or personal firewall would detect or block this. So, where's the news?

Take a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine with a parameter that points to a driver- supplied callback routine.

Figure 10.5:

2

Page 24: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

On the windows driver developers site OSR-Online we can read:

"PsSetLoadImageNotifyRoutine registers a driver-supplied callback that is subsequently notified whenever an image is loaded for execution."

For detailed information on this function consult the link in the references.

Figure 10.6 shows us this routine in detail.

Figure 10.6:

2

Page 25: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

As you can clearly see from the commented code at the beginning it checks if a driver or a normal user mode program has been loaded. If it is a program it gets terminated using the ZwTerminateProcess function and if it is a driver, the routine scans for its EntryPoint and patches it with:

XOR EAX, EAX RETN 8

So, after the driver starts, it just returns with 0 and ends. As we learned from the former chapters this all happens right after loading an early driver that was infected before, like kbdclass.sys, cdrom.sys or tcpip.sys, who then immediately spawns our

2

Page 26: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

rootkit driver. Every driver and program that is loaded after spooldr.sys is under full control of the rootkit. And now it should be clear why a normal SSDT hook for hiding the driver is enough. No security products, no problems. ;)

Here is a complete list of security products which are disabled at system start:

Zonealarm Firewall Jetico Personal Firewall Outpost Firewall McAfee Personal Firewall McAfee AntiSpyware McAfee Antivirus F-Secure Blacklight F-Secure Anti-Virus AVZ Antivirus Kaspersky Antivirus Symantec Norton Antivirus Symantec Norton Internet Security Bitdefender Antivirus Norman Antivirus Microsoft AntiSpyware Sophos Antivirus Antivir NOD32 Antivirus Panda Antivirus

Check out the After-1st-XOR-Decryption-Dump.idb file for details which executables are in conjunction with these products.

Another sneaky trick can be seen in figure 10.7. This special function scans the explorer.exe process and hooks the import entry of the PeekMessageW function, which is called very often by explorer, with a special shellcode that deletes the import entry for PeekMessageW and spawns the spooldr.exe in this trusted space. This is a nice trick to omit the usage of CreateRemoteThread, which most security products monitor today and as not all available sec-software were included in the termination list, it was a wise decision to use this much more sophisticated way.

Figure 10.7:

2

Page 27: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

The last thing what is worth being mentioned, can be seen in figure 10.8 The rootkit also locks two files, ntoskrnl.exe and the infected kbdclass.sys driver, using NtLockFile. My assumption was that this is to reject access to these files from user mode, e.g. when tools like Hijackthis try to scan for suspicious changes in these files, because file locking is no stumbling block for kernel mode tools like rootkit scanners or AV-products.

Figure 10.8:

2

Page 28: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

11. Conclusion

After this small excursion into the world of Peacomm.C it should be clear that the developers of this malware deal with a lot of nasty tricks to gain access to victims' machines and hide from detection, even on standard protected boxes. Analyzing malware gets harder and just using the usual auto-analysis tools, seems not very target-aimed. The AV and PFW industry has to think of better heuristics in behaviour analysis, smarter ways of generic unpacking and more reliable system integrity mechanisms to safely recognize such cunning tricks used in sophisticated malware like this one. As 100% solutions will stay a pious hope, reverse engineering knowledge is still the weapon of choice for the analyst. I hope you enjoyed this paper a little and as always - constructive reviews are much appreciated.

12. References

Peerbot: Catch me if you can http://www.symantec.com/avcenter/reference/peerbot.catch.me.if.you.can.pdf

Fast-Flux Service Networks http://www.honeynet.org/papers/ff/fast-flux.pdf

Peer-to-Peer Botnets: Overview and Case Study http://www.usenix.org/events/hotbots07/tech/full_papers/grizzard/grizzard.pdf

The Tiny Encryption Algorithm (TEA) http://www.simonshepherd.supanet.com/tea.htm

Attacks on Virtual Machines v2 http://pferrie.tripod.com/papers/attacks2.pdf

Disabling WFP on a file for 1 minute via undocumented SFC API http://www.bitsum.com/aboutwfp.asp#Hack_Method_3

The PsSetLoadImageNotifyRoutine function http://www.osronline.com/DDKx/kmarch/k108_5sc2.htm

2

Page 29: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

ECE 4112 Internetwork SecurityBinary Auditing

Group Number: _________Member Names: ___________________ _______________________

Section 1: Simple

Q1.1 Execute the binary simple and describe the results?

Q.1.2 What is the correct password?

Section 2: Getting Acquainted with the Dissembler

Q2.1 What is the offset location of the password?

Q2.2 What is length in bytes of the password?

Q2.3 By using hexdump to search the offset, what data segment those it correspond with?

Q2.4 What data segment those 0x8048614 correspond with?

Section 3: Patching of Simple Q3.1 Upon executing this instruction, the EAX register will always contain what value, no matter what password is entered?

2

Page 30: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Q3.2 Execute the binary simple_biew and describe the results?

Q3.3 Execute simple_hexedit, type the real password, and describe the results?

Q3.4 Using BIEW in disassemble mode compare the difference between simple and simple_hexedit at offset 0x49b?

Section 4: Malware Analysis

Q4.1 What type of file is the malware binary?

Q4.2 What is the name of the server, channel name, port number, and the name of the bot it attempts to join the channel?

Q4.3 Name at least five functions of this particular botnet?

Section 5: Red Pill

3

Page 31: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

Q5.1 Execute redpill.exe and describe the results?

Q5.2 What is the address of the instruction which contains the second yellow label?

Screenshot 1: Capture a screenshot of a redpill.exe with a yield of no virtual environment detection where both host and virtual OS are visible.

Q5.3 What value needs to be changed and what should it be changed to? Why does this not work on some virtual machines?

Section 6: Binary Packing.

Screenshot 2,3. Take a screen shot of each version opened in IDA showing the difference.

General Questions

How long did it take you to complete this lab? Was it an appropriate length lab?

What corrections and or improvements do you suggest for this lab? Please be very specific and if you add new material give the exact wording and instructions you would give to future students in the new lab handout. You may cross out and edit the text of the lab on previous pages to make minor corrections/suggestions. General suggestions like add tool xyz to do more capable scanning will not be awarded extras points even if the statement is totally true. Specific text that could be cut and pasted into this lab, completed exercises, and completed solutions may be awarded additional credit. Thus if tool xyx adds a capability or additional or better learning experience for future students here is what you need to do. You should add that tool to the lab by writing new detailed lab instructions on where to get the tool, how to install it, how to run it, what exactly to do with it in our lab, example outputs, etc. You must prove with what you turn in that you actually did the lab improvement yourself. Screen shots and output hardcopy are a good way to demonstrate that you actually completed your suggested enhancements. The lab addition

3

Page 32: ECE 4112 Internetwork Securityusers.ece.gatech.edu/riley/ece4112/Projects/Binary... · Web viewTake a look at figure 10.5 and you will see a call to the function PsSetLoadImageNotifyRoutine

section must start with the title “Lab Addition”, your addition subject title, and must start with a paragraph explaining at a high level what new concept may be learned by adding this to the existing laboratory assignment. After this introductory paragraph, add the details of your lab addition. Include the lab addition cover sheet from the class web site.

Turn-in ChecklistAnswer Sheet with answers.Modified redpill.exe screenshot 2 screenshots from IDAAny additions for the lab.

3