開発効率を上げるために

SIM送受信データを読み取る機器を用いることにより、デバッグ作業等の開発効率を向上することができます。 ここでは、 SIMtrace 2 を用いた環境の構築方法の概要をご紹介します。 実際の作業にあたっては、必ず製造元サイトも併せてご確認ください。

準備するもの

  • IoTデバイス
    • SIMを装着し、モバイル通信を行うデバイスです。
    • SIMスロットにSIMカードの代わりに後述するSIMtrace 2のSIMフレキシブルケーブルを装着し、SIMとIoTデバイス間の通信を読み取ります。
  • SIMtrace 2 ボード
    • IoTデバイスとICカードリーダーの中間に位置し、IoTデバイスとSIM間のパケット情報を読み取ります(以下、 スニッフィング )。
    • USB接続直後は、スニッフィングを実行するモード(以下、 スニッフィングモード 。LED(D4)が赤点灯、LED(D5)が緑点灯)の状態です。
    • ボード上の BOOTLOADER ボタンを押しながら、 RESET ボタンを押すことで、ファームウェアの書き込みを行う DFUモード (LED(D5)のみ緑点灯)に切り替え可能です。
  • PC
    • スニッフィングで取得したデータを蓄積、解析するPCです。

    • Debian系Linuxが必要です。ここではUbuntu22.04を用います。

    • VMwareやVirtualBoxなど仮想環境でUSBパススルー機能を利用すれば、Linuxは、ゲストOSとして稼働させることが可能です。
      • USB接続機器(SIMtrace 2、ICカードリーダー(任意))は、ゲストOSで認識されるようあらかじめ仮想環境で設定を行った上で、作業を進めてください。
      • SIMtrace 2を仮想環境のゲストOS上でUSBパススルー経由で認識させる際は、事前にSIMtrace 2 ボードをスニッフィングモードおよびDFUモードに切り替え、ゲストPCで何れのモードでも認識できるよう設定する必要があります。
  • ICカードリーダー(任意)
    • USB接続のICカードリーダーです。
    • 後述する カードエミュレーション(cardem)モード にて、SIMカード情報の読み取りに使用します。

SIMtrace 2の動作モード

SIMtrace 2は、ファームウェアによって、動作を変更することができます。代表的な動作モードを以下に示します。 必要に応じて、動作モードを使い分けてください。

  • 通常モード(オンボードカードスロット使用)
    • SIMカードをSIMtrace 2ボード上のカードスロットに装着します。
    • 別途ICカードリーダーは、使用しません。
    • スニッフィングするパケットデータサイズによって、誤動作(スニッフィングの停止など)が発生する可能性を低減できます。
    • 通常モードでの、環境構築、スニッフィング手順は、 作業手順 - 通常モード(オンボードカードスロット使用)の場合 を参照ください。
  • カードエミュレーション(cardem)モード
    • SIMカードをPCに接続したICカードリーダーに装着します。
    • SIMtrace 2ボードのカードスロットは使用しません。
    • ファームウェアバージョン、スニッフィングするパケットデータサイズによって、不具合(スニッフィングの停止など)が発生する場合があります。
    • カードエミュレーション(cardem)モードでの、環境構築、スニッフィング手順は、 作業手順 - カードエミュレーション(cardem)モードの場合 を参照ください。

作業手順 - 通常モード(オンボードカードスロット使用)の場合

SIMtrace 2上のカードスロットでSIMカードを読み取る 通常モード を利用する場合の環境構築およびスニッフィング手順を示します。

構成イメージ

構成図
../_images/1707052023-2.png
実際の構成
../_images/normal_mode.jpg

