見出し画像

ハッカーの手口

※ このnoteは筆者の複数の経験から創作したもので、特定の会社や団体でのものではありません。部分は事実もそうでないものもありますが、全体として「事例としてサーバーのハッキング」を、防御する側から、できるだけ具体的に書いてあります。

【発見】
朝、システム管理者の彼が会社に行って、最初にすること。たくさんあるサーバの管理システムにログインし、システムが正常に動いているかどうかを確認することだ。

その朝、彼は自分の机に座り、すぐにPCに電源を入れ、管理用サーバへログインした。

「あっ」

彼はすぐに気がついた。いつもは、日本語で出るサーバのログインメッセージがなぜか英語になっている。1行ほどの小さな違いだったが、彼はそれを見逃さなかった。

システムがどこか壊れたか?あるいはハッキングされたか?

おそらく、どう考えてもこの2つしか答えはない。

【慎重にログイン】
ここで、ログインすべきか?それともログインしないで別の手を使うべきか?ログインシステムがもし書き換えられたのだとしたら、当然そのシステムにログインすれば、管理者のパスワードを盗まれてしまうだろう。システムトラブルであれば、もちろんその心配は無いわけだが、どうも雰囲気からして、ハッキングの疑いが濃い。

こういう場合できるのであれば、管理サーバをネットワークから切り離し、隔離したうえ、そこで作業をするほうが良さそうだ。しかも管理サーバは他のサーバとは違う扱いになっているから、他のサーバはそのまま動いていることになる。もちろん、みんなネットワークでつながっているので、他のサーバも検査しなくてはならないが、まずは目の前の管理用サーバを隔離して調べよう。彼はそう考えて、まずサーバールームに行って、物理的に管理用サーバのネットワークケーブルを外し、電源を切り、ラックからマシンを取り出して、自分の管理室に持ってきた。

そして、サーバマシンのIPアドレスのネットマスクの範囲(ローカルの一部のGatewayのためにグローバルIPアドレスの他、ローカルIPアドレスも別のネットワークインターフェイスに振ってある)で、端末のPCをつなげ、周囲ともインターネットとも独立した、閉じたネットワークを作った。そして、サーバの電源を入れて立ち上げ、端末のPCの電源も入れた。端末からsshでログインプロンプトがさっきと同じ「英語に変わった」ものであるのを確認してから、ログインし、rootになった。なるほど、ここまではできたが、つまり、このままだと、もしもハッキングされているとしたら、どこかにrootになったときのパスワードを保存しているはずだ。

【ハッカーはシステムを壊さない】
最近のハッカーはシステムをいきなり壊す、ということはまずしない。するときもあるが、それはそういう目的があってのことだ。会社にダメージを与えたいとか、そういうときは壊すこともあるが、稀だ。多くのハッキングの結果は、システム管理者には見えないように埋め込まれていて、それが世界的な規模でのDDoS攻撃(アクセスを集中させてサーバが機能しなくなるようにする)の「踏み台」とするか、あるいは、じっとシステムの内部に踏みとどまって、そのシステムの管理者のパスワードを乗っ取り、システムの情報を横取りする、などが行われている(はずだ)。

【ハッカーのしていることを想像する】
こうやって、彼は慎重に管理者で隔離した管理サーバーにログインした。もしハッキングされているとすれば、この時点でパスワードが横取りされ、システムの何処かに書かれているはずだ。あるいは即座にオンラインでネットワーク経由でどこかに飛ばされているかもしれない。ネットワーク・アナライザがあればネットワークにつなげてそれを確認できるのだが、ネットワーク・アナライザが手元になかったので、それはできなかった。しかし、この場合はネットワークは物理的に隔離されているから、外に管理者パスワードを飛ばされることはない。

【まずはログイン後に】
さて、システムに入ったは入ったが、まず「やられた」可能性があるログインコマンドを調べよう。

サーバのログイン関係のコマンドのバイナリファイルはやはり新しいものに書き換えられていた。コマンドのバイナリダンプを取ると、読み書きするデバイス名やファイル名が出てきた。

【/devディレクトリに隠す】
「ほほう。/dev/ttySO、って?」

/devディレクトリは、もともとハードウエアや仮想のデバイスの入出力を司る「ファイル」のかたちをしているI/Oデバイスが並んでいるディレクトリで、この下には本物の「ファイル」は無いはずだ。さっきのダンプを見ると、/devのディレクトリ以下に、他のデバイスの名前そっくりの「ファイル」ができているはずだ。と、思って調べると簡単に見つかった。ダンプの名前通りの「ttySO」というファイルだ。「ttyS0」という仮想デバイスとは名前が違う。「0(ゼロ)」が「O(オー)」になっている。まぎらわしく、デバイスファイルと見間違えるようにしてあるわけだ。

【デバイスファイルから】
なるほど、なるほど。彼はその/dev/sttySOファイルを見つけ、そのサイズをメモした。667バイト。次にいったんログアウトして、もう一度ログイン。そして、同じ/dev/ttySOファイルを見ると、840バイト。増えている、ということは、ここにログインのときのパスワードの情報などを書いているのだろう。早速、/dev/ttySOファイルをダンプしてみた。なるほど、ちゃんと記録されている。さっきのログインも、今度のログインも。両方ともキーボードから打ち込んだユーザIDとパスワードがそのまま記録されている。

とすると、この/dev/ttySOファイルを必ずどこかでネットワークに流すプログラムも同時にどこかにあるはずだ。

