1月に入って、ランサムウェア「GandCrab」が添付されたメールが大量に出回っているらしい。
復元ツールは出ているみたいだけど
ランサムウェアは影響が大きいので感染はゴメンこうむりたい。
なんて情報をあさっていたら、実際の攻撃に使われていたらしいソースを発見。GandCrabのものではなく仮想通貨をマイニングさせるためのウイルスのコードだったが、あまりにも美しいコードなので(ウイルスに関する部分を無視して)仕事に使えそうなところだけ採取して使ってみる。
<採取部分>
・OSを自動判定(ubuntu,debian,centos6 or 7,redhat,それ以外か判定)する部分
・デバイスのパフォーマンスを最大化(hugepage等)する部分
・サービスの自動起動を仕込む(shからcrontabを書き込む)部分
<ソース>
まずはOSの自動判定部分(ディストリビューション判定)。
※ 「日本語の行」と「echoでの表示行」はこのコードの作者(攻撃者)ではなく、自分(このブログ所有者)自身が読みやすくするためにつけた。実際には全て英語で書かれ、一切のechoがなく処理が進む(ウイルスなんだから当然だけど)。
15行目
・tr で 大文字小文字変換をサラっとやってる。
・17行目のif文を正確にするためだろう(仕事が丁寧だなぁ)
17行目
・ここのif文はカッコ(testコマンド)が一つだけ。
・thenは同じ行に書く人なのね。
20行目
・ここのif文はカッコ(testコマンド)を2つ重ねてる。
・17行目とあえて使い分けている。相当慣れた人が書いているとみた。
・このへんのノウハウがモロに詰まっている。
39行目
・/etc/ の下をワンライナーでまさぐるこのテクニック。ニクい。素晴らしい。
ls -d /etc/[A-Za-z]*[_-][rv]e[lr]*
47行目
・ここはテストコマンドにifすらつけてない。
・17行目とも20行目とも違う(違う人間が手分けしてコード書いてるのか?)
59行目
・ip -4 route の結果からデバイス名を得るとは。
hname=`ip -4 route get 114.114.114.114 | awk '{print $7}' | tr -d '\n'`
・どのLinuxでも「まず使えるだろう」という汎用性を持たせている。
・どのディストリビューションにも詳しい人間が作っている。
続いては、サービス登録するための関数を作成し、判定したOS(ディストリビューション)に合わせてデバイスのパフォーマンス(仮想通貨を掘るためのパワー)を最大化させている部分。
※ シャープ(イゲタ)が1つの行は、実際の処理が走らないよう、ブロク所有者がコメントアウトしただけで、実際には全て実行できる状態(コメントなし)だった。
73、75、77行目
・/etc/security/limits.conf ファイルを書いてパフォーマンスを上げている。
・hugepageも設定してる(こんな方法があるのか…)。
98行目
・$distro に設定された値を全て小文字に変換するのに ${distro,,} としている。変数操作のテクニック。
123、124行目
・nohup でバックグラウンド実行させるスゴさ。
・仮想通貨をマイニングさせ続けるために「仕込む」前提で書いている。
・悪いことをする人間は本当に貪欲だ。目的に対して純粋とも言える。
ハッカー(って言葉はそれとして)のホワイトとブラックは紙一重とはよく言ったもので。全部業務で使えるノウハウの塊だった。