サーバーへの不正侵入



1.クラッキング
 西暦2000年11月7日の事だった。勤務先のデスクで毎朝のメールチェックを行い、毎週定例の作業を消化。ふとサーバーが気になる。我々が管理しているサーバーは、プライマリドメインサーバーとして機能しているもの、BINDが時折プロセスを失う現象を体験していたため、定期的にRestartをかけていた。この日もBIND以外のプロセスも確認しようとデスクのPCからTelnetログインした時の事である。
 サーバーはLinuxで構築しているが、デフォルトではユーザーディレクトリに履歴を残しているため、Telnetで過去に使用したコマンドが参照できるようになっている。プロセスのHUPなどには便利なので重宝しているが、この履歴を使用してinetdやhttpdなども同時に再起動してやろうと考えたのである。ところが履歴には決して我々が使用しない文字列が現れた。[userdel mamajee]と。
 これは「mamajeeと言うユーザーを削除する」と言うコマンドだが、そもそも「mamajee」なるユーザーなど作成した記憶は無い。「やられた!」とすぐに気が付くが、どう対処して良いのかはわからない。とりあえず[userdel]ではユーザーのホームディレクトリは削除しないようになっているので、該当個所を探し出す。/home/mamajeeはしっかり残っていた。中身を確認すると、何やらプログラムソースらしきモノがおいてある。コンパイルしようとしたのか、してしまったのかは不明だが、とにかく恐ろしくなっていきなり削除。実はこの削除行為は後になって後悔するのだが。
 次にログを確認する事にした。ユーザーが誰であれ、/var/log/secureや/var/log/messagesには何らかの記録があるはずだ。lastコマンドも確認には有効であろう。
 ここで出現した記録によると、11月7日の早朝(午前2時頃)異なるアドレスからtelnet接続要求が何度も繰り返され、最後に一つのアドレスからセッションを開いた。syslogのプロセスを停止させて、動作の記録をさせないようにしているのがわかる。ここからログアウトまでは記録が無い。しかし、複数のログや履歴を追跡することで、ある程度の作業内容が把握できると考え、しばらく調査することにした。

記録したTelnet.log(不要な文字列は伏せ字に)
[root@pc6 /home]# cd mamajee
[root@pc6 mamajee]# ls
Desktop b*c2.*.4
[root@pc6 mamajee]# ls -l
total 2
drwxr-xr-x 5 2014 2014 1024 Nov 6 16:32 Desktop
drwxr-xr-x 2 1003 users 1024 Nov 6 16:25 b*c2.*.4
[root@pc6 mamajee]# cd b*c2.*.4
[root@pc6 b*c2.*.4]# ls -l
total 262
-rw-r--r-- 1 1003 users 4708 Sep 16 1999 CHANGES
-rw-r--r-- 1 1003 users 17982 Mar 18 1999 COPYING
-rw-r--r-- 1 root root 965 Nov 6 16:24 Makefile
-rw-r--r-- 1 1003 users 891 May 4 1999 Makefile.in
-rw-r--r-- 1 1003 users 44 Mar 18 1999 Makefile.out
-rw-r--r-- 1 1003 users 12863 Sep 16 1999 README
-rw-r--r-- 1 1003 users 4356 Jun 29 1999 b*c.c
-rw-r--r-- 1 root root 5384 Nov 6 16:24 b*c.o
-rwxr-xr-x 1 1003 users 544 Mar 18 1999 b*cchk
-rwxr-xr-x 1 1003 users 8348 Jul 23 1999 b*csetup
-rw-r--r-- 1 1003 users 19791 Sep 16 1999 cmds.c
-rw-r--r-- 1 root root 12852 Nov 6 16:24 cmds.o
-rw-r--r-- 1 1003 users 2093 Jun 29 1999 common.h
-rw-r--r-- 1 1003 users 4067 Jun 29 1999 conf.c
-rw-r--r-- 1 root root 4212 Nov 6 16:24 conf.o
-rw-r--r-- 1 1003 users 2001 Nov 6 16:24 config.cache
-rw-r--r-- 1 1003 users 1157 Jun 30 10:56 config.h
-rw-r--r-- 1 1003 users 1059 Mar 19 1999 config.h.in
-rw-r--r-- 1 1003 users 1450 Nov 6 16:24 config.log
-rwxr-xr-x 1 root root 8711 Nov 6 16:24 config.status
-rwxr-xr-x 1 1003 users 59269 Mar 19 1999 configure
-rw-r--r-- 1 1003 users 1058 Mar 19 1999 configure.in
-rw-r--r-- 1 1003 users 948 Mar 18 1999 example.conf
-rwxr-xr-x 1 1003 users 13348 Jun 30 10:56 mkpasswd
-rw-r--r-- 1 1003 users 1424 Mar 19 1999 mkpasswd.c
-rw-r--r-- 1 1003 users 458 Sep 16 1999 motd
-rw-r--r-- 1 root root 6 Nov 6 16:25 pid.syslogdd
-rw-r--r-- 1 1003 users 16786 Sep 16 1999 server.c
-rw-r--r-- 1 root root 9788 Nov 6 16:24 server.o
-rwxr-xr-x 1 root root 24904 Nov 6 16:24 syslogdd
-rw-r--r-- 1 root root 923 Nov 6 16:23 syslogdd.conf
[root@pc6 b*c2.*.4]# passwd
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully
[root@pc6 b*c2.*.4]# cd ../../
[root@pc6 /home]# ls
**** ftp *_**** **** ****
administrator httpd mamajee ****** ****
**** ****** **** samba ****
[root@pc6 /home]# rm -rf mamajee
[root@pc6 /home]# last
**** pts/0 192.168.1.23 Tue Nov 7 15:50 still logged in
mamajee pts/1 203.128.252.106 Tue Nov 7 01:49 - 01:49 (00:00)
mamajee pts/1 203.128.252.22 Tue Nov 7 01:33 - 01:47 (00:14)
**** pts/0 192.168.1.23 Sun Nov 5 17:07 - 17:08 (00:00)
**** pts/0 192.168.1.14 Sat Nov 4 19:49 - 19:51 (00:01)
www ftp 192.168.1.14 Sat Nov 4 17:31 - 17:32 (00:00)
**** pts/0 192.168.1.14 Thu Nov 2 23:08 - 23:08 (00:00)
**** pts/0 192.168.1.14 Thu Nov 2 17:54 - 18:14 (00:20)
www ftp 192.168.1.14 Thu Nov 2 17:52 - 17:53 (00:00)