ファームウェアの更新

  1. PCにファームウェア更新に必要なツールをインストールします。
    sudo apt-get install dfu-util
    
  2. SIMtrace 2ボードをPCに接続した状態でDFUモードに変更します。
    1. SIMtrace 2ボードの BOOTLOADER ボタンを押しながら RESET ボタンを押します。DFUモードに切り替わるとLED(D5)のみが緑点灯します。

    2. 実行結果に [1d50:60e3] と表示されている行が存在することを確認します。
      sudo dfu-util --list
      ...
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=2, name="not available", serial="..."
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=1, name="Flash (Application Partition)", serial="..."
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=0, name="RAM", serial="..."
      
  3. 必要なファームウェアをダウンロードします。
    wget https://ftp.osmocom.org/binaries/simtrace2/firmware/latest/simtrace-trace-dfu-latest.bin
    
  4. ダウンロードしたファイルでファームウェアを更新します。
    sudo dfu-util --device 1d50:60e3 --cfg 1 --alt 1 --reset --download simtrace-trace-dfu-latest.bin
    
  5. ファームウェア更新後、SIMtrace 2は再起動され、スニッフィングモードで起動します。

PC環境の構築

  1. 必要なライブラリをインストールします。
    sudo apt-get install build-essential libtool libtalloc-dev libsctp-dev shtool autoconf automake git-core pkg-config make gcc gnutls-dev python-minimal libusb-1.0.0-dev libmnl-dev
    

    注釈

    環境によっては既にインストールされ、インストール不要なライブラリがあります。

  2. simtrace2-utils をインストールするため、リポジトリ追加します。
    sudo su
    OSMOCOM_REPO="https://downloads.osmocom.org/packages/osmocom:/latest/xUbuntu_22.04/"
    wget $OSMOCOM_REPO/Release.key
    sha256sum Release.key
    mv Release.key /etc/apt/trusted.gpg.d/osmocom-latest.asc
    echo "deb [signed-by=/etc/apt/trusted.gpg.d/osmocom-latest.asc] $OSMOCOM_REPO/ ./" > /etc/apt/sources.list.d/osmocom-latest.list
    apt-get update
    exit
    
  3. simtrace2-utils をインストールします。
    sudo apt-get install simtrace2-utils
    

    注釈

    apt-get install コマンドでインストールした simtrace2-sniff コマンドを使用すると正常にスニッフィングできないことがあります。このような場合は、 こちら に記載の Building from source を参照の上、 simtrace2-utils を自環境でビルドしたファイルを使用してください。 参考にインストール手順を示します。 以下の例でインストールした simtrace2-sniff の実行には、 /usr/local/simtrace2/bin/simtrace2-sniff ... のようにフルパスを指定してコマンドを実行するか、環境変数に /usr/local/simtrace2/bin を追加します。

    sudo apt install libusb-1.0-0-dev libosmocore-dev libpcsclite-dev
    git clone https://gitea.osmocom.org/sim-card/simtrace2.git
    cd simtrace2/host
    autoreconf -fi
    ./configure --prefix=/usr/local/simtrace2
    make
    sudo make install
    
  4. Wiresharkをインストールします。
    sudo apt-get install wireshark
    

スニッフィングの実施

  1. SIMtrace 2 ボードの接続状態を確認します。
    1. SIMtrace 2ボードをスニッフィングモードに設定します。

    2. SIMtrace 2ボードが認識されているか確認します。 SIMtrace 2ボードが正常に認識されれば、 dfu-util コマンドを実行すると Found 行が表示されます。
      sudo dfu-util --list
      ...
      Found Runtime: [1d50:60e3] ver=0002, devnum=4, cfg=1, intf=1, path="1-2", alt=0, name="UNKNOWN", serial="..."
      

      注釈

      • Found 行が表示されない場合、SIMtrace 2ボードとPCの接続や、仮想環境を使用の場合は、USBパススルー設定が適切か確認ください。
      • もし、USBパススルー設定が適切でも Found 行が表示されない場合、 BOOTLOADER を押しながら、 RESET を押し一度DFUモードに変更した後、もう一度 RESET を押しスニッフィングモードに戻すことで、正常に Found 行が表示される場合があります。
  2. スニッフィングを開始します。
    sudo simtrace2-sniff --usb-vendor 1d50 --usb-product 60e3 --usb-config 1 --gsmtap-ip 127.0.0.1 --keep-running
    

    注釈

    オプション設定

    --gsmtap-ip:送信先を指定します。
    --keep-running:処理が落ちにくくなります。

    注釈

    正常にスニッフィングが行えていれば、送受信データ発生時、コンソール上にデータが出力されます。

  3. Wiresharkでスニッフィングデータをキャプチャします。
    1. Wiresharkを起動します。
      sudo wireshark
      

      注釈

      Wiresharkからコンソール出力されるため、 simtrace2-sniff コマンドを実行したコンソールとは別のコンソールから起動することをお勧めします。

    2. キャプチャインタフェースとして Loopback: lo を選択します。
      ../_images/1709383173.png

      注釈

      Loopback: lo が表示されない場合、 npcap のインストールを行ってください。

    3. IoTデバイスの電源を投入します。

    4. 通信モジュールとSIM間の通信のキャプチャが可能になります。
      ../_images/1707057308.png

