IoT検索エンジン「Shodan」の活用方法
脆弱性リスクがもたらす影響は拡大しており、企業のシステムを守るためには脆弱性診断が欠かせません。
様々な手法・ツール・サービスがある脆弱性診断において、今回のコラムでは、デバイスを探し出せる検索エンジン「Shodan」の機能や脆弱性調査における活用例をご紹介いたします。
1.Shodanのご紹介
今回は、IoT検索エンジンの一つである「Shodan」について紹介していきます。
※ https://www.shodan.io/
Shodanは、インターネットに接続されたデバイスを探し出すことが出来る検索エンジンです。
Googleなどの検索エンジンはWebサイトを探し出すことに特化していますが、Shodanはそのデバイス版になります。
ここで言うデバイスとは、サーバやネットワーク機器はもちろん、工場のIoT機器や監視カメラ、個人のコンピュータまで、あらゆるものが含まれます。
Shodanがどういったツールなのか、まだイメージが出来ていない方のために、まず簡単なサンプルをお見せしたいと思います。
下記の例では、「日本にある、PostgreSQLを使っているデバイス」という条件で検索をかけています。
その結果、20,640件のデバイスがヒットしており、1つ1つのIPアドレス情報などが取得できます。
(東京よりも大阪の方が多くヒットしているのが分かります)
この他にも、特定のポートやバージョン、HTMLのタイトルやハッシュ値など、様々なパターンで検索することができます。
検索テクニックについては、後程ご紹介いたします。
Shodanはアカウント登録をしなくても利用できますが、無償アカウントを作成することで格段に使いやすくなります。
その他にも、メンバーシップと呼ばれる買い切りの有償アカウントや、月額利用料を払うことで更に使いやすくなるプランがあります。
※クレジットについては、検索結果をDLしたり、APIを用いて検索を行った際などに消費されます。
2.機能のご紹介
Search
Shodanの基本的な検索機能です。
フィルタと呼ばれる検索パターンを組み合わせて絞り込みを行っていきます。
(例)product:<プロダクト名> country:<国名>
試しに、日本に絞ってデバイスを検索してみます。
「country:jp」
1300万件以上の結果が得られました。また、統計データもすぐに確認出来るようです。
下図の左側の項目「TOP CITIES」では地域毎に何件のデバイスが検出されているかを確認出来ます。770万件で圧倒的に東京が多いです。
都道府県別なのかと思いきや、横浜とくくられているものもあります、必ずしも県別というわけではないようです。
すぐ下の項目「TOP PORTS」では、ヒットしたデバイスでどのポートが何件検出したか、という情報の統計のようです。
80/tcpと443/tcpはWebサーバに用いられるポートなので特に違和感はありません。
(個人的には、今後80/tcpが減って443/tcpの割合が増えていってくれることに期待したいです)
気になるのが、4番目に多く検出されている22/tcpです。一般的にSSHで利用されているこのポートですが、認証が突破されるとデバイスにログインされてしまうことから、外部に公開しないことが推奨されています。
これらの統計データはこのようにアナリティクスとして見ることが出来ます。
表示されているもの以外にも、プロダクト別の統計や、内在する脆弱性別の統計なども確認でき、これを見ているだけでも十分楽しめます。
(脆弱性別の統計で、最も多く検出されている脆弱性は「cve-2018-1312」というApacheの脆弱性でした)
比較するために、今度はアメリカ(US)に絞って検索してみます。
ヒットする件数は当然、桁が違うのですが、特に気になったのはプロダクトごとの統計データです。
下図は左が日本のもの、右がアメリカのものです。
日本では「Apache httpd」が多いのに対し、アメリカでは群を抜いて「CloudFront httpd」が検出されています。
このことから、アメリカでのAWSのシェアの高さが伺えます。
検出したデバイスを選択すると、さらに詳細な情報を見ることが出来ます。
- 全般的な情報
どのクラウドサービスを利用しているか、IPアドレス情報からどの地域に存在しているかなどが分かります - オープンポート情報
インターネットからアクセス可能なポートの一覧が分かります。 - レスポンス情報
アクセス可能なポートに対して通信した際のレスポンス情報が分かります。
このレスポンスから、どういったサービスを利用しているか、それらがどんなバージョンで稼働しているかなど、確認出来る場合があります。
攻撃者はこれらの情報を活用することで効率よく侵入活動が行えてしまうということになります。
(下図では、WebサーバとしてApache 2.4.27およびPHP 5.6.25を使用していることが分かります。)
Shodan Images
2つ目にご紹介する機能は、「Shodan Images」です。
この機能では、WebカメラやRDPのポートが開かれている機器のスクリーンショットが見ることが出来ます。
誰でもアクセス可能な状態のWebカメラやWindows端末が98万件ほど検出されており、第一印象としては非常にショッキングです。
感覚的に「自分が攻撃のターゲットになることはない」と思いがちですが、下記のように、脆弱な設定になっているだけで思わぬタイミングで悪意のある攻撃者の目に留まる可能性が十分考えられます。
Shodan Imagesでも、Searchと同様にフィルタを活用して効率よく検索が行えます。
日本に関連するデバイスのみ抽出したければ、検索ボックスに「country:jp」と入力します。
※国の識別子としては「ISO 3166」にて定められている二文字の国コードが用いられていますので、調べてみてください。
3.検索テクニック
ここまででもいくつか検索例を紹介していますが、フィルタを適切に活用することで、素早く求める情報を収集することが出来ます。
よく利用するフィルタを何点か紹介します。
- country:国別指定
- hostname:ホスト名指定
- ip:IPアドレス指定
- port:ポート指定
- http.html_hash:HTMLのハッシュ値指定
- http.favicon.hash:faviconのハッシュ値指定
- http.title:HTTPのタイトル指定
- https://www.shodan.io/search/filters
また、実際にいくつかのフィルタを使用した例です。
(例)匿名アクセス可能なFTPサーバを検索
匿名アクセス可能なFTPサーバを検索するためには、下記のコマンドを使います。
「port:21 country:jp "Login successful"」
Shodanはオープンポートに一通り接続を試みて、そのレスポンスを記録しているようなので、ログイン成功時のキーワード「Login successful」を検索に含めることで、匿名ログインに成功したFTPサーバのみを表示させることが出来ます。
(例)脆弱性識別子(CVE番号)をもとに検索
脆弱性識別子(CVE番号)をもとに検索するためのフィルタも存在します。
ただし、このフィルタはより上位のアカウントでないと使えないようです。
直接プロダクト名やポートを指定して検索する以外にも、様々な要素を用いてターゲットを絞りだすテクニックがあります。
一つは、HTTPのタイトル(http.title)から検索する方法です。
製品によっては、ログインページなどのHTTPタイトルが固定の名称になっているものがあり、意図的にタイトルを変更していない限り、「http.title」フィルタで検索が可能です。
<BIG IPを検索>
http.title:"BIG-IP®- Redirect"
4.脆弱性調査してみた
最後に、より攻撃的な観点でShodanを活用できるか、デモンストレーションしてみます。
以下のようなシナリオを考えて、Shodanで情報収集が出来るかチャレンジします。
<シナリオ>
Rocket.Chat(コミュニケーションツール)に緊急度の高い脆弱性が報告されたため、脆弱性を悪用するためにターゲットとなるサーバを絞り出したい
Rocket.Chatは、オープンソースのコミュニケーションツールです。
Slackの代替品として、企業やチームなどで利用されることがあります。
外部からアクセス出来るケースも多く、認証回避に成功してしまえば内部情報を取得出来る可能性が高いです。
(この手のチャットツールは、メモ代わりとしてログインIDやパスワードをメモしているケースも多く、更なる被害に繋がりやすいです)
まず初めに、プロダクト名でいろいろと検索してみましたが、なかなかヒットしません。
そこで、先ほど紹介したテクニックの一つの「http.title」を使ってみます。
Rocket.Chatについて調べていると、どうやらデフォルトのHTTPタイトルは「Rocket.Chat」のようです。
早速検索してみると……
案の定、かなりの件数がヒットしました!多少のノイズはありそうですが、ターゲットのサーバがかなり絞り出せました。
ただ、今回は更にもう一歩踏み込んで調査してみます。
企業やチームで利用していた場合、HTTPのタイトルくらいは変更しているケースが多いと思います。
(私が構築したら「TIS CHAT」などに変更します)
というわけで、HTTPのタイトルを変更した上で、Rocket.Chatを利用しているサーバを見つけるため、更に探索を続けていきます。
残念ながら「http.title:"Chat"」などのタイトルを予測する形で検索しても、大半がノイズで埋まってしまったため、別の方法を探します。
ここで注目したのは、フィルタリファレンスにある「http.favicon.hash」というフィルタです。
どうやらFavicon(ブラウザのタブに表示されるアイコン)のハッシュをベースに検索が出来るようです。
このやり方でチャレンジしてみます。
先ほど発見したRocket.Chatの一つを更に詳細表示します。
Shodanではアクセスした際の様々なデータを保管しており、今回は「Raw Data」の証跡から、どうやらFaviconのハッシュ値が取得できるようです。
下の方にスクロールしていくと、アイコンのハッシュ値と思わしき数字列を発見しました。
このハッシュ値をフィルタで検索すると、Rocekt ChatのFaviconを使っているサーバをすべて特定できるようです。
このように検索してみると……
成功したようです。Rocekt ChatのFaviconを使用しているターゲットが洗い出せました。
想定していた「<企業名> Chat」らしきものも発見できました。
あとは、見つけ出したターゲットに対して、脆弱性が悪用出来ないか片端から試していくだけです。
まとめ
ここまでShodanの紹介をしてきましたが、どういったツールなのか、何となく理解いただけたでしょうか。
Shodanのような情報収集系のツールを活用することで、容易に脆弱なターゲットを絞り出すことが出来てしまいます。
これは企業の規模や知名度に関わらず、脆弱なデバイスを保有しているだけで悪意のある攻撃者に狙われる可能性がある、ということです。
ぜひShodanをはじめとする情報収集系のツールを使いこなして、自分たちの管理する資産に問題がないか確認してみてください。
一番は、セキュリティベンダが提供している脆弱性診断サービスや脅威インテリジェンスなどのサービスを活用し、セキュリティ状況について定期的にチェックしていただくことです。
【注意事項】
Shodanを用いることで他組織のデバイスを検索することが可能ですが、それらのデバイスに対して実際にアクセスを試みた場合、各種法令に抵触する可能性があります。
また、上記で紹介した情報を基に発生したいかなる被害や損害について、当社は何ら責任を負うものではありません。