
오픈소스 LTE 하향링크/상향링크 도청기
LTESniffer는 오픈소스 LTE 하향링크/상향링크 도청기입니다.
먼저 물리 하향링크 제어 채널(PDCCH)을 디코딩하여 모든 활성 사용자의 하향링크 제어 정보(DCI)와 무선 네트워크 임시 식별자(RNTI)를 획득합니다. 디코딩된 DCI와 RNTI를 사용하여 LTESniffer는 물리 하향링크 공유 채널(PDSCH)과 물리 상향링크 공유 채널(PUSCH)을 추가로 디코딩하여 상향링크 및 하향링크 데이터 트래픽을 검색합니다.
LTESniffer는 보안 애플리케이션과 연구를 위한 세 가지 기능을 제공하는 API를 지원합니다. 많은 LTE 보안 연구는 무선상에서 개인정보 관련 패킷을 캡처할 수 있는 수동적 스니퍼를 가정합니다. 그러나 현재 오픈소스 스니퍼 중 PDSCH와 PUSCH의 프로토콜 패킷을 디코딩할 수 없어 그 요구 사항을 충족하는 것은 없습니다. 우리는 이전 연구에서 제안된 세 가지 작업, 즉 1) 신원 매핑(Identity mapping), 2) IMSI 수집(IMSI collecting), 3) 능력 프로파일링(Capability profiling)을 지원하는 개념 증명 보안 API를 개발했습니다.
자세한 내용은 [논문][paper]을 참조하십시오.
LTESniffer는 기지국과 그에 연결된 스마트폰 사이에 전송되는 LTE 무선 메시지를 캡처할 수 있는 도구입니다. LTESniffer는 기지국에서 스마트폰으로, 그리고 스마트폰에서 기지국으로의 양방향 메시지 캡처를 지원합니다.
LTESniffer는 기지국과 스마트폰 사이의 암호화된 메시지를 복호화할 수 없습니다. 기지국과 스마트폰 간 통신의 암호화되지 않은 부분을 분석하는 데 사용할 수 있습니다. 예를 들어 암호화된 메시지의 경우 MAC 및 물리 계층의 헤더와 같은 암호화되지 않은 부분을 분석할 수 있습니다. 그러나 평문으로 전송되는 메시지는 완전히 분석할 수 있습니다. 예를 들어 기지국이 보내는 브로드캐스트 메시지나 연결 시작 시의 메시지는 완전히 볼 수 있습니다.
LTESniffer의 주요 목적은 셀룰러 네트워크에 대한 보안 및 분석 연구를 지원하는 것입니다. 상향링크-하향링크 사용자 데이터를 수집하기 때문에 LTESniffer의 모든 사용은 LTE 트래픽 스니핑에 관한 현지 규정을 준수해야 합니다. 우리는 의도적으로 사용자 개인정보 관련 정보를 수집하는 것과 같은 불법적인 목적에 대해 책임을 지지 않습니다.
LTESniffer-record-subframe 브랜치와 해당 [README][capture-readme]를 참조하십시오.LTESniffer-multi-usrp 브랜치와 해당 [README][multi-readme]를 참조하십시오.LTESniffer는 [srsRAN][srsran] 라이브러리의 도움을 받아 [FALCON][falcon]을 기반으로 구현되었습니다. 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의 하향링크 메시지를 디코딩하려면 두 개의 RX 안테나가 장착되어 있어야 합니다.
SDR에 RX 안테나가 하나만 있는 경우 LTESniffer는 전송 모드 1의 하향링크 메시지만 디코딩합니다. GPSDO는 하향링크 스니핑에 선택 사항입니다. 동기화를 개선하는 데 도움이 되지만 필수는 아닙니다.
반면, 스마트폰에서 기지국으로의 상향링크 트래픽을 스니핑하려면 LTESniffer는 두 개의 서로 다른 주파수(상향링크 및 하향링크)를 동시에 청취해야 합니다. 이 문제를 해결하기 위해 LTESniffer는 두 가지 옵션을 지원합니다:
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 카드를 사용합니다. USRP X310 및 10Gb 카드 인터페이스 구성은 UHD 매뉴얼 [1], [2]을 참조하십시오. 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 card interface> 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 (use 4 threads)
LTESniffer에는 3가지 주요 기능이 있습니다:
소스에서 빌드한 후 LTESniffer는 <build-dir>/src/LTESniffer에 있습니다.
상용 네트워크에서 LTESniffer를 사용하기 전에 윤리적 고려 사항에서 설명한 대로 LTE 트래픽 스니핑에 관한 현지 규정을 확인해야 합니다.
테스트 스마트폰이 연결된 기지국과 상향링크-하향링크 대역을 확인하려면 테스트 스마트폰에 [Cellular-Z][app] 앱을 설치하십시오 (이 앱은 Android만 지원합니다). 테스트 스마트폰이 연결된 셀 ID와 상향링크-하향링크 대역/주파수를 표시합니다. LTESniffer도 동일한 셀과 주파수에 연결되는지 확인하십시오.
sudo ./<build-dir>/src/LTESniffer -A 2 -W <number of threads> -f <DL Freq> -C -m 0
example: sudo ./src/LTESniffer -A 2 -W 4 -f 1840e6 -C -m 0
-A: number of antennas
-W: number of threads
-f: downlink frequency
-C: turn on cell search
-m: sniffer mode, 0 for downlink sniffing and 1 for uplink sniffing
참고: 하향링크 모드에서 USRP B210으로 LTESniffer를 실행하려면 명령줄에 -a "num_recv_frames=512" 옵션을 추가하십시오. 이 옵션은 USRP B210의 수신 버퍼를 확장하여 더 나은 동기화를 달성합니다.
sudo ./<build-dir>/src/LTESniffer -A 2 -W <number of threads> -f <DL Freq> -C -m 0 -a "num_recv_frames=512"
example: 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 <number of threads> -f <DL Freq> -u <UL Freq> -C -m 1
example: sudo ./src/LTESniffer -A 2 -W 4 -f 1840e6 -u 1745e6 -C -m 1
-u: uplink frequency
sudo ./<build-dir>/src/LTESniffer -A 2 -W <number of threads> -f <DL Freq> -u <UL Freq> -C -m 1 -z 3
example: sudo ./src/LTESniffer -A 2 -W 4 -f 1840e6 -u 1745e6 -C -m 1 -z 3
-z: 3 for turnning on 3 functions of sniffer, which are identity mapping, IMSI collecting, and UECapability profiling.
2 for UECapability profiling
1 for IMSI collecting
0 for identity mapping
LTESniffer는 -I <Phycial Cell ID (PCI)> -p <number of Physical Resource Block (PRB)> 옵션을 사용하여 특정 기지국을 스니핑할 수 있습니다. 이 경우 LTESniffer는 셀 검색을 수행하지 않고 지정된 셀에 직접 연결합니다.