Edited at

マルウェア Miraiを解析してわかった知識

マルウェアMiraiのソースコードが公開されているというのを知り、どういう風に作られているか単純に知りたかったので、素人ながら解析してみました。

jgamblin/Mirai-Source-Code: Leaked Mirai Source Code for Research/IoC Development Purposes

特別に悪意あるコードだけでなく、単に私が知らなかった普通に使うUnixコマンドの説明の書いてあります。

ちなみに調査用のコードなので、悪用は厳禁です。


Rootユーザか調べる方法


/scripts/cross-compile.sh

if [ "$(id -u)" != "0" ]; then

echo "This script must be run as root" 1>&2
exit 1
fi

# 普通のユーザは数値が返る

$ id -u
501
# rootユーザのときは0が返る
$ sudo id -u
0

Linuxコマンド【 id 】ユーザーIDとグループIDを表示 - Linux入門 - Webkaru


echo

オプションに-nをつけると新しい行で出力されます。

$ echo -n "Install mysql-server and mysql-client (y/n)? "

Install mysql-server and mysql-client (y/n)?


stty

Ubuntu Manpage: stty - 端末の行設定の変更や表示を行う


/scripts/cross-compile.sh

old_stty_cfg=$(stty -g)

stty raw -echo
answer=$( while ! head -c 1 | grep -i '[ny]' ;do true ;done )
stty $old_stty_cfg


electric fenceのインストール


/scripts/cross-compile.sh

apt-get install -y gcc golang electric-fence


gccはCコンパイラ、golangはGo言語コンパイラはわかったけど、

electric-fenceは何?ってなった。

メモリ破壊検出ツールです。バッファオーバーフローのときの検出ツール。


プログラム中の動的配列(malloc等で確保した配列)の開始位置・終了位置を覚えて これらの配列の領域をポインタ等が踏み越えたときにセグフォで停止させてくれる ものです。

ですので、このセグフォによるコア(core)をgdb等のデバッガで確認すれば、 どこで、どの配列の領域侵害で停止したのかが一瞬で分かるようになります。


C言語:メモリ破壊検出ツール electric fenceの使い方


参考