ばぁど・うぉっちんぐ

セキュリティを頑張りたいプログラマ。自由と春を求めて羽ばたく渡り鳥。

ばぁどのハニーポット・うぉっちんぐ - T-Potに配置されたShell Scriptを興奮気味に読み解く -

ばぁどです。

僕が運用しているハニーポットに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の実行)

まず行なっていたのは現在マルウェア自身がシステムのどこにあるかを取得しておりました。

realpathLinux のコマンド。$0は、ShellScriptの特殊変数で、ファイル自身を指し示しています。

なのでrealpath $0で、そのファイル自身のパスがどこかを設定しているんですね。

2. 管理者権限かどうかの確認("$EUID -ne 0)

シェルスクリプトを実行しているアカウントが管理者権限かどうかをチェックしています。 shellscript内では管理者権限を持っている / 持っていないで作業が分岐するように書かれていました。

$EUIDは特殊変数。$EUIDが0であれば管理者権限と言うことを意味している。

-neは等しくない時が真なので、管理者権限でなければ、if内の処理(3a)、管理者権限であればelse句の処理(3b)に入ります。

3a. 管理者権限でなかった場合の処理

3a-1. tempファイルの作成

Linuxmktempコマンドで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.1google.co.jpと紐づけて、ブラウザに127.0.0.1と入力すればgoogleに飛ばすこともできます。

今回は127.0.0.1XXXX.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が置かれるのは、初めての経験で少し興奮驚愕してしまいました。

shellscriptは新卒の会社の研修で少し触って以来、あまり業務でも読む機会、書く機会には恵まれませんでした。

このようなキッカケがあり、勉強しながら読み解くと言う作業を進めることができました。

また、検索してみると同じshellscriptを発見して同じようにブログにされている方もいらっしゃいました。(中にはソースコードそのまま全部載せている人がいたので少し怖いなー・・・とは思いました) 私が読み解いた結果は、それらのブログと照らし合わせて答え合わせしていこうかなと思います。

以上です。ありがとうございました。