【より深く探索】
プログラムをどこかに隠している。そう考えると、一番隠している可能性のあるのは、/tmpディレクトリ。次に、/usr/tmpとか/var/tmpだろう。さらに、/直下にも置いてあることがある。ここを探索。いろいろ調べていると、なぜか/var/qmailというディレクトリの直下に、隠しディレクトリが見つかった。でも、なぜ/var/qmailに?

【侵入元特定】
ハッカーの侵入元がわかった。システム管理者の彼自身のミスだ。qmailは安全性が高いメールサーバで有名なメールサーバのフリーソフトだが、そのソフトをサーバに入れていた。そのソフトを動かすために、qmail専門のユーザーアカウントを作る必要がある。そのアカウントを作ったとき、パスワードの設定を忘れていたのだ。そのため、ハッカーはこのパスワードの無いユーザーアカウントを利用して、一般ユーザーとしてシステムに侵入したらしい。もっとも、最近はqmailよりはpostfixが多いだろうが。

【見えないディレクトリ】
/var/qmailはそのホームディレクトリとなっていた。そこで、この直下に、見えないディレクトリが掘られ、その下にさまざまなハッキングツールを隠しているのを彼は見つけた。そこには「snif」という名前の、明らかに「ネットワークを読む」ツールである「Sniffer」を意味するプログラムが隠してあった。これを起動してみると、なんと、システムのTCP/IPを通るすべてのパケットが、やはり/var/qmailディレクトリ以下のあるファイルに溜め込まれるようになっていた。ハッカーは一般ユーザーでの侵入をした後、このプログラムを仕掛けてサーバーから一時去った。

【パスワード盗難】
そして、数日してハッカーは再びシステムに侵入。ためてあったファイルを解析し、管理者のパスワードを盗む。その管理者のパスワードで、ハッカーは管理者になりすまし、システムの改変を始めた。まず、/binなどの重要なプログラムが入っているディレクトリにある、ログインするときにパスワードを読み込んで認証するプログラムを改変。そしてそのプログラムが再び改変されないように、ファイルのパーミッションを固定していた。

このコマンドの改編で彼が気がついたのだ。管理者の彼しかログインすることのないシステムの改変を、彼は「1行のシステムからのメッセージ」が、日本語から英語に変わっていたことで気がついたのだ。

【他のサーバーも?】
彼は自分の不明を恥じたが、次にやることは、自分が管理している複数のお客様のデータが入っているサーバに、同じものや、同種のハッキングツールが仕掛けられていないかどうかを調べることだ。自分しかアクセスしない管理サーバはやられていたとしても、作りなおせばOKだ。あとでやられた管理用サーバを解析するために、ハードディスクを取り出し、新しいハードディスクに交換。新しいシステムを入れなおし、今回問題となった「穴」を塞いで、管理サーバーを再びシステムに接続した。

その後、すべての彼の管理下にあるサーバーを調べ、なにもされていないことを確認。今回受けたハッキングの詳細をレポートにしてまとめ、彼の上司に提出した。

【「彼」の得た教訓】
彼は今回のハッキングで最初は顔が青くなったが、次第に技術者としての冷静さを取り戻し、上司に出したレポートの最後に、以下のような「得られた教訓」を書いた。

1. どんなに簡単で小さなサーバでも、グローバルアドレスを持ちインターネットに「晒されている」サーバーには、必ずハッカーがやってくる、ということ。ハッカーは侵入したことを誇示することはなく、あくまで裏に隠れていようとすること。

2. ハッカーの目的はシステムの情報を横取りすることもあるが、多くはそのサーバーを密かに侵入者の管理下に置き、DDoS攻撃の踏み台にするなど、いろいろな目的に使えるようにすること。そのために、管理者のパスワードを必ず取ることを目的としていること。

3. どんな小さな「穴」でも、彼らは見つければ入ってくる、ということ。そのため、防御する側はどんな小さな侵入口も確実に塞ぐ必要があること。

4. ハッカーはさまざまなツールを持ち、一度「一般ユーザー」になると、そこからなにがなんでも管理者のパスワードを横取りしようとすること。

5. システムの改変が行われたことを、完全に隠すことはできない。小さな兆候をつかんで、ハッカーに侵入された状況をつかむ必要があること。そのためにシステム管理者はいつでも管理しているシステム全体に気を配っている必要があること。

6. ハッキングされた疑いのあるサーバーなどの再起動やログインは慎重に多なうこと。できれば、通常使っているネットワークからは隔離したうえ、周辺に影響を与えないように絶対の配慮をしたうえ、再起動やログインを行うこと。

【ネットに直接接続されたシステムは】
システム管理は、データを入れているハードディスクのクラッシュなどの問題に対して、バックアップなどを行うなどのことは常日頃から必要なものだ。しかし、こういった「どこからくるかわからない危険」にも常に気を配り、ちょっとでも「おかしい」と思う兆候があれば、それを見逃さないことが必要になる。特にインターネットに接続されているシステムは、窓を道路に開けっ放しにした商店と同じだ。誰がどのように入ってきても、その商店の商売ができるようにしたうえ、その商店の商品を盗まれないようにし、その場を壊されないようにしなければならない。

サーバー管理者は、毎日の日常業務のなかで発生する「異常」にいかに敏感でいるか。それが必要だ。正しい技術を身につけることと、いつでも緊張を持ったシステム管理こそが、ハッキングなどの被害を止めることにつながる。

この記事が気に入ったらサポートをしてみませんか?