2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

バナー抑制!

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 “”;

     以下省略

} ;

以上

コメント