Kozupon.com    
 
 バナー抑制!


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 "";

     以下省略

} ;

以上


 
 
 



Copyright 2005 Kozupon.com.