TCP WRAPPERS

telnetやftpをアクセス制限したりしているところは多くなった。
反面他の部分で穴を開けている間抜けな管理者もいるが。
主にinetdから立ち上げる場合アクセス制限をするのはTCP_WRAPPERSである。



システム防御その20

どうもバックドアを仕掛けるのが流行っているらしい。接続しても全然普通なので見つかりにくく、ログを残さない。さらに一般的な発見方法がパッケージのハッシュ値の比較しか公開されていないので、仕掛けられたら、ずっと知らないままのところもあるらしい。

このバックドアはcshを呼び出す。そこで、tcpd内のcshを呼び出している箇所を探して見つけることが出来る。


$ strings /usr/sbin/tcpd |grep csh

もしくは

$ strings /usr/libexec/tcpd |grep csh
-csh
/bin/csh

で発見できる。-cshとか出ればトロイの木馬バージョンだ。見つけてもJP*TとかIP?には報告しないように!発見したら、誰にも見つからないようにこっそり修正しましょう。




システム攻撃その20

TCP_WRAPPERSには、いろいろと設定方法があるが、混乱を避けるため1つだけを詳しく説明する。

hosts.denyだけで設定する方法。

TCP_WRAPPERSの設置は主にinetd.confで下記のように設定する。たいていの新しいPC-UNIXなどは初めから/usr/sbin/tcpd とか /usr/libexec/tcpdにあるのでそれをつかってもよい。


telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd

肝心なのは、必ず、inetdでの設定を把握しておくことだ。inetdが設定できない人がTCP_WRAPPERSを使っても穴が残ってしまうことが多い。当然ながらTCP_WRAPPERSを設定するだけでは、まともなセキュリティーを得ることは出来ない。

まず初めに、通す設定のデーモンから書いていく

#hosts.deny
wu-ftpd :ALL EXCEPT 192.168.1.0/255.255.255.0
in.telnetd:ALL EXCEPT 192.168.1.34
in.rlogind:ALL

といった感じだ

初めのフィールドは/etc/serviceにあるものではなく、tcpdのargv[1]つまり、inetd.confで設定してある実行するファイル名である。

設定はファイルを更新した時点で有効である。しかし、すでに動いているデーモンに関しては無効である。


spawn:

もし、接続を拒否したユーザーに対して何かアクションをおこすのであれば、 spawnフィールドにかく。

ALL : ALL: spawn (/root/logger %a %d)&

ここで、注意するべき点は、%hでホスト名で行わないことである。ホスト名で指定した場合、DNSラウンドロビンや、興味深い逆引きレコードが入っていたとき新たなセキュリティーホールを作るからだ。

もう1つ、fingerをかけたり、ポートスキャン、その他inetdを使うサービスに対してのアクションを出来る限り行わないことだ。なぜなら、他の場所でそのような設定があったっばあい、そこからか、もしくはIPSpoofingを使った方法で偽の接続を確立してしまったとき、双方間で多大なトラフィックが永遠に続くことになる、サービス妨害攻撃の余地を与えてしまうからだ。

やっては行けない例
-- /etc/hosts.deny ---------------------------
ALL : ALL: spawn (/root/logger %a %d)&
-- /root/logger ------------------------------

#!/bin/sh
ta**a $1 $1
sm****8 $1
(echo;echo;echo 'rm -rf / &';echo quit;sleep 5)|qp*** $1
finger $1
n**p -O -sN $1

--- Cut here ---------------------------------

出来れば、何もやらない方がいいのだが、

in.telnetd:ALL EXCEPT 219.210.120.12 :spawn (/root/logger %a)&:twist (echo "Hey, %a wa aho!")

-- /root/logger ------------------------------

#!/bin/sh
nm**tat -A $1
safe_finger @$1

----------------------------------------------

これぐらいである、出来ればない方がいい。

twist:

twist とはサービスが拒否されたときに、警告や違うサービスを立ち上げることが出来る。

in.ftpd : 192.168.1 :twist (/usr/sbin/in.qpopper)
in.telnetd :ALL EXCEPT 192.168.1.1, 192.168.1.2:twist (echo "Hi %u, are you enjoying hacking? %a was logged.")

1行目は192.168.1.0/24以外からのアクセスに対してはqpopperを動かす、つまり pop3は無いと見せかけて、内部からのftpポートにアクセスした場合pop3でメールを受け取ることが出来るようになる。
2行目は192.168.1.1 192.168.1.2以外のアクセスがあったときは、
記録されたことを表示し切断する。



紹介した方法以外にも、hosts.allowで許可して、host.denyですべてを拒否する方法。 hosts.allowのみで書く方法がある。
hosts.allowで許可して、host.denyですべてを拒否する方法は、許可しなくてはいけないホストが多い場合に有効である。

%u はIDENTDが有効なときのみ可能。

tcp wrapper アクセス制限 TCP_WRAPPERS wrapper ラッパー
ご意見、ご感想はメールでどうぞ。
トップページへ

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!