ばぁどです。
僕が運用しているハニーポットにShell Scriptが置かれていることを観測しました。
マルウェアも観測し始めて二週間くらいなのですが、やっとなんの苦労もせずに中身の処理が読み解けるマルウェアを置いてもらえました。ありがとうございます。
shell script の勉強の意味も含めて読み解いた結果をアウトプットします。
結論
少し長くなるので、最初に私が読み解いた本shellscriptの目的です。
ラズベリーパイを狙ったshellscriptのように思えました。
理由は/home/pi
と言うラズベリーパイを使用する際に用いられるユーザー名が実在することを前提にした記述がいくつか見ることができたからです。
また、Bot攻撃を仕掛けるshellscript のようです。
表層解析
何はともかく、file コマンドでファイルの種類を調査。
$file shellscript.sh shellscript.sh: Bourne-Again shell script executable (binary data)
はい、shellscript であることを確認。view でファイルの中身をのぞいてみます。
ShellScriptがやっていたこと
1. 現在のファイルパスの取得(realpath $0
の実行)
まず行なっていたのは現在マルウェア自身がシステムのどこにあるかを取得しておりました。
realpath
はLinux のコマンド。$0
は、ShellScriptの特殊変数で、ファイル自身を指し示しています。
なのでrealpath $0
で、そのファイル自身のパスがどこかを設定しているんですね。
2. 管理者権限かどうかの確認("$EUID -ne 0
)
シェルスクリプトを実行しているアカウントが管理者権限かどうかをチェックしています。 shellscript内では管理者権限を持っている / 持っていないで作業が分岐するように書かれていました。
$EUID
は特殊変数。$EUID
が0であれば管理者権限と言うことを意味している。
-ne
は等しくない時が真なので、管理者権限でなければ、if
内の処理(3a)、管理者権限であればelse
句の処理(3b)に入ります。
3a. 管理者権限でなかった場合の処理
3a-1. tempファイルの作成
Linuxのmktemp
コマンドでtempファイル(一時ファイル)を作成する。
3a-2. /opt 下に移動
cp
コマンドを利用して、3a-1で作成した一時ファイルを/opt
下に移動する。
3a-3. /etc/rc.local にecho で文字列を書き込む。
/etc/rc.local
ファイルは「Linuxの起動時に実行する処理」を記述するファイル。
編集するにはroot権限が必要だが、sudo sh -c
としているため、ファイルは記述されるようにしている模様。
主に3a-2で/opt
下に移動した一時ファイルを実行するように記述している。
3a-4. reboot!!!
sleep
を挟んで、reboot
しています。
reboot
するのは設定ファイルを/etc/rc.local
に書き込んだ設定を読み込んでroot
権限で実行するためですかね。
root
権限で実行されれば、次は3b に処理が進むと言うことでしょうか。
怖い・・・
3b. 管理者権限であった場合の処理
3b-1. killallの連打
killall
が連打されています。
nodejs
だったり、parl
の処理を殺しています。
おそらくこのシェルスクリプトが動くために邪魔なプロセスを殺しているように見えます。
ここら辺止めておけば、他に変なプロセスが動いていても本shellscriptの動作に影響を出さないと言うことですかね。
3b-2. /etc/hostsの上書き
/etc/hosts
ファイルを上書きしています。
etc/hosts
ファイルはIPアドレスとドメインを内部的に紐づけるものであり、例えば127.0.0.1
をgoogle.co.jp
と紐づけて、ブラウザに127.0.0.1
と入力すればgoogleに飛ばすこともできます。
今回は127.0.0.1
をXXXX.deutschland-XXXXXXX.eu
に繋ごうとしていました。(マスクしています。推測してブラウザに打ち込まないでくださいね。相手に自分の居場所(IPアドレス)教えているようなものなので。)
deutschland
はドイツですね。.eu
と言うドメインは欧州を指しています。
もしかしたらドイツの人からの贈り物?もしくは、ドイツのサイトに誘導しようとしているみたいです。
ドイツからの贈り物ならソーセージとビールも嬉しいですね。
3b-3. .bashrc の削除
root
および、pi
ユーザーの.bashrc
を削除しています。
home/pi
はラズベリーパイのユーザーのようですね。
以上のことから、このshellscriptはラズベリーパイで動作することも考慮に入れているかもしれないと言うことがわかりますね。
3b-4 home/piのパスワードを変更
usermod -p
コマンドで、ラズベリーパイのユーザーのパスワードを変更しています。
怖いですね。
3b-5 ssh key の登録
次にroot
権限で、ssh
できるように下準備を行なっています。
root
下に、/.ssh
フォルダを作成し、認証キーを登録しています。
3b-6. Bot攻撃のスクリプト
このshellscriptの目的が見えてきました。
理由は、Bot
と言う変数名が登場したからです。
そしてその後に続く、コードがどこかをBot攻撃するような処理が記述されておりました。
3b-7. 攻撃スクリプトの権限変更
chmod
を利用して、3b-6
で生成した攻撃スクリプトに実行権限を与えています。
3b-8. logを消す
shellscript実行時に出る実行ログを消しています。
3b-9. 自己感染する
while
句を使って繰り返し、同じようなサーバーに本shellscriptを置くようなスクリプトが書いてあります。
いわゆる、自己感染ですね。
これでファイル自体の処理は終わりです。
まとめ
本shellscriptの目的は下記なのではないかと推測できました。 * Rasberypi を狙ったもの * Rasberypiに感染して、Bot攻撃を行う * 自己感染能力を持つ
なかなか怖いことをやっていました。
所感
今回、初めてハニーポットに置かれたshellscriptを読み解くことができました。
読み解くことができるshellscriptが置かれるのは、初めての経験で少し興奮驚愕してしまいました。
わーーーーーーーーーーーーーー!!!!なんか初めてviewで観れる不正ファイル置いてもらえた!!!わーー!!shellscriptだー!お兄さん興奮してきちゃったよ。
— ばぁど (@UltraBirdTech) 2018年11月3日
shellscriptは新卒の会社の研修で少し触って以来、あまり業務でも読む機会、書く機会には恵まれませんでした。
このようなキッカケがあり、勉強しながら読み解くと言う作業を進めることができました。
また、検索してみると同じshellscriptを発見して同じようにブログにされている方もいらっしゃいました。(中にはソースコードそのまま全部載せている人がいたので少し怖いなー・・・とは思いました) 私が読み解いた結果は、それらのブログと照らし合わせて答え合わせしていこうかなと思います。
以上です。ありがとうございました。