Dr.セキュリティ®

脆弱性診断のやり方③
情報家電/IoT

この記事を書いた人

Dr.セキュリティ®
代表技術者 冨田 圭介

DFプロ認定資格保有
① CDFP-B(基礎資格)
② CDFP-P(実務者資格)
脆弱性診断士資格保有
冨田 圭介

3種類の方法をご紹介

IoT等に対するスーパー簡易的な脆弱性診断のやり方として、当記事では下記の2つの方法をご紹介します。

  • ①【素人向け】表層解析(脆弱性情報の検索)
  • ②【エンジニア向け】ポートスキャン(不意のポート開放の確認)
  • ③【素人・エンジニア共通】クラウドの確認
上記①・②・③は確認できる内容がそれぞれ異なります。①表層解析では「製品自体の脆弱性」を確認でき、②ポートスキャンでは「余計な機能による脆弱性」を確認できます。

またIoT等はクラウドと連携しているものも多く、その場合は機器自体だけでなくクラウドの脆弱性も強く影響しますので、クラウドのセキュリティ状態のチェックも必要です。このようにそれぞれで確認できる脆弱性の性質が異なりますので、どれか一つではなく全てを実行すると良いです。

ただし②ポートスキャンにはある程度のネットワークに関する知識が必要ですし、ポートを管理したことが無い人がスキャン結果を見てもチンプンカンプンで混乱するだけだと思います。そのため、「私は素人だ」という自覚がある人は①と③のみとする方が良く、そうではないエンジニアの方(ポートやファイアウォールのことを理解している)は、②ポートスキャンもお試し頂くと良いです。

それでは以降で①②③それぞれのやり方をご説明します。

①【素人向け】表層解析(脆弱性情報の検索)

概要

IoT等の製品自体に脆弱性があるか否かを確認するために、脆弱性情報のデータベースを製品型番で検索してみる、という脆弱性診断の方法を説明します。
大まかな流れは次の通りです。

  1. IoT等の型番等の情報をメモする
  2. 脆弱性情報のデータベースを検索する
  3. 検索結果を確認する
  4. 検出漏れを防ぐためにWeb検索も併用する

Step.1 型番等の確認

  1. 型番(品番、モデル番号などと表示される場合もあります)
  2. ファームウェアの名前とバージョン
  3. アプリの名前とバージョン
型番は機器に刻印や印字されている、またはラベルが貼ってあることが多いかと思いますが、もしそのような物が見当たらない場合は製品パッケージや納品明細などでご確認ください。

次に、ファームウェアの名前とバージョンをご確認下さい。ただしそれらは確認できる製品とそうでないものがあります。製品の説明書の中で、製品の管理画面へのアクセス方法やアップデート方法が書かれてある場合にはファームウェア情報を確認できるはずですので、説明書を参考にしてファームウェア名とバージョンを探して下さい。もし説明書にそのような記載がなくファームウェア情報を見ることができない場合は、その情報の取得は保留して下さい。

最後にアプリに関して、IoT等をスマホアプリで設定・管理する形でご使用されていることも多いかと思います。その場合は、そのアプリ(以下では「管理アプリ」と言います)の名前とバージョンをご確認下さい。なお管理アプリを使用せずに運用している場合は、その名前とバージョンの確認は不要です。

Step2. JVN iPediaで検索

「JVN iPedia」とは、平たく言うと脆弱性の情報を無料で閲覧・検索できるサービスです。
【URL】https://jvndb.jvn.jp/

「脆弱性対策情報データベース検索」という部分(下の画像の赤枠部分)に、Step1でメモした型番やアプリ名で検索すると、当該製品の脆弱性がJVNに登録されているか否かを確認できます。

Step3. JVNの検索結果を確認


上の画像のように、検索結果に「該当するデータがありません。」と表示された場合は、JVNのデータベースには当該製品の脆弱性情報が登録されていないことを示しています。この場合は「製品自体の脆弱性」は問題無さそうだと判断できますが、しかしこの段階ではまだ断定しません。(後述のStep4でもう少し検索してみます)

続いて、製品自体に脆弱性がある場合の例をご紹介します。

上の画像のように、検索結果に当該製品が表示される場合は、製品自体に脆弱性があることを示しています。
先頭列の「JVNDB-」で始まるリンク部分をクリックすると、その脆弱性の情報を閲覧できます。


