Apache2.4セキュリティ「HTTP TRACEメソッドを無効化しCross-SiteTracing(XST = クロスサイトトレーシング)対策を行う」
- 公開日
- カテゴリ:Apache
- タグ:Linux,CentOS,Apache,Security,httpd,2.4,7.2,TraceMethod,CrossSiteTracing,XST,XSS

Apache はデフォルトで「HTTP TRACE メソッド」という機能が有効になっています。
この機能が有効な場合、サイトに XSS(クロスサイトスクリプティング)の脆弱性があった場合、Cross-Site Tracing(XST) という攻撃リスクが高まる可能性があります。
Cross-Site Tracing(XST = クロスサイトトレーシング) Trace メソッドによって HTTP リクエストヘッダの認証情報などを抜き取る攻撃(XSS と TRACE メソッドを組み合わせた攻撃手法)
Cookie 情報や Basic認証の ID やパスワードなどが抜き出されてしまう可能性がある ただし、現在ではブラウザ側で結構対策が行われていて、XST は行えなくなっています。
とはいえ、対策しておく事に越したことは無いのでこの機能を無効化してしまいましょう。
まずは、curl コマンドを叩いて TRACE メソッドが利用可能かどうかを確認します。プロトコルによって付与するオプションが違います。
HTTPcurl -v -X TRACE [URL]HTTPScurl --insecure -v -X TRACE [URL]telnet で行うのがスムーズですが、vagrant など仮想環境の場合に素直にいかない場合あるので curl で行っています。
# curl コマンドで確認
curl -v -X TRACE http://192.168.111.11/
# 実行結果
[demo@localhost ~]# curl -v -X TRACE http://192.168.111.11/
* About to connect() to 192.168.111.11 port 80 (#0)
* Trying 192.168.111.11...
* Connected to 192.168.111.11 (192.168.111.11) port 80 (#0)
> TRACE / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.111.11
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 13 Dec 2017 18:23:23 GMT
< Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.1.10
< Transfer-Encoding: chunked
< Content-Type: message/http
<
TRACE / HTTP/1.1
User-Agent: curl/7.29.0
Host: 192.168.111.11
Accept: */*
* Connection #0 to host 192.168.111.11 left intact
上記結果でのポイントとしては、「Method Not Allowed 」が表示されているかどうかになります。
実行結果を見ると表示されていないので、TRACE メソッドが利用可能な事が確認出来ました。
では、TRACE メソッドを無効にしてみます。 httpd.conf を編集します。
ファイル設置箇所/etc/httpd/conf ファイル名 httpd.confvim コマンドで httpd.conf を開き、TraceEnable off を追記します。
# vim コマンドで httpd.conf を開く
vim /etc/httpd/conf/httpd.conf
# 場所はどこでも OK 。追記します。
# HTTP TRACE method off
TraceEnable off
Apache を再起動する前に書式チェックを行います。
# conf ファイルの書式チェック
apachectl configtest
# 実行結果
[demo@localhost ~]# apachectl configtest
Syntax OK // ←これが表示されれば OK
書式チェックが OK だったら、Apache を再起動します。
# Apache の再起動
apachectl restart
それでは、curl コマンドを叩いて改めて確認してみます。
# curl コマンドで確認
curl -v -X TRACE http://192.168.111.11/
# 実行結果
[demo@localhost ~]# curl -v -X TRACE http://192.168.111.11/
* About to connect() to 192.168.111.11 port 80 (#0)
* Trying 192.168.111.11...
* Connected to 192.168.111.11 (192.168.111.11) port 80 (#0)
> TRACE / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.111.11
> Accept: */*
>
< HTTP/1.1 405 Method Not Allowed
< Date: Wed, 13 Dec 2017 18:43:55 GMT
< Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.1.10
< Allow:
< Content-Length: 223
< Content-Type: text/html; charset=iso-8859-1
<
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method TRACE is not allowed for the URL /.</p>
</body></html>
* Connection #0 to host 192.168.111.11 left intact
「Method Not Allowed 」が確認出来たので、これで TRACE メソッドは OFF になりました。