セキュリティ分野では、Webサーバーベンダー(Apacheなど)とバージョンを特定のサーバーに対して標的型攻撃を開始するために使用できるため、バージョンを外部に公開することはお勧めできないことはよく知られている事実だと思います実装。
私は、Apache 2.4 Dockerコンテナーを起動して、それがまだ当てはまるかどうかを確認しました-そうです。
少し考えました。セマンティックバージョニングを使用してバージョン管理される標準機能セットを定義する、Webサーバーが実装できる標準があれば、すばらしいと思いませんか。
このようにして、アプリケーションは引き続き異なるサーバーバージョンを処理できます(これが、外部からバージョンを確認したい唯一の理由のようです)。ただし、少なくともWebサーバーのベンダーは非表示にできます。それは、攻撃者が対処しなければならない少なくとももう1つのハードルです。
どう思いますか?
はい、理論的には、広告ベンダーとバナーのバージョンによって、攻撃者の仕事は簡単になりますが、ほんの少し好きです。
宣伝しなくてもアプリの振る舞いから把握できます。たとえば、ネットワークスキャンツールnmapを見てみましょう。
Nmapは、ホストの検出とサービス、オペレーティングシステムの検出など、コンピューターネットワークを調査するための多数の機能を備えています。これらの機能は、より高度なサービス検出、脆弱性検出、およびその他の機能を提供するスクリプトによって拡張可能です。
出典: wikipedia
TCPおよび/またはUDPポートが他のスキャン方法の1つを使用して検出された後、バージョン検出はそれらのポートに問い合わせて、実際に何が実行されているかについての詳細を決定します。nmap-service-probesデータベースには、さまざまなサービスを照会し、応答を認識して解析するための式を照合します。
ソース: nmapドキュメント 。
基本的に、nmapは、Apache/nginx/IISなどであるかどうかを判断することから開始します。これは、異なるWebサーバーが異なる応答をすることがわかっている特定のパケットを送信することによって行います。次に、それがApacheであることを認識すると、バグ修正または新機能が原因で、バージョン間で変更された動作をターゲットとするパケットを送信します。
コメントの@ paj28で述べられているように、nmapはベンダーの検出に非常に優れていますが、nmapが詳細なバージョン情報を表示する場合、バナーがあったためと考えられます。もちろん、ハッキングしようとしているのなら、なぜわざわざバージョンを見つけようとするのでしょうか。それがApacheであることがわかったら、metasploitからすべてのApache悪用スクリプトを実行して、それらが付着していないか確認してみませんか?
したがって、はい、理論上は「すべてのWebサーバーがどのように動作する必要があるか」の仕様を作成することは可能ですが、それはWebサーバーの革新やバグの修正を許可しないことを意味します。さらに、Webサーバーは、他のサーバーにはない機能で差別化を図ります。
@TripeHoundで指摘されているように、バージョンバナーを使用すると、システム管理者がシステムのインベントリを簡単に作成し、最新の状態に保つことができるため、セキュリティの面で有利です。
TL; DR:バナーかどうかに関係なく、どのWebサーバーとOSが話しているのかを理解できます。
この投稿が人気になったので、いくつかの例を追加します。
Apache httpdは、HTTPヘッダーにバージョン情報を配置します。
HTTP/1.1 200 OK
Date: Thu, 17 Oct 2019 14:26:10 GMT
Server: Apache/2.4.6 (CentOS)
そして当然のことながら、nmapはこれをピックアップします。
~ nmap 192.168.56.107 -p 80 -A --version-all
Starting Nmap 7.60 ( https://nmap.org ) at 2019-10-17 07:58 EDT
Nmap scan report for 192.168.56.107
Host is up (0.0020s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.6 ((CentOS))
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.6 (CentOS)
|_http-title: Apache HTTP Server Test Page powered by CentOS
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 Host up) scanned in 14.23 seconds
少し注意が必要な場合、Apache Tomcatは明確なバナーを表示しません。
HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"1896-1527518937672"
Last-Modified: Mon, 28 May 2018 14:48:57 GMT
Content-Type: text/html
Content-Length: 1896
Date: Thu, 17 Oct 2019 14:35:05 GMT
Connection: close
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Apache Tomcat</title>
</head>
...
nmapはベンダーを正しく認識していることがわかりますが、バージョンは推測できません。
~ nmap -A -p 8080 192.168.56.1
Starting Nmap 7.60 ( https://nmap.org ) at 2019-10-17 10:34 EDT
Nmap scan report for 192.168.56.1
Host is up (0.0013s latency).
PORT STATE SERVICE VERSION
8080/tcp open http Apache Tomcat
| http-methods:
|_ Potentially risky methods: PUT DELETE
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Apache Tomcat
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 Host up) scanned in 21.71 seconds
攻撃者は気にしません。人気のあるWebサイトがある場合、サイトがデータベースをまったく使用していない場合でも、ボットが考えられるすべてのパスでphpmyadminのすべての(脆弱な)バージョンをプローブしていることがわかります。同じ方法で、Apacheなどのすべてのバージョンのセキュリティホールを調査します。 Server
ヘッダーをそのまま使用するか省略しても、ここでのセキュリティはそれほど高くありません。
しかし、あなたが管理者である場合、Server
ヘッダーを使用して、サーバーがまだパッチされていない場合に、まだ更新していないことを忘れないようにする可能性があるものをすばやく特定できます。
もちろん、あなたの懸念は有効です。たとえば、誰かが情報を収集していて手動でエクスプロイトを選別している場合は、正しいバージョンを知っていれば機能しますが、ほとんどの場合それは不明瞭によるセキュリティです。重要な点は、ソフトウェアを常に最新の状態に保つ必要があるため、最新バージョンを実行していることを知っている攻撃者のことを気にする必要がないことです。
これまで、多くのサーバーが次のようなヘッダーを返していました。
サーバー:Apache/2.4.1(Unix)mod_php/1.2 mod_ssl/0.9
これにより、必要以上の情報が提供されるため、ほとんどのサーバーはデフォルトで次のようなヘッダーになります。
サーバー:Apache
実際、ほとんどのWebサーバーでは、このヘッダーをオフにすることが難しくなっています。理由?マーケティング。彼らは、最も一般的なWebサーバーが何であるかの調査に登場したいと考えています。
フィンガープリントについては、Apache対NGINX対IISなどを確実に判別できるツールがいくつかあります。ただし、サーバーのバージョンのフィンガープリントははるかに困難であり、オープンソースツールはうまく機能せず、細分性では不可能です。
言ったように、そのままにしておくのはセキュリティの問題ではなく、一部のクライアントプログラムにとって有用な情報です。 curl
の例:Server
ヘッダー値を使用して、HTTPパイプラインを有効にできるかどうかを確認します。
https://serverfault.com/a/596560/34761 から取得
[curlは冗長モードで実行するとこのメッセージを表示します
-v
]:
* Server Apache/... is not blacklisted
Curlからの内部メッセージです。パイプライン処理に関連するカール機能の一部のようです。
参照 https://daniel.haxx.se/blog/2013/03/26/better-pipelining-in-libcurl-7-30-0/
アプリケーションがHTTPパイプライン化を試行してはならないサーバーのリストを指定できるようにするサーバーブラックリスト[注:「サーバーヘッダーに基づく」] –実際のテストでは、一部のサーバーが壊れて再生できないことが判明していますゲーム
したがって、なぜデフォルトで有効になっていて、完全に無害なのはなぜですか(サーバーを最新の状態に保つだけです)。どういうわけかサーバーのバージョンUser-Agent
ヘッダー。
バージョン情報を非表示にすることは弱いセキュリティ対策であり、obcursityによるセキュリティの形式であるためです。それが追加するセキュリティの量については議論の余地があります。a)攻撃者は依然として指紋をとることができ、おそらくサーバー、バージョン、およびmodを狭いエラーマージン内で決定でき、b)攻撃者はエクスプロイトのライブラリ全体をとにかく投げることができるということです。
ほとんどのシナリオでは、攻撃者に少しの時間と労力を追加するだけです。攻撃者が実際に勝つ唯一のシナリオは、攻撃者がネットワーク全体をスキャンして大規模な攻撃を仕掛け、脆弱性が発見されたサーバーのみに後の攻撃を集中させる場合です(つまり、攻撃者は可能な限り多くのサイトをできるだけ短時間で侵害したい)。 and彼はフィンガープリントを使用していないか、サイトで確実に機能しません。
それがバージョン情報をオフにする理由です製品版は、害がほとんどなく、少し効果があるかもしれないという理由で、私たちが通常行ったり、アドバイスしたりしている現実の1つです。
開発中、外部からバージョンを確認できないと、追加の作業(システムへのログイン、コマンドラインツールでの確認)が発生する可能性があります。また、開発者がサーバーに直接アクセスできないため、開発バージョンでは不可能になる場合もあります。通常、番号はオフになりません。
Dockerイメージは、プロダクションと開発のどちらで使用されるかを認識していません。これが、バージョン番号をオンに保つ理由です。一方の設定では、もう一方の設定よりも害が大きくなります。