2.対応処置
 調査を開始すると言っても、現状のままでは再び不正な侵入を許してしまう。そこでtelnetで同時にセッション要求を出してきたアドレスを含めて、ルータのフィルタ制御へ登録する事にした。残念なことには、このサーバーのhosts.denyは機能させていなかった。私自身の知識不足でもあるが、ルータの制御が確実でしかも設定が簡単だった事があげられる。
 この時点でフィルターへ登録したアドレスのうち二つはドメインが判明している。想像で書くのも問題がありそうだが、おそらくは踏み台に使われただけであろう。もし仮に踏み台にされたのであれば、サーバー管理者への連絡が必要になるが、これは後述しよう。
 侵入者"mamajee"が使用していたIPアドレスはドメイン解決されないものであった。IPアドレスだけで侵入してきたのである。

 次に行った処置は管理者パスワードの変更である。これはもちろん頻繁に行われるべきであったが、反省する良い機会だったかも知れない。
 その後特に処置するべきものを見つけられず、まずはJPCERT/CCへ不正侵入の報告を行うことにした。証拠としてユーザーディレクトリを添付するべきであったが、いきなり削除してしまったためこれは出来ない。侵入者が残していったログだけを添付して報告することになる。

 また同時にRPMとしてインストール媒体に用意されていた[swatch]を利用する事に決定。/var/log/messagesと/var/log/secureについて、常時動作している。このツールは指定したログファイルに同じく指定したキーワードのログが記録されると、音を出したりコンソールへ警告を出したり、指定したアドレスへメールで知らせてくれる機能がある。

/var/log/messages
Nov 7 01:32:20 pc6 adduser[23885]: new group: name=mamajee, gid=2014
Nov 7 01:32:20 pc6 adduser[23885]: new user: name=mamajee, uid=2014, gid=2014, home=/home/mamajee, shell=/bin/bash
Nov 7 01:32:45 pc6 PAM_pwdb[23886]: password for (mamajee/2014) changed by ((null)/0)
Nov 7 01:33:31 pc6 PAM_pwdb[23888]: (login) session opened for user mamajee by (uid=0)
****************関係ない行削除
Nov 7 01:49:28 pc6 PAM_pwdb[23931]: (login) session opened for user mamajee by (uid=0)
Nov 7 01:49:53 pc6 PAM_pwdb[23931]: (login) session closed for user mamajee
Nov 7 01:51:02 pc6 userdel[23958]: delete user `mamajee'
Nov 7 01:51:02 pc6 userdel[23958]: remove group `mamajee'

