ネット上でのアタックやらクラックっていうのは、その場に居合わせるとものすごくワクワクするのは自分だけだろうか。
昔自分のところのサーバにrootkitを仕掛けられそうになったことがある。確かPHPのグループウェアの穴をつついたもので、/tmpにファイルを置いたまでは良かったが、それを実行する前にこちらで発見できたために未然に終わったんだったと思う。
そのときは真っ青になったが、敵がどこから来て、何をやっていて、で、最終手段としてLANケーブルを抜くことができると判ったから相手を観察することができた。
今回、正にまた自分のコントロールすべきサーバで発生した。悪意のあるコードを実行している輩を見つけたのだ。
サーバの応答が悪い。netstatで見ても特に異常なパケットが飛んでいるわけでもなし、topでみてもさほどCPUを食っている形跡もない。ただ、ddが複数稼働中という点が気になった。でも、夜になっていたし、cronでバックアッププロセスでも動いているのだろうと思っていた。そもそもそのサーバは何に使われているのかをよく知らなかったし、限られた権限しか持ち合わせていなかった。
それが翌日急変する。サーバが重くて仕方がない。vmstatを動かして原因が見えた。iowaitが100%に張り付こうという状況であった。CPUが遊んでいて、トラフィックも発生していない状況でのこの動き、ディスク障害をまず疑った。しかし異音もないので後回しとして他を調べることとした。
ddが怪しかった。昼も稼動している。もしかするとバックアップなりの夜間処理がうまく終了しきれずに、翌日のバックアップがまた起動され、そうすることでバックアップ速度が低下、そしてまた翌日のバックアップ、というように負荷をかけてしまっているのではないか、と予測した。
ddを起動しているのはbashのスクリプトであることがpstreeで判ったが、あいにくの別ユーザだった。が、幸いにも読み込み権限があり、開いたスクリプトには驚きのコードが。
ddを使って数十TByteのデータを/tmpに書き続け、同時に全ディレクトリのスキャン、数GByteのファイルのmd5sum計算、というものだった。
危害を及ぼすコードはないという事もわかり、あとはそのスクリプトを停止するだけだった。それも既にメールで頼んでおいたので、返信を待つのみであった。
が、そこで考えた。
「もしかすると、このような嫌がらせは続くのではないか。だとすると犯人を確定し、その者に納得して諦めてもらうほうがいいのではないか。」
もちろん外部アクセス禁止という簡単な方法もある。しかし業務引継ぎやら残務整理やらで、単純にアク禁を撃つと孤立してしまう可能性が高かった。
メールの返信があったが、該当サーバのrootアカウントについては触れられていなかった。もしかしたらその人が犯人という可能性も考えなければならなかった。
まず犯行時刻を調べることにした。psにstart欄も出力するように指定すると朝9時前、そして16時前少なくともその2回問題のスクリプトを起動していた。lastで確認すると確かにそのユーザがログインしている。アクセス元はVPNだったため真のアクセス元は確認できなかった。
ふとwコマンドを打つと、何日も前からtty1にユーザがログインしていた。と、見逃しそうになったがログインユーザは例のスクリプトを実行したユーザだった。
サーバの場所はわかっていたので、それを確認すると、繋がれた線は2本。電源とLANケーブルのみだった。ディスプレイとUSBキーボードを接続するとまさに必要な画面が現れた。
まずはそのユーザが何を叩いたか、つまりは.bash_historyを確認した。コマンドを入力した日時はわからなかったが、なるほど、仕込みをしようとしていた様子が浮き彫りになった。
ざっと状況を確認する。そのユーザでのcronは空。crontabを編集した形跡はあるがかなり前のものである可能性がある。他にはtopとpsを使った形跡が最近あるだけだ。だれがログインしているかは確認していないようだ。
他に悪意が残されていないかをざっと確認したが特に見当たらず、あと心配するとしたらファイルを消されてしまうという逃げようもない「業務威力妨害罪」くらいだ。今回のこのいたずらも30を過ぎた野郎の仕業であって、正式に訴えたら「ごめんなさい」では済まず、やはり業務威力妨害罪が適用できる範疇ではある。だが目的はそこではない。意地悪を諦めてもらうことだ。
こうなると時間の問題という可能性もあり、直接電話で「一番信頼できるであろう」筋にrootアカウントについて教えを請う。
多少のすったもんだがあったがrootアカウントは入手。rootの.bashrc等に爆弾がある可能性もあったがここは大丈夫だろうとrootでログイン。真っ先に/var/logの確保、VPNのログを確認する。あまり読みやすいログではなかったので、後回しとして、爆弾がばら撒かれていないかを確認していく。
rootの.bash_history、rootおよび他のcrontab、at、init.d、/、/tmp、/var/tmp、ひとまず大丈夫そうだ。
終電2本前に帰り着いてVPNログを確認する。問題の2つの時間帯にアクティブだったVPNコネクションは4つ。それ以上の絞込みは難しいようだ。
少し思案して、会社に泊まりこまなかった事を後悔した。
あれだけディスクをぶん回されていたらディスクの寿命が来てしまうかもしれない。それが目的だったのか。
そして、cronで自動実行しているわけでもなく、2回に分けてアクセスしており、psでプロセスを確認していることを考えると、問題のスクリプトを書き換えるなどして、早期に終了するようにしておけばよかったのではないか。そうすることでまたスクリプトを実行する愚行を検出できたのではないか。
まぁともかく、自宅では何もできない。その4本の接続先を確認し、絞込みを続けるしかない。
多分続編を書くと思う。
0 件のコメント:
コメントを投稿