作業手順 - カードエミュレーション(cardem)モードの場合

ICカードリーダーでSIMカードを読み取る カードエミュレーション(cardem)モード を利用する場合の環境構築およびスニッフィング手順を示します。

構成イメージ

構成図
../_images/1707052023.png
実際の構成
../_images/1707052086.png

ファームウェアの更新

  1. PCにファームウェア更新に必要なツールをインストールします。
    sudo apt-get install dfu-util
    
  2. SIMtrace 2ボードをPCに接続した状態でDFUモードに変更します。
    1. SIMtrace 2ボードの BOOTLOADER ボタンを押しながら RESET ボタンを押します。DFUモードに切り替わるとLED(D5)のみが緑点灯します。

    2. 実行結果に [1d50:60e3] と表示されている行が存在することを確認します。
      sudo dfu-util --list
      ...
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=2, name="not available", serial="..."
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=1, name="Flash (Application Partition)", serial="..."
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=0, name="RAM", serial="..."
      
  3. 必要なファームウェアをダウンロードします。
    wget https://ftp.osmocom.org/binaries/simtrace2/firmware/latest/simtrace-cardem-dfu-latest.bin
    
  4. ダウンロードしたファイルでファームウェアを更新します。
    sudo dfu-util --device 1d50:60e3 --cfg 1 --alt 1 --reset --download simtrace-cardem-dfu-latest.bin
    
  5. ファームウェア更新後、SIMtrace 2は再起動され、スニッフィングモードで起動します。

ICカードリーダーのセットアップ

  1. PC/SCサービスのインストールと起動
    1. 次のコマンドでPC/SCサービスをインストールします。これにより、PC/SCリーダーと通信するための必要なサービスとライブラリがインストールされます。
      sudo apt-get install pcscd libpcsclite1 libccid
      
    2. pcscd を起動し、起動状態を確認します。
      sudo systemctl start pcscd
      systemctl status pcscd
      
  2. ICカードリーダーの認識確認
    1. ICカードリーダーの接続状態を確認するため pcsc_scan を用います。 pcsc_scan コマンドが含まれる pcsc-tools パッケージをインストールします。
      sudo apt-get install pcsc-tools
      
    2. ICカードリーダをスキャンし、ICカードリーダおよびSIMカードが正しく認識されていることを確認します。
      pcsc_scan -c
      ...
      Reader 0: SCR3310 Smart Card Reader [CCID Interface] (53312020213465) 00 00
        Event number: 0
        Card state: Card inserted,
        ATR: 3B 9F 96 80 1F C7 80 31 E0 73 FE 21 1B 64 41 68 11 00 82 90 00 F9
      