/var/log/secure
Nov 7 00:43:10 pc6 in.telnetd[23113]: connect from 131.***.71.**
Nov 7 01:32:54 pc6 in.telnetd[23887]: connect from 203.128.252.22
Nov 7 01:33:31 pc6 login: LOGIN ON 1 BY mamajee FROM 203.128.252.22
Nov 7 01:37:23 pc6 in.telnetd[23913]: connect from 208.***.160.*
Nov 7 01:47:24 pc6 in.telnetd[23923]: connect from 131.***.71.**
Nov 7 01:48:42 pc6 in.telnetd[23930]: connect from 203.128.252.106
Nov 7 01:49:28 pc6 login: LOGIN ON 1 BY mamajee FROM 203.128.252.106


3.経過
 調査を継続して三日後の事である。そう言えば普段はディレクトリ内のファイル一覧に[ls -l]しか使っていないことに気が付く。これでは特別な属性ファイルなどは表示されない。そこで再度[ls -al]を使って、各ディレクトリを調査する事にした。その前にまずは7日に/home/mamajeeを削除した際のtelnetログから、同じ様なファイルが無いか検索してみたのである。すると[.](ドット)で始まるディレクトリが存在する事に気が付いた。
 このディレクトリはmamajeeがftpで利用したものと思われ、ここに圧縮された二種類のプログラムソースが置いたままになっていた。ファイル名は敢えて書かないが、一つは「パスワード・クラッカー」、もう一つは「IRC Proxy」と読みとれる。この二つを利用して、Dos攻撃の踏み台にしようと考えていたのだろうと言うのが私の結論である。
 放置されたプログラムソースはJPCERT/CCへ送付した。

 その後ルータで制御されている事もあり、侵入者の痕跡は無いが、ちょうど機会があってセキュリティについて学ぶことが出来た。そのセミナーの内容を丸ごと書き出すことは出来ないが、受講した内容と今回の事件を照らし合わせて自分なりに分析してみようと考える。

 JPCERT/CCの公開資料によると、西暦2000年になってからの不正アクセス報告件数は異常な増加を見せているそうだ。報告件数としての増加は、未報告件数を含めるととてつもなく増えている事を表している。実際に西暦2000年7月から9月までの報告件数は700件前後となっている。これを裏付けるように年頭の公的サイト改竄事件などは誰しも見聞きしている事であろう。
 残念ながらその報告事例の一つになってしまった我々のサイトだが、ここから学ぶことも多い。

 日本国内での被害例は報道各機関の公開情報からも把握できるが、世界規模で見た場合は、
http://www.attrition.org/mirror/attrion/
などから参照することが出来る。いかに不正が多いのかが想像できるであろう。

 報告したJPCERT/CCへは、同時にtelnetを試みたIPアドレスも報告し、該当サイトへ注意を喚起するよう依頼した。その依頼はすぐに聞き届けられたようだが、該当サイトからは現時点で返答が無いそうである。
 JPCERT/CCはこういった不正侵入などの報告を受け付けてくれると共に、処置などの相談も受け付けている。また必要であれば対象サイトへの連絡なども代行してくれるため、非常にありがたい存在だ。しかし、そう言う作業をお願いしなくてはならないサーバーを持っていると言うことは管理者としてはまだまだなのだろう。反省はまだまだ多い。

(1)クラッキング行為について
 「ハッキング」と表現されている文書が多いが、私自身は「クラッキング」の表現が正しいと認識している。これはその単語の持つ意味からも想像できるが、「クラッキング」と「ハッキング」の違いを考えてみよう。
 「クラック」は「割る、砕く、金庫などを破る」と訳される。一方「ハック」は「切る、刻む」と訳されている。ここからも「クラック」が妥当な表現であると想像できる。
 さらにUNIXの世界ではGPLなどのソースコードを解析し、書き換え、改良し、再度公開するような作業の事を「ハック」と言う事を聞いた記憶がある。従って「悪意を持った不正行為者」を「ハッカー」と呼んだり、その行為を「ハッキング」と表現するのは誤りであろうと考える。

 さて、余談は置いておいて、彼らの手口を他の面から見てみよう。
 一般的には不正侵入の手口として「バッファオーバーフロー」が利用されるようである。今回のログから確信を持てるものでは無いが、たとえば大量のデータを一度に同じサーバーへ送りつけて、プログラムに誤動作させるようにし向け、弱点を見つけて侵入する手口がポピュラーであるようだ。またこの場合、比較的セキュリティが手薄な大学などのサーバーを経由する事が多い。これは進入経路を隠す目的である事は言うまでも無い。

