APT3
APT3

Your consent is required to display this content from youtube - Privacy Settings

Type: Nation-State-Sponsored
APT3 Status: Believed Active
APT3 Other Names: Gothic Panda/ UPS/ Pirpi/ Operation Clandestine Fox/ TG-0110/ BuckEye/ Group 6/ Operation Double Tap/ Operation Clandestine Wolf
APT3 Active Since/Discovered: 2014
APT3 Last Report: June 2015
APT3 Target Sectors: energy sector, financial sector, technology industries, NGO/ International arena, aerospace and defense organizations, telecommunication companies, construction, high-tech, and transportation organizations
Malware:
- Pirpi
- capable of gathering network adapter information, downloading files to memory, deleting files, listing directories, uploading files to the C2, executing processes, and other functionalities
- PlugX
- Kaba
- PluginDetect
- SHOTPUT backdoor (Backdoor APT CookieCutter)
- SportsLoader
Preferred Attack Vector:
- Spear-phishing emails with malicious attachment (PDF) or links (video or landing page)
- Whale phishing attacks against specialized mailing lists
- 0-day exploits (Adobe, IE, Firefox, etc.)
- Full Exploit Flow
- Video object created
- Payload Fetch
- Video attached to a new NetStream
- The heap is sprayed with Adobe Flash Player Vectors
- Create a Vector containing 98688 Vectors containing 1022 uints
- Set the first two dwords in each Vector to 0x41414141, 0x42424242
- Create holes for the controlled FLV object
- Free approximately every 3rd Vector in the spray
- Spray custom class objects for future control transfer
- Define a new class CustomClass
- Define a function victimFunction with lots of arguments
- Create a Vector of 0x100 Vectors of 1007 references to an CustomClass instance
- Define a new class CustomClass
- Fetch and play the FLV exploit
- The FLV file will allocate an attacker controlled object in one of the holes from step 5
- The attacker controlled object will overwrite the length field of an adjacent vector
- Re-fill holes from step 5 with Vectors as in step 4
- Find the corrupted vector
- Search through Vectors from step 4
- Check the length of each Vector to find one that is abnormally large
- Corrupt a second Vector (Vector2)
- Using the corrupted Vector from step 9 to read/write relative memory addresses
- Search memory for an adjacent vector
- Overwrite the length field with 0x3fffffff
- Verify that a corrupted vector with length 0x3fffffff now exists in the spray
- If not, undo corruption and attempt to corrupt the next vector
- Using the corrupted Vector from step 9 to read/write relative memory addresses
- Decrypt shellcode and store it and the payload on the heap
- Overwrite the CustomClass.victimFunction function pointer
- Find the sprayed CustomClass object instance references from step 6
- The new function is a form of “pivot” that transfers control to the attacker
- Build ROP chain on the stack and call it
- Find ROP gadgets in memory using Vector2
- Including a call to kernel32!VirtualAlloc
- Call the corrupted CustomClass.victimFunction from step 6.a.i
- Arguments to the function are the gadgets of the ROP chain
- They are conveniently pushed onto the stack
- Corrupted vtable from step 12 calls a pivot
- The “pivot” just adds to to the stack pointer and returns because the ROP chain is on the stack
- Find ROP gadgets in memory using Vector2
- ROP chain calls shellcode
- Call kernel32!VirtualAlloc
- jmp to shellcode
- Shellcode calls payload
- Shellcode searches memory for the payload, which is stored inside an image
- Shellcode decodes the payload by xoring each byte (that is not 0 or 0x17) with 0x17
TTP:
- CVE-2010-3962
- CVE-2015-3113
- CVE-2014-6332
- CVE-2014-4113
- IE (6,7,8) exploits, and Mozilla FireFox exploits
Recent Comments