こんにちは、まっさん(@Tera_Msaki)です。
この記事は SIベンダーで28年あまりシステムエンジニアとして、
いろいろなシステムを開発してきた経験をもとにセキュリティについてまとめたものです。
IT分野における個の特定として用いられるMACアドレス。
MACアドレスは、OSI7階層モデルのデータリンク層で扱われるネットワークインタフェースを
識別するために使用する符号です。
無線LAN といえば Wi-Fi が有名ですが、
Bluetooth も Wi-Fi と同じ無線通信技術のひとつであり、
MACアドレスを使用して通信しています。
Andoridアプリの開発で BLE ( Bluetooth Low Energy ) に触れる機会がありましたで、
BLE のセキュリティについて、お話したいと思います。
・BLE(Bluetooth LE)の通信仕様について知りたい人
・Bluetoothのセキュリティについて知りたい人
・SwitchBot温湿度計を使ったアプリを開発したい人
Bluetooth(BLE)の仕様とセキュリティを理解する
BLE(Bluetooth Low Energy)
近距離無線通信技術Bluetoothの拡張仕様で、極低電力で通信が可能なことが特徴です。
この特徴を生かして、電源の小型化、デバイスの小型化が進み、
まさに IoTデバイスの中核をなす技術といえます。
従来の Bluetooth のことを Bluetooth Classic、
Bluetooth LEは BLE に対応していることを示すブランド名( Bluetooth Smart )と呼び、
区別しています。
BLE通信
BLE通信では、データを受ける側(PCやスマホやゲートウェイ機器など)をセントラルといい、
データを送る側(センサー機器)をペリフェラルと定義しています。
ペリフェラルは一定周期でBLE接続待ちの状態(アドバタイズ)を送り、
それを受け取ったセントラルはペリフェラルとB LE接続(GATT通信)を行います。
セントラルとペリフェラル間で機器を識別するために用いられるのが MACアドレスです。
アドバタイズ
アドバタイズはブロードキャスト通信で不特定多数の相手にデータを送信する一方通行の通信方式です。
つまり、機器を識別するために使用される符号のMACアドレスを送り続けています。
また、アドバタイズにペリフェラルの名前や属性データを含めて発信することが出来ます。
セントラルはスキャンすることでアドバタイズを受信、
周囲にどんなペリフェラルがいるかを知ることができます。
さらにセントラルはアドバタイズを受信したとき、
受信した電波の強さ(RSSI:受信電波強度)から
ペリフェラルまでの距離を把握します。
ペリフェラルの名前や属性データ
開発した AndoroidアプリのGPS位置情報中継アプリ(MLS) の検索結果の画面です。
アドバタイズのデータのうち、MACアドレス、機器名、タイプを表示しています。

機器名は、匿名(ANONYMOUS)になってますが、
機器名がセットされているケースもあります。
2行目のデータがSwitchBot温湿度計 のアドバタイズです。
SwitchBot温湿度計の場合、属性データに温度と湿度が含まれています。
つまり、GATT通信しなくても SwitchBot温湿度計がおかれている場所の温度と湿度がわかります。
ただし、データパケットはバイナリデータで、
どこに情報が格納されている把握する必要があります。

SwitchBot温湿度計のデータパケットのフォーマットです(タイプが 16hのデータパケット)
SwitchBot温湿度計は温度と湿度をBluetooth接続でインタフェースできるスマート家電です
GATT通信
セントラルはペリフェラルと1対1の通信接続をしたい相手を選び、
接続要求を送信、セントラルとペリフェラルでデータリンクを確立します。
この1対1の接続通信のことをGATT通信と呼びます。
GATT通信ではサービスとキャラクタリスティックという概念でデータ交換します。
サービスはペリフェラルがもつ機能、
キャラクタリスティックはサービスを利用するための手順でセントラルに公開して共有するデータ構造です。
サービスやキャラクタリスティックには UUIDとUUIDという 16バイトの一意な番号がつけられ、
セントラル機器は UUIDを指定して、キャラクタリスティックのデータにアクセスします。
UUIDについては、Bluetoothの推進団体が標準的な GATT通信のプロファイルを公開しています。
キャラクタリスティック
キャラクタリスティックには「Read」「Write」「Notify」の属性がり、
セントラルからはペリフェラルに対して、
属性に応じた「Read」「Write」を使用して、データの読み書きを行います。
「Notify」はペリフェラルからセントラルに変更を通知し、
セントラルはデータを読み込みます。
BLEのセキュリティ対策
アドバタイズでMACアドレスをブロードキャスト通信していることから、
スキャンすることで機器の MACアドレスを収集することが可能で、
更には GATT通信で機器のもつサービス、キャラクタリスティックを使用して、通信が可能です。
BLEのセキュリティ対策としては、MACアドレスのプライベート化、
Passkey Entry方式やOut of Band方式によるペアリング(またはボンディング)があります。
MACアドレスのプライベート化
実際のMACアドレスではなく、ランダムで生成した MACアドレスを使い通信を行います。
通信で使用するアドレスのことを Private MACと呼びます。
Wi-Fi においては、Private MACによるセキュリティ対策が主流で、
iOS14、Android10以降はデフォルトで有効、
Windows10 ではデフォルトでは無効ですが、設定で有効にできます。
ただ、Private MACの有効化による弊害があり、
MACアドレスが動的に変化することで、無線LANアクセスポイント、位置情報の特定、
認証サーバなど MACアドレスを利用した機能に影響があり、対策が必要になります。
ペアリング
ペアリングとは、セントラルとペリフェラル間のデータ暗号化のための鍵の交換のことです。
その際に、正しい相手かを認証をするために、双方で番号を入れるなどチェックをします。
ボンディングは、ペアリングで交換した鍵を保存し、
次回以降の通信では保存した鍵を使用して通信を行います。
Passkey Entry
4~ 6 桁の数字を入力するなどで認証をする方式です。
実際には Passkey は固定することが多く、ブルートフォースアタックに対して脆弱です。
Out of Band(OOB)
NFC等の他の手段で鍵を交換する方式です。
現在のところ、脆弱性は見つかっておらず、有効なセキュリティ対策です。
コラム キャリアの基地局(またはWi-Fi スポット)において、電波の強さを測るアクセスポイントが 3点以上あれば、各点の受信電波強度から位置を特定することが可能となり、これがスマホや PC の位置を把握する仕組みとなっています。BLEにおいても、位置を把握する仕組みの実用化例が存在します。
今回はここまでです。
次回は、Andoridアプリの開発をしていますので、
それを題材に「Androidのセキュリティについて」を紹介してみたいと思います。
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

コメント欄