Smart DLL execution for Malware Analysis in Sandbox Systems

While analysing several suspicious DLL files I noticed that some of these files (which were obviously malicious) didn’t perform their malicious activity unless a certain function was triggered. The malware used a registry entry to execute a certain function that is exported by the DLL called „InstallM“. I had to run „rundll32.exe malware.dll,InstallM“ to trigger the malicious activity.

In order to automate the process of A) analyzing the exported functions and B) run the various DLL functions I created a script called „DLLRunner“. What it does is rather simple:

  1. First, it uses the Python module pefile to analyze the PE and retrieve a list of all exported functions with name and ordinal.
  2. Second, it executes the various exported functions by name or ordinal
  3. Third, it passes a set of parameters to the function in order to satisfy requirements and trigger any activity (simple „fuzzing“)

This is what it does:

rundll32.exe path/to/file.dll,exportedfunc1
rundll32.exe path/to/file.dll,exportedfunc2
rundll32.exe path/to/file.dll,exportedfunc3

The simple fuzzing mode looks like this:

rundll32.exe path/to/file.dll,exportedfunc1 "0"
rundll32.exe path/to/file.dll,exportedfunc1 "1"
rundll32.exe path/to/file.dll,exportedfunc1 "http://evil.local"
rundll32.exe path/to/file.dll,exportedfunc1 "Install"
...

Examples

I tested the script on „url.dll“ which is typically located in the system32 folder.

python dllrunner.py -f C:\Testing\url.dll --debug
Run DLL in Sandbox

DLLRunner executing all exported functions

It caused a function called „TelnetProtocolHandler“ and „TelnetProtocolHandlerA“ to pop a telnet shell.

DLL in Sandbox

DLLRunner popping telnet windows via exported function „TelnetProtocolHandler“

If you pass „–fuzz“ DLLRunner will pass several params to the functions. This caused a function in „url.dll“ to pop browser windows with a fuzz parameter „http://evil.local“.

python dllrunner.py -f C:\Testing\url.dll --debug --fuzz
DLLRunner in Fuzzing

Running DLLRunner in Fuzzing mode

I am still not sure if this is something useful. I have to do further testing to improve the fuzzing idea. I am open to any advice and would like to see something like this integrated in common sandboxes like cuckoo.

Download

DLLRunner on Github

Tags: , , , , , , , , , , ,

About Florian Roth

Senior IT Security Engineer: THOR APT Scanner, Security Monitoring and SIEM, Web Application Audits, Advanced Persistent Threats (APT), Malware Analysis, Incident Response, Intrusion Detection, Perl / Python / .NET Programming, Data Visualization

Discuss: “Smart DLL execution for Malware Analysis in Sandbox Systems”

  1. Oktober 13, 2014 at 7:20 pm #

    Would be interesting to do some binary analysis of a function before passing in arguments. E.g. number of arguments used or even types.

    Posted by