2017年3月2日星期四

IoT(五)ZigBee&Z-Wave协议参数

802.15.4(ZigBee)

  •  ZigBee网络中的设备安功能不同分为3种:
    协调器(Co-ordinator):起核心协调作用,负责组网,分配网络地址等等
    路由器(Router):负责转发数据(也可以兼具设备功能,例如一个智能开关)
    终端节点(End Device):即设备,像传感器、智能家居里的开关等等
  • 类似电脑一样,每个ZigBee设备在通信的时候主要由网络地址(NetworkID 又称为PANID)和设备地址(DeviceID,又称为短地址)来寻址
    • 但是无论是网络地址还是设备地址都不能唯一的标记一个物理设备,因为NetworkID是由协调器在建立网络的时候设定的,所以同一个协调器物理设备可能建立不同NetworkID的网络,DeviceID是终端设备在入网时由协调器分配的,当这个终端设备再次入网的时候可能会得到另一个网络地址。也就是说,同一个设备,两次入网地址可能就变了,所以DeviceID也不能作为唯一标记物理设备的ID。
    • 每一台ZigBee设备在出厂时都会有一个64位IEEE地址或者叫扩展地址,这个地址类似与电脑网卡的MAC地址,一般是不会变的,所以可以用来唯一标记一台物理设备,而这个IEEE地址在ZigBee通信过程中一般不使用(ZigBee通信过程一般使用网络地址和设备地址),只在特殊的时候使用,如设备申请入网时,网络广播时等等。只要能找到这些IEEE地址对应的物理设备,则无论这个设备的NetworkID和DeviceID怎么变都能够唯一地确定这些物理设备
  • 从IQ数据中找到IEEE地址
    • 对数据进行最简单的底层处理,然后用wireshark进行解析
    • SDR重放信号+协议分析器
      • GNU Radio流图

