HTTPやSMTPなどのサーバアプリケーションを標準の設定で使用すると、OSやアプリケーションの種類及びバージョンなどの情報が表示される。このようなものがバナー情報と呼ぶ。インターネットが普及した現在では、悪意のあるクラッカーが姿を隠している。バナー情報を公開することで、クラッカーに多くの情報を提供する事になるかもしれない。無論、手当たり次第攻撃するクラッカーも存在するが、バナー情報を制御する事で特定のOSやアプリを狙った攻撃には有効である。
1. HTTP鯖のバナー抑制
何もしないとき(通常のバナー表示)、
[root@mta root]# telnet localhost http
Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’.
GET / HTTP/1.0 ← 入力してリターン(HEAD / HTTP/1.0でも良い)
← もう一度リターン
HTTP/1.1 200 OK Date: Mon, 19 May 2003 06:18:48 GMT
Server: Apache/2.0.45 (Unix) PHP/4.3.0RC3
Last-Modified: Fri, 28 Sep 2001 16:55:49 GMT
ETag: “602b4-65e-8f224f40”
Accept-Ranges: bytes
Content-Length: 1630
Connection: close
Content-Type: text/html; charset=ISO-8859-1
以下省略
1) まずは、必ずhttpd.confのServerSignatureセクションを設定する
httpd.confのServerSignatureセクションを設定する。
ServerSignature Off
これで、apacheのドキュメントのフッターが出力されず隠蔽される。たとえば、Indexesで設定してダウンロードするようなフォームの下の部分にOSの情報が表示されなくなる。
2) httpd.confのServer Tokensセクションを設定する
httpd.confのServerTokensセクションを以下にすると、
(デフォルトでは、ServerTokens full 全てのバナー表示可の設定になってる)
ServerTokens os
バナーに組み込みモジュールの情報が無くなる。
[root@mta conf]# telnet localhost http
Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’.
GET / HTTP/1.0
HTTP/1.1 200 OK Date: Mon, 19 May 2003 05:24:49 GMT
Server: Apache/2.0.45 (Unix) ← ここ組み込みモジュール情報がなくなってる
Last-Modified: Fri, 28 Sep 2001 16:55:49 GMT
ETag: “602b4-65e-8f224f40”
Accept-Ranges: bytes
Content-Length: 1630
Connection: close
Content-Type: text/html; charset=ISO-8859-1
以下省略
httpd.confのServerTokensセクションを以下にすると、
ServerTokens Minimal
バナーにOS情報が無くなる。
[root@mta root]# telnet localhost http
Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’.
GET / HTTP/1.0
HTTP/1.1 200 OK Date: Mon, 19 May 2003 05:41:32 GMT
Server: Apache/2.0.45 ← ここOS情報がなくなってる
Last-Modified: Fri, 28 Sep 2001 16:55:49 GMT
ETag: “602b4-65e-8f224f40”
Accept-Ranges: bytes
Content-Length: 1630
Connection: close
Content-Type: text/html; charset=ISO-8859-1
以下省略
httpd.confのServerTokensセクションを以下にすると、
ServerTokens ProductOnly
ほとんど情報が無くなる。
[root@mta conf]# telnet localhost http
Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’.
GET / HTTP/1.0
HTTP/1.1 200 OK Date: Mon, 19 May 2003 06:13:16 GMT
Server: Apache ← ここほとんど情報が消えた
Last-Modified: Fri, 28 Sep 2001 16:55:49 GMT
ETag: “602b4-65e-8f224f40”
Accept-Ranges: bytes
Content-Length: 1630
Connection: close
Content-Type: text/html; charset=ISO-8859-1
以下省略
3) ソースを訂正してApacheのバージョン情報を隠蔽
しかし、本来HTTPバナー抑止はもう少し奥が深かった。
これで完璧かと思う。 Cのソースをいじくらないとバナー情報を変更できないのである。
# cd <アパッチのソースディレクトリ
# cd src/include
# vi httpd.h
#define SERVER_BASEPRODUCT “Apache”#define SERVER_BASEREVISION “1.3.27”#define SERVER_BASEPRODUCT “HTTP” ← 見られてもいいような文字にする
#define SERVER_BASEREVISION “SERVER” ← 見られてもいいような文字にする
Apache再コンパイル。
# OPTIM=”-O2″ ./configure –enable-module=so
# make
# make inastall
これで、httpd.conf編集。
ServerTokens Min
#SeverSignature Off結局SeverSignatureは関係なし。
コメントしておいてかまわない。
[root@school /home]# telnet 192.168.0.43 http
Trying 192.168.0.43… Connected to 192.168.0.43. Escape character is ‘^]’.
HEAD / HTTP/1.0 HTTP/1.1
200 OK Date: Tue, 20 May 2003 04:43:47 GMT
Server: HTTP/SERVER ←ここではApacheも出なくなる
Last-Modified: Fri, 14 Dec 2001 05:09:32 GMT
ETag: “b3879-707-3c19898c”
Accept-Ranges: bytes
Content-Length: 1799
Connection: close
Content-Type: text/html Connection closed by foreign host.
4) パッチを適用して隠蔽
パッチのありかは、 ここ
これで、アパッチにパッチを加える(アパッチのバージョンによってパッチが違うので 気をつけること)。
基本的にApache1系のみ。
# cd apache_1.3.27
# patch -p0 -d . < sigtoken.patch
その後、もう一度Apache再コンパイル。
# OPTIM=”-O2″ ./configure –enable-module=so
# make
# make inastall
これで、httpd.conf編集。
ServerTokens None
# SeverSignature Off結局SeverSignatureは関係なし。
コメントしておいてかまわない。
結果は、
[root@school /home]# telnet 192.168.0.43 http
Trying 192.168.0.43… Connected to 192.168.0.43. Escape character is ‘^]’.
get <リターン>
HTTP Server Server at localhost Port 80
↑このようになる。Apacheのバージョンは出ない。
Connection closed by foreign host.
[root@school /home]# telnet 192.168.0.43 http
Trying 192.168.0.43… Connected to 192.168.0.43. Escape character is ‘^]’.
HEAD / HTTP/1.0
HTTP/1.1 200 OK Date: Tue, 20 May 2003 04:43:47 GMT
Server: HTTP Server ←ここではApacheも出なくなる。
Last-Modified: Fri, 14 Dec 2001 05:09:32 GMT
ETag: “b3879-707-3c19898c”
Accept-Ranges: bytes Content-Length: 1799
Connection: close
Content-Type: text/html
Connection closed by foreign host.
2. MTAのグリーティング情報の隠蔽
MTAのバナーは現在俺の知ってることだけだけですぅ~。 sendmail、書くのめんどいので割愛。
1) qmail グリーティングメッセージ
[root@mta conf]# telnet mail.kozupon.com smtp
Trying 203.141.144.180… Connected to mail.kozupon.com. Escape character is ‘^]’.
220 sub2.kozupon.com ESMTP
/var/qmail/control/smtpgreetingファイルを作り
Qmail 1.03
を書いておく。
2) qpopperクリーティングメッセージ
/etc/qpopper.confを作り
set shy = true
を書いておく。
3. BINDのバナー隠蔽
BINDのバージョンを隠す方法を以下に示す。
基本的には、named.confに「version “”;」 を入れるだけである。
# cd /var/named
# vi named.conf
options {
directory ”/var/named”;
version “”;
以下省略
} ;
以上
コメント