基于通信协议挖掘IoT设备漏洞
蓝牙
蓝牙4.0 BLE低功耗蓝牙是蓝牙技术专为物联网开发的技术版本。
BLE分为三部分Service、Characteristic、Descriptor,这三部分都由UUID作为唯一标示符。一个蓝牙4.0的终端可以包含多个Service,一个Service可以包含多个Characteristic,一个Characteristic包含一个Value和多个Descriptor,一个Descriptor包含一个Value。
BLE 工作在ISM频带,主要工作在 2.4Ghz:
channel 37 : 2.402000000 Ghz
channel 00 : 2.404000000 Ghz
channel 01 : 2.406000000 Ghz
channel 02 : 2.408000000 Ghz
channel 03 : 2.410000000 Ghz
channel 04 : 2.412000000 Ghz
channel 05 : 2.414000000 Ghz
channel 06 : 2.416000000 Ghz
channel 07 : 2.418000000 Ghz
channel 08 : 2.420000000 Ghz
channel 09 : 2.422000000 Ghz
channel 10 : 2.424000000 Ghz
channel 38 : 2.426000000 Ghz
channel 11 : 2.428000000 Ghz
channel 12 : 2.430000000 Ghz
channel 13 : 2.432000000 Ghz
channel 14 : 2.434000000 Ghz
channel 15 : 2.436000000 Ghz
channel 16 : 2.438000000 Ghz
channel 17 : 2.440000000 Ghz
channel 18 : 2.442000000 Ghz
channel 19 : 2.444000000 Ghz
channel 20 : 2.446000000 Ghz
channel 21 : 2.448000000 Ghz
channel 22 : 2.450000000 Ghz
channel 23 : 2.452000000 Ghz
channel 24 : 2.454000000 Ghz
channel 25 : 2.456000000 Ghz
channel 26 : 2.458000000 Ghz
channel 27 : 2.460000000 Ghz
channel 28 : 2.462000000 Ghz
channel 29 : 2.464000000 Ghz
channel 30 : 2.466000000 Ghz
channel 31 : 2.468000000 Ghz
channel 32 : 2.470000000 Ghz
channel 33 : 2.472000000 Ghz
channel 34 : 2.474000000 Ghz
channel 35 : 2.476000000 Ghz
channel 36 : 2.478000000 Ghz
channel 39 : 2.480000000 Ghz
一共 40 个信道,37、38、39为广播信道,另外37个信道用于数据的传输。
物联网设备测试中,针对蓝牙的设备,可采用 Android 开发者模式中的的HCI log功能进行分析,另外也可通过Ubertooth>
使用Ubertooth one对蓝牙进行抓包:
安装lib库
apt-get install python-software-properties
add-apt-repository ppa:pyside
apt-get update
apt-get install libnl-dev libusb-1.0-0-dev pyside-tools
wget https://github.com/greatscottgadgets/libbtbb/archive/2015-09-R2.tar.gz -O libbtbb-2015-09-R2.tar.gz
tar xf libbtbb-2015-09-R2.tar.gz
cd libbtbb-2015-09-R2
mkdir build
cd build
cmake ..
make
sudo make install
安装ubertooth
wget https://github.com/greatscottgadgets/ubertooth/releases/download/2015-09-R2/ubertooth-2015-09-R2.tar.xz -O ubertooth-2015-09-R2.tar.xz
tar xf ubertooth-2015-09-R2.tar.xz
cd ubertooth-2015-09-R2/host
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
sudo apt-get install checkinstall
wget https://www.wireshark.org/download/src/wireshark-2.0.3.tar.bz2
tar -xvf wireshark-2.0.3.tar.bz2
cd wireshark-2.0.3
./configure
make
make install
wget https://kismetwireless.net/code/kismet-2013-03-R1b.tar.xz
tar xf kismet-2013-03-R1b.tar.xz
cd kismet-2013-03-R1b
ln -s ../ubertooth-2015-09-R2/host/kismet/plugin-ubertooth .
./configure
make && make plugins
sudo make suidinstall
sudo make plugins-install
git clone https://github.com/mikeryan/crackle.git
cd crackle
make
make install
ubertooth-btle -f -c /tmp/test.pcap使用 CSR4.0 芯片
hciconfig 列出蓝牙适配器hciconfig hci1 up 启用蓝牙适配器
hcitool scan 扫描附近的蓝牙设备
gatttool –I hci1 –b $蓝牙Mac地址 - - characteristics
NFC RFID
NFC 主要通过 PM3 对标签进行克隆、秘钥破解、算法漏洞验证等。
Mac 可通过安装 HomeBrew,安装 PM3 驱动、工具,参考链接:
https://brew.sh/
brew tap iceman1001/proxmark3
brew install proxmark3
sudo proxmark3-flasher /dev/tty.usbmodem142201 -b /usr/local/Cellar/proxmark3/3.1.0/share/firmware/bootrom.elf /usr/local/Cellar/proxmark3/3.1.0/share/firmware/fullimage.elf
检测设备是否正常:
proxmark3 /dev/tty.usbmodem888888881Proxmark3 RFID instrument
[ ARM ]
bootrom: iceman// 2019-07-30 14:51:33
os: iceman// 2019-07-30 14:51:35
[ FPGA ]
LF image built for 2s30vq100 on 2015/03/06 at 07:38:04
HF image built for 2s30vq100 on 2017/05/17 at 17:48:26
[ Hardware ]
--= uC: AT91SAM7S256 Rev B
--= Embedded Processor: ARM7TDMI
--= Nonvolatile Program Memory Size: 256K bytes, Used: 217186 bytes (83) Free: 44958 bytes (17)
--= Second Nonvolatile Program Memory Size: None
--= Internal SRAM Size: 64K bytes
--= Architecture Identifier: AT91SAM7Sxx Series
--= Nonvolatile Program Memory Type: Embedded Flash Memory
pm3 --> hw tune
Measuring antenna characteristics, please wait......
# LF antenna: 25.85 V @ 125.00 kHz
# LF antenna: 19.94 V @ 134.00 kHz
# LF optimal: 25.71 V @ 123.71 kHz
# HF antenna: 23.08 V @ 13.56 MHz
Displaying LF tuning graph. Divisor 89 is 134khz, 95 is 125khz.
pm3 -->
读取高频卡 ID:
克隆低频卡
proxmark3> lf searchNOTE: some demods output possible binary
if it finds something that looks like a tag
False Positives ARE possible
Checking for known tags:
EM410x pattern found:
EM TAG ID : 12000A1D1E
Possible de-scramble patterns
Unique TAG ID : 480050B878
HoneyWell IdentKey {
DEZ 8 : 00662814
DEZ 10 : 0000662814
DEZ 5.5 : 00010.07454
DEZ 3.5A : 018.07454
DEZ 3.5B : 000.07454
DEZ 3.5C : 010.07454
DEZ 14/IK2 : 00077310074142
DEZ 15/IK3 : 000309242935416
DEZ 20/ZK : 04080000050011080708
}
Other : 07454_010_00662814
Pattern Paxton : 303979294 [0x121E5B1E]
Pattern 1 : 803966 [0xC447E]
Pattern Sebury : 7454 10 662814 [0x1D1E 0xA 0xA1D1E]
Valid EM410x ID Found!
PM3> lf em 410xwrite 12000A1D1E 1 64
Writing T55x7 tag with UID 0x12000a1d1e (clock rate: 64)
#db# Started writing T55x7 tag ...
#db# Clock rate: 64
#db# Tag T55x7 written with 0xff8ca000283d8fb4
软件无线电
软件无线电 Software Define Radio可实现捕获空中0Mhz-6000Mhz的无线信号,通过采样,转化成数字信号用软件处理。
借助软件无线电硬件和软件瀑布图,我们可将看不见、摸不着的无线信号可视化:
通过 GNURadio 可对信号进行实时的调制、解调,以及将捕获到的信号储存到电脑中:
apt-get update
apt-get install git
apt-get install python-pip
pip install --upgrade pip
pip install git+https://github.com/gnuradio/pybombs.git
pybombs recipes add gr-recipes git+https://github.com/gnuradio/gr-recipes.git
pybombs recipes add gr-etcetera git+https://github.com/gnuradio/gr-etcetera.git
pybombs prefix init /usr/local -a myprefix -R gnuradio-default
pybombs install gqrx gr-osmosdr uhd bladerf
GSM GPRS
对于使用运营商物联网卡的设备,可通过软件无线电加开源基站模拟基站通信,将 IoT设备吸附到自己的小基站,因为大多数开发者比较缺乏安全意识,过于相信运营商的通信管道是安全的,所以在 IoT开发的过程中,普遍采用明文传输的HTTP,而非HTTPS,通过搭建开源基站这种方式对硬件设备的流量进行拦截、捕获分析,往往可以发现联网设备的很多安全问题。
2G 基站的开源项目,OpenBTS YateBTS OpenBSC可配合 BladeRF、USRP等硬件实现基站的通话、短信、GPRS 联网功能。
以 Ubuntu16.04 为例:
源码编译BladeRF
sudo apt install git cmake automake libusb-1.0.0-dev apache2 php libapache2-mod-php php-mcrypt php-mysql
wget https://github.com/Nuand/bladeRF/archive/2016.06.zip
unzip 2016.06.zip
cd bladeRF-2016.06/host
mkdir build && cd build
cmake ../
make –j4 && sudo make install
sudo ldconfig
wget https://github.com/vir/yate/archive/6.0.0.zip
unzip 6.0.0.zip
cd yate-6.0.0
./autogen.sh
./configure --prefix=/usr/local u make -j4
sudo make install
sudo ldconfig
yate-config --version
wget https://yate.null.ro/tarballs/yatebts6/yate-bts-6.0.0-1.tar.gz --no- check-certificate
tar zxvf yate-bts-6.0.0-1.tar.gz
cd yate-bts
./autogen.sh
./configure --prefix=/usr/local
make -j4
sudo make install
sudo ldconfig
sudo ln -s /usr/local/share/yate/nipc_web/ /var/www/html/
固件提取&逆向固件
固件提取:
方法一:通过接线连接芯片的引脚,连接编程器,进行固件读取;方法二:将芯片拆焊下来,通过烧录座编程器,进行固件读取;
方法三:通过检测固件升级包,截取固件升级 URL;
方法四:在官网查找历史版本固件包。
这里以firmware-mod-kit为例,对bin格式固件文件进行解包。案例将以 TP-Link的路由器固件为例,固件下载地址:
https://static.tp-link.com/2018/201804/20180403/TL-WR841N(EU)_V14_180319.zip
Usage: ./extract-firmware.sh firmware_image.bin
firmware-mod-kit借助 Binwalk 对固件进行扫描,通过对固件文件头的分析,提取固件中的文件。
在 Ubuntu 中使用firmware-mod-kit的固件提取脚本对固件进行提取,提取的文件将存在firmware-mod-kit/fmk 目录中:
image_parts:固件中的镜像文件logs:日志文件
rootfs :Linux根文件系统、路由器管理WEB源码
后续可通过对提取出的固件文件进行分析、修改然后重打包再刷入硬件中实现对硬件漏洞的挖掘。
WIFI
针对使用WiFi、以太网通信的物联网设备,可通过 NETGEAR wg111v3 RTL8187B 网卡在 Kali 系统中搭建钓鱼 WiFi 热点,配合Airbase-NG、DMESG、SSLStrip、Ettercap tunnel、URL snarf、Dsniff等中间人工具对流量进行劫持分析。
也可通过将设备接入刷入 OpenWRT的路由器中,然后使用 openwrt 的 tcpdump 抓包工具,抓取手机和设备、设备云端交互数据。通过这种方式也可实现对物联网流量的分析审计。
tcpdump host ip1 and ip2 -i wlan0 -w 1.pcapZigBee
ZigBee是一种开源无线技术,用于低功耗嵌入式设备(无线电系统),用以促进机器与机器之间高效且有效的通信(通常相距10-100米),同时保持一个较低的成本。ZigBee建立在IEEE 802.15.4标准之上,并得到ZigBee联盟(一个旨在标准化ZigBee协议的公司联盟)的支持。ZigBee联盟有三种网络规范:ZigBee Pro,ZigBee RF4CE和ZigBee IP。ZigBee联盟还发布了ZigBee HomeAutomation,ZigBee Smart Energy等应用程序配置文件,允许不同的设备类进行相互操作。
ZigBee协议栈由四层组成:
· 物理层
· 媒体访问控制(MAC)层
· 网络层(NWK)
· 应用层(APL)
ZigBee被认为是一种安全的通信协议。其安全架构补充了IEEE 802.15.4标准提供的安全服务。ZigBee提供的安全服务包括安全密钥建立、安全密钥传输、通过对称加密的帧保护、以及安全的设备管理。
但是,其安全功能基于某些固有的假设:
• ZigBee采用“开放信任”模式; 即,协议栈层之间彼此信任,并且产生帧的那一层负责保护产生的帧。
• 安全服务仅以加密方式保护不同设备之间的接口。
• 相同设备上的不同堆栈层之间的接口是非加密的。
• 密钥在传输期间不会发生无意中的泄露情况。(例外情况是在新设备的预配置期间,可能会在不受保护的情况下发送单个密钥。)
• 几乎完美的随机数生成器的可用性。
• 防篡改硬件的可用性。
危险性:
1、可预测的PAN ID和有限的信道:在ZigBee协议中,重新加入的设备时,如果已保存的参数与PAN ID和网络运行的信道相匹配,则会加入网络。PAN ID是一个64位值,可以被暴力猜解(需要一些处理时间才能找到正确的PAN ID,但最终攻击者可以暴力猜解出正确的值)。此外,ZigBee操作的频道号限制为16,因此,攻击者很容易找到正确的网络频道。
2、重放保护不足:你可能会认为ZigBee具有重放攻击保护机制作为其规范的一部分; 但是,802.15.4规范具有有限的重放保护机制,即使加密的消息也无法彻底防御这种攻击。因此,狡猾的攻击者可以重放任何先前观察到的流量(ZigBee具有阻止攻击者修改数据包的优势),直到密钥轮换(假设802.15.4没有启用身份验证机制)。重放攻击伴随着其他几种攻击:
3、DDoS:恶意用户可以在网络中的某一点接收数据包,然后在其他区域重放这些数据包来干扰整体网络功能(虫洞攻击)
IEEE802.11网络中的临时密钥完整性协议(TKIP)MIC攻击是攻击者通过使用多次重放一次一个字节的解码有效载荷并观察MIC失败时的响应。
多年来,研究人员还成功的使用Joshua Wright制作的“Killer Bee”工具实施了重放攻击,并清楚的说明了它可能造成的严重问题。例如,Fitbit,起搏器和胰岛素泵等医疗设备重放旧信息可能导致错误的输出和危险事件(生命损失)。
4、信号干扰:虽然ZigBee已经建立了某些网络干扰保护技术,但它们并不全面且执行速度慢,允许攻击者控制网络运行的频率信道。这种现象在大型网络中很频繁,可以非常有效的检测信号。
5、未经授权的网络调试:ZigBee设备连接到第一个可用的网络,无需ZigBee设备用户的任何交互。因此,可以强制ZigBee设备加入虚假网络(即使不知道ZigBee设备在重新加入网络时所期望的活动密钥)。攻击者可以通过向设备发送“reset to factory default”命令并等待设备查找要连接的ZigBee网络来执行此操作。
6、缺少DDoS保护机制:拒绝服务(DoS)攻击导致节点拒绝所有收到的消息。在ZigBee网络中,DoS可以通过以下方式实现:
7、最大化帧计数器:攻击者编写包含随机内容(如果是合法内容则更好)的消息作为加密的有效载荷(不知道安全密钥),将帧计数器设置为最大值,并将其发送到节点。通过将帧计数器设置为最大值,发起攻击后到达节点的任何合法帧将被接收方设备自动拒绝,因为接收到的消息的帧计数器将小于节点时记录的帧计数器。在未验证MIC数据包的情况下,可以进行此攻击。
8、使用消息(合法的或欺骗性数据包)或帧对网络发起洪水攻击。Krivtsova等人提出了广播风暴攻击,是通过发送大量广播数据包来堵塞网络。
9、通过故意发送消息来构建人工路由路径或将循环引入合法传感器的路由过程,改变路由表将网络的所有流量重定向到伪造设备(sinkhole攻击)。这种攻击可以阻碍设备之间的分组传输,从而导致DDoS。
10、使用干扰技术(信号干扰,反射干扰,更改功率谱密度等)诱使用户启动恢复出厂设置或阻止设备通信。此技术还可以强制重新加入并重新建立攻击时间帧来嗅探网络密钥。
11、重用链接密钥:ZigBee允许重用链接密钥来重新加入网络。因此,它可以使攻击者使用单独的设备复制设备的寻址凭证,并欺骗网络层发起不安全的重新加入请求。这会导致信任中心将使用先前使用的链接密钥加密的网络密钥传递给克隆的设备。因此,攻击者可以完全获得网络密钥,从而入侵整个网络。TouchLink出厂复位:合法的TouchLink发起者将factory-reset命令发送到已经在网络中的目标节点,这会导致目标节点从当前网络中被删除并移动到另一个网络。这个过程被称为偷窃。然而,它提供了一个机会,未经授权的人可以移动设备到他的另一个网络,来实现恶意意图。
12、隐私问题:ZigBee协议/网络与其他无线网络类似,容易受到统计攻击。收集网络流量可以在一定程度上准确的揭示所实现功能的性质,从而帮助攻击者执行他恶意行为。但是,对ZigBee网络的统计攻击也可能会损害隐私。例如,在家庭自动化系统中,攻击者可以收集信息以确定租户是否在家。此信息可以帮助攻击者执行更明智的抢劫计划。
ZigBee测试工具:
TICC2530 + TI Packet Sniff
KillerBee:一套软件工具,允许复杂的拦截,分析甚至传输802.15.4数据包。还提供了注入和重放流量,攻击密码系统等工具.KillerBee可以很好地与Scapy和Sulley这样的fuzzer一起使用。
GNURadio+ SDR 硬件捕获 ZigBee 通信数据
GPS
GPS系统描述:
GPS是星基无线电导航、定位和授时系统。该系统在全球范围内向具有合适装备的用户(不限数量)提供高精度的位置和速度信息以及精确的时间。
GPS提供两级服务:标准定位服务(SPS)及精密定位服务(PPS)。
GPS工作频率有两个:1575.4Mhz(民用)和1227.6Mhz(军用),信号采用圆极化方式传输。
GPS包含三大组成部分:空间部分、地面控制部分以及机载用户部分。
空间部分(空中卫星群)是由24颗导航卫星组成。这些卫星距离地面约20000公里,分布在6个轨道平面上,每个平面上有4颗卫星。这样任何时候在视界内都有5颗卫星。GPS卫星发送伪随机码调制的时间信号,并经机载接收机处理后得到卫星的位置和状态数据。通过得到卫星的精确位置,并与卫星上的原子钟时间精确同步,机载接收机可以精确地测量出每颗卫星信号到达接收机的时间,从而确定航空器位置。
地面控制部分(地面支持网)由监测站和控制站组成,用于保证卫星位置和时钟的精确性。地面控制系统由5个监测站,3个注入站和1个主控站组成。
机载用户部分(用户设备)包括天线和机载卫星接收处理器(带有数据库),为飞行员提供航空器位置、速度和精确的时间信息。
要进行水平导航(2维定位)在视界内至少要有3颗卫星。要进行水平和垂直导航(3维定位)则在视界内至少要有4颗卫星。
地面支持网:监控卫星并根据测算结果向卫星提供时间改正参数、卫星星历等资料。
空中卫星群:卫星接收来自地面站的信息,并向用户发射以C/A码和P码调制的、带有时间信息和卫星星历等导航参数的1575.42MHz和1227.60MHz两种载波频率的信号。
用户设备:接收卫星发射的时间信号和卫星轨道信息,求得卫星位置,利用时间信号和伪码相关测量卫星到测者的伪距,并由计算机解算用户位置、速度等参数。
通过软件无线电可模拟 GPS 卫星通信,向无人机、汽车发射伪造的 GPS 信号进行设备破解。如:在无人机禁飞区向无人机发射非禁飞区的 GPS 坐标、让无人机误以为自己在可飞行区域,实现禁飞区限制绕过。
编译驱动工具:
git clone https://github.com/Nuand/bladeRF.git
cd bladeRF/host/
mkdir build
cd build
cmake -DINSTALL_UDEV_RULES=ON ../
make
sudo make install
sudo ldconfig
cd /usr/share/
mkdir Nuand
cd Nuand
mkdir bladeRF
cd bladeRF
wget http://www.0xroot.cn/hostedx40.rbf
bladeRF-cli -l /usr/share/Nuand/bladeRF/hostedx40.rbf
Loading fpga...
Done.
git clone https://github.com/osqzss/gps-sdr-sim.git
cd gps-sdr-sim
make
通过 gps-sdr-sim 可生成带有 GPS 坐标的基带数据,通过软件无线电将数据发出,GPS 接收器将会对伪造的 GPS 信号进行解码,得到信号中的时间、GPS 坐标等信息。
劫持无人机:
真实坐标:广东
劫持以后:北京
通过这种方法可使无人在非禁飞区正常飞行的过程中迫降,同理,在禁飞区可通过这种方式使无人机起飞。
GPSspoof 也可用于对汽车导航发起攻击,改变汽车行驶轨迹。
原文来源:轩辕攻防实验室