RISKENを用いてWebサイトで使われている技術を確認する
先日、RISKENを更新し、新しいスキャン機能を追加しました。
新規に追加したのは、WebサイトのURLをRISKENに登録することでそのサイトで動いているツール・ミドルウェアを調査する機能[1]です。
主な用途として、以下のようなケースを想定しています。
- 複数サイトの面倒を見る方が使用している技術情報を横断で確認できる
- 脆弱性が出た際の影響を判断しやすくする
この記事では、RISKENでURLを登録し結果が出るまでの流れと内部で使用しているwappalyzerというツールについて簡単にご紹介したいと思います。
RISKENとは
RISKENとは、OSSのセキュリティツールやパブリッククラウド(AWS,GCP等)が提供しているセキュリティサービスを活用してシステムのセキュリティ状態を可視化するツールです。
詳細に関してはドキュメントあるいは、ogapanさんが立ち上げ方、スキャン機能の説明をしてくださっているので、そちらをご覧いただければと思います。
スキャンの実行
立ち上げが完了して、RISKENへアクセスできることを前提として、ご説明いたします。
スキャンの設定
メニューから OSINT -> OSINT にて、スキャン対象を設定する画面へ遷移します。
OSINTの画面で右上のNewボタンを押して、リソースタイプ[2]と対象とするURLを登録します。
URLを登録した際に追加された列をクリックすることで、OSINTのデータソース画面へ遷移します。
データソース画面では列をクリックすると、登録されている内容の詳細を確認できます。
この画面で、スキャンボタンをクリックすることで、スキャンが開始されます。
ステータスがConfiguredになっていない場合には、先に有効化を押す必要があります。
結果の確認
スキャンが完了するとステータスがOKへと変わります。
スキャンの結果を見るために、メニューからFinding画面に遷移します。
下記の画像のリソースにツール名が、説明にもう少し細かい情報が記載されます。
結果の一覧より、RISKENのドキュメントサイトはAWS上で動いていて、mkdocsで作られているというのが分かりますね!
それぞれの列をクリックすることで、スキャンを実行して得られた詳細な情報を確認できます。
Websiteにmkdocsへのリンク、Categoriesからはそのツールがどんな属性なのかを把握できます。
また、Finding画面ではリソースでフィルタリングをかけることが可能です。
もし、複数のサイトから特定のツールを使っているサイトのみを表示したい場合には以下のようなフィルタリングをかけます。
ここまで、対象のWebサイトの登録から結果の確認までを行ってきました。
今後はツール、ミドルウェアのバージョンから、そのバージョンに脆弱性が存在しないかどうかをチェックしてスコアを増減させる機能も実現させたいと考えています。
wappalyzerとは
wappalyzerとは、Webサイトの技術を識別するツールです。
各ブラウザでの拡張機能やAPIに加えて、ソースコード、Dockerfileが提供されています。[3]
個人的には、以下のような用途で複数の使い方をしています。
- 今アクセスしているサイトが何で作られているかを確認するために拡張機能
- 複数のサイトをまとめて調査するためのCLI/API
ここからは、以下の2つを説明しようと思います。
- ソースコードをpullして、スキャンを行うまで
- wappalyzerが何をやっているのかを簡単に
wappalyzerを実行する
GitHubに記載されているのREADMEの通りに行えば、簡単に実行できます。
以下の手順は記事作成当時のものになりますので、動作しない場合などにはそちらの手順をご確認ください。
下記の手順で、wappalyzerを使用できるようになります。
git clone https://github.com/AliasIO/wappalyzer.git
cd wappalyzer
yarn install
yarn run link
実行する際には、対象とするURLを引数とします。
node src/drivers/npm/cli.js https://docs.security-hub.jp/
上記の通りに実行した際には、以下のような結果を得ることができました。
{"urls":{"https://docs.security-hub.jp/":{"status":200}},"technologies":[{"slug":"mkdocs","name":"MkDocs","confidence":100,"version":"1.2.2","icon":"mkdocs.png","website":"http://www.mkdocs.org/","cpe":null,"categories":[{"id":4,"slug":"documentation","name":"Documentation"}]},{"slug":"mermaid","name":"Mermaid","confidence":100,"version":null,"icon":"default.svg","website":"https://mermaidjs.github.io/","cpe":null,"categories":[{"id":25,"slug":"javascript-graphics","name":"JavaScript graphics"}]},{"slug":"amazon-web-services","name":"Amazon Web Services","confidence":100,"version":null,"icon":"aws.svg","website":"https://aws.amazon.com/","cpe":null,"categories":[{"id":62,"slug":"paas","name":"PaaS"}]},{"slug":"nginx","name":"Nginx","confidence":100,"version":null,"icon":"Nginx.svg","website":"http://nginx.org/en","cpe":"cpe:/a:nginx:nginx","categories":[{"id":22,"slug":"web-servers","name":"Web servers"},{"id":64,"slug":"reverse-proxies","name":"Reverse proxies"}]},{"slug":"unpkg","name":"Unpkg","confidence":100,"version":null,"icon":"Unpkg.png","website":"https://unpkg.com","cpe":null,"categories":[{"id":31,"slug":"cdn","name":"CDN"}]},{"slug":"google-font-api","name":"Google Font API","confidence":100,"version":null,"icon":"Google Font API.png","website":"http://google.com/fonts","cpe":null,"categories":[{"id":17,"slug":"font-scripts","name":"Font scripts"}]},{"slug":"google-tag-manager","name":"Google Tag Manager","confidence":100,"version":null,"icon":"Google Tag Manager.svg","website":"http://www.google.com/tagmanager","cpe":null,"categories":[{"id":42,"slug":"tag-managers","name":"Tag managers"}]},{"slug":"google-remarketing-tag","name":"Google Remarketing Tag","confidence":100,"version":null,"icon":"Google Tag Manager.svg","website":"https://support.google.com/google-ads/answer/2476688","cpe":null,"categories":[{"id":77,"slug":"retargeting","name":"Retargeting"}]},{"slug":"google-analytics","name":"Google Analytics","confidence":100,"version":null,"icon":"Google Analytics.svg","website":"http://google.com/analytics","cpe":null,"categories":[{"id":10,"slug":"analytics","name":"Analytics"}]},{"slug":"aws-certificate-manager","name":"AWS Certificate Manager","confidence":100,"version":null,"icon":"aws.svg","website":"https://aws.amazon.com/certificate-manager/","cpe":null,"categories":[{"id":70,"slug":"ssl-tls-certificate-authorities","name":"SSL/TLS certificate authorities"}]}]}
jsonの文字列が返却され、technologiesにサイトで使用されている技術が含まれています。
今回は使用しませんでしたが、オプションは以下のコマンドで確認可能です。
node src/drivers/npm/cli.js -h
例としていくつか記載しますが、オプションを使用することでより便利な使い方ができます。
- -P, --pretty: 出力結果のjsonを整形する
- -r, --recursive: サイトのクローリングを行う
wappalyzerの動き
実際に、wappalyzerが行っている内容を3行で説明すると下記の通りです。
- ヘッドレスブラウザを使用して、対象のWebサイトにアクセス
- アクセスした結果を解析
- 解析した結果、技術ごとに特定の文字列が含まれている場合にそれを使用していると判定
wappalyzerで検出可能な技術もGitHub上で管理されており、その数およそ3000にも及びます。
まとめ
以下の2つについて、ご説明させていただきました。
- RISKENの更新で、Webサイトの技術情報を調査することができるようになりました
- wappalyzerというツールで、Webサイトの技術を調査できます
RISKENでは、他にも様々な機能を兼ね備えています。
ぜひ、ドキュメントなどをご確認いただき使ってみていただければ幸いです。
wappalyzerも使い方様々、導入も簡単で楽しいツールです。
こちらもぜひ試していただければと思います。
Discussion