RitoLabo

Apache2.4セキュリティ「HTTP TRACEメソッドを無効化しCross-SiteTracing(XST = クロスサイトトレーシング)対策を行う」

  • 公開:
  • カテゴリ: linux 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メソッドが利用可能かどうかを確認します。プロトコルによって付与するオプションが違います。

HTTP
curl -v -X TRACE [URL]
HTTPS
curl --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.conf

vimコマンドで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
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<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になりました。