Lets start this journey with the blog post by Pondurance titled “777 RANSOMWARE COMBINES WITH TRICKBOT” located here.
There is not a whole lot here but it describes 2 layers of shellcode and some indicator’s and the first is the URL “hxxps://fearlesslyhuman[.]org”.
This URL seemed familiar but upon looking it up I was having difficulty finding very much information on it. The first search led me to Hybrid Analysis where we find this calling out to a /boot URL.
It is also only labeled as “no specific threat” .
If we scroll down we see there is a PowerShell script but it is split up in 2 areas of the strings section and no download is available for this script. So let’s just extract it from the strings section.
Here is the extracted script. If we look close it is base64 encoded GZipped.
Lets extract that and see what we have.
As with the original blog post that started this run we have base64 encoded data that is also Xor’d with decimal 35.
You could probably make up a CyberChef recipe to do all of the steps I’m going to do with my tools.
Base64 decode to byte –> Xor bytes by Decimal 35 to get Clean shellcode.
One thing my tool does not extract is the latter part of the url highlighted by the red box. Also as seen in the hex editor.
Let’s also take a look at what API’s are found in this Shellcode.
So our full url that this is calling out to is fearlesslyhuman[.]org/FSkX .
Unfortunately this does not contain the next level of download. The hunt continues.
Our next stop is urlscan.io Here to see what it can tell us.
We see 8 hits and as of 10 days ago it appears to be down. It also appears to be the Same IP in the ones that connected.
Here on Virus Total it gives us a little more information but not a lot.
Searching on https://app.any.run for our URL we see several hits.
If we go thru this list we are not finding anything special. Thanks to @James_inthe_box for locating this sample for me that is different than what we see in this list. Sample Here .
I’m not sure why it is not showing up in this list.
Looking at the traffic we can see there is more going on here than in the other sample in the list.
Lets download the PowerShell script and extract the shellcode from this.
As we can see here this script is the same as the last one we pulled apart so lets extract the shellcode and see what it tells us.
Here we see it is using a “/HLnZ” path instead. Where did we see that?
As we can see here is it tagged as binary so lets download that and see what we have.
And the Hash Information from Anyrun
Here we find it On VirusTotal by the hash with no detections.
Lets Look at this binary data in a hex editor.
As we can see here it starts with an “FC” which it what Shellcode normally starts with.
Lets drop this into CyberChef and see what it tells us.
That is not good, it throws an error. Lets just try the first part of it then.
Well that worked but still does not tell me much.
Next stop, fire up the VM and load this into SCDbg.
I’m a GUI Person so used that instead of the command line.
As in the blog post referenced in the beginning we can see many calls to API functions and SCDbg also drops 2 files for us.
We can see this is a decoded PE file from the Shellcode but it appears the parts of the PE header got stomped after it was loaded into memory.
This version that was dropped still has the “MZ” in it.
Lets remove the decoding shellcode from the start and then we have a decoded version of the binary.
Note: this is designed to be loaded and run from the original PowerShell shellcode.
Looking at this shellcode and the resulting executable got me wondering how it gets decoded.
What can we use? Possibly a shellcode to exe utility and then load (and or) run it in IDA or or in X86Dbg .
After chatting with @herrcore about loading shellcode to be able to view it in a debugger he pointed me to a tool called BlobRunner, Here There are prebuilt binaries and the source code so you can build it yourself.
There is also a video that goes with it Here but they are using IDA Pro (The hard way) to view the blob.
At first I had trouble figuring out how to use it, so used a smaller sample file to get a feel for it.
The steps to run it.
Copy the binary for blobrunner and the shellcode into a folder on your vm.
Open a command prompt from the folder (so you don’t have to use full paths)
Pass the parameter’s of the blobrunner and a space and the name of the shellcode file into cmd.
In this case it will be blobrunner.exe “HLnZ.bin” (I used double quotes incase a filename has a space)
After entering the command and hitting enter we see this.
Next we Open X86 Dbg and attach to the blobrunner process.
Next we go back to the command window and look for the Entry value.(or you can do it first)
Then back to X86Dbg and open the Memory Map section and look for that address.
I double clicked on that address and went to the place in the CPU tab where it is.
Here we are at the beginning of the shellcode. Set a break point here then go back to the cmd window and hit a key to start it running again.
Next hit run in the debugger and it will break at that break point. You can then start stepping thru from there to see what it is doing.
Note: If you hit run in the debugger first without setting the breakpoint first it will get away from you. (I’ve Done it)
Going thru this there are a couple of jumps to set things up, Notice the second “Call” at “B”
Now look what happens as we step thru and make some jumps.
Notice that the assembly changed after making the jumps, and the real odd part is if you scroll back up it returns back to normal and the same as what CyberChef shows.
If we set a breakpoint at the pop ebp (ox33) and run it till there (after the loop is complete) it will self decode. You can then just select and copy all of the bytes here to a hex editor then clean out the beginning shellcode or you can use the follow in memory map option and then dump it to file from there.
That is how to do it that way.
But I’m still curious on how the algorithm works to decode.
I then stepped thru it enough times until I was sure I had it down on what it does.
It is a little slow because it is dealing with a lot of data and also formatting the input string /hex from a text box. Large amounts of data in a text box is always slower than importing the data straight from a file and working with it that way.
And finally here is how this Works.
That 34200 is a counter that gets reduced by 4 every round.
I am assuming that it is also a length value.
And 1 final thing. Does it run in Anyrun Here ?
That is it for this one I hope you learned as much as I did.
Link to Report
Link to the report for URL