「IoTシステム」に関する問題の解法

はじめに
今回のテーマは「IoTシステム」です。 本記事では、平成29年度秋期 午後Ⅱ問題 問1の設問1と設問2について解説します。
IoTシステムに対する
セキュリティ対策の考え方
問題の解説に入る前に、IoTシステムに対するセキュリティ対策の考え方について紹介します。本記事ではIoT推進コンソーシアム(総務省、経済産業省)が作成したガイドラインを参考に記載しています。後述のIoT機器の特性や対策の指針については、ガイドラインを参考に記載しています。
IoT特有の性質
IoT機器へのセキュリティ対策を検討する上で特有の性質を理解してセキュリティ対策が必要となります。まず、IoT機器特有の性質として、下記の6点があります。
- 脅威の影響範囲・影響度合いが大きいこと
自動車分野や医療分野におけるIoT機器の導入が進んでいます。それらの分野で攻撃が発生した場合生命が危険にさらされる可能性があります。 - IoT機器のライフサイクルが長いこと
一般的に「モノ」のライフサイクルはPCやスマートフォンなどのライフサイクルよりも長いです。例えば、車であれば10年程度は利用されます。家電等でも2年おきに買い替えるという製品は少ないかと思います。そのため、セキュリティ対策が不十分になった機器が10年間接続され続けることが想定されます。 - IoT機器に対する監視が行き届きにくいこと
IoT機器はPCやスマートフォンなどのような画面がなく人目による監視が行われません。そのため、利用者はIoT機器に不具合が発生していることに気づけないことが想定されます。 - IoT機器側とネットワーク側の環境や特性の相互理解が不十分なこと
IoT機器側とネットワーク側がそれぞれの特徴を理解されずに接続されることにより安全性や性能が低下する恐れがあります。 - IoT機器の機能・性能が限られていること
センサーなどのリソースが限られたIoT機器では、暗号などのセキュリティ対策を適用できない恐れがあります。 - 開発者が想定していなかった接続が行われる可能性があること
IoT機器はあらゆるものが通信機能を持ち、これまで外部につながっていなかったモノがネットワークに接続され、IoT機器メーカやシステム、サービス開発者が想定していなかった影響が発生する可能性があります。
IoTセキュリティ対策の指針
IoT推進コンソーシアムのガイドラインでは、5つの指針でまとめています。詳細はガイドラインをご確認ください。IoT機器の特別な対策としては、機器のリソースが少ないため、暗号処理などを端末に実装することが困難です。そのため、ネットワーク側からセキュリティ対策を実施することがIoT機器へのセキュリティ対策の特徴となります。
平成29年度秋期 午後Ⅱ問題 問1
今回取り上げるのは、ZカメラとZクラウドを提供するサービス事業者が新規で発見されたマルウェアMに対して、感染対策およびセキュリティ対策を検討実施する問題です。対象のシステムの構成図は下記の通りです。
それでは、設問の解説をしていきます。
設問1
設問1では、「Zカメラ」に対し、マルウェアMの情報提供から対策検討開始を想定した問題です。対応チームでZカメラの脆弱性を調査したところ、下記2点が確認されました。
- ZカメラのL-OSにログインできる管理者アカウントが無効化されていない
- 工場出荷時に設定された管理者アカウントのパスワードが単純で、さらに利用者が変更もできない
感染したマルウェアの感染の仕組みは、以下のように説明されています。
マルウェアMは感染した端末から感染拡大に利用できる脆弱性を保有するIoT機器を探索します。脆弱な端末を検出後、マルウェアMをダウンロード・感染させます。そのため、直ちにセキュリティ対策が必要となります。
そこで、設問1では次の表のように検証を進めることになっています。今回の検査内容の流れはマルウェアMの動きを参考に作成されているため、マルウェアMの動きの表と検査内容の表を対応させながら問題を解いていくことで効率的に解答を導き出すことができます。
・設問1(1)
設問1(1)は「検査項目の名称を答えよ」という問題です。対象の枠である(a)の検査内容を確認すると、TCPポートにSYNフラグをセットしたパケットを送信し、応答を確認しています。したがって、解答は以下のようになります。
SYNスキャン
・設問1(2)
設問1(2)は「下線①について、ポートが開いている場合と閉じている場合に期待される応答結果を答えよ」という問題です。IPAの総評を確認すると設問1(2)の閉じている状態の正答率が低かったとあります。そこで、後述の「設問1(2)の補足」にてTCPの動作の簡単な説明を交えながら説明します。
本設問の解答は以下のとおりです。
・開いている場合:カ
・閉じている場合:エ、ク
・設問1(3)
設問1(3)は「検査内容の表の(b)に当てはまるプロセスの動作」を解答する問題です。今回の検査内容の流れはマルウェアMの動きと対応づけられているため、検査内容の項番6とマルウェアMの動きの項番と対応づけることで解答を導き出すことができます。
検査内容の項番5では、マルウェアMの動きにおける項番6の後半の動きに対応づけられることがわかります。そのため、検査内容の項番6はマルウェアMの動きにおける項番7に対応していることがわかります。そこで、マルウェアMの動きの項番7で実施する内容を確認すると、以下のようになります。
- HTTPを用いてC&Cサーバと通信
- 感染拡大先の探索
- ログイン試行
- ログイン成功端末情報をサーバに送信
検査の中では、最初のステップから確認することで原因の切り分けを行うことができます。そのため、マルウェアMの動きの項番7を確認するための対応策としては、HTTPの通信可否について記述すれば正解になるかと思います。したがって、解答例は以下のようになります。
HTTPを用いて、外部のサーバと通信
・設問1(4)
設問1(4)は、下線①の内容について解答する問題です。
問題となっていた脆弱性の2点は、開発時のデバッグ用のプログラムとその起動スクリプトが残っていたために発生した脆弱性であると確認できました。対策内容としては、「デバッグ用プログラムとその起動用スクリプトを削除したファームウェアを作成」することです。
次に問題となるのが新しいファームウェアの配信方法です。改めて問題文を確認すると、ZカメラにZクラウドから定期的にファームウェアを送信していることが確認できます。この仕組みを利用することで、最新のファームウェア配信することが可能です。
したがって、解答例は以下のようになります。
デバッグ用プログラムとその起動用スクリプトを削除したファームウェアを作成し、ZクラウドからZアプリに対し配信する。
・設問1(2)の補足
・SYNスキャンとTCP
TCPはIETFのrfc793にて標準化されているプロトコルです。TCPの特徴は、通信の信頼性を向上させるため、コネクション接続を行いデータが順番通りに欠落や重複なく通信できたことを確認できるようになっています。
そのため、データ通信を実施する前にコネクションを確立する必要があり、コネクション確立のために3-way-handshakingを利用します。SYNスキャンでは、この3-way-handshakingにおける接続要求パケットとしてSYNをセットしたパケットを送信し、その際のサーバからの応答によりポートの状況を確認しています。通信確立までのイメージを次図に示します。
・開いているポートに対しての接続要求
通常の通信確立プロトコルにて検査が実施されます。そのため、上図でサーバからの得られる応答を確認します。SYNスキャンに対して期待される応答としては、①に対応付けられるSYNとACKがセットされたパケットが応答されることが期待されます。
・閉じているポートに対しての接続要求
TCPが説明されている様々なサイトや本では「RSTパケットを用いて通信終了させる」と解説されているため、設問1(2)の閉じている場合に「オ」を選択してしまい誤答となってしまった方が多かったのではと推測しています。実は「RSTパケットを用いて通信終了」という説明は少し不十分であると考えています。閉じている場合の挙動について追加で説明します。
・閉じているポートにおける応答
閉じているポートでの応答はrfc793のp.65を確認する必要があります。閉じているポートにおける応答の記載の一部を抜粋します。
1 | If the state is CLOSED (i.e., TCB does not exist) then |
2 |
3 | all data in the incoming segmant is discarded. An incoming segment containing a RST is discarded. An incoming segment not containing a RST causes a RST to be sent in response. The acknowledgment and sequence field values are selected to make the reset sequence to the TCP that sent the offending segment. |
4 | |
5 | If the ACK bit is off, sequence number zero is userd, |
6 | <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK> |
7 | IF the ACK bit is on, |
8 | <SEQ=SEG.ACK><CTL=RST> |
9 | Return. |
この内容をまとめまると、開いていないポートに対しての通信は、以下のいずれかで対応することになります。
・すべての通信データを破棄する
・RSTフラグを含んで通信データを破棄する
・RSTを含んでいない通信データが来たらRSTを含む適切な通信パケットで応答する
- ACKビットがオフ(0)ならシーケンス番号0を利用し<SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>
を応答する
- ACKビットがオン(1)なら<SEQ=SEG.ACK><CTL=RST>
を応答する
ここでのポイントは、RSTフラグを含んだRSTパケットが2種類存在することです。
そこで改めて設問1(2)を見ると、検査端末から送信しているのはSYNフラグのみがセットされたパケットが送信されています。そのため、考えられる応答は「すべての通信データを破棄する」か「RSTフラグがセットされていない通信データが来たらRSTフラグをセットした通信データを応答する」となります。「すべての通信データを破棄する」はファイアーウォールなどで通信をDROPされると言えばイメージがつきやすいかとは思います。この場合は、クライアント側に一切の応答が返されません。そのため、解答群の「ク」が解答となります。
一方で「RSTフラグがセットされていない通信データが来たらRSTフラグをセットした通信データを応答する」については、ACKビットの状態に依存して解答が変わります。SYNスキャンでは、SYNのみが含まれたパケットが送られてきているので、この場合の応答として適切な解答は「エ」となります。
【TIPS】
では「今回選択されなかった「オ」はSYNスキャンではどこで発生するのか」を考えてみましょう。
・開いているポートに対してのスキャンを実施する場合
通常の接続要求がサーバから応答を得られるため、サーバからはACKフラグとSYNフラグがともにセットされたパケットが返ってきます。検査端末は受信したパケットに対して通信を確立させないパケットを応答する必要があります。FINフラグはコネクションが成立していないため利用できず、RSTフラグを利用して応答します。この場合、rfc793のACKビットがオン(1)の条件にマッチするため、解答群の「オ」を応答することになります。
・閉じているポートに対してのスキャンを実施する場合
「RST/ACK」か「応答なし」かになるため、パケット受信後に検査端末から次の応答するものはありません。