Did Mandiant’s Audit Viewer find something in Conficker?
I was learning how to use Mandiant’s Memoryze the other day and having a bit of trouble getting to know the XML configuration files. My real task was to get Memoryze working with memory shared from a remote system using F-Response. To do this I was pointing Memoryze to the memory instance, instead of an image file, and then using Audit Viewer to parse the information. Unfortunately I was not able to get it working. This was more likely due to user error and my not initially understaning how to implement the XML configuration file properly. (More on F-Response and Memoryze later!!)
Right when I thought I had figured out how to use the XML files I got a pleasant little surprise on the Mandiant blog. Audit Viewer has been updated to run Memoryze automatically. Now we have a quick and easy method to set up Memoryze’s XML configuration files automatically. Parsing memory for valuable information has just become is as easy as it can get.
Before I was able to test this new version of Audit Viewer with F-Response I got a chance to use it on a memory dump from a system infected by the Conficker malware. Conficker has been analyzed in detail by several organizations. I like the series of blog posts on the Symantec blog as well as the very detailed analysis by SRI International. Using the capabilities of Memoryze, however, I was able to see some Conficker activity that was not mentioned in any of the analysis that I have reviewed so far.
I’ll start out by mentioning, as most of you know, I am not a malware analyst. I’m just pointing out a few things that appear to be interesting.
Let’s start with quick background. The system that I gathered the memory from was a Windows XP SP3 system that was infected by Conficker via a USB drive. I don’t have the system any more and although I could infect another system to confirm some of this information I don’t have a stand alone system readily available to infect. We all know now that Conficker has some builtin virtual machine detection so I didn’t attempt to replicate using a VMware image.
The system showed the usual symptoms. The Registry pointed to a randomly named service calling a randomly name DLL in the c:\WINDOWS\system32 directory. In this case the DLL was named taqswng.dll. The following image shows a listing of all the files that start with “ta” in the System32 directory. Conficker marks the file as hidden so I had to use the “dir /A H” command to get it output with the rest of the files. (Right click on any image and select “View Image” to see a larger, more readable, image.)

Since I was here I ran two other commands. First I wanted to see that processes were currently running. Using the Tasklist command I determined that the process with ID 1484 looked interesting. It is calling many other services that resemble the functionality outlined in many of the Conficker write-ups. The image below highlights what I am talking about.

Next I wanted to know what the system would display as open connections. Conficker is suppose to start an HTTP service on a random port between 1024 and 10,000. The next image shows that the process 1484 does have a LISTENING port on 2980.

Now, I didn’t think that I would get any new information out of reviewing the memory of this system. I just wanted to show myself what Memoryze could offer and how I could leverage it in the future when investigating processes. After I used Audit Viewer to parse the memory for everything (use the PDF manual that is provided as part of the download to help you use Audit Viewer and Memoryze) the first thing I did was locate process 1484 and check the files tab to see if I noticed anything. After review I noticed the taqswng.dll file was listed.

Excellent but I have to admit. This would have been lost in the shuffle to me. Basically, this is good verification that I have found the proper process. Next I checked the Port tab. This is where it gets interesting. From the netstat command I know that I should be looking at TCP port 2980 and UDP ports 1023 and 1034 (both UDP ports on the loopback). But look what Audit Viewer gives me.

But where does TCP port 1033 come into the picture? I wish I still had this system so that I could try and connect to this port. I did a quick review of all the analysis resources I am aware of and they do not reference a second listening service. I can tell you that we did verify that this was Conficker.B and not Conficker.C. Of course the varient does not matter because this would be different functionality.
The next interesting part came when I reviewed the Memory Sections tab. The information provided here points to the process accessing the “index.dat” file. Now, I’m not sure if this is to get the proxy settings to help access the Internet. It very well could be and I have not researched to determine if this is the case. But why Conficker is accessing the files listed in the image below are beyond me. As with the extra port, there is no mention of this behavior in any Conficker resource.

If anybody has an answer to these questions I would like to know. Post your explanation in the comments or, if you would rather speak with me privately, just include a valid email address in your comment and I will contact you directly. I would have investigated this a little more deeply but due to time and resources I thought it better to get the question out there.
Good luck if you are still dealing with Conficker. While you are addressing it, beware Virut.
Go forth and do good things,
Don
Help support my training and travel to security conferences. Get your SANS Training and GIAC Certifications through the Security Ripcord.
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.









March 3rd, 2009 at 11:10 am
Couldn’t the port be associated with one of the other services co-existing in the svchost process?
March 3rd, 2009 at 5:23 pm
@olle
Yes, you could be correct, but I am not certain. What really concerns me, and perhaps I did not express it in the post, is that the netstat command should have shown 1484 LISTENING on that port. This means that some part of the operating system is hiding that port from commands and tools. Although I am not going to say that it is rootkit type behavior, it is starting to look a little more like it.
Don
March 3rd, 2009 at 9:46 pm
It looks like DCE RPC port form another service, did you check the port with some rpc enumerator?
March 3rd, 2009 at 10:14 pm
@ juano,
No, we weren’t actually looking for anything other than verifying consistent system artifacts to distinguish between Conficker.B and Conficker.C. My analysis stopped once I made that determination and I moved onto other tasks. So, I was not able to follow up on this port to verify or see what it did upon connection.
What tools would you recommend to perform the rpc enumeration on this port?
Don
March 3rd, 2009 at 10:25 pm
There are lots of services hosted by svchost process. The file index.dat most probably is opened by some other service.
Port 1033 is called netinfo.
If you happen to get the sample run it through virustotal.com – I bet you’ll see that it’s not a new variant.
Regards,
Dimiter
March 4th, 2009 at 2:32 am
@Dimiter,
Yes, Audit Viewer did show several instances of svchost running. Each one different and all of them legitimate processes. Audit Viewer parses the memory associated with each of these processes separately. Although I cannot confirm there is not bleed over I don’t imagine there could be. The beauty of parsing memory is you see what is actually occurring with the process. In this case, all of this information is associated with the malicious process. Which is why I am raising these questions.
As to sending a sample of the malware to VirusTotal, doing so might not have actually helped in this instance. Conficker.C was only out for a short time, actually when we started it working our project the new variant was just documented by SRI as Conficker.B++, and there is no telling when the signatures to tell the difference would be available to VirusTotal as nobody was indicating a new variant in their virus databases. Submitting the sample might have identified it, but we decided to rely on the presence (or lack thereof) of specific artifacts associated with the newer version of the malware. Knowing how to look for specific artifacts associated with malware is critical for an incident responder. VirusTotal, although useful, should not be the only means utilized to identify and distinguish malware or their variants.
Don