はじめに
Loggolはウェブサーバのアクセスログを入力とし、そのログに含まれる攻撃の情報を出力する超シンプルなサービスです。例えばSQLインジェクションやパストラバーサルなど、良く知られているウェブの攻撃が検知対象です。一覧表はこちらにあります。この中に「リコネサンス」というものがあるのですが、こちらは若干聞き慣れないものだと思いますので、こちらのブログで内容を紹介します。
リコネサンス=偵察
リコネサンス(Reconnaissance)は「偵察」「調査」などを表す言葉です。サイバーセキュリティの分野では「スキャン」に非常に近いニュアンスです。たとえばこちらのオライリーの書籍では、「Web application reconnaissance refers to the explorative data-gathering phase that generally occurs prior to hacking a web application」とあります。「本格的なウェブアプリケーションへの攻撃の前段階の探索的な情報収集」という感じです。
例えば、ターゲットにおいて「ある特定のWordPressのプラグインがインストールされているか?」を調べるようなアクセスが、リコネサンスの代表的なものになります。
リコネサンスにより使用されているソフトウェアの種類やバージョンを事前に把握しておくことで、攻撃者は今後そのソフトウェアに脆弱性が見つかったときに、即攻撃を実施するのかもしれません。
実際の例
では実際の例を見てみましょう。例えばあるIPアドレスからのアクセスが、下のような内容だったとします。
404 /api/message/webInfo
404 /auth/web/login/webLoginEwm
404 /html/wechat/getkey
404 /member/css/bindmobile.js
404 /Mg0a4/app/data.js
404 /pc/serverConfig.js
404 /api/index/indexconfig
404 /notice/unreadMsgCount
404 /assets/js/video.js
404 /Loading.png
404 /melody/api/v1/retgistercolumn/list
404 /ashx/getPlatParam.ashx
404 /api.php
404 /static/icon.png
404 /h5/static/icon/icon_hetong.png
404 /Public/m/js/yxMobileSlider.js
左の数値はステータスコード、右がリクエストのURIです。URIだけ見ると、それほどは違和感がないかもしれません。
しかし、それぞれの行のトップの階層(/api/や/auth/など)がバラバラなのは少し不自然です。また、ステータスコードが全部404なのは、明らかに異常です。
これらはファイルの有無を知るための悪意あるアクセスです。単体で、このアクセス自体では被害は出ないものの、明らかに好ましくないものです。Loggolではこのようなアクセスを行うIPアドレスを検知し、リコネサンスとして出力します。
もう一つ、別の例を見てみましょう。
404 /admin/assets/upload_image.php
404 /assets/upload_image.php
404 /sites/all/libraries/elfinder/connectors/php/connector.php
404 /sites/all/libraries/elfinder/src/connectors/php/connector.php
404 /theme/assets/upload_image.php
404 /wp-admin/admin-ajax.php
404 /wp-content/plugins/1-flash-gallery/readme.txt
404 /wp-content/plugins/Tevolution/tmplconnector/monetize/templatic-custom_fields/css/jquery.lightbox-0.5.css
404 /wp-content/plugins/acf-frontend-display/js/blueimp-jQuery-File-Upload-d45deb1/js/main.js
404 /wp-content/plugins/advanced_file_manager_5/php/connector.minimal.php
404 /wp-content/plugins/aviary-image-editor-add-on-for-gravity-forms/includes/upload.php
404 /wp-content/plugins/dzs-zoomsounds/admin/upload.php
404 /wp-content/plugins/fluid_forms/file-upload/server/php/
404 /wp-content/plugins/formcraft/file-upload/server/content/upload.php
404 /wp-content/plugins/formcraft/file-upload/server/php/
404 /wp-content/plugins/formcraft/file-upload/server/php/upload.php
404 /wp-content/plugins/front-end-editor/lib/aloha-editor/plugins/extra/draganddropfiles/demo/index.css
404 /wp-content/plugins/pica-photo-gallery/css/style.css
404 /wp-content/plugins/secure-file-manager/vendor/elfinder/php/connector.minimal.php
404 /wp-content/plugins/sexy-contact-form/includes/fileupload/
404 /wp-content/plugins/simple-ads-manager/css/jslider.round.plastic.css
404 /wp-content/plugins/simple-forum/resources/jscript/ajaxupload/ajaxupload.js
404 /wp-content/plugins/super-interactive-maps/sim-wp-admin/pages/manage-maps.php
404 /wp-content/plugins/superlogoshowcase-wp/sls-wp-admin/pages/exportAjax.php
404 /wp-content/plugins/superstorefinder-wp/css/ssf-wp-pop.css
404 /wp-content/plugins/uploader/uploadify/uploadify.css
404 /wp-content/plugins/videowhisper-video-conference-integration/vc/flash_detect_min.js
404 /wp-content/plugins/videowhisper-video-conference-integration/vc/vw_upload.php
404 /wp-content/plugins/videowhisper-video-presentation/vp/translation.php
404 /wp-content/plugins/videowhisper-video-presentation/vp/vw_upload.php
404 /wp-content/plugins/wp-file-manager-pro/lib/php/connector.minimal.php
404 /wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php
404 /wp-content/plugins/wp-front-end-repository/js/uploadify/uploadify.css
404 /wp-content/plugins/wp-mailinglist/css/colorbox.css
404 /wp-content/plugins/wp-property/third-party/uploadify/uploadify.css
404 /wp-content/plugins/zingiri-web-shop/fws/addons/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php
404 /wp-content/themes/qualifire/scripts/admin/uploadify/uploadify.css
こちらはWordPressのプラグインを中心に探しています。パッと見た感じは悪意があるように見えないのですが、ステータスコードが全部404であることや、巧みに特定のjsやcssのみでプラグインインストールの有無を探っていることから、間違いなく悪意のあるアクセスであると考えることができます。
WAFで見つけにくい
私はLoggolの開発者であると同時にクラウド型WAFのScutumの開発者でもあり、WAFを使って検知・防御する立場でもあります。しかしこのリコネサンスについては、なかなかWAFで見つけるのは難しいです。というのも、WAFはリクエスト単体が届いたらその時点で「これは攻撃か?」と考える必要があるからです。
リクエストが届いた時点では、それはごく普通のGETリクエストに見えてしまいます。特にスタイルシートへのアクセスなどは、本当にありふれたものです。レスポンスのステータスコードが404になるかどうかはWAFがリクエストを受け取った時点ではわかりませんし、また仮に404だったとしても、それが単なるリンク切れやファイルのアップロード忘れである可能性も考慮する必要があります。
一応、WAFでリコネサンスを検知するために考えられる方法としては、あるIPアドレスからのアクセスをしばらくの間記憶しておく(いわば、文脈を残しておく)ことで、404連発のアクセスを行うIPアドレスを「怪しい」と考え、一連のアクセスの後半においては、攻撃と判定することはできるかもしれません。しかしその場合であっても、最初のいくつかのアクセスは見逃してしまうことになるでしょう。ストリーミング処理とも言えるWAFでは、リコネサンスの検知はなかなか厄介です。
Loggolのような攻撃ログ分析ツールでは幸いにも「全部揃っている状態」からの分析ができます。こちらはいわばバッチ処理とも言えます。じっくりと全ての情報を見回してから攻撃かどうかの判定を下すことができるのです。この点はWAFに対するアドバンテージになります。行ったアクセス全体を分析の材料にできるので、リコネサンスについては検知がしやすい面があります。
一方、WAFはWAFで、POSTリクエストのボディ部や、各ヘッダの内容を判断材料に出来るため、単発のアクセスで成立する攻撃についての検知能力はとても優れています。
検知件数は多い
リコネサンスは非常に多く実施されています。そのためLoggolでアクセスログを分析してみると、最も多く検知されるのがリコネサンスである場合がよくあります。それ自体では被害が出る可能性は低いですが、どのくらいリコネサンスが行われているのかを把握しておくと、管理しているウェブサイトにおけるセキュリティの温度感みたいなものが把握できるかもしれません。
まとめ
今回はLoggolが検知する攻撃のうちのひとつ、リコネサンスについて概要を紹介しました。先に上げた例の他に、単なる.envファイルを探すアクセスなども、リコネサンスとして検知します。
WAFでは見つけにくい種類の悪意あるアクセスであり、かつ件数も多いです。Loggolではまずまずの精度でこれを見つけられます。二週間は無料でトライアル出来ますので、ぜひ試してみてください。
このブログに関する質問などはお気軽に@kinyukaまで。