30代半ばの事務職員がITエンジニアになった話

おおよそタイトルのとおり、30代半ばにしてITエンジニアのタマゴになってしまった会社員の話

【Webサーバー(IIS)】httpヘッダーにASP.NETのバージョンが表示されてしまう脆弱性と対策

httpヘッダーにASP.NETバージョン情報が
表示されてしまうという脆弱性
指摘を受けた


実は詳しくは理解してないけど
.NETはJavaなんかと
同列のプログラムの
フレームワークだと認識している


たとえばJavaで書かれたアプリは
Apacheを使おうがIISを使おうが動くけど、
.Net系は同じMicrosoft製の
WindowsServerとIISの組み合わせ
じゃないと動かない?


ゆえに今回のケースはIISでしか
発生しないと思われる


バージョンが表示されてしまう状況の再現


状況次第とは思うけど
今回のケースでは
どうにかして

500 Internal Server Error

をだすと


f:id:ykk333:20190702232159p:plain
ASP.Net version情報

応答ヘッダー部分に
X-ASPNet-Version: 4.XXXX
とバージョン情報が表示されるというもの


ちなみに関係ないけど
phpで500エラーを意図的にだすには
以下のようにするらしい

<?php
header('HTTP/1.1 500 Internal Server Error');
?>

バージョンが表示されないようにするための対策


バージョンというかそもそも
X-ASPNet-Version:
という項目自体を出さなくする


必須で表示しなければいけない
項目は決まっているので
アプリ側が許せば
それ以外の項目は基本的に
表示・非表示の制御は
できる、、、
のかもしれない(自信なし)


設定するにはweb.configの
記載を修正する


GUIが売りのIISの場合、
たいがいのことはアイコンから
設定でき、その操作が
自動的にweb.configに記述される


しかし、マニアックなこととなると
web.configを直接編集しないと
いけないらしい


web.configと一言で言っても
IIS全体のマスター?configと
その下位に位置するサイトごとの
web.configが存在し、
通常はサイトごとのほうを編集する
サイト名を右クリックしてフォルダを開く


f:id:ykk333:20190703230931p:plain
IIS フォルダを開く


f:id:ykk333:20190703223920p:plain
IIS フォルダを開く


当初、フォルダのなかにweb.configが
見当たらずかなり悩んだが
なんでもいいので設定をすれば
自動的にweb.configが作成されるらしい


web.configを開いたら
configurationの中のsystem.webの中に
以下の通りX-ASPNet-Versionを無効化する
設定を記載する

<configuration>
  <system.web>
    <httpRuntime enableVersionHeader="false" />
  </system.web>
</configuration>


httpヘッダーには実は非常に多くの
情報が含まれていて、デフォルトの
まま表示させてしまうと
攻撃者にとって有用な情報が
多々あるというのが最近
身をもって分かってきた


一般ピーポーには
バージョンが分かったくらいでは
どうしようもないけど
玄人にしたらよい手掛かりになって
しまうのだろう


インターネットに公開している
Webサーバーを持っている限り
気をつけるに越したことはない