以下、図面を参照しながら、本発明のいくつかの実施形態について詳細に説明する。なお、複数の図面において対応する要素には同一の符号を付す。
図1は、例示的なIoTシステム100を示す図である。図1では、組織内のIT網150の下にサーバ102と複数のIoT機器101とで形成される別なネットワーク105が示されている。サーバ102と複数のIoT機器101は、IoTシステム100を形成している。IoT機器101は、例えば、情報を収集する様々な機器であってよく、収集した情報をサーバ102に送信する。例えば、IoT機器101が、温度計や湿度計などのセンサである場合、IoT機器101は、計測した温度や湿度などの情報を定期的にサーバ102に提供してよい。また、例えば、IoT機器101が、エアコンディショナーのコントローラなどの電化製品に搭載されたマイコンである場合は、電化製品に入力された操作などに関する情報がサーバ102に提供されてよい。そして、サーバ102は、例えば、IoT機器101から収集した情報を用いて、組織内のIT網150に接続した端末に、様々なサービスを提供してもよい。
ここで、IoT機器101がウイルスなどに感染し、他の機器を攻撃してしまうことがある。こうした脅威は、例えば、IoT機器101が十分な機能を有していれば、セキュリティ対策ソフトをインストールしたりすることで、対策を講じることができる。
しかしながら、IoT機器101のなかには、セキュリティ対策ソフトをインストールするといった対策を講じることのできない機器も含まれている。例えば、IoT機器101のなかには、独自のオペレーティングシステム(OS:Operating System)で動作していたり、旧式のOSで動作していたり、或いは、そもそもOSが無いものもあり、セキュリティ対策ソフトを導入できないことがある。そのため、IoT機器の不正な通信を検出することのできる更なる技術の提供が望まれている。
ここで、IoT機器101は、例えば、図1のサーバ102などの特定のホストにデータを上げ続けるといった利用をされることが多く、IoT機器101は、しばしば特定のホストとのみ通信するように設定される。このような場合に、特定のホストとのみ通信するように設定されているIoT機器101が、ホスト以外の装置と通信していたとすると、そのIoT機器101は不正な通信を行っている可能性が高いと判定することが可能である。
そこで、以下で述べる実施形態では、例えば、IoT機器101が送信したパケット数と、IoT機器101からホストに届くパケット数とが所定の誤差範囲内で合致しているかを検査して、IoT機器101がホスト以外の装置と通信しているか否かを検査する。所定の誤差範囲は、例えば、1%〜2%など、IoTシステムで発生するパケットロスの頻度などを事前に調査することで、許容可能な誤差範囲に設定することができる。そして、例えば、IoT機器101が送信したパケット数と、IoT機器101からホストに届くパケット数とが所定の誤差範囲を超えて大きく異なれば、IoT機器101はホスト以外の他の装置と不正な通信をしている可能性が高いと推定することができる。換言すると、例えば、IoT機器101が不正な通信をしている場合、IoT機器101が送信するパケットの数は不正な通信の数だけ増えることになる。一方で、それらの不正な通信のパケットはホストには届かないため、IoT機器101からホストに届くパケット数に変化はなく、IoT機器101が送信したパケット数の方が、IoT機器101からホストに届くパケット数とよりも増えることになる。また、例えば、IoT機器101が送信したパケット数と、IoT機器101からホストに届くパケット数とが所定の誤差範囲内で合致していれば、IoT機器101はホスト以外の他の装置とは通信していないことが推定できる。以下、実施形態を更に詳細に説明する。
図2は、実施形態に係るIoTシステム200を例示する図である。IoTシステム200は、例えば、IoT機器101と、サーバ202と、パケット計数装置211と、ハブ(HUB)212と、パケット分析部213とを含む。なお、一実施形態において、IoT機器101の不正な通信を検査する検査システム250は、サーバ202と、パケット計数装置211と、ハブ(HUB)212と、パケット分析部213を含んでよい。ここで、IoT機器101は、正常に動作しているときには、サーバ202のみと通信するように設定されているものとする。サーバ202は、例えば、IoT機器101から各種の計測データを収集し、IT網150に接続する他の装置などに計測データを用いて様々なサービスを提供してよい。なお、サーバ202は、例えば、パケットをルーティングする機能は有していなくてよく、IoT機器101が送信したパケットは、サーバ202を超えてIT網150には流れなくてよい。
パケット計数装置211は、例えば、SNMP(Simple Network Management Protocol)対応のスイッチであってよく、一例では、インテリジェントスイッチであってよい。パケット計数装置211を、一実施形態においては、パケット計数スイッチと呼ぶことがある。パケット計数装置211は、例えば、入力されるパケットを、ポートごとにカウントし、パケットを宛先のポートに出力する。IoT機器101は、例えば、パケット計数装置211の特定のポートと接続されていてよい。そのため、IoT機器101が接続されるポートに対してパケット計数装置211がカウントしたパケット数は、そのポートに接続するIoT機器101が送信したパケット数として用いることができる。
パケット分析部213は、例えば、プロトコルアナライザであってよい。プロトコルアナライザは、例えば、ネットワークやデータ機器間を流れるデータを解析する装置やプログラムである。パケット分析部213は、例えば、入力されたパケットを、パケットの送信元を示すソースアドレスごとにカウントしてよい。なお、ソースアドレスとしては、例えば、MACアドレス、またはIPアドレスなどを用いることができる。
ハブ212は、例えば、リピータハブであってよい。リピータハブは、例えば、受信したパケットを、接続する全ての端末に送信する。従って、図2において、パケット計数装置211から入力されたサーバ202宛てのパケットは全て、リピータハブによりパケット分析部213にも送信される。パケット分析部213は、パケットのソースアドレスを分析することで、検査対象のIoT機器101からサーバ202に宛てて送信されたパケットの個数を計数することが可能である。
そのため、サーバ202は、例えば、パケット計数装置211から、検査対象のIoT機器101が送信したパケット数を表す第1のパケット数を取得することができる。また、サーバ202は、パケット分析部213から、検査対象のIoT機器101がサーバ202に送信したパケット数を表す第2のパケット数を取得することができる。その後、サーバ202は、例えば、第1のパケット数と第2のパケット数とを比較することにより、検査対象のIoT機器101が不正な通信を行っているか否かを判定することができる。なお、以下で述べる実施形態では、検査対象のIoT機器101が送信したパケット数を表す第1のパケット数、および検査対象のIoT機器101がサーバ202に送信したパケット数を表す第2のパケット数をトラフィック情報と呼ぶことがある。
図3は、実施形態に係るサーバ202のブロック構成を例示する図である。サーバ202は、例えば、制御部301、記憶部302、および通信部303を含む。制御部301は、例えばOS350、設定部311、取得部312、および検査部313などとして動作する。サーバ202の記憶部302は、例えば、プログラムおよびデータなどの情報を記憶していてよい。一実施形態においては、サーバ202の記憶部302は、例えば、後述する分析情報900を記憶している。これらの各部の詳細および記憶部302に格納されている情報の詳細については後述する。
図4は、実施形態に係る検査対象のIoT機器101による不正な通信の検査処理の動作フローを例示する図である。サーバ202の制御部301は、例えば、不正通信の検査処理の実行指示が入力されると、図4の検査処理を開始してよい。
ステップ401(以降、ステップを“S”と記載し、例えば、S401と表記する)において制御部301は、不正通信を検査するIoT機器101を選択する。例えば、制御部301は、ユーザからのIoT機器101の選択を受け付け、ユーザによって選択されたIoT機器101を検査対象として選択してよい。
S402において制御部301は、検査対象のIoT機器101と通信中か否かを判定する。検査対象のIoT機器101と通信中でない場合(S402がNO)、フローはS403に進む。S403において制御部301は、図5を参照して後述するトラフィック情報収集処理を実行してトラフィック情報を収集し、フローはS405に進む。なお、トラフィック情報は、上述のように、例えば、IoT機器101が不正な通信を実行しているか否かを検査するために用いる情報である。一例では、トラフィック情報は、IoT機器101が送信したパケット数を表す第1のパケット数と、IoT機器101からホストに送信されたパケット数を表す第2のパケット数とを含んでよい。
また、S402において検査対象のIoT機器101と接続を確立しており、通信中である場合(S402がYES)、フローはS404に進む。S404において制御部301は、図13を参照して後述する通信時のトラフィック情報収集処理を実行してトラフィック情報を収集し、フローはS405に進む。
S405において制御部301は、例えば、収集したトラフィック情報に基づいて、検査対象のIoT機器101が不正な通信をしているか否かを検査し、本動作フローは終了する。例えば、IoT機器101が送信したパケット数を表す第1のパケット数と、IoT機器101からホストに送信されたパケット数を表す第2のパケット数とが所定の誤差範囲内で合致していたとする。この場合、制御部301は、IoT機器101が不正な通信をしていないと判定してよい。一方、例えば、第1のパケット数と、第2のパケット数とが所定の誤差範囲を超えて異なっていたとする(例えば、IoT機器101が送信したパケット数を表す第1のパケット数の方が所定値以上多い)。この場合、制御部301は、IoT機器101が不正な通信をしていると判定してよい。
(トラフィック情報収集処理)
続いて、図4のS403で実行されるトラフィック情報の収集処理について説明する。図5は、実施形態に係るトラフィック情報取得処理を例示する図である。制御部301は、例えば、図4のS403に進むと、図5の動作フローを開始してよい。
S501において制御部301は、例えば、パケット計数装置211から、検査対象のIoT機器101が接続しているポートのパケット数を、第1のパケット数として取得する。なお、制御部301は、一実施形態においては、以下の図6〜図8で述べるようにして、検査対象のIoT機器101が接続しているポートのパケット数を取得してよい。
図6は、パケット計数装置211により収集される計数情報600を例示する図である。パケット計数装置211は、例えば、パケットが入力されると、パケットが入力されたポートの情報と対応付けて、そのパケットのパケット番号を計数情報600に登録する。なお、一例では、パケット計数装置211は、起動時からの累積で入力されたパケットの情報を計数情報600に記録してよい。また、パケット計数装置211は、例えば、インテリジェントスイッチであってよく、SNMPプロトコルで外部と通信する。
図7は、SNMPプロトコルでの問い合わせを例示する図である。パケット計数装置211は、例えば、メモリなどの記憶装置701備えていてよく、記憶装置701に計数情報600を記憶している。そして、サーバ202は、例えば、GETコマンドとともに、オブジェクト識別子(OID:Object Identifier)と、ポート番号(図7では「x」)を指定して問い合わせをパケット計数装置211に送信する。それにより、サーバ202は、例えば、パケット計数装置211からオブジェクト識別子と対応する値の返信を受けることができる。
図8は、例示的なSNMPプロトコルで提供されるパケット数に関する情報を含むオブジェクトを示す図である。サーバ202の制御部301は、例えば、パケット計数装置211に5回問い合わせを行い、図8に示す5つのオブジェクトの値を取得することで、IoT機器101がパケット計数装置211のポートを介して送信したパケットの数を取得することができる。例えば、制御部301は、“ifInUcastPkts”および“ifInNUcastPkts”の2つを合算し、指定したポートの受信パケットの合算値を得る。また、制御部301は、“ifInDiscards”、“ifInErrors”、および“ifInUnknownProtos”の3つを合算することで、ポートに入力されたエラーパケットの合算値を得る。そして、制御部301は、受信パケットの合算値から、エラーパケットの合算値を差し引くことで、IoT機器101がパケット計数装置211のポートを介して送信したパケットの数を取得してよい。
続いて、S502において制御部301は、検査対象のIoT機器101からサーバ202に宛てて送信されたパケットの数を第2のパケット数としてパケット分析部213から取得し、本動作フローは終了し、フローはS405に進む。なお、制御部301は、一実施形態においては、以下の図9〜図10に述べるようにして、検査対象のIoT機器101からサーバ202に宛てて送信されたパケットの数を取得してよい。
図9は、パケット分析部213により収集される分析情報900を例示する図である。パケット分析部213は、例えば、パケットが入力されると、パケットの送信元を示すソースアドレスを分析し、ソースアドレス単位で入力されたパケットの数をカウントし、分析情報900に登録する。なお、一例では、パケット分析部213は、起動時からの累積で入力されたパケットの数をカウントしてよい。パケット分析部213は、例えば、プロトコルアナライザであってよい。パケット分析部213は、例えば、サーバ202の問い合わせに応じて、問い合わせで指定されるソースアドレスを用いて、検査対象のIoT機器101がサーバ202に宛てて送信したパケット数を分析情報900から読み出し、返信してよい。
図10は、パケット分析部213が実行するパケット分析処理を例示する図である。パケット分析部213は、例えば、起動すると図10の動作フローを開始してよい。
S1001において制御部301は、パケットを受信したか否かを判定する。パケットを受信していない場合(S1001がNO)、フローはS1001の処理を繰り返す。一方、S1001においてパケットを受信した場合(S1001がYES)、フローはS1002に進む。
S1002において制御部301は、受信したパケットが、サーバ202からのパケット数の問い合わせか否かを判定する。サーバ202からのパケット数の問い合わせで無い場合(S1002がNO)、フローはS1004に進む。一方、サーバ202からのパケット数の問い合わせである場合(S1002がYES)、フローはS1003に進む。
S1003において制御部301は、問い合わせにおいて、例えば、MACアドレスまたはIPアドレスなどで指定される検査対象のIoT機器101を、ソースアドレスとする分析情報900のエントリからパケット数を読み出し、サーバ202に返す。
S1004において制御部301は、受信したパケットのソースアドレスを分析し、ソースアドレスと対応する分析情報900のエントリのパケット数を1加算して、ソースアドレスごとにパケット数をカウントし、フローはS1001に戻る。
図10の動作フローにより、分析情報900には、サーバに宛てて送信されたパケットの数が、ソースアドレスごとに登録される。また、図10の動作フローにより、サーバ202の制御部301は、S502で送信されるサーバ202からの問い合わせに対して、検査対象のIoT機器101からサーバ202に宛てて送信されたパケットの数を表す第2のパケット数を取得することができる。
(通信時のトラフィック情報収集処理)
続いて、S404で制御部301が実行する通信時のトラフィック情報取得処理を説明する。
例えば、検査対象のIoT機器101の検査を実行する際に、検査対象のIoT機器101が、サーバ202と通信接続を確立していることがある。ここで、例えば、検査対象のIoT機器101が、サーバ202と通信接続を確立していなければ、検査対象のIoT機器101が過去に発信したサーバ202宛てのパケットは既に配送先への配送が完了している状態にある。そのため、サーバ202は、パケット計数装置211と、パケット分析部213とのそれぞれから取得した検査対象のIoT機器101のトラフィック情報を用いて、検査対象のIoT機器101が不正な通信を行っているか否かを判定することができる。
しかしながら、例えば、サーバ202が、検査対象のIoT機器101を検査する際に、検査対象のIoT機器101がサーバ202と通信接続を確立している場合、検査対象のIoT機器101はサーバ202にパケットを送信している。この場合、例えば、図11に示すように、通信経路上、或いはパケット計数装置211およびパケット分析部213が備えるバッファなどに配送の完了していないパケットが存在し得る。そして、この様なタイミングで、パケット計数装置211およびパケット分析部213からパケット数を取得しても、未配送のパケットにより数に差がでてしまうことがある。また、そもそもパケット計数装置211と、パケット分析部213とでパケット数を取得するタイミングが合致していないと、検査対象のIoT機器101が正常に動作していても、パケット数に差がでてしまう。例えば、パケット数を取得する際にパケット計数装置211と、パケット分析部213とのそれぞれが最後にカウントしたパケットが同じであれば、パケット数を比較して検査対象のIoT機器101を検査することができる。しかしながら、例えば、パケット計数装置211とパケット分析部213とが最後にカウントしたパケットが、検査対象のIoT機器101において大きく異なるタイミングで発信されたパケットであれば、パケット数を比較しても、意味のある判定を実行できない。そして、こうしたIoT機器101の不正な通信以外に起因してパケット数にズレが生じてしまうと、パケット数を収集しても検査対象のIoT機器101を検査することができない。
この様な、IoT機器101の不正な通信以外に起因するパケット数のズレを低減する一つの手法として、パケット数の取得時に検査対象のIoT機器101によるパケットの送信を一時的に停止させることが考えられる。検査対象のIoT機器101によるパケットの送信を停止させることで、例えば、経路上やバッファ上に存在する未配送のパケットの配送の完了を待ってからトラフィック情報の収集を行うことが可能になる。また、IoT機器101が発信した全てのパケットの配送が完了した状態であれば、パケット計数装置211およびパケット分析部213から収集タイミングの合致したパケット数を取得することができる。
しかしながら、IoT機器101のなかには、外部からの制御インタフェースがほとんど用意されておらず、例えば、パケットの送信停止などの制御ができないIoT機器101もある。そこで、実施形態では、TCP(Transmission Control Protocol)による通信制御の仕組みを利用して、IoT機器101からのパケットの送信を停止させる。例えば、実施形態ではサーバ102の制御部301は、検査対象のIoT機器101からパケットを受信した場合に、そのパケットに対するACK(肯定確認応答)を破棄する。ACKを破棄することで、検査対象のIoT機器101はACK待ちの状態に入り、検査対象のIoT機器101からのパケットの送信が一時的に停止される。それにより、検査対象のIoT機器101がサーバ202と通信中であっても、トラフィック情報を収集して検査対象のIoT機器101を検査することができる。以下、検査対象のIoT機器101がサーバ202と通信接続を確立している状態におけるトラフィック情報の収集について更に詳細に説明する。
図12は、送信側の装置と受信側の装置との間のTCPによる通信制御を説明する図である。なお、送信側の装置は、例えば、IoT機器101であってよい。また、受信側の装置は、例えば、サーバ202であってよい。
図12(a)は、TCPによるパケットの送信の流れを例示している。図12(a)に示す様に、送信側の装置が受信側の装置にパケットを送信したとする(図12(a)の(1))。なお、TCPでは、パケットの送信にウィンドウ制御という方式が採用されておいる。ウィンドウ制御では、ウィンドウサイズ分の複数のパケットがACKによる確認なしで連続して送信され、ACKはそれらの複数のパケットに対して、1つだけ返送される。以下では、連続して送信されるウィンドウサイズ分の複数のパケットのかたまりを1箱とし、例えば、1箱のパケットを送信するといった表現を用いることがある。
送信側の装置が送信した1箱分のパケットを受信側の装置が受信すると、受信側の装置は、受信したパケットと対応するACKを返信する(図12(a)の(2))。ACKを受信すると、送信側の装置は、ウィンドウサイズを増やすなどの調整を行い(図12(a)の(3))、調整後のウィンドウサイズで次の箱のパケットを送信する(図12(a)の(4))。ここで、受信側の装置からのACKが返らないと、送信側の装置はACKの受信待ちの状態に入る。
図12(b)は、送信側の装置のACKの受信待ちの状態を例示する図である。図12(b)に示す様に、送信側の装置が1箱分のパケットを送信したとする(図12(b)の(1))。1箱分のパケットを受信側の装置が受信すると、受信側の装置は、受信したパケットと対応するACKを返信するが、このACKを破棄したとする(図12(b)の(2))。この場合、送信側の装置は、ACKの受信待ちの状態になる。ACKの受信待ちの状態は、(1)でパケットを送信してから、再送タイマに設定された所定の待ち時間が経過し、タイムアウトするまで続く。再送タイマがタイムアウトすると(図12(b)の(3))、送信側の装置は、例えば、ウィンドウサイズを減らすなどの調整を行う(図12(b)の(4))。そして、送信側の装置は、調整後のウィンドウサイズで1箱分のパケットを再送し(図12(b)の(5))、受信側の装置に再送パケットが届く(図12(b)の(6))。
この場合、送信側の装置は、(1)でパケットを送信した後は、(5)でパケットの再送を実行するまでパケットの送信を停止する。そのため、このパケットの送信が停止する期間において、サーバ202は、測定誤差を抑えたトラフィック情報を収集することができる。
以上で述べた様に、受信側の装置は、ACKを破棄して送信側の装置からのパケットの送信を停止させることで、送信側の装置が受信側の装置に宛てて送信した全てのパケットの配送が完了した状態を作り出して、トラフィック情報の取得を実行することができる。
なお、図12の例では、TCPの通信制御に従って、送信側の装置のパケットの送信を停止させている。そのため、例えば、TCPで通信していれば、IoT機器101がパケットの送信停止などを受け付ける外部からの制御インタフェースを備えていなくても、IoT機器101のパケットの送信を停止させることができる。
また、ACKの破棄は、一例では、受信側の装置のファイアウォールなどのパケットフィルタに、自装置から検査対象のIoT機器101宛てのACKまたはTCPのパケットを破棄するように設定することで実行することができる。パケットフィルタを利用することで、例えば、OS350などに改変を加えなくても、ACKまたはTCPのパケットを破棄することができる。
続いて、以上で述べたACKの破棄を用いる通信時のトラフィック情報取得処理の動作フローを説明する。図13は、S404で制御部301が実行する通信時のトラフィック情報取得処理の動作フローを例示する図である。制御部301は、例えば、図4のS404に進むと、図13の動作フローを開始してよい。
S1301において制御部301は、自装置から検査対象のIoT機器101宛てのACKまたはTCPのパケットを破棄するようにパケットフィルタに設定する。
S1302において制御部301は、TCPのACKの破棄が実施されるまで待機する。ACKの破棄が実施されると、フローはS1303に進む。
続く、S1303およびS1304の処理は、図5のS501およびS502の処理と対応していてよく、制御部301は、S501およびS502の処理と同様の処理を実行してトラフィック情報を取得してよい。
S1305において制御部は、S1301で設定したパケットフィルタを解除し、本動作フローは終了し、フローはS405に進む。
以上で述べた様に、実施形態によれば、検査対象のIoT機器101のトラフィック情報を収集することで、IoT機器101による不正な通信を検出することができる。そのため、例えば、セキュリティ対策ソフトをインストールすることのできない簡素な機能のみを有するIoT機器101であっても、不正な通信を実行しているか否かを検査することが可能である。
また、上述の実施形態によれば、IoT機器101がサーバ202と通信中である場合には、TCPのACKを破棄することにより、IoT機器101からのパケットの送信を一時的に停止させる。それにより、IoT機器101が送信したパケット数と、それに対応するIoT機器101からサーバ202に送信されたパケット数とを測定誤差を抑えて取得することができる。そのため、IoT機器101がサーバ202と通信中である場合にも、高い精度で検査対象のIoT機器101が不正な通信を行っているか否かを判定することができる。
なお、上述の図4の動作フローでは、サーバ202が検査対象のIoT機器101と通信中ではない場合(S402がNO)、図5の動作フローを実行し、トラフィック情報の収集を行う例を述べている。しかしながら、図5の動作フローでトラフィック情報を収集している期間中に、検査対象のIoT機器101から接続要求を受信することがある。この場合、接続要求に対するACKを破棄することで、測定誤差を抑えてトラフィック情報を収集することができる。
図14は、実施形態に係る接続要求の破棄を説明する図である。図14(a)は、TCPの接続の確立を例示する図である。TCPでは、例えば、図14(a)に示す様に、3ウェイハンドシェイクにより接続が確立する。この際に、図14(b)に示す様に、接続要求に対するACKを破棄し、その後でトラフィック情報の収集を再度開始することで、IoT機器101との接続に起因する測定誤差を低減してトラフィック情報を収集することができる。
なお、制御部301は、例えば、図5の動作フローの実行中に検査対象のIoT機器101から接続要求を受信した場合、図5の動作フローを中止し、代わりに図13の動作フローを実行して、接続要求に対するACKを破棄し、トラフィック情報を収集してよい。
また、サーバ202に流れ込むパケットの数を計数するために、上述の実施形態では図2に示す様にハブ212と、パケット分析部213とをハードウェアとして実装する例を述べている。しかしながら、実施形態は、これに限定されるものではない。例えば、図15に示す様に、パケット分析部213は、サーバ202上で動作するアプリケーションとして実装することもできる。この場合、例えば、ネットワークインタフェースがプロミスキャスモードで動作するように、サーバ202のOS350のカーネルに設定することで、パケット分析部213でパケットの情報を取得することが可能である。
(トラフィック情報の収集の変形例)
続いて、IoT機器101がサーバ202と通信中である場合におけるトラフィック情報の取得について更なる変形例を説明する。
TCPは、バージョンに応じてパケットの送信手順が異なる。図16は、TCPのバージョンに応じたパケットの送信手順の違いを例示する図である。図16には、例えば、Tahoe,Renoなどに代表される第1のバージョンと、NewReno、BIC、CUBICなどに代表される第2のバージョンのパケットの送信手順が例示されている。
図16(a)に示されるように、第1のバージョンでは、送信側の装置は、ウィンドウサイズ分の1箱のパケットを送信した後、受信側の装置から送信したパケットに対応するACKを受信するまで次の箱のパケットを送信しない。この場合、受信側の装置が、受信した1箱のパケットに対するACKを1つ破棄すると、その後、送信側の装置は再送を開始するまでは次の箱のパケットを送信してこない。そのため、第1のバージョンでは、受信側の装置は、ACKを1つ破棄した時点で、トラフィック情報の取得を開始してもよい。
一方、図16(b)に示されるように、第2のバージョンでは、送信側の装置は、1箱のパケットを送信した後、受信側の装置から送信した1箱のパケットに対するACKを受信する前に、次の箱のパケットを送信する。その後、送信側の装置は、先に送信した1箱のパケットのACKを受信するまでは待ちに入り、次の箱のパケットは送信しない。この場合、受信側の装置は、1つ目に受信したパケットの箱に対するACKを1つ破棄した後にも次の箱のパケットが届くことになる。そのため、第2のバージョンでは、受信側の装置は、ACKを1つ廃棄した後、送信側の装置が送ってくる次の箱のパケットを受信してから、トラフィック情報の取得を開始すればよい。以下、第2のバージョンのTCPにおけるトラフィック情報の取得について変形例1を説明する。
(変形例1)
図17は、変形例1に係るTCPの第2のバージョンにおけるトラフィック情報の収集の実行タイミングを例示する図である。まず、送信側の装置は、ウィンドウサイズ分のパケットを1箱、受信側の装置に送信する(図17の(1))。受信側の装置は、トラフィック情報の収集を実行する場合、パケットフィルタをONにしている。そのため、受信側の装置は、送信側の装置からパケットを受信するとACKを発信するが、そのACKはパケットフィルタで破棄される(図17の(2))。また、第2のバージョンのTCPでは、送信側の装置は、(1)で送信したパケットに対するACKを待たずに、次のパケットの箱を送信する(図17の(3))。送信側の装置は次のパケットの箱を送信した時点で、ACKの待ち状態に入りパケットの送信を停止する。そのため、受信側の装置は、(3)で送信されたパケットを受信した時点で(図17の(4))、トラフィック情報の取得を開始することができる。一例では、受信側の装置は、(3)で送信されたパケットに対するACKを発信し、そのACKをパケットフィルタで破棄したタイミングで(図17の(5))、トラフィック情報の収集を開始してよい。その後、受信側の装置は、トラフィック情報の収集が完了すると、パケットフィルタをOFFにして、ACKの破棄を停止する(図17の(6))。
また、送信側の装置は、(1)で送信したパケットに対するACKの受信を待機するが、パケットを送信してから再送タイマが、所定の待ち時間を経過し、タイムアウトすると(図17の(7))、パケットを再送する(図17の(8))。
以上で例示したように、第2のバージョンのTCPでも、ACKを破棄することで、送信側の装置がサーバ202に送信したパケットの配送が完了した状態でトラフィック情報の収集を実行することができる。
図18は、図4のS404において変形例1で制御部301が実行する通信時のトラフィック情報取得処理の動作フローを例示する図である。S1801、およびS1803からS1805の処理は、図13のS1301、およびS1303からS1305の処理とそれぞれ対応しており、制御部301は、S1301、およびS1303からS1305と同様の処理を実行してよい。ただし、図18の処理では、制御部301は、S1802でACKを連続して2つ破棄するまで待機する。それにより、第2のバージョンのTCPでも、測定誤差を抑えてトラフィック情報を収集することができる。
(変形例2)
上述の変形例1では、受信側の装置の制御部301は、図17の(5)で2つ目のACKを破棄してからトラフィック情報の収集を開始している。ここで、トラフィック情報の収集は、送信側の装置でACKの受信待ちがタイムアウトしてパケットの再送が実行される前までに完了することが望ましい。しかしながら、実際には通信環境などによって、トラフィック情報の収集が間に合わないこともある。この場合に、パケットの再送時にウィンドウサイズを縮小させるTCPの性質を利用することでトラフィック情報の収集に利用可能な時間を延ばすことができる。そこで、変形例2では、受信側の装置でACKを3個連続で廃棄してからトラフィック情報の収集を開始することで、トラフィック情報の収集に利用可能な時間を延ばす例を述べる。
図19は、変形例2に係るトラフィック情報の収集の実行タイミングを例示する図である。図19において(1)から(3)までは、図17と同様に処理が実行されてよい。(4)において、受信側の装置は、送信側の装置からパケットを受信すると、ACKを発信するが、そのACKはパケットフィルタで破棄される(図19の(5))。送信側の装置は、ACK待ちの状態にあるが、ACK待ちのタイムアウトの時間が経過すると(図19の(6))、パケットを再送する(図19の(7))。そして、変形例2では受信側の装置は、再送されたパケットのACKを破棄したタイミングで(図19の(8))、トラフィック情報の取得を開始する。
この場合、再送のタイマは(7)のパケットの再送信からカウントが開始しており、また、TCPではパケットの再送の際にACKを待つ再送タイマのタイムアウトまでの時間が延長されるため、再送タイマの待ち時間も延長されている。また、例えば、タイムアウト後はウィンドウサイズが縮小され、送信側の装置は、パケットを1つ送信しては、そのACKを待つように動作する。そのため、1箱分のパケットの送信にかかる時間も短くなる。その結果、変形例2では、変形例1よりも長い時間を、トラフィック情報の取得のために確保することができる。
また更に、TCPでは、ACKを待つ再送タイマのタイムアウトまでの時間は、パケットの再送を繰り返すたびに延長される。例えば、タイムアウトの時間は、初期値が3秒であってよく、また、再送のたびに、3秒ずつ延長されてよい。この場合、図20に示す様に、再送タイマの待ち時間は、タイムアウトで再送されたパケットに対するACKを破棄するごとに、3秒ずつ延長されてゆく。
なお、再送タイマの待ち時間には、例えば、OS350ごとに上限が設定されている。例えば、Windows(登録商標)では、待ち時間の上限は、21秒に設定されており、Linux(登録商標)では、待ち時間の上限は381秒に設定されている。待ち時間の上限を超えると、接続が切断されるため、実施形態では、待ち時間の上限以下で、トラフィック情報の取得に適した待ち時間となるように廃棄するACKの数を設定することができる。例えば、図16(a)の第1のバージョンのTCPでは、待ち時間は、「破棄したACKの数×3秒」で見積もることができる。また、図16(b)の第2のバージョンのTCPでは、最初にACKを破棄した後、ACKを待たずに送信される次の箱のパケットのACKを破棄する分だけ1回増えるため、「(破棄したACKの数−1回)×3秒」で待ち時間を見積もることができる。
図21は、図4のS404において変形例2で制御部301が実行する通信時のトラフィック情報取得処理の動作フローを例示する図である。S2101、およびS2103からS2105までの処理は、図13のS1301、およびS1303からS1305までの処理とそれぞれ対応しており、制御部301は、S1301、およびS1303からS1305と同様の処理を実行してよい。ただし、図21の処理では、制御部301は、S2102でACKを連続して所定の回数だけ破棄するまで待機する。所定の回数は、例えば、連続してACKを破棄する回数であり、3回以上の回数であってよく、IoTシステム200の構成に応じて、トラフィック情報の取得が可能な待ち時間となるように、ACKを破棄する回数が設定されてよい。
以上の図19から図21で述べた様に、ACKの破棄を繰り返すことで、ACK待ち時間を長くすることができるため、トラフィック情報の収集に時間がかかる場合にも、十分な時間を確保することができる。
(変形例3)
変形例2では、再送タイマのタイムアウト後にウィンドウサイズが縮小するTCPの性質を利用して1箱分のパケットの数を減少させて、1箱分のパケットが受信側の装置に到達するまでの時間を短縮している。それにより、トラフィック情報の収集に利用できる時間を長く確保することができる。しかしながら、この場合、送信側の装置で再送タイマがタイムアウトするまでの待ち時間が発生する。そこで、変形例3では、改変したACKを送信側の装置に送信することで、送信側の装置のウィンドウサイズを縮小させる例を述べる。それにより、再送タイマがタイムアウトするまで待たなくても、トラフィック情報の収集を開始することが可能になる。
TCPでは、ACKの種類によって、送信側の装置のウィンドウサイズを縮小させることが可能である。例えば、TCPでは、ACKに受信バッファが一杯であることを示すフラグがあり、このフラグがONである場合、送信側の装置は、ウィンドウサイズを縮小する。そこで、変形例3では、受信側の装置は、受信バッファが一杯であることを示すフラグを立てるように改ざんしたACKを送信側の装置に送信し、それにより送信側の装置のウィンドウサイズを縮小させる。
図22は、変形例3に係るトラフィック情報の収集の実行タイミングを例示する図である。トラフィック情報を収集する場合、送信側の装置がパケットを送信すると(図22の(1))、受信側の装置は、そのパケットに対して、受信バッファが一杯であることを示すフラグを立てるように改ざんしたACKを返す(図22の(2))。その後、受信側の装置は、パケットフィルタをONに設定し(図22の(3))、以降、送信側の装置がパケットを送信してくると(図22の(4))、そのパケットを受信したことを示すACKを破棄する(図22の(5))。
また、送信側の装置は、改ざんしたACKを受信すると、ウィンドウサイズを縮小し(図22の(6))、以降、パケットを1つずつ送信してACKを待つ(図22の(7))。そのため、受信側の装置は、(8)においてパケットに対するACKを破棄すると、トラフィック情報の収集を開始することができる。この場合、送信側の装置において、(7)で送信したパケットに対する再送タイマがタイムアウトするまでの間に、受信側の装置は、トラフィック情報の収集を完了すればよい。トラフィック情報の収集を完了すると、受信側の装置は、パケットフィルタをOFFにする(図22の(9))。そして、送信側の装置は、再送タイマがタイムアウトするとパケットの再送を行う(図22の(10))。
以上で述べた様に、変形例3では、送信側の装置のタイムアウトを待たずに、送信側の装置のウィンドウサイズを縮小させてトラフィック情報の収集を行うことができる。例えば、変形例3では、変形例2の図19の(6)のタイムアウトを待たなくてよい。
なお、変形例3では受信側の装置は、改ざんしたACKを送信側の装置に返している。送信側の装置に改ざんしたACKを返すための手法の一例としては、受信側の装置においてACKを生成するOS350を、アプリケーションからの依頼を受けて、改ざんしたACKを返すように改変することが考えられる。また、別の例では、特定のインタフェースで受けたパケットをまるごとアプリケーションに送るようにOS350を設定しておき、OS350の処理をバイパスして、アプリケーション上でTCPのパケットを処理することが考えられる。この場合、アプリケーションが改ざんしたACKを返すため、OS350を改変しなくても、変形例3の処理を実行することができる。
図23は、図4のS404において変形例3で制御部301が実行する通信時のトラフィック情報取得処理の動作フローを例示する図である。図23の処理では、制御部301は、S2301で改ざんしたACKをIoT機器に送信する。例えば、制御部301は、受信バッファが一杯であることを示すフラグを立てるようにACKを改ざんすることで、改ざんしたACKを生成することができる。改ざんしたACKを送信後、制御部301は、S2302で自装置から検査対象のIoT機器101宛てのACKまたはTCPのパケットを破棄するようにパケットフィルタに設定する。そして、S2303で制御部301は、ACKを2つ連続で破棄するまで待機する。続く、S2304からS2306までの処理は、図13のS1303からS1305までの処理とそれぞれ対応しており、制御部301は、S1303からS1305と同様の処理を実行してよい。なお、変形例3でも、変形例2と同様に、トラフィック情報の取得に適した待ち時間を確保するために3回以上ACKを廃棄してもよい。
以上の変形例1から変形例3によれば、TCPのバージョンが第2のバージョンであっても、或いは、トラフィック情報の収集に時間を要する場合にも、測定誤差を抑えてトラフィック情報を収集し、IoT機器101を検査することができる。
なお、上述の実施形態において、例えば、S1301、S1801、S2101、S2302の処理では、サーバ202の制御部301は、設定部311として動作する。また、例えば、S501、S502、S1303、S1304、S1803、S1804、S2103、S2104、S2304、およびS2305の処理では、サーバ202の制御部301は、取得部312として動作する。例えば、S405の処理では、サーバ202の制御部301は、検査部313として動作する。
以上において、実施形態を例示したが、実施形態はこれに限定されるものではない。例えば、上述の動作フローは例示であり、実施形態はこれに限定されるものではない。可能な場合には、動作フローは、処理の順番を変更して実行されてもよく、別に更なる処理を含んでもよく、または、一部の処理が省略されてもよい。例えば、上述のS501とS502の処理、S1303とS1304の処理、S1803とS1804の処理、S2103とS2104の処理、S2304とS2305の処理はそれぞれ順序を入れ替えて実行されてもよい。
また、例えば、上述の変形例1〜変形例3では、ACKを破棄したタイミングでトラフィック情報の収集を開始する例を述べている。しかしながら、実施形態はこれに限定されるものではない。例えば、別の実施形態では、制御部301は、ACKを破棄したタイミングに基づいてトラフィック情報の収集の開始タイミングを決定してもよい。例えば、上述の変形例1において、制御部301は、1つ目のACKを破棄してから、ウィンドウサイズ分のパケットを受信したタイミングでトラフィック情報の収集を開始してもよい。または、制御部301は、1つ目のACKを破棄してから、所定時間経過したタイミングでトラフィック情報の収集を開始してもよい。この場合、所定時間は、例えば、往復遅延時間(RTT:Round-Trip Time)などに応じて、送信側の装置が送信してくる次の箱のパケットの受信が完了する長さに設定されてよい。
図24は、実施形態に係るサーバ202またはパケット分析部213を実現するためのコンピュータ2400のハードウェア構成を例示する図である。図24のサーバ202またはパケット分析部213を実現するためのハードウェア構成は、例えば、プロセッサ2401、メモリ2402、記憶装置2403、読取装置2404、および通信インタフェース2406を備える。なお、プロセッサ2401、メモリ2402、記憶装置2403、読取装置2404、通信インタフェース2406は、例えば、バス2408を介して互いに接続されている。
プロセッサ2401は、例えば、シングルプロセッサであっても、マルチプロセッサやマルチコアであってもよい。プロセッサ2401は、メモリ2402を利用して例えば上述の動作フローの手順を記述したプログラムを実行することにより、上述した制御部301またはパケット分析部213の一部または全部の機能を提供する。例えば、サーバ202のプロセッサ2401は、記憶装置2403に格納されているプログラムを読み出して実行することで、設定部311、取得部312、および検査部313として動作する。また、プロセッサ2401は、例えば、記憶装置2403に格納されているプログラムを読み出して実行することで、パケット分析部213として動作してよい。
メモリ2402は、例えば半導体メモリであり、RAM領域およびROM領域を含んでいてよい。記憶装置2403は、例えばハードディスク、フラッシュメモリ等の半導体メモリ、または外部記憶装置である。なお、RAMは、Random Access Memoryの略称である。また、ROMは、Read Only Memoryの略称である。
読取装置2404は、プロセッサ2401の指示に従って着脱可能記憶媒体2405にアクセスする。着脱可能記憶媒体2405は、例えば、半導体デバイス(USBメモリ等)、磁気的作用により情報が入出力される媒体(磁気ディスク等)、光学的作用により情報が入出力される媒体(CD−ROM、DVD等)などにより実現される。なお、USBは、Universal Serial Busの略称である。CDは、Compact Discの略称である。DVDは、Digital Versatile Diskの略称である。
なお、上述の記憶部302は、例えば、メモリ2402、記憶装置2403、および着脱可能記憶媒体2405を含んでよい。サーバ202の記憶装置2403またはパケット分析部213の記憶装置2403には、例えば、分析情報900が格納されていてよい。
通信インタフェース2406は、プロセッサ2401の指示に従ってネットワークを介してデータを送受信する。通信インタフェース2406は、例えば、上述の通信部303の一例である。
実施形態に係る各プログラムは、例えば、下記の形態でサーバ202およびパケット分析部213に提供される。
(1)記憶装置2403に予めインストールされている。
(2)着脱可能記憶媒体2405により提供される。
(3)プログラムサーバなどのサーバから提供される。
なお、図24を参照して述べたサーバ202およびパケット分析部213を実現するためのコンピュータ2400のハードウェア構成は、例示であり、実施形態はこれに限定されるものではない。例えば、上述の機能部の一部または全部の機能がFPGAおよびSoCなどによるハードウェアとして実装されてもよい。なお、FPGAは、Field Programmable Gate Arrayの略称である。SoCは、System-on-a-chipの略称である。
以上において、いくつかの実施形態が説明される。しかしながら、実施形態は上記の実施形態に限定されるものではなく、上述の実施形態の各種変形形態および代替形態を包含するものとして理解されるべきである。例えば、各種実施形態は、その趣旨および範囲を逸脱しない範囲で構成要素を変形して具体化できることが理解されよう。また、前述した実施形態に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施形態が実施され得ることが理解されよう。更には、実施形態に示される全構成要素からいくつかの構成要素を削除してまたは置換して、或いは実施形態に示される構成要素にいくつかの構成要素を追加して種々の実施形態が実施され得ることが当業者には理解されよう。