Web サーバーの Fingerprint のお話

Web サーバーやその他諸諸のバージョンなど(これを Fingerprint と呼ぶことにします) が必要になる場面ってしばしばありますよね。最近必要に駆られて調べてみたんですが、文献が散逸していて悲しかったので、ポインタを貼っておこうかと思います。

なぜ Fingerprint が必要か

かの有名な RFC 2068: HTTP/1.1 の 14.39 Server の箇所にある言葉を引用しておきます。実は後で紹介する論文の中でも引用されている言葉です。

“Note: Revealing the specific software version of the server might allow the server machine to be- come more vulnerable to attacks against software that is known to contain security holes. Server implementors are encouraged to make this field a configurable option.”

例えば PHP なんかはバージョン間の差異が大きいですよね。Why You Should Be Using Supported PHP Versions なんかでも触れられていますが、結構古いバージョンの PHP が動いていることは多いらしい(WordPress ユーザーで PHP 7系を使っているのは 25% という結果が報告されているけれど、これは本当? )。

また PHP: Supported Versions なんかをみると分かりますが、PHP 5.6 系のセキュリティーサポートは 2018/12/31 で切れます。なんなら PHP 5.4/5.5 系はとっくに切れています。

これらのことを攻撃者視点で考えてみると、Server ヘッダや X-Powered-By みたいなヘッダでバージョンが露出していない Web サーバーに対して(極力非破壊な)リクエストを投げてバージョンを特定できれば、嬉しいわけです。脆弱性診断という目線で言えば、phpinfo(); がなくたって、色んなバージョン情報が引っこ抜けると嬉しい。そこで必要なのが Fingerprint と呼ばれる技術なわけです。

NOTE: というか幾つかのもののバージョンの組み合わせが分かれば、どのディストリビューションが使用されているかであったりも推測できたりします。そうなると芋づる式に各ソフトウェアのデフォルトバージョンが割れるので、大惨事ですね。

具体的な Fingerprint 技術

まず注意なんですが、こういう Fingerprint でオンラインに上がってる記事は、大体古めのバージョンに対してしか通用しない認識です。もしかしたら各診断会社には秘伝のタレがあるのかも…(僕は知らない)。個人的に新しいバージョンのものに対しても検証してみようかなと思ったのですが、それはまた後日。

Apache HTTP Serverのバージョンを当てる方法

Apache httpd 2.2.X のバージョン当て手法が紹介されています。相変わらず面白い。

Testing for Web Application Fingerprint (OWASP-IG-004)

かの有名な OWASP Testing Guide v4 の一部にもなっている記事です。王道ですね。ヘッダの返ってくる順序で、なんていうのは元々意識したこともなかったので目に鱗でした。

Detecting and Defending against Web-Server Fingerprinting

HMAP という Web サーバーの version の fuzzing ツールの話です。歴史を感じられるので、一度読んでみるとよいと思います。

httpreconhttprint

Web サーバーの Fingerprinting 入門という感じの記事もあります。HTTP バージョンが不適切なリクエストや、 Method が不適切なリクエストを投げつけた時の差異を見ていきます(これははじめに紹介した MBSD 様のブログと一緒)。

各リクエストに対するサーバーソフトウェアの挙動差を収集するの、大変だったろうなあ…。ディストリビューション間でも違うって聞いた覚えがあるし(要検証)。

おまけ: Nmap の OS Detection

nmap を使っていると、よくバージョンが出てくるのを見かけると思います。それがどんな仕組みになっているかの説明が書いてあります。

おまけ: Wappalyzer

jQuery なり Vue.js なり PHP なり、使われているありとあらゆるもののバージョンを引っこ抜いてくれるやつです。Chrome などブラウザの Extension としても、また Web サービスとしても使えます。Server ヘッダを見るだけ、みたいな実装もありますし、ここまで紹介したようなツールほどリッチではないですが、とっても便利です。もう CMS エスパーとかしなくていい。最近友人に教えていただいてからすごく重宝しています。 Wappalyzer 使用例

まとめ

古いバージョンの Web サーバーに対してしか使えない上記の方法ですが、ちょっと検証したら面白そうですね。次の休日使って検証してみたいと思ってます。ただ優先度が低いので一生 pending してしまいそう………。

Written on March 19, 2018