
オープンソースのLTEダウンリンク/アップリンク盗聴ツール
LTESnifferは、オープンソースのLTEダウンリンク/アップリンク盗聴ツールです。
まず、物理ダウンリンク制御チャネル(PDCCH)を復号し、すべてのアクティブユーザーのダウンリンク制御情報(DCI)と無線ネットワーク一時識別子(RNTI)を取得します。復号したDCIとRNTIを使用して、LTESnifferはさらに物理ダウンリンク共有チャネル(PDSCH)と物理アップリンク共有チャネル(PUSCH)を復号し、アップリンクおよびダウンリンクのデータトラフィックを取得します。
LTESnifferは、セキュリティアプリケーションや研究のための3つの機能を持つAPIをサポートしています。多くのLTEセキュリティ研究では、プライバシー関連のパケットをエア上でキャプチャできるパッシブスニファを想定しています。しかし、現在のオープンソーススニファのいずれも、PDSCHおよびPUSCH内のプロトコルパケットを復号できないため、その要件を満たしていません。私たちは、以前の研究で提案された3つのタスクをサポートする概念実証用セキュリティAPIを開発しました:1) アイデンティティマッピング、2) IMSI収集、3) 能力プロファイリング。
詳細については、[論文][paper]を参照してください。
LTESnifferは、セルタワーとそれに接続されたスマートフォン間で送信されるLTE無線メッセージをキャプチャできるツールです。LTESnifferは、タワーからスマートフォンへの方向と、スマートフォンからセルタワーへの戻りの両方向のメッセージのキャプチャをサポートしています。
LTESnifferは、セルタワーとスマートフォン間の暗号化されたメッセージを復号できません。セルタワーとスマートフォン間の通信の暗号化されていない部分を分析するために使用できます。例えば、暗号化されたメッセージの場合でも、MAC層や物理層のヘッダーなど、暗号化されていない部分をユーザーが分析できます。ただし、平文で送信されるメッセージは完全に分析可能です。例えば、セルタワーが送信するブロードキャストメッセージや、接続の開始時点のメッセージは完全に可視です。
LTESnifferの主な目的は、セルラーネットワークに関するセキュリティおよび分析研究をサポートすることです。アップリンク・ダウンリンクのユーザーデータを収集する性質上、LTESnifferの使用はすべて、LTEトラフィックのスニッフィングに関する現地の規制に従う必要があります。ユーザーのプライバシー関連情報を意図的に収集するなど、違法な目的については一切責任を負いません。
LTESniffer-record-subframeブランチとその[README][capture-readme]を参照してください。LTESniffer-multi-usrpブランチとその[README][multi-readme]を参照してください。LTESnifferは、[FALCON][falcon]をベースに[srsRAN][srsran]ライブラリを利用して実装されています。LTESnifferがサポートする機能:
現在、LTESnifferはUbuntu 18.04/20.04/22.04上で安定して動作します。
LTEトラフィックのリアルタイム復号を実現するには、複数の物理コアを備えた高性能CPUが必要です。特に、基地局に多くのアクティブユーザーがいるピーク時間帯には重要です。LTESnifferはIntel i7-9700K PCに展開した場合、150のアクティブユーザーがいる基地局からのトラフィックをリアルタイムで復号することに成功しました。
以下のハードウェアを推奨します
LTESnifferは、アップリンクおよびダウンリンクのスニッフィングモードで異なるSDRを必要とします。
基地局からのダウンリンクトラフィックのみをスニッフィングする場合、LTESnifferはsrsRANライブラリでサポートされているほとんどのSDR(例:USRPやBladeRF)と互換性があります。 SDRはUSB 3.0ポートを介してPCに接続する必要があります。また、送信モード3および4でダウンリンクメッセージを復号するには、2つのRXアンテナを備えている必要があります。 SDRにRXアンテナが1つしかない場合、LTESnifferは送信モード1でのみダウンリンクメッセージを復号します。GPSDOはダウンリンクスニッフィングではオプションです。同期の改善に役立ちますが、必須ではありません。
一方、スマートフォンから基地局へのアップリンクトラフィックをスニッフィングする場合、LTESnifferは2つの異なる周波数(アップリンクとダウンリンク)を同時に受信する必要があります。この問題を解決するために、LTESnifferは2つのオプションをサポートしています:
mainブランチを参照してください。LTESniffer-multi-usrpブランチとその[README][multi-readme]を参照してください。重要:予期しないエラーを避けるため、以下の手順はUbuntu 18.04/20.04/22.04上で実行してください。
依存関係
UHDの依存関係:
sudo apt update
sudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils doxygen ethtool \
g++ git inetutils-tools libboost-all-dev libncurses5 libncurses5-dev libusb-1.0-0 libusb-1.0-0-dev \
libusb-dev python3-dev python3-mako python3-numpy python3-requests python3-scipy python3-setuptools \
python3-ruamel.yaml
ソースからUHDをクローンしてビルド(現在のブランチが4.0以上であることを確認):
git clone https://github.com/EttusResearch/uhd.git
cd <uhd-repo-path>/host
mkdir build
cd build
cmake ../
make -j 4
make test
sudo make install
sudo ldconfig
USRP用のファームウェアをダウンロード:
sudo uhd_images_downloader
USRP X310をPCに接続するために10Gbカードを使用します。UHDマニュアル[1]、[2]を参照して、USRP X310と10Gbカードインターフェースを設定してください。USRP B210の場合は、USB 3.0ポートを介してPCに接続する必要があります。
接続とファームウェアのテスト(USRP X310のみ):
sudo sysctl -w net.core.rmem_max=33554432
sudo sysctl -w net.core.wmem_max=33554432
sudo ifconfig <10Gbカードインターフェース> mtu 9000
sudo uhd_usrp_probe
sudo apt-get install build-essential git cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev
sudo apt-get install libglib2.0-dev libudev-dev libcurl4-gnutls-dev libboost-all-dev qtdeclarative5-dev libqt5charts5-dev
ソースからLTESnifferをビルド:
git clone https://github.com/SysSec-KAIST/LTESniffer.git
cd LTESniffer
mkdir build
cd build
cmake ../
make -j 4(4スレッドを使用)
LTESnifferには3つの主要機能があります:
ソースからビルドした後、LTESnifferは<build-dir>/src/LTESnifferにあります。
商用ネットワークでLTESnifferを使用する前に、倫理的配慮で説明したように、LTEトラフィックのスニッフィングに関する現地の規制を確認する必要があります。
テスト用スマートフォンが接続している基地局とアップリンク・ダウンリンクバンドを調べるには、テスト用スマートフォンに[Cellular-Z][app]アプリをインストールします(Androidのみ対応)。接続先のセルIDとアップリンク・ダウンリンクのバンド/周波数が表示されます。LTESnifferが同じセルと周波数に接続していることを確認してください。
sudo ./<build-dir>/src/LTESniffer -A 2 -W <スレッド数> -f <DL周波数> -C -m 0
例:sudo ./src/LTESniffer -A 2 -W 4 -f 1840e6 -C -m 0
-A:アンテナ数
-W:スレッド数
-f:ダウンリンク周波数
-C:セルサーチをオン
-m:スニファモード、0はダウンリンクスニッフィング、1はアップリンクスニッフィング
注意:ダウンリンクモードでUSRP B210でLTESnifferを実行するには、コマンドラインにオプション-a "num_recv_frames=512"を追加します。
このオプションはUSRP B210の受信バッファを拡張し、より良い同期を実現します。
sudo ./<build-dir>/src/LTESniffer -A 2 -W <スレッド数> -f <DL周波数> -C -m 0 -a "num_recv_frames=512"
例:sudo ./src/LTESniffer -A 2 -W 4 -f 1840e6 -C -m 0 -a "num_recv_frames=512"
注意:アップリンクスニッフィングモードでは、UEからのアップリンク信号電力は基地局からのダウンリンク信号よりも大幅に弱いため、テスト用スマートフォンはスニファの近くに配置する必要があります。
sudo ./<build-dir>/src/LTESniffer -A 2 -W <スレッド数> -f <DL周波数> -u <UL周波数> -C -m 1
例:sudo ./src/LTESniffer -A 2 -W 4 -f 1840e6 -u 1745e6 -C -m 1
-u:アップリンク周波数
sudo ./<build-dir>/src/LTESniffer -A 2 -W <スレッド数> -f <DL周波数> -u <UL周波数> -C -m 1 -z 3
例:sudo ./src/LTESniffer -A 2 -W 4 -f 1840e6 -u 1745e6 -C -m 1 -z 3
-z:3はスニファの3つの機能(アイデンティティマッピング、IMSI収集、UECapabilityプロファイリング)を有効化。
2はUECapabilityプロファイリング
1はIMSI収集
0はアイデンティティマッピング
LTESnifferは、オプション-I <物理セルID (PCI)> -p <物理リソースブロック数 (PRB)>を使用して、特定の基地局をスニッフィングできます。この場合、LTESnifferはセルサーチを行わず、指定されたセルに直接接続します。
sudo ./<build-dir>/src/LTESniffer -A 2 -W <スレッド数> -f <DL周波数> -I <PCI> -p <PRB> -m 0
sudo ./<build-dir>/src/LTESniffer -A 2 -W <スレッド数> -f <DL周波数> -u <UL周波数> -I <PCI> -p <PRB> -m 1
例:sudo ./src/LTESniffer -A 2 -W 4 -f 1840e6 -u 1745e6 -I 379 -p 100 -m 1
デバッグモードはオプション-dで有効にできます。この場合、デバッグメッセージが端末に出力されます。