min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

bash 仮想通貨マイニングウイルスに現実に仕込まれたソースからシェルのノウハウを学ぶ

1月に入って、ランサムウェア「GandCrab」が添付されたメールが大量に出回っているらしい。

f:id:min117:20190119145451p:plain

japan.zdnet.com

 

復元ツールは出ているみたいだけど

japan.zdnet.com

ランサムウェアは影響が大きいので感染はゴメンこうむりたい。

 

なんて情報をあさっていたら、実際の攻撃に使われていたらしいソースを発見。GandCrabのものではなく仮想通貨をマイニングさせるためのウイルスのコードだったが、あまりにも美しいコードなので(ウイルスに関する部分を無視して仕事に使えそうなところだけ採取して使ってみる。

 

 

 

<採取部分>

OSを自動判定ubuntu,debian,centos6 or 7,redhat,それ以外か判定)する部分

・デバイスパフォーマンスを最大化(hugepage等)する部分

・サービスの自動起動を仕込む(shからcrontabを書き込む)部分

 

<ソース>

まずはOSの自動判定部分(ディストリビューション判定)。

f:id:min117:20190119144657p:plain

※ 「日本語の行」と「echoでの表示行」はこのコードの作者(攻撃者)ではなく、自分(このブログ所有者)自身が読みやすくするためにつけた。実際には全て英語で書かれ、一切のechoがなく処理が進む(ウイルスなんだから当然だけど)。

15行目

 ・tr で 大文字小文字変換をサラっとやってる。

 ・17行目のif文を正確にするためだろう(仕事が丁寧だなぁ)

17行目

 ・ここのif文はカッコ(testコマンド)が一つだけ。

 ・thenは同じ行に書く人なのね。

20行目

 ・ここのif文はカッコ(testコマンド)を2つ重ねてる。

 ・17行目とあえて使い分けている。相当慣れた人が書いているとみた。

 ・このへんのノウハウがモロに詰まっている。

qiita.com

 f:id:min117:20190119150424p:plain

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(ディストリビューション)に合わせてデバイスのパフォーマンス(仮想通貨を掘るためのパワー)を最大化させている部分。

f:id:min117:20190119144836p:plain

※ シャープ(イゲタ)が1つの行は、実際の処理が走らないよう、ブロク所有者がコメントアウトしただけで、実際には全て実行できる状態(コメントなし)だった。

73、75、77行目

 ・/etc/security/limits.conf ファイルを書いてパフォーマンスを上げている。

 ・hugepageも設定してる(こんな方法があるのか…)。

98行目

 ・$distro に設定された値を全て小文字に変換するのに ${distro,,} としている。変数操作のテクニック。

f:id:min117:20190119165544p:plain

f:id:min117:20190119144925p:plain

123、124行目

 ・nohup でバックグラウンド実行させるスゴさ。

 ・仮想通貨をマイニングさせ続けるために「仕込む」前提で書いている。

 ・悪いことをする人間は本当に貪欲だ。目的に対して純粋とも言える。

qiita.com

www.codereading.com

 f:id:min117:20190119170459p:plain

 f:id:min117:20190119173812p:plain

ハッカー(って言葉はそれとして)のホワイトとブラックは紙一重とはよく言ったもので。全部業務で使えるノウハウの塊だった。