(2)不正侵入の目的
 これらの侵入は一体何を目的としているのか?
 その多くは「盗聴、盗難」にあるとされている。回線上を流れる情報を不正に読みとる目的で専用のプログラムを忍ばせ、メールや入力情報、さらにはデータまでを入手しようとするのである。海外では実際にクレジットカード情報が盗まれ、不正に利用されようとした事例報告がある。
 「改竄」はそのサーバーに蓄積されているデータにアクセスし、不正に変更する。
 また、広く知られている「なりすまし」は他の目的と同時に利用される事が多い。さらに我々の例で見ると将来予測できることは、「サービス停止攻撃」の踏み台である。これらは「DoS攻撃」と表現されているが、Donial of Servicesの略である。さらにはDDoS(Distributed Denial of Services)と言うものもある。
 そして最悪のものが「Virus」である。破壊を目的とした、もっとも悪質なものの一つであろう。

 彼らはその目的を達成して何のメリットがあるのか?
 最近の不正侵入の多くは「自分の存在をアピール」「楽しむ」と言ったレベルが少なくないと聞く。こういう不正行為を気軽にやられたのではたまらないが、これが現実のようである。この種の人物たちは容易に入手できるクラッキングツールを用いて、その効果を試しながら楽しむ事が多いようだ。[NuKe]などはUGサイトを訪れた事がある人なら目にした事もあるのではないだろうか。
 さらにここから進んで(進んではいけないのだが)、ツールの自作も可能なクラッカーはシステムへの不正侵入などは軽々とこなし、侵入の痕跡を残さないそうである。背筋が寒くなる思いだが、今回の我々のケースでは痕跡が残っていただけ幸せなのかも知れない。
 最終的に破壊目的となると、明らかに「テロリスト」と呼べる。この危険はどんなサーバーでもはらんでいると言えよう。

(3)身を守る
 上述の行為を未然に防ぐことは非常に困難であり、費用も必要となるケースが多い。しかし積極的にセキュリティについて学び、ある程度の指針を設けることでかなり安定した管理が出来る。そのいくつかを書いておこう。
 ・定期的なログの解析
 今回のケースでもsyslogプロセスを停止させられた間は記録が無いが、前後は記録されていた。プロフェッショナルはログファイルもろとも消し去ってしまうのだろうが、その場合でも痕跡としては明らかに「残る」事になる。普段からチェックする習慣とルールが必要だ。
 ・サーバーソフトのバージョンアップ
 インストールされた状態の各プログラムは何らかのセキュリティホールを持っていることがある。これらについての情報を入手することはもちろんだが、メーカーや開発者からリリースされるパッチは随時適用することが望ましいと言える。クラッカーが新しいツールに対応するまでは安全であると言えるからである。
 ・不要なサービスの停止
 この情報については、ここで述べるより「日刊アスキーLinux」などのサイトで公開されている情報を参照した方が良いだろう。このサイトでは「インストール直後のセキュリティ設定」などを詳細に解説している。
 最近のディストリビューションでは、デフォルトでのセキュリティ設定がかなり高めにされていると聞く。しかし設定などは管理者であれば容易に変更が出来てしまうものであるから、学んでおくに越したことは無い。

 もし初めてLinuxに触れる方がこのサイトを見てくれているのなら、必ず肝に銘じて置いて下さい。ローカルで運用しようと言うLinuxであっても、NICはもとよりダイヤルアップモデムが装備されているなら、セキュリティは必要です。
 出来る範囲で、出来る時間で学ぶことは心がけて頂きたい。これは私自身への警鐘でもありますが。

 ・アカウント管理
 手元にサーバーがあると、これまでプロバイダ側でしか実現できなかったもの以外にも色々なツールの利活用が可能となり、サーバーの構成にも手を加えたくなるのが人情というもの。しかし、管理できる範囲にとどめておく事は言うまでも無く、当然作成したアカウントは厳格に管理するべきである。また、外部向けに作成したアカウントには特定のサービスしか許可しないなど、セキュリティは強めに設定しておくことが望ましい。もしこれにより利用者からクレームが出たとしても、管理者の権利は絶大なのである。危険を予測できるのにメールの中継を解放したり、必要も無いのにプリンタポートを開けたりしないことが望ましい訳だ。

 また、管理者はもとより、ユーザーのパスワード管理も重要である。不正行為の多くは同一ネットワーク内で発生すると言われている。「なりすまし」などが容易に行われる影響であろう。同じ社内や学内の人物であっても、パスワードを気軽に教えたり、ログインしたまま席を立つような事は極力避けるべきである。

 さて、長々と書いてしまったが、文書中に誤った表現、不適切な表現などがあれば指摘して頂きたい。文責は私 a_nakayama にあるが、すべて正しい表現であると言い切ることは出来ない。より多くの人にセキュリティに対して認識していただき、世界中から「不正アクセス」「破壊行為」が減って欲しいと言う願いから公開する情報である。
 またこのページ内の情報については他へ引用及び転載しないようにお願いしたい。

 以上
 西暦2000年12月5日公開

 indexへ