上の画像は脆弱性情報の中にある、「影響を受けるシステム」の項目の部分です。
ファームウェアのバージョンが「1.87.00」のものが該当すると書かれてあります。
この例ではバージョンの値が固定でしたが、次のように範囲が示されることも多くあります。
【例1】 1.23.40およびそれ以前(補足:1.23.40より古いものは全て該当)
【例2】 1.22.33 から 1.33.44

Step1でメモしたファームウェアバージョンが上記のバージョン以前のものである場合は「脆弱性がある」と判断し、それよりも新しい場合は「脆弱性は無い」と判断します。
もしStep1でファームウェアバージョンが確認できなかった場合には、ここでは判断しようがありませんので、メーカーのサポートにお問い合わせ下さい。

【重要】けっこう間違えがちなこと

下記の2つのバージョンは、どちらが新しいバージョンですか?

  • 1.23.4
  • 1.5.67
この問いに対して、「1.5.67」と答える人が結構います。
それは誤りです。
正解は、1.23.4の方が新しいバージョンです。

間違える理由は、ピリオドを無視して連続する数値だと解釈しているからです。算数のように「左側が大きい桁で、右に向かって10の位が下がっていく。」というように解釈すると誤った答えとなります。
  • 1234
  • 1567
こう見ると1567の方が数値が大きいから、1.5.67の方が新しいバージョンだ、というように間違えてしまうわけです。

バージョンの数値は連続する数値ではありません。ピリオドで区切って解釈して下さい。
「1 . 23 . 4」は、1、23、4に分けて読んでください。

左側の1は、「メジャーバージョン」というバージョンを表す値です。
真ん中の23は、「マイナーバージョン」というバージョンを表す値です。
右側の4は、「パッチバージョン」というバージョンを表す値です。

このようにして「1.23.4」と「1.5.67」を比べると、どちらも左のメジャーバージョンは1で同じです。
続いて真ん中のマイナーバージョンの値を比べると、前者は23で、後者は5です。23の方が5よりも大きい、つまり新しいマイナーバージョンということになります。
よって「1.23.4」と「1.5.67」を比べると、「1.23.4」の方が新しいです。

Step4. Web検索してみる

JVN iPediaで型番を検索しても該当する製品がなかった場合でも、Google等で以下のようなキーワードで検索されることをお勧めします。
型番 + 脆弱性
ファームウェア名 + 脆弱性
アプリ名 + 脆弱性

JVNでは正式名称で登録されているため一般呼称で検索してもヒットしない可能性があります。一方、Googleの検索結果は検索キーワードに完全一致するものだけでなく、似たようなキーワードのWebページも検索結果の一覧に表示されるので、JVNに登録は無いけれど、実は脆弱性があるかも? と気付けるかも知れません。

JVNのデータベースには、世の中のあらゆる製品の脆弱性が登録されているわけではありません。そしてIoT等は製品の種類が非常に多く、しかも情報が著しく乏しい海外製品も沢山あります。そのためIoTの脆弱性情報はJVNに登録がないことも多いです。ですのでJVNで検索した結果は何もないからといって、すなわち脆弱性が無いとは判断できないので、Google等で検索してみる方が良いのです。

また、IoT等は「色違い商品」や「限定商品」などの問題があることも多いです。
例えば、製品の筐体カラーが「白色」と「黒色」とで型番がちょっと違うようなケースをイメージして下さい。

  • 製品の筐体カラーが「白色」で、型番は「SAMPLE-1000-WH
  • 「白色モデル」のほか、期間限定品として「黒色モデル」が存在し、その型番は「SAMPLE-1000-BlackEdition
  • お手元にあるのが期間限定品の「黒色モデル」だったとします。
  • JVNに登録されているのは「白色モデル」の「SAMPLE-1000-WH」だったとします。
この状況で期間限定品の「黒色モデル」の型番「SAMPLE-1000-BlackEdition」をJVNで検索しても、検索にヒットしない可能性があります。しかしGoogle検索ならば完全一致ではなく“あいまい”な一致結果も表示されます。
例えばGoogleで「SAMPLE-1000-BlackEdition 脆弱性」をキーワードにして検索した結果、「SAMPLE-1000-WH」の脆弱性に関するWebページがヒットする可能性があります。
そうすると、「あれ?ちょっと型番が違うけれど、もしかしたら手元の機器にも脆弱性があるかも?」というように気付くことができます。

