Haow do I sandbox?!?!
Cuckoo Sandbox Internals Jurriaan Bremer @skier t
Student (University of Amsterdam), Freelance Security Researcher
June 22, 2013
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 1 / 79
Haow do I sandbox?!?! Cuckoo Sandbox Internals Jurriaan Bremer - - PowerPoint PPT Presentation
Haow do I sandbox?!?! Cuckoo Sandbox Internals Jurriaan Bremer @skier t Student (University of Amsterdam), Freelance Security Researcher June 22, 2013 June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 1 /
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 1 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 2 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 3 / 79
◮ Left as an exercise for the attendee ◮ Who would do such terrible thing though? June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 4 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 5 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 6 / 79
◮ Obfuscation ◮ Packers
◮ Multi-threaded malware ◮ Anti-debugger, anti-virtual machine, etc. June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 7 / 79
◮ Automated Malware Analysis - handles all repetitive work ◮ Process thousands of samples in a reasonable time ◮ Generic methods for bypassing anti’s
◮ User friendly - anyone can use it ◮ Setup once, use it for eternity ◮ For this step, see the manual :p June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 8 / 79
◮ Closed Source ◮ Not 100% customizable ◮ Very expensive
◮ Entirely Open Source ◮ Free to use June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 9 / 79
◮ Anti-sandbox ◮ Randomize environment ◮ Can only randomize so many things
◮ We try our best to bypass these ◮ E.g., Hook Detection by Malware
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 10 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 11 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 12 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 13 / 79
◮ Accepts a connection ◮ Host connects ◮ Host sends zip file
◮ Python code ◮ Easily upgrade Cuckoo to a new version! ◮ Configuration files ◮ The sample
◮ Which has been sent through the zip June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 14 / 79
◮ Initializes Cuckoo stuff ◮ Open IPC Channel (Named Pipe) ◮ Some handwaving etc ◮ Dumps Configuration for the first Process ◮ Name of the Named Pipe ◮ IP and Port of the Result Server ◮ (Will come back to that later) ◮ Runs the specified Package June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 15 / 79
◮ Wrappers around CreateProcess(CREATE SUSPENDED) ◮ Packages for EXE, DLL, PDF, DOC, etc. ◮ Inject Cuckoo Monitor DLL into the process ◮ Using APC, QueueUserAPC(...) ◮ Resume main thread of the process June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 16 / 79
◮ Cuckoo Monitor is executed first ◮ Due to the APC callback ◮ Initializes internals & installs API Hooks ◮ Notifies the Analyzer ◮ Through Named Pipes ◮ Real application is started June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 17 / 79
◮ IP and Port retrieved from the Configuration
◮ VM Crashes resulted in no logs ◮ Now real-time results June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 18 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 19 / 79
◮ RunPE, for Packers ◮ Internet ExploderˆWExplorer for URLs
◮ Explorer.exe Injection to evade Firewalls ◮ Banking Trojans June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 20 / 79
◮ Asks to be injected into the target process ◮ Analyzer dumps configuration file ◮ Injection using APC June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 21 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 22 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 23 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 24 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 25 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 26 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 27 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 28 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 29 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 30 / 79
◮ Can’t guarantee APC finishes in time
◮ For Child Processes June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 31 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 32 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 33 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 34 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 35 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 36 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 37 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 38 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 39 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 40 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 41 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 42 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 43 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 44 / 79
◮ We’re adding APIs where needed
◮ Not CreateProcessA ◮ Not CreateProcessW ◮ Not CreateProcessInternalA ◮ But CreateProcessInternalW
◮ ShellExecute (supports protocol handlers, URLs, ..) ◮ system (can pipe multiple processes) June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 45 / 79
◮ Create a trampoline ◮ Patch the function
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 46 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 47 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 48 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 49 / 79
◮ Sounds easy enough right?
◮ Can’t add code to each hook. ◮ We’re not coding for our local University.
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 50 / 79
◮ Zero -> execute the hook handler ◮ Not Zero -> ignore this API call
◮ count = 0 ◮ Increase counter ◮ Execute the Hook Handler ◮ count = 1 ◮ Ignore the Hook Handler June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 51 / 79
◮ Thread Local Storage it is
◮ Oh, we have to run our code after the hook handler returns ◮ So we have to patch the return address ◮ Oh, we have to store the original return address temporarily ◮ TLS to the rescue?
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 52 / 79
◮ However, logging the failure is successful ◮ Great!
◮ (Right before execution goes back to the hook handler) June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 53 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 54 / 79
◮ Until the function returns, where we restore it
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 55 / 79
◮ Special CreateProcessInternalW() ◮ Somebody has to inject those system()’d processes ◮ (The normal CreateProcessInternalW() only logs) June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 56 / 79
◮ Special hook hooks the target function first ◮ Normal hook hooks the Special hooks’ hook (oboy) ◮ Special hooks keeps its own data (Last Error, count, . . . ) June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 57 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 58 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 59 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 60 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 61 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 62 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 63 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 64 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 65 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 66 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 67 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 68 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 69 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 70 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 71 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 72 / 79
◮ Process Management ◮ Thread Management ◮ Registry ◮ File Input /Output ◮ Sockets ◮ ..
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 73 / 79
◮ When injected into another process
◮ Nothing interesting? ◮ Don’t log it
◮ One process can write to another process June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 74 / 79
◮ VirtualAllocEx/VirtualFreeEx/.. go through the Analyzer
◮ &LoadLibraryA is now interesting June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 75 / 79
◮ Unrelated to this module ◮ However, necessary
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 76 / 79
◮ It generates a Shadow DLL in-memory
◮ Restores context and jumps to original function
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 77 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 78 / 79
June 22, 2013 Jurriaan Bremer @skier t Haow do I sandbox?!?! Cuckoo Sandbox Internals 79 / 79