ITU-T G.9959 Z-Wave

    • 每一个Z-Wave网络都拥有自己独立的网络地址(HomeID);网络内每个节点有其地址(NodeID),由控制节点(Controller)分配在节点入网时分配。如下图:
    • ZWave网络中有两种节点主控设备(Primary Controller)、从设备(Slave)。主控设备的HomeID是出厂就已经设定好的,并且NodeID通常都是0x01,用户无法改变。从设备的HomeID和NodeID在入网前都未初始化,如下表:
      • 设备(slave)在加入网络之前homeID和nodeID均为0
      • 当从设备加入网络后Slave获得homeID和nodeID
    •  Z-Wave每个网络最多容纳232个节点(Slave),包括控制节点在内。控制节点可以有多个,但只有一个主控制节点,即所有网络内节点的分配,都由主控制节点负责,其他控制节点只是转发主控制节点的命令。已入网的普通节点,所有控制节点都可以控制。超出通信距离的节点,可以通过控制器与受控节点之间的其他节点,即路由(Routing)的方式完成控制。
    • Z-Wave 有一种命令可以用来请求节点信息帧NIF(Node Information Frame 参考http://blog.csdn.net/junglefly/article/details/53184484),或许可以用来识别设备。
    • 最重要的一点是Z-Wave和ZigBee设备一样在实际的应用场景中经常会通过一个网关来接入互联网,实现远程控制,这就引起了物联网设备被远程控制或者被作为攻击入口的可能性!
  • Z-Wave分析工具

2017年3月1日星期三

SDR(四)osmocomBB SMS Sniffing

0x0 开源项目
OsmocomBB是国外一个开源项目,是GSM协议栈(Protocols stack)的开源实现,全称是Open source mobile communication Baseband.目的是要实现手机端从物理层(layer1)到layer3的三层实现。
官方介绍:
  OsmocomBB is an Free Software / Open Source GSM Baseband software implementation. It intends to completely replace the need for a proprietary GSM baseband software, such as drivers for the GSM analog and digital baseband (integrated and external) peripherals the GSM phone-side protocol stack, from layer 1 up to layer 3.
  In short: By using OsmocomBB on a compatible phone, you are able to make and receive phone calls, send and receive SMS, etc. based on Free Software only.

0x1 设备

  • 摩托罗拉的C118
  • CP2102 USB转TTL模块
  • 2.5mm 3极耳机杜邦线

0x2 编译

1、系统:kali2.0
2、编译环境
apt-get update && apt-get dist-upgrade -y
apt-get install build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-dev texinfo flex bison libncurses5 libncurses5-dbg libncurses5-dev libncursesw5 libncursesw5-dbg libncursesw5-dev zlibc zlib1g-dev libmpfr4 libmpc-dev
3、osmocomBB依赖
aptitude install libtool shtool automake autoconf git-core pkg-config make gcc
4、arm交叉编译环境
目录结构和所需文件如下图:(wget分别下载)
chmod +x gnu-arm-build.3.sh
./gnu-arm-build.3.sh
编译完成后把arm添加进环境变量
export PATH=$PATH:~/Desktop/c118/source/arm/install/bin
source ~/.bashrc
5、mac arm编译环境
sudo port install libtool-devel autoconf git-core pkgconfig automake17 gcc46
sudo port install arm-elf-gcc
or
put it in /usr/local/arm
add it to your path
6、编译osmocomBB固件
6.1、libosmocore库
git clone git://git.osmocom.org/libosmocore.git
apt-get install build-essential libtool shtool autoconf automake git-core pkg-config make gcc libpcsclite-dev
autoreconf -i
./configure
make 
sudo make install
遇到的坑:
1、缺少talloc
apt-get无此库,去官网下载安装,https://www.samba.org/ftp/talloc/
$ wget https://www.samba.org/ftp/talloc/talloc-2.1.7.tar.gz
$ tar -zxvf talloc-2.1.7.tar.gz
$ cd talloc-2.1.7/
$ ./configure
$ make
$ sudo make install
2、mac版缺少libpcsc
./configure --disable-pcsc #libpcsclite isn't available on OS X
3、/usr/bin: python2: No such file or directory
sudo ln -s /usr/bin/python2.7 /usr/local/bin/python2
4、完成后编译其他程序无法读取到libosmocore
~/.zshrc添加相应PKG_CONFIG_PATH:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/Users/***/Desktop/source/rf/libosmocore
export PKG_CONFIG_PATH
6.2 osmocomBB
git clone git://git.osmocom.org/osmocom-bb.git
git checkout --track origin/luca/gsmmap
cd src 
make

0x3 刷机

cd src/host/osmocon
sudo ./osmocon -m c123xor -p /dev/tty.SLAB_USBtoUART ../../target/firmware/board/compal_e88/layer1.compalram.bin
按一下开机键,刷机成功界面如下:

0x4 扫描基站

cd osmocom-bb/src/host/layer23/src/misc/
sudo ./cell_log -O
其中cell_log的参数是字母O,具体作用是只检查ARFCN是否可用,不进行其它操作,可以用./cell_log —help参看说明。终端中会输出日志信息,其中会包含能够收到的基站的相关信息,格式类似这样:
cell_log.c:248 Cell: ARFCN=40 PWR=-61dB MCC=460 MNC=00 (China,China Mobile)
ARFCN后面的编号可以代表基站信道号,有些还包含了运营商信息。
手机log同样也包含了基站信道信息:

0x5 信道

c118过于低端,每个手机只能嗅探一个信道,可以参考下面的图(我们现在只能抓Downlink的数据包):
因为想要Sniffer Uplink的包,要修改硬件,C118主板上的RX filters要换掉,换成我们需要的HHM1625&&HHM1623C1滤波器组件,才能抓Uplink的数据包。
有关信道号ARFCN的问题,可以参考下面的图:
苹果手机可以执行:*3001#12345#* 进入工程模式查看手机基站信道,下图中E-ARFCN为1650(4G)

0x6 嗅探

cd osmocom-bb/src/host/layer23/src/misc
sudo ./ccch_scan -i 127.0.0.1 -a ARFCN
ARFCN为扫描到的信道值。
遇到的坑:
wireshark抓包
sudo wireshark -k -i lo -f 'port 4729'
开启wireshark监控结果
过滤协议为gsm_sms
(开了一天都没抓到一个包,估计还有其他问题)

CVE/CNVD list

报告记录&poc: 最近fuzz出了不少crash,提交记录git: https://github.com/gandalf4a/crash_report 其中CVE记录如下: (不定期持续更新) 2025 CVE-2025-22134:heap-buffer-o...