Friday, September 12, 2014

Super Sunday Funday Forensic Challenge - Update 2

Hello Reader,

Current Contest


Four people have solved Level 3 and have advanced on to Level 4 out of 116 who have tried so far. Of those four, one has already solved Level 4 and is on to the final challenge Level 5! Wish them luck as it is not for the faint of heart.

If you have questions I am planning to be in #dfir on irc.freenode.net on 9/11, 9/12, 9/15 and 9/16. If you have questions get an IRC client and come ask them. I may be on during the evening weekends but no guarantee to do so. Other players are in the channel though and you are welcome to talk amongst your selves.

For those of you not playing, or looking for a break here is some more good information.

Learn Windows Forensics from me!

I'll be co-teaching SANS FOR408 with Rob Lee in Ft. Lauderdale, FL at DFIRCon East Nov 3rd-8th 2014. If you want to spend a week learning everything you can about Windows forensics, and nights going deeper into the artifacts/structures if you want, I can't wait to meet you. As a bonus SANS has put out a $400 coupon for the event, go here to claim it.

Solutions to the past contest

Something I have not posted that I've been promising is the answers to the last 5 stage challenge. Let's continue that now. 

Stage 2 Question:


You found where the attacker was coming from and got access to the system. You have obtained a memory dump and you see connections to a remote IP address. How would you go from knowing an IP addresses to knowing:
1.       What process made the connection
2.       Whether the process was injected into
3.       Whether the connection and the loaded software is persistent
4.       When the process first started and what other processes followed it

Stage 2 Answer from a winner: 


1: What process made the connection. 
You can determine what process made the connection by running the netscan plugin of Volatility.  It will return the remote IP for current and recent connections as well as the Process ID for those connections.

2: Whether the process was injected into. 
Working with determining if a process is injected it can be best to start with the malfind plugin of Volatility.  This plugin scans for Portable Executables and any other section of memory that is marked as executable, but that does not have a mapped file on the hard drive.  We can isolate our malfind plugin to just work against the PID we identified from netscan to limit how many hits we have to work against. Malfind can dump suspicious memory sections so that they can be checked on Virustotal, checked out by a malware analyst or scanned with AV.

If malfind doesn’t get your evidence of injection work with the ldrmodules Volatility plugin to look for unlinked dll files as well as evidence of process hollowing if the executable itself does not show as being mapped. 

It is less direct, but I like to start with running the psxview module and having a snack while I wait for this big catch all plugin to look for evidence of threads running in memory that are not in the doubly linked list of is otherwise hidden or suspicious.  Psxview will be most likely to catch it if our issue is a rootkit as well.

3: Whether the connection and the loaded software is persistent. 
I am a little unsure of if we are limited to working from the memory dump from this scenario. If we are, then I would run the Volatility hivelist plugin to determine if I have the Software hive as well as the NTUSER hive.  These are the most common location for “Run” keys that malware uses for persistence.  If the Software hive isn’t loaded into RAM for some reason I will be sorely disappointed, but I will still use the printkey plugin to scan for autoruns and show the key values at common locations such as :

“Software\Microsoft\Windows\CurrentVersion?\(Run|RunOnce)” I wish printkey could use those GREP characters as well.  I should work on contributing to the project instead of complaining about it though.  I would like to contribute to something awesome like Volatility once I complete my bachelor’s degree next year.  But I digress.  

There are tons more autorun locations for persistence. Another popular one seems to be SOFTWARE\Microsoft\Windows\CurrentVersion\Winlogon\Userinit\userinit.exe.  If I had access to the disk I would run a search for the known IP address in the registry hives to see if the IP came up from being hard coded into any kind of beacon in the registry. I would use autorunner from Mark Woan to check for autorun activity on the drive as well if I had not yet found what I was looking for. . 

4: When the process first started and what other processes followed it. 
To determine when the process first started, what spawned the process, and what processes it might have spawned you could use the pstree plugin from Volatility.  I get a little lost in the dots using pstree and always fall over to Redline to show me the PID PPID relationship as well to make sure my eyes aren’t playing tricks on me. Both of them will show what process were started by what other process, as well as the start time for the processes. 


The only answer I needed:
What I was really looking for here was an understanding of someones process to find these things. While it didn't matter what tool they ran, everyone who submitted ran Volatility. If they said volatiltiy I wanted to see an understanding of what plugins they would run, what they did and what they would expect. This stage wasn't very hard if you've done any kind of memory analysis.