クラックされた

もう昨日(正確には一昨日か)の話になるのだけど、このサーバがクラックされた。

今までのクラックのパターンは、特定一般ユーザにbrute force attackをくらって、フィッシングサイトを構築されたりボットを埋め込まれたりだったのだが、今回はいきなりrootを奪われる。

どうやらrootを奪われたらしいと気がついた時に「なんかsecurity holeが?」と思ってrootkitを調べると、ない。「はぁ? 未知のexploit手段が?」とか思っていたのだが、どうやらそうでもなくて、

普通にrootを奪われて

いた。いろいろ設定を調べると、sshの設定が「rootのログインOK」「パスワード認証可能」になっていた。後者は一般公開しているサーバだという事情からしょうがないのだが、前者はさすがにいただけない。こいつらがコンボだと「頑張れば普通にrootが奪える」からだ。実際それをやられた。

よく思い出してみると、/ が死んだ時に既にちゃんと動いているホストの / のイメージを流用して作った。このホストはHTTP以外は壁(フィルタ機能を持ったロードバランサ)の内側にあるものだから、その辺の設定は緩くなっていて、それをそのまま流用してしまったから緩いままで外に晒されることになってしまったわけだ。「実績のあるもの」ほど、そういった「隙」を忘れている。

流用って楽だけど油断してしまう

というのがよろしくない。

とは言え、このホストはXen配下の仮想マシンで(流用したものも同じホスト上で動くVM)、/ を再インストールとか言っても、1世代前の/ のファイルを使えば綺麗に復旧してしまう。こないだからのファイルサーバの障害で/ が酷いことになるのがしばしばだったので、/ をバックアップするscriptを作って、面白がって何度もバックアップしていた後だから、復元に使う/ イメージはいくらでもあった。だから、ファイルサーバ側でイメージを切り換えて再起動するだけで綺麗な状態に戻る。後はsshの設定を「あるべき状態(つまりrootでログイン不可)」に直してしまえば、特に問題なし。こんな時に仮想化って偉いなと思う。イメージ切り替えはコマンド一発(ln -sf) + rebootするだけだし。おまけに

クラックされたイメージは動態保存

出来てしまう。だからVMで実験してみるとか、やりたい放題試せる。

こうやってみると、「仮想化」って便利だなと感心する。多少オーバーヘッドが増えても、管理コストが激減するという効果は非常に大きい。まだまだ不安定なところがあって、負荷が高くなると謎のエラーで死んだりするんだけど、その問題を補って余りある効果だ。

実はこのサーバの/ イメージは1GBないから、保存するのも再配布するのも簡単。欲しい人います? クラックされたイメージなんて、そうそう出回らないよwww

クラックされたことの発見はどうしたかと言えば、別にこれと言ってソフトを入れているわけでもなく、トラフィックを監視するようにしていて、その異常で発見した。利用者が2000もいると、よほど特別なことでもない限り、毎日だいたい同じようなパターンでトラフィックが推移する。また、サーバだから下りが黒い。ところがクラックされるとこのパターンが極端に乱れる。クラックの瞬間はbruite forceなので、上りが黒くなる。

トラフィック

このグラフのうち、右端の方にある緑が高くなったところが、クラックされた瞬間だ。青が通常のロードバランサから外に出るトラフィック、緑が外から入って来るトラフィックなので、誰の目にも異常は明らか。

ここでおかしいなと気づいて、/tmpと/var/tmpを調べると、なんかディレクトリが掘られて、プログラムをbuildした痕跡がある。これはうちがクラックされた時の定石。前はそのインストール先とか調べて掃除して… って復旧をしたものだけど、今は面倒臭いのと安全性のことも考えて、綺麗なイメージに切り換えることで復旧完了にしてる。クラッカもいきなりrootが奪えるなんて思ってなかったのか、一般ユーザを奪った時と同じ作業をしているというのが、ちょっとおかしい。

何度もクラックされていると、クラックなんて風邪を引くようなもんで「予防したところで、やられる時はやられる」という気持ちになって来る(さすがにrootを奪われることは滅多にないけど)。だからクラックされないための定石的対策はした上で、いかにそれを早く検知して、いかに早く復旧させるかということが大事だろう。snortのような検出ツールを使うのも大事だけど、

正常なサーバはどう動いているか

を把握しておくことの方が、未知の手口にも対応出来ることだと思う。クラックでなくても、「誰か何かやったな」ということも発見出来る。

PS.

クラッカの置いていったscriptのcoreの部分を読んでみた。

どうやら、Googleを使って掲示板やblogを検索してリストを作り、そこにしらみ潰しにspamを書いている模様。フィッシングサイトを作られた時もそうだったのだが、これならrootを奪取する必要はない。特にバックドアの類を作るでもなく、単にspamを発することが目的らしい。

ということがわかったので、/etc/hostsには、

127.0.0.1       localhost google.com www.google.com ftp.openwall.com wiki.unifacs.br

と書いてやったwww この中にあるftp.openwall.comとかwiki.unifaces.brというのは、spammerがツールや本文といったリソース類を置いている場所らしい。

サーバなので、本当は全ての外部接続を遮断したいのだけど、トラックバックの処理とかが出来なくなるので、それはやめておいた。

クラックされた” への4件のコメント

  1. snote→snortですかね?
    まぁ、snortが役に立つかと言えば疑問なんですけど…IPS型なら少しは役に立つかも。って程度ですかね。

  2. あ^^;
    直しときます。

    頼り切るものでもないと思うけど、手掛りの一つと割り切れば意味があるかも知れないかなという程度ですね。

  3. あ、ほしいす>クラックされたやつのイメージ
    最近は、どうもみんな活きが悪くて…。

コメントは受け付けていません。