Practical Malware Analysis
Kris Kendall and Chad McMillan
Outline
Why Analyze Malware?
Creating a Safe Analytical Environment
Static Analysis Techniques
Dynamic Analysis Techniques
Packing
Finding Malware
1-2
What is Malware?
Generally
Any code that “performs evil”
Today
Executable content with
unknown functionality that is
resident on a system of
investigative interest
• Viruses
• Worms
• Intrusion Tools
• Spyware
• Rootkits
1-3
Analyzing Malware
Why Analyze Malware?
• To assess damage
• To discover indicators of compromise
• To determine sophistication level of an intruder
• To identify a vulnerability
• To catch the “bad guy”®
• To answer questions…
1-4
Why Analyze Malware?
Business Questions
1. What is the purpose of the malware?
2. How did it get here?
3. Who is targeting us and how good are they?
4. How can I get rid of it?
5. What did they steal?
1-5
Why Analyze Malware?
Business Questions
6. How long has it been here?
7. Does it spread on its own?
8. How can I find it on other machines?
9. How do I prevent this from happening in the
future?
1-6
Why Analyze Malware?
Technical Questions
1. Network Indicators?
2. Host-based Indicators?
3. Persistence Mechanism?
4. Date of Compilation?
5. Date of Installation?
1-7
Why Analyze Malware?
Technical Questions
6. What language was it written in?
7. Is it packed?
8. Was it designed to thwart analysis?
9. Does it have any rootkit functionality?
1-8
Creating a Safe Analytical
Environment
Creating a Safe Environment
Do Not Run Malware on Your Computer!
Old And Busted
• Shove several PCs in a room on an isolated
network, create disk images, re-image a target
machine to return to pristine state
The (not so) New Hotness
• Use virtualization to make things fast and safe
• VMware (Workstation, Server [free])
• Parallels (cheap)
• Microsoft Virtual PC (free)
• Xen (free)
1-10
VMWare Snapshot Manager
1-11
Virtualization is not the Only Option
Use Truman (by Joe Stewart @ Lurhq) to
automatically re-image physical machines
• http://www.lurhq.com/truman/
Use a hard drive write cache card
• CoreRestore from CoreProtect
• Designate a portion of the hard drive as protected,
all writes to the protected portion get redirected to
another part of the disk
• Reboot to restore the drive
to the previous state
1-12
Reduce Risk using Platform Diversity
If possible, perform static analysis in a
different OS than your malware targets
• Avoid the oh-$@!7 double-click
• IDA Pro for OS X is coming soon
1-13
Creating a Safe Environment
It is easier to perform analysis if you allow the
malware to “call home”…
However:
• The attacker might change his behavior
• By allowing malware to connect to a controlling
server, you may be entering a real-time battle with
an actual human for control of your analysis
(virtual) machine
• Your IP might become the target for additional
attacks (consider using TOR)
• You may end up attacking other people
1-14
Creating a Safe Environment
Therefore, we usually do not allow malware to
touch the real network
• Use the host-only networking feature of your
virtualization platform
• Establish real services (DNS, Web, etc) on your
host OS or other virtual machines
• Use netcat to create listening ports and interact
with text-based client
• Build custom controlling servers as required
(usually in a high-level scripting language)
1-15
Virtualization Considerations
Using a Virtual Machine helps, but…
Set up the “victim” with no network or host-only
networking
Your virtualization software is not perfect
Malicious code can detect that it is running in a virtual
machine
A 0-day worm that can exploit a listening service on your
host OS will escape the sandbox
• Even if you are using host-only networking!
1-16
Performing Malware Analysis on
Windows
Static vs. Dynamic Analysis
Static Analysis
• Code is Not Executed
• Autopsy or Dissection of “Dead” Code
Dynamic Analysis
• Observing and Controlling Running
(“live”) Code
• Ant Farm
The Fastest Path to the Best
Answers Will Usually Involve a
Combination of Both.
1-18
Static Analysis “the dissection”
Static Analysis
Static Analysis is Safer
• Since we aren’t actually running malicious
code, we don’t have to worry (as much)
about creating a safe environment
1-20
File Fingerprinting
As a first step, fingerprint the files you are examining so
you will know if they change during analysis
Use md5deep, md5sum, Hex Workshop, etc
krk@ws ~> md5sum hello* > md5sum_hello_files.txt
krk@ws ~> cat md5sum_hello_files.txt
611957bd6a2ad9642027904a65f3638e hello
7ab03b44ac6a20b0fa0cc80b636b0f51 hello.c
bef5bfe7ddf597c8ea86eecb2cbf52a3 hello_debug
38e85544dd4349c523430923eafc86ac hello_static
When you have completed your analysis, or at various
points along the way, you should go back and check the
md5sums to ensure the values have not changed!
krk@ws ~> md5sum -c md5sum_hello_files.txt
1-21
Virus Scan
Always scan new malware with an up to date
virus scanner.
Someone else may have already discovered
and documented the program you are
investigating
If the code is not sensitive, consider submitting
to http://www.virustotal.com
1-22
PEiD
PEiD is a free program that will tell you details about
Windows executable files
Identifies signatures associated with over 600
different “packers” and compilers
1-23
“Caprica6”
Mandiant tool that identifies packed code (amongst
other things)
Covered in detail later in this talk
1-24
Strings
Sometimes things are easy
First look at the obvious – strings
$ strings unknown2.exe
...
<host> <port>
-install <host> <port>
-remove
EC.1
EC.2
cmd.exe
connect thread started!
...
Strings, Bintext, Hex Workshop, IDA
Pro
Be aware of Unicode
1-25
Strings
C:\analysis> strings
Strings v2.1
Copyright (C) 1999-2003 Mark Russinovich
Systems Internals - www.sysinternals.com
usage: strings [-s] [-n length] [-a] [-u] [-q] <file or directory>
-s Recurse subdirectories
-n Minimum string length (default is 3)
-a Ascii-only search (Unicode and Ascii is default)
-u Unicode-only search (Unicode and Ascii is default)
-q Quiet (no banner)
1-26
Strings
Be careful about drawing conclusions
There is nothing stopping the attacker from
planting strings meant to deceive the analyst
However, strings are a good first step and
can sometimes even provide attribution
rem barok -loveletter(vbe) <i hate go to school>
rem by: spyder /
[email protected] / \
@GRAMMERSoft Group / Manila,Philippines
On Error Resume Next
dim fso,dirsystem,dirwin,dirtemp,eq,ctr,file,
vbscopy,dow eq="" ctr=0
Set fso = CreateObject("Scripting.FileSystemObject")
set file = fso.OpenTextFile(WScript.ScriptFullname,1)
1-27
Conducting Web Research
Look at unique strings, email addresses,
network info
• But! the intruder/author could be watching for you.
Search the web
• Be careful … Google cache != Anonymous
• You might find other victims, or complete analysis
• Don’t forget newsgroups
It helps if you know Chinese (or Russian, or
Spanish)
• http://www.google.com/language_tools?hl=en
1-28
No Strings Attached
Point-and-click “packers” make it easy for
intruders to obfuscate the contents of binary
tools
More on packers later…
We can still gather useful information by
examining the layout of the executable file
1-29
Inside the PE Format
Executable File Formats
• Windows: PE (Portable Executable)
www.microsoft.com/whdc/system/platform/firmware/PECOFF.
mspx
• Linux: ELF (Executable and Linking Format)
www.skyfree.org/linux/references/ELF_Format.pdf
Useful Information
• Imports
• Exports
• Metadata
• Resources
1-30
Inside the PE
Tools
• PEview – Wayne Radburn
http://www.magma.ca/~wjr/
• Depends – Steve Miller
http://www.dependencywalker.com
• PEBrowse Professional – Russ Osterlund
http://www.smidgeonsoft.com
• Objdump – Cygwin
http://www.cygwin.com
• IDA Pro – DataRescue
http://www.datarescue.be
• Resource Hacker – Angus Johnson
http://www.angusj.com/resourcehacker/
1-31
PEview
1-32
PEview
1-33
Resource Hacker
1-34
Disassembly
Automated disassemblers can take machine
code and “reverse” it to a slightly higher-level
Many tools can disassemble x86 code
• Objdump, Python w/ libdisassemble, IDA Pro
But, IDA Pro is what everyone uses
Manual examination of disassembly is
somewhat painstaking, slow, and can be
hard
• Keep your goals in mind and don’t get bogged
down
1-35
36
Performing Dynamic Analysis
Dynamic Analysis
Static Analysis will reveal some immediate
information
Exhaustive static analysis could theoretically
answer any question, but it is slow and hard
Usually you care more about “what” malware
is doing than “how” it is being accomplished
Dynamic analysis is conducted by observing
and manipulating malware as it runs
1-38
Safe Environment
Our nice, safe analytical environment wasn’t
that important during static analysis
As soon as you run an unknown piece
of code on your system, nothing that’s
writable can be trusted
In general we will need to run the program
many times. Snapshots make life easier
1-39
System Monitoring
What we are after
• Registry Activity
• File Activity
• Process Activity
• Network Traffic
The tools
• SysInternals Process Monitor
• Wireshark
• + a whole bunch of other stuff
1-40
Process Monitor
Process Monitor is a SysInternals tool that
records information about File System,
Registry, and Process/Thread activity
If you liked Filemon and Regmon—you’ll
really like Process Monitor
Changes from Filemon/Regmon:
• Procmon will record everything, user can change
display filter at will
• Procmon tracks process activity
1-41
Process Monitor
The key to effective use of Process Monitor
for malware analysis is filter configuration
1-42
Wireshark
Wireshark is a protocol analyzer that
captures and decodes network traffic
Wireshark is not aware of what process
generates traffic
As with Process Monitor, the key is using
filters to focus on what is relevant
1-43
Dynamic Analysis Example
Use Process Monitor and Wireshark to
quickly reveal the behavior of a malicious
program
1-44
Other Tools
Port Explorer
• http://www.diamondcs.com.au/portexplorer/
• Monitors network traffic at the connection level
Malcode Analysts Pack
• http://labs.idefense.com/labs-software.php?show=8
• fakeDNS
Paros, Fiddler
• Web proxies that can capture and modify traffic
Norman Sandbox
1-45
Beyond System Monitoring
In some cases, simple Static Analysis and System
Monitoring will answer your questions
Beyond this point, you need a debugger
• Windbg (Microsoft)
• Ollydbg (Oleh Yuschuk)
• Ida Pro (Datarescue)
Or a scriptable debugger
• Paimei - http://pedram.redhive.com/PaiMei/docs/
• Vtrace - http://www.kenshoto.com/vtrace/
1-46
Armored Malware
Armor Features
Encryption Anti-Vmware
Compression Polymorphic/Self-
Obfuscation Mutating
Anti-Patching Restrictive Dates
• CRC Checking Password Protected
Anti-Tracing Configuration Files
• SoftICE, ICEDump
Detection Code.
• Crashes OS if they are
Found in Memory
Anti-Unpacking
1-48
Viruses can Circumvent AV?
1-49
Packers
Origins
• Compression
Bandwidth reduction
Save space
Current use
• Bypass anti-virus signatures
• Prevent reverse engineering
1-50
Packers
UPack by Dwing. 08.IV.2005. NSPack by North star Tech.
Mew by Northfox. 22.IX.2004. 05.VI.2005.
UPX by Laszlo & Markus. eXPressor by CGSoftLabs.
03.VII.2004. 28.III.2005.
Packman by bubba. 27.II.2005. Thinstall by Jonathan Clark.
EZIP by Jonathan Clark. 29.III.2005
21.VII.2001. PEBundle by Jeremy Collake.
PE-PaCK by ANAKiN. 12.I.1999. 12.III.2004.
FSG by bart. 24.V.2004. PECompact by DevelTek.
06.IV.2005.
Dropper by Gem. 13.III.2005.
AS-Pack (shareware) by
CExe by Scott. 20.III.2003. Solodovnikov Alexey. 07.I.2002.
PE Diminisher by tERAPHY. NeoLite (shareware) by
11.IX.1999. NeoWorx Inc. 04.IV.1999.
PECRYPT32 by random, killa WWPack 32 by Piotr Warezak.
and acpizer. 12.I.1999. 07.VII.2000.
PESpin by cyberbob. 09.III.2005. ARM Protector by SMoKE.
22.IX.2004.
1-51
Side effects of Packing
No strings (legitimate)
“Few” imports
• Kernel32.dll
LoadLibrary
GetProcAddress
VirtualAlloc
VirtualFree
High entropy sections
• Marked as code / executable
• Large difference in Virtual size of section vs. real
size
Fewer Sections
1-52
Side Effects of Packing - Imports
Unpacked
Packed
1-53
Side Effects of Packing – Section Size
and Entropy
Unpacked : Entropy (st dev): 0.7653
Packed : Entropy (st dev): 1.0666
1-54
Strings on Packed Binary
C:\analysis>strings sak.exe
Strings v2.1
Copyright (C) 1999-2003 Mark Russinovich
Systems Internals - www.sysinternals.com
!Windows Program
$PE
@.data
.idata
$s!
;Ot
(!B
KERNEL32.dll
LoadLibraryA
GetProcAddress
DM.D
&DS
d'D
~E-
1-55
So, Packing == Bad?
No … there are legitimately packed apps
• Google Desktop Search – “Troubleshoot
Network.exe” : PECompact V 2
• Adobe Acrobat 7.0 –
AdobeUpdateManager.exe : PECompact V 2
So, how do you tell the difference?
1-56
Knowing the difference
Collect as much static info about a PE as
feasible
Correlate the extracted information
Score / rate what you know
1-57
“Caprica Six”
PE Header Anomolies
• Incorrect image size
• Unaligned sections
• Non-ASCII section names
• Overlapping headers
Entry point signature detection
• Quick scan using xor from the entry point
Full section roaming signature detection (using modified
Boyer-Moore search)
• Signatures are developed subjectively (by reverse engineering)
to lower FP’s and obtain signatures for “code” that would be
difficult to modify (and are necessary for unpacking)
1-58
“Caprica Six” (cont’)
Comparison of EP and roaming signature
• Used to determine trying to hide packer use
Adding a new section with “fake code”
Instruction swaps at the entry
Full section entropy calculation (sliding window check
with standard deviation – patent application submitted)
• Comparison against section characteristics (code, executable …
not resource)
PE Import extraction
Digital Signature checking (code signing with X509 Cert)
Additional info (section names, section sizes, etc).
Scoring
1-59
PE Anomalies – Overlapping Header
DOS Header is
actually overlapped
by NT Headers
Loader allows for
this (fields in
header are ignored)
Module and
functions are
scattered!
What compiler
does THIS???
1-60
Roaming Signature – Multiple
detections
Signature detected
in 2 sections
• .data
• .rsrc
Why? Embedded
executable ALSO
packed!!
1-61
Demonstration
1-62
Unpacking
Ollydbg OllyScript OllyDump
Ollydbg bp in Library OllyDump
UnFSG, upx, etc
PEiD
ProcDump
OEPFinder
etc…
1-63
Other Unpackers
Ollydbg with the Ollydump plugin and a variety of OllyScripts *
IDAPro with the “Universal Unpacker Plugin”.
Generic Unpacker Win32 by Christoph Gabler. 31.VII.2001.
Win32 Intro by Vitaly Evseenko. 21.IX.1999.
UN-PACK by Snow Panther. 21.IV.2003.
UNPE-SHiELD by G-RoM. 1.VI.1999 de-CodeCrypt by xOANINO.
10.V.2000.
Ni2Untelock by Ni2. 31.XII.2000.
DeYoda by C-ripper. 18.II.2001.
UnPEProt by Lorian. 23.I.1999.
DePE-PACK by Unknown One. 03.V.2002.
Un-FSG by SMoKE. 12.I.2003.
un-ASPack by dtg. 26.VIII.1999.
StealthKiller by Snow Panther. 04.IX.2002.
1-64
[email protected]
[email protected]
1-65