ここでは色違いの例を紹介しましたが、他にも次のようなことがよくあります。

  • 少しスペックを下げて価格を抑えた廉価版
  • オプションや付属品を充実させた特別版
  • 販売代理店などとのコラボ版
お手元の製品が通常版だとは限りませんので、JVN iPediaだけでなく念の為Google検索もおこなっておいた方が良いです。そして似たような型番のWebページがヒットした場合は、当該製品のメーカーサイトを確認し、お手元の製品と同種のようでしたら、その型番でJVN iPediaを検索してみると良いです。

脆弱性を検出した場合

ほとんどの場合は製品のメーカー(ベンダー)のWebサイトで対処方法がアナウンスされていますので、メーカーWebサイトのサポートページなどで製品型番を検索し、お知らせや更新情報などがないかご確認下さい。もし見つけられない場合はメーカーのサポートセンターにお問い合わせ下さい。

ただし海外メーカーの激安品の場合ですとサポートが実質的に皆無ということも多く、改善不可能というケースも多々あります。そうなるともう、買い替えをご検討頂く他にないです。安全面を考えますと、品質やサポートの面で安心感のある日本のメーカー/ベンダーの製品を選択されることをお勧めします。

②【エンジニア向け】ポートスキャン(想定外のポート開放の確認)

概要

ファームウェアがLinux系というIoT等が数多くあります。そしてLinux系のオープンソース・プログラムに関連する脆弱性を持つ物も結構あります。
特に危険な物の例として、激安製品の中には「SSHの22番ポートが開放されていて、しかもそのパスワードは全製品で共通している。」というヤバすぎる仕様の物が時々あります。

ポートスキャンして「何番ポートが開いているか」を確認すれば、そのIoT等でどのようなサービスが稼働しているかをある程度推測できますので、脆弱性リスクを考える際に重要なヒントとなります。

Step1. ポートスキャンツール「Nmap」をインストール

ポートスキャンの定番のツールである「Nmap」という無料アプリを使用します。
Nmapのオフィシャルサイト:https://nmap.org/

Windows, Mac, Linux版がありますので、ご使用環境に合うファイルをダウンロードしインストールして下さい。

以降ではWindows PCを使用する場合の例をご紹介します。
Nmapを起動すると下の画面(GUIの「Zenmap」)が表示されます。

Step2. IoT等のIPアドレスを確認

  1. WAN側のIPアドレス(グローバルIPアドレス)
  2. LAN側のIPアドレス(プライベートIPアドレス)
上記の2つのIPアドレスを確認し、メモに記して下さい。
ただしIoT等はグローバルIPアドレスを設定していない方が割合は多いと思いますので、その場合は1番は無視して2番のプライベートIPアドレスをメモするのみで良いです。

IPアドレスの確認方法は2通りあり、一つはIoTの管理用アプリで確認する方法と、もう一つはルーターの管理画面で確認する方法です。もし、スマホにIoTの管理用アプリをインストールしている場合には、それで確認するのが手っ取り早いかと思います。もしそのようなアプリを使用していない場合は、ルーターの管理画面でご確認下さい。管理画面の開き方やIPアドレスの見方はルーター毎に異なりますので、ルーターの説明書をお読み下さい。大抵はDHCPやWi-Fi接続状況の画面でIPアドレスの払い出し状況を確認できると思います。

Step3. LAN側からのスキャン実行

Nmap(Zenmap)の画面にコマンドを入力してスキャンしてください。

  1. 「ターゲット」に、IoT等のプライベートIPアドレスを入力。
  2. 「コマンド」に、Nmap -sS -p 1-65535 -T4 -Pn **** を入力。
    (****の箇所にはローカルIPアドレスを入れます)
  3. 「スキャン」をクリック
  4. スキャンが完了するまで待ちます。

Step4. LAN側のスキャン結果を確認


スキャンが完了すると上の見本のようにスキャン結果が表示されます。
表示された一覧のなかに、「なんでこんなポートが開いているんだ!?」というものがないかご確認下さい。

Step5. WAN側のスキャン&確認

Step3・4ではLAN側(プライベートIPアドレス)に対してスキャン&確認しました。もしグローバルIPアドレスをIoT等に設定している場合には、Step3・4と同様に今度はWAN側(グローバルIPアドレス)に対してスキャン&確認して下さい。

