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

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

【Webサーバー(Apache)】ローカルIPアドレスが漏えいしてしまうという脆弱性と対策について

ローカルIPがばれてしまう脆弱性への対策 Apache


インターネットに公開している
Webサーバーについて
脆弱性の診断を受けたところ、
特定の条件下でローカルIPが露呈
されてしまう脆弱性が発見される


IISのサーバーだけでなくApache
サーバーでも発見された


ちなみにIISApacheとnginxの
シェアはほとんど同じくらいらしい


ということはおのずと
対策についてもそれぞれ
覚えないといけなそうだが
これもいい機会と思っておこう


Apacheにおいての対策は
Sever_nameを指定しておくこと

httpリクエストとServer_nameの関係


Server_nameとは
Apache内で使われている環境変数のこと
一見自身のサーバー名が格納されるように
見える

http(またはhttps)://exsample.com でアクセス
 ↓
Server_name : exsample.com


として返してくれる
実はこれ

> HEAD /xxxx HTTP/1.1
> Host: exsample.com
> User-Agent: xxxx
> Accept: */*


こんなかんじで送信した
httpリクエストのHost部分を参照している


つまり
IP直打ちでアクセスすると

http://12.34.56.78 でアクセス
(※グローバルアドレス)
 ↓
Server_name : 12.34.56.78


IPで返してくることになる
ここでhttp1.0・Hostなしで
リクエストを送信すると

> HEAD /xxxx HTTP/1.0
> Host: 
> User-Agent: xxxx
> Accept: */*


Sever_nameはどうなるかと言うと

Server_name : 192.168.1.100


"Hostを読んで格納したいけど
空白だからローカルIPを返しとけ"
という挙動になるらしい


これがローカルIPが漏えいしてしまう理屈


Server_nameの設定


なので対策のひとつとしては
http1.0でのリクエストが来ようが
Server_nameをあらかじめ固定しておき
常に一定の値を返すこと


Apacheのconfigファイルで
変数を強制的に指定

SetEnv Server_name  exsample.com

または

SetEnvif _ .* Server_name=exsample.com
※条件つき書式
 と言ってもどんな条件でも
 Sever_nameをexsample.comにしろ
 というだけの意味


configファイルは
旧来のApacheだと

httpd.conf

というファイル名
Ubuntuに導入したApache
(Apache2?)
従来httpd.confでまとめられていた
configがばらけている様子

envvars

というファイルを編集するっぽい