クラッキングとセキュリティ の第2版として、このネタを書く。
さて、俺も切ないことに何回かクラックな方に遊ばれたことがある。仕事としてやっているサーバ管理時代にも、さらには、ついこないだアプリの脆弱性を突かれてスクリプトを埋め込まれた(;-_-;)。まあ、しゃーない俺自身未熟だから馬鹿にされたんだと思う。まだまだ、スキありありな鯖だったんだろうと今更ながらに思う。クラックな方々に遊ばれたと思うと非常に悔しい思いをしたことを俺は忘れられない。自信を無くした、とことん無くした。だけど、これをバネにせねばともっと頑張ることにした。
話は変わるが、現在俺の会社での仕事はネットワーク管理だ。まあ、社員教育の仕事もあるがWAITが高いのはネットワーク管理の仕事であろう。
ネットワーク管理というと企業では間接業務になるが、特に中小企業では未だに人件費をかけられないセクションだろう。そんな中で、俺は会社のネットワークを一人で管理している。ネットワークって繋がって動いているのが当たり前、落ちていたら苦情が殺到、そんでもって一生懸命復旧しても「お疲れさま」さえ言ってもらえず自分で「お疲れさま」なんて言ったりして・・・・・(笑)。いわば縁の下の力持ちで非常に割に合わない仕事である。だけど、「会社には俺みたいな存在が必要なんだ!」とくじけそうになると自分に言い聞かせている。おっと「落ちたぁ~まいっか、なるべく早くなおそっと。」ってな感じで最近は開き直っているところもある(笑)。
前の話になるが、俺の会社のサーバがある会社のサーバを踏み台に攻撃された事がある。
事実がわかった時点で、俺はその会社に連絡して攻撃を止めると同時に対策を施すように依頼した。
その結果、その会社のネットワーク管理者は謝罪と共に踏み台にされていたサーバをネットワークから外して調査を行ったらしい。まあ手際は良かったが、調査結果の詳細は連絡がなかった。
でも、踏み台にされていたサーバはテスト的にDMZゾーンで稼働させていたサーバだったらしい。多分、ほとんど手をかけずに放置されていたサーバに違いない。
そんなことから、クラックな方々が狙いやすいサーバってどんなサーバだろうなんて考えてみた。俺がクラックな方だったらこんなサーバが狙いやすいかも・・・・・。
1.クラックな方々が狙いやすいサーバを自分なりに推測
1)名目「テストサーバです。」(ターゲットのDNS情報から推測する)
テストサーバと名が付くサーバは、未完成な部分が有ると解釈する。つまり、構築が未完成のくせにグローバルに放置されてる非常に危険なサーバという事になる。名前から見ると狙いたくなるでしょ。
2)FTPの口が開いていて頻繁にFTP転送してる
サイトの追加変更等でFTPの口が開いていてラッパーもかけていない無防備サイト。コマースサイト等で結構更新が激しいけど
FTP転送しかしていないサイトというのは何だかいたずらしたくなる( ̄ー ̄)ニヤリッ。
3)何となく全然関係者がログインしてないサーバ
ログも何も見に行ってる気配がないサーバ。何考えてるんだか(;-_-;)。
4)バナー情報が丸見えサーバ
各種バナー情報が丸見えのサーバ。クラックな方から見ると何だか「襲ってください」って囁いてるみたいなんだよね。
5)流行のOSで構築してるサーバ
やっぱ、Linuxみたいな流行のOSって誰でもインストールしたくなるじゃん。結構そんな鯖達って穴が沢山あいてるんだよね。
うれしくなるよ。インストールしっぱなしでグローバルに放置!ってなサーバ結構有ったりする。
6)全然パッチ当ててないサーバ
OSをインストールしたのは良いけど、メンテしてないサーバっておいしいよ。OSの脆弱性が有る部分を突けばすぐに膿が出るんだもん。これも認識不足だね。
とまぁ~俺が狙うとしたら、こんなサーバかな( ̄ー ̄)ニヤリッ
さて、では侵入されてクラックな方にされてしまう事って何だろう?それは、必ずと言っていいほどバックドアって奴を仕掛けられる。バックドア=侵入口 である。まあ、次から侵入するときには侵入しやすい経路を作っておく。それも解らないようにね。仕掛けられやすいバックドアとは何か?色々調べたり自分で考えるとこんなところかなぁ。
2.人の鯖に侵入してバックドアを仕掛けた後必ずやること
1)プロセスを隠す
当然、侵入したらバックドアを仕掛けたくなる。バックドアは、仕掛けられたらdaemonのように1サービスとして動き続ける。アクティブになっているサービスはpsコマンドで表示できるので、バックドアのプロセスは隠蔽したくなる。俺だったら、psコマンドやそれに似通ったコマンド自体を書き換えてしまう。
そんでもって、そのコマンドリストを隠すのに格好な場所は、/dev内などが良いとされている。/devは、デバイス等の特別なファイル置き場でそれらが分かれて置いてある。そのためファイル数が多く検査がしにくいと言う弱点がある。
2)logを消す
足跡が残るのはlogである。ここ にあるzap.cをコンパイルして実行するとログクリーナーの役割をする。このプログラムは、システムへのログイン情報を記録したファイル(lastlog、utmp、wtmp)から指定したユーザーのログイン情報を削除する。俺は、ここいらへんのlogをクリーンする。さらに、俺としては syslog、xferlog(ファイル転送) をエディタで改竄する。まあ、当然足跡を残さないようにするのが、クラックな方々の基本だね。
3)ファイルを隠す
お馴染みの、lsコマンドとかlocateコマンド、findとかdu(ディスクの使用量表示) ってファイルとかディレクトリ関係をviewするコマンドだが、この手のコマンドを改竄して壊してしまう。そしたら、view出来なくなるし。
4)LISTEN状態を隠蔽する
netstatコマンドでは、Portに対するLISTEN状態がわかってしまう。したがって、これも改竄してview不可能にする。さらに、ifconfigでは プロミスキャスモード かノーマルモードかがわかってしまう。したがって、ifconfigコマンドも改竄してview不可能にしてしまう。
3.仕掛けやすいバックドアの種類
1)スーバーサーバ
inetdやxinetdのスーパーサーバはバックドアを仕掛けるには好都合な場所だ。目立たないし、静かに動いてるかも知れない。
inetd.confに、
xxxx stream tcp nowait root /bin/sh /bin/sh -i
こんな記述があったらバックドアが仕掛けられている。これはシェル型バックドアと呼ばれ現在最も多く存在しているバックドアである。
xinetdでは、xinetd.dのディレクトリに、
service xxxxxxx
{
disable = no
socket_type = stream
wait = no
user = root
group = root
server = /bin/bash
server_args = -i
}
こんな感じの設定ファイルが有ったら間違いなくバックドアを仕掛けられてる。
2)loginコマンド
これは、lastlogなんかを制御してるんでちょっと危なすぎだね。これを改竄されるとlastlogコマンドが信じられなくなるでしょう。
これは、改竄されてるかされてないかは予めチェックサムを取っておいて比較するか、あるいはloginコマンド自体をインストール時にコピーしておいて、”怪しいなぁ~”って思ったらオリジナルと比較すると言う手がある。これが正統派かも知れないな。
3)見知らぬポート
何らかのポートにアクセスするとシェルが実行するようなプログラムを世の中ではbindshellって言ってる。例えば、netstat -anを打った場合、見知らぬポートがLISTENになってたとか。
[root@school /root]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 20 192.168.0.42:22 192.168.0.131:1559 ESTABLISHED
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
lsof コマンドでも確認できる。
[root@school /root]# lsof -i | grep LISTEN
sshd 399 root 3u IPv4 338 TCP *:ssh (LISTEN)
httpd 438 root 16u IPv4 377 TCP *:www (LISTEN)
smbd 452 root 9u IPv4 402 TCP *:netbios-ssn (LISTEN)
master 1749 root 11u IPv4 145388 TCP *:smtp (LISTEN)
httpd 5224 nobody 16u IPv4 377 TCP *:www (LISTEN)
httpd 9716 nobody 16u IPv4 377 TCP *:www (LISTEN)
httpd 9717 nobody 16u IPv4 377 TCP *:www (LISTEN)
httpd 9718 nobody 16u IPv4 377 TCP *:www (LISTEN)
httpd 9719 nobody 16u IPv4 377 TCP *:www (LISTEN)
httpd 9720 nobody 16u IPv4 377 TCP *:www (LISTEN)
httpd 9722 nobody 16u IPv4 377 TCP *:www (LISTEN)
httpd 9833 nobody 16u IPv4 377 TCP *:www (LISTEN)
httpd 9927 nobody 16u IPv4 377 TCP *:www (LISTEN)
inetd 16118 root 4u IPv4 697872 TCP *:ftp (LISTEN)
postmaste 16256 postgres 3u IPv4 419977 TCP *:postgres (LISTEN)
httpd 25585 nobody 16u IPv4 377 TCP *:www (LISTEN)
こんな感じに実行してみて、見知らぬポートがLISTENになってたら多分バックドアが動いてる。間違いないと思う。
本来、予めLISTEN状態をメモっておいて常に比較すると良いと思う。
これは、スーパーサーバと対で使う物だけどtcpdというセキュリティプログラムがアクセス制御を実現してる。
これはlogを記録する機能が付いているが、このプログラムがバックドアとして改竄されたらlogの記録機能を不能にして自分の自由なIPアドレスからアクセスできるようにするだろう。
5)セキュアーシェル
sshだ。最近は、telnetよりもセキュアーなsshをみんな使い出した。それがねらい目のようだ。
telnetよりsshの方が安全!という神話は崩れたと言っても過言では無いだろう。どうも、このsshのプログラム書き換えるのが流行のようだよ。
6)Perlスクリプトバックドア
この形式のバックドアも多いようだ。psコマンドでプロセスを見ると見たこともないperlで作ったsocketプログラムが動いていることがある。こうなってくると確実にバックドアだ。プロセスをのぞけば熟練した人なら一発で解るので比較的見つけやすいバックドアだと思う。しかし、見つけたときには手遅れだという説もあるが(;-_-;)。
以上、ここではクラックな方達の行動とかバックドアについて説明した。これが全てではないが参考になれば幸いと思う。
以上
コメント