ポート開放を検出した場合

Nmapのスキャン結果の一覧にサービス名等が表示されている場合には、そのサービスが稼働していることに問題があるか・ないかを判断して下さい。

例えば22番ポートのSSHや、23番ポートのTelnetなど、IoTで使用していないはずのサービスのポートが開いている場合は要注意です。これらも含め、IoTに対するサイバー攻撃において悪用されやすいポート番号を次に例示します。

  • 20番、21番(FTP)
  • 22番、2222番、22222番(SSH)
  • 23番、2323番(Telnet)
  • 80番、443番(HTTP/HTTPS)
  • 445番(SMB)
  • 1900番(UPnP)

これらが開いているからといって必ずしも異常だと言えるわけではありませんし、運用上の理由があって開けていることもあり得ますが、しかしこれらは攻撃者から狙われやすいポートであり、特に理由が無い限り基本的には閉じます。それなのに開いてしまっているということは、脆弱性があるのかも知れないだけでなく、既にサイバー攻撃を受けて侵害されている(攻撃者の支配下にある)状態のおそれもあります。
もしポートを閉じることができるならば閉じる、それができないならば当該製品の使用を停止するという対処をご検討頂いたほうがよいかと思います。

また、前述のポート番号の例はあくまで「狙われやすいと広く認識されているポート」の例ですので、他の番号ならば大丈夫というわけではありません。IoTの用途と、開いているポート(のサービス)の関連性を考えて、もし用途に関係がないポートが開いている場合には脆弱性の可能性を警戒したほうが良いです。

③【素人・エンジニア共通】クラウドの確認

概要

IoTはクラウドと連携して成り立っている場合と、そうでない場合があります。ご使用されているIoTがクラウドと連携している場合には、クラウドに関係する脆弱性にも気をつける必要があります。

Step1. ログインパスワードの確認

IoTのクラウドサービスにログインする際のパスワードが脆弱なものであるか否かをご確認下さい。

  • パスワードの使い回しは危険です。他のアカウントサービスのパスワードと同じパスワードを使い回している場合は、変更して下さい。
  • アルファベット大文字・小文字と、数字、記号を組み合わせて複雑なパスワードにして下さい。文字数は最低でも10文字以上にして下さい。
  • 辞書に載っている単語の使用は、できれば避けたほうが良いです。
  • ニックネーム+生年月日のような安易なパスワードは避けたほうが良いです。

Step2. 2段階認証の確認

ログインのセキュリティ設定において2段階認証(2要素認証)が有効になっているか否かご確認下さい。もし無効になっている場合は必ず有効にして下さい。

Step3. 利用形態の確認

IoTのクラウドの利用形態が、Webブラウザか、専用アプリかをご確認下さい。結論を先に言いますと専用アプリの方が事故リスクは低いです。なぜかというと、Webブラウザの場合はクラウドの認証情報のデータを窃取されるリスクがあるからです。

Webブラウザは様々なWebサイトやサービスで使用されるものなので、事故に遭う確率が高く、しかもWebブラウザが記憶している認証情報を狙ったサイバー攻撃の頻度は多いです。そのため次のようなリスクにさらされています。

  • 日常的に訪問しているサイトやサービスの運営者側でインシデントが発生し、その影響をユーザが受け、ブラウザの認証情報が漏洩してしまうリスク。
  • 悪意の広告やフィッシングなどがきっかけとなってブラウザの認証情報が窃取されるリスク。
  • 他の端末がマルウェア感染し、そこから横展開の攻撃が派生し、当該端末のブラウザの認証情報が窃取されるリスク。

単に高リスクなだけでなく、2段階認証を突破されるケースもあります。
その原理を説明すると長くなるので省略しますが、Webブラウザから認証情報が窃取され、ログイン時の2段階認証すり抜けてクラウドに不正アクセスされることが実際にあるのです。

重要なことなのでもう一度繰り返しの説明となりますが、Webブラウザが記憶している認証情報を狙ったサイバー攻撃の頻度は多いので、Webブラウザは専用アプリに比べると認証情報が漏洩する確率が高いです。そのような理由から、もし専用アプリが提供されている場合にはそちらを使用するほうが侵害リスクを抑えることができます。

関連ページ