PC環境の構築

  1. 必要なライブラリをインストールします。
    sudo apt-get install build-essential libtool libtalloc-dev libsctp-dev shtool autoconf automake git-core pkg-config make gcc gnutls-dev python-minimal libusb-1.0.0-dev libmnl-dev
    

    注釈

    環境によっては既にインストールされ、インストール不要なライブラリがあります。

  2. simtrace2-utils をインストールするため、リポジトリ追加します。
    sudo su
    OSMOCOM_REPO="https://downloads.osmocom.org/packages/osmocom:/latest/xUbuntu_22.04/"
    wget $OSMOCOM_REPO/Release.key
    sha256sum Release.key
    mv Release.key /etc/apt/trusted.gpg.d/osmocom-latest.asc
    echo "deb [signed-by=/etc/apt/trusted.gpg.d/osmocom-latest.asc] $OSMOCOM_REPO/ ./" > /etc/apt/sources.list.d/osmocom-latest.list
    apt-get update
    exit
    
  3. simtrace2-utils をインストールします。
    sudo apt-get install simtrace2-utils
    

    注釈

    apt-get install コマンドでインストールした simtrace2-cardem-pcsc コマンドを使用すると正常にスニッフィングできないことがあります。このような場合は、 こちら に記載の Building from source を参照の上、 simtrace2-utils を自環境でビルドしたファイルを使用してください。 参考にインストール手順を示します。 以下の例でインストールした simtrace2-cardem-pcsc の実行には、 /usr/local/simtrace2/bin/simtrace2-cardem-pcsc ... のようフルパスを指定してコマンドを実行するか、環境変数に /usr/local/simtrace2/bin を追加します。

    sudo apt install libusb-1.0-0-dev libosmocore-dev libpcsclite-dev
    git clone https://gitea.osmocom.org/sim-card/simtrace2.git
    cd simtrace2/host
    autoreconf -fi
    ./configure --prefix=/usr/local/simtrace2
    make
    sudo make install
    
  4. Wiresharkをインストールします。
    sudo apt-get install wireshark
    

スニッフィングの実施

  1. SIMtrace 2 ボードの接続状態を確認します。
    1. SIMtrace 2ボードをスニッフィングモードに設定します。

    2. SIMtrace 2ボードが認識されているか確認します。 SIMtrace 2ボードが正常に認識されれば、 dfu-util コマンドを実行すると Found 行が表示されます。
      sudo dfu-util --list
      ...
      Found Runtime: [1d50:60e3] ver=0002, devnum=20, cfg=1, intf=1, path="1-2", alt=0, name="UNKNOWN", serial="..."
      

      注釈

      • Found 行が表示されない場合、SIMtrace 2ボードとPCの接続や、仮想環境を使用の場合は、USBパススルー設定が適切か確認ください。
      • もし、USBパススルー設定が適切でも Found 行が表示されない場合、 BOOTLOADER を押しながら、 RESET を押し一度DFUモードに変更した後、もう一度 RESET を押しスニッフィングモードに戻すことで、正常に Found 行が表示される場合があります。
    3. 後ほど利用しますので、 出力結果の path="x-x" の部分をメモしておきます。この例では、 1-2 です。

  2. ICカードリーダの接続状態を確認します。正常にICカードリーダーが認識され、SIMカードが挿入されていれば、 カードリーダー名 SCR3310 Smart Card Reader とカード挿入状態 Card state: Card inserted が表示されます。
    pcsc_scan -c
    ...
    Reader 0: SCR3310 Smart Card Reader [CCID Interface] (53312020213465) 00 00
      Event number: 0
      Card state: Card inserted,
      ATR: 3B 9F 96 80 1F C7 80 31 E0 73 FE 21 1B 64 41 68 11 00 82 90 00 F9
    
  3. スニッフィングを開始します。
    sudo simtrace2-cardem-pcsc --usb-vendor 1d50 --usb-product 60e3 --usb-config 1 --gsmtap-ip 127.0.0.1 --keep-running --usb-path 1-2
    

    注釈

    オプション設定

    --usb-path:sudo dfu-util --list で確認した path=”x-x” の値を設定します。
    --gsmtap-ip:送信先を指定します。
    --keep-running:処理が落ちにくくなります。

    注釈

    正常にスニッフィングが行えていれば、送受信データ発生時、コンソール上にデータが出力されます。

  4. Wiresharkでスニッフィングデータをキャプチャします。
    1. Wiresharkを起動します。
      sudo wireshark
      

      注釈

      Wiresharkからコンソール出力されるため、 simtrace2-cardem-pcsc コマンドを実行したコンソールとは別のコンソールから起動することをお勧めします。

    2. キャプチャインタフェースとして Loopback: lo を選択します。
      ../_images/1709383173.png

      注釈

      Loopback: lo が表示されない場合、 npcap のインストールを行ってください。

    3. IoTデバイスの電源を投入します。

    4. 通信モジュールとSIM間の通信のキャプチャが可能になります。
      ../_images/1707057308.png