缘起

在研究某些 IOT 设备时发现,该设备的操控逻辑是:手机发出指令到云端服务器,云端服务器发送指令到 IOT 设备。

手机到云端服务器之间的数据,用手机 root 装上 exposed+justtrustme 搭配 burpsuite 就能抓取 http、https 。

云端服务器到 IOT 设备之间的流量需要一些奇淫技巧。IOT 设备交互流量不局限于 http(s) 流量,还有通过 zigbee、蓝牙网关等等其他协议,实现本地联动的,burp 用起来就捉襟见肘了,Wireshark、科来网络分析系统等支持多协议的软件就体现优势。

设想了几个抓取方法:

  1. 在电脑上建立热点使用电脑无线网卡建立 WIFI 供 IOT 设备链接,电脑以有线方式链接至路由器;

    将无线网卡桥接到有线网卡,确保联网;

    在电脑上用 Wireshark 对无线网卡进行抓包;

  2. 在路由器上抓包:需要是基于 linux 的路由器,能装上 tcpdump ,软路由就符合条件。使用软路由无线网卡建立 WIFI 供 IOT 设备链接,软路由以有线方式链接至上级路由器。

    在软路由上用 tcpdump 对无线网卡进行抓包,然后用 Wireshark 进行分析。

  3. 中间人攻击

后面翻了一下文章,找到有大概总结文章:IoT渗透之抓包5法 ,部分思路重合可以互相借鉴。

手上有个树莓派,多买张 tf卡就可以弄软路由,所以先尝试在软路由器上抓包的可行性。

安装 OpenWrt

需要工具

  • 烧录工具:balenaEtcher
  • OpenWrt 固件包

固件下载

软路由前 2-3 年火了之后,已经有很多长期维护的编译版本提供下载,不需要再自己折腾编译。这里提供一个 3k star 的下载源:SuLingGG/OpenWrt-Rpi ,镜像站点:https://openwrt.cc/releases/targets/bcm27xx/bcm2711/。

固件命名说明:

  • factory :比 sysupgrade 增加原厂验证、分区信息等,用于刷机。
  • sysupgrade : 升级包。用于在 OpenWrt 基础上进行系统升级更新。
  • ext4、squashfs :文件系统格式。ext4 可修改,squashfs 只读;ext4 较新。

选择 ext4-factory、squashfs-factory 都行:

image-20220106222301556

烧录固件

image-20220106223621989

image-20220106223635030

image-20220106223828702

输入系统密码授权写入权限,等待完成即可。

初始化

首次启动前,移除树莓派网线

首次启动前,移除树莓派网线

首次启动前,移除树莓派网线,否则首次启动不会开启 WIFI ,会给 OpenWrt 分配一个网线所链接网段的一个 ip 。

如果使用主机没有无线网卡,那就用网线链接树莓派和主机进行初始化。

如果使用的固件不是上文链接下载的,移除网线后首次启动没有无线网络,可能是固件设置问题,尝试换一个固件解决

连接无加密的 OpenWrt :

image-20220106225529823

默认后台:192.168.1.1

默认账号:root

默认密码:password

接口:配置 WAN、LAN 接口

无线:配置无线网络

image-20220106225811106

无线配置

设备配置

image-20220106230309154

工作频率-模式:几种模式对应是 802.11 不同协议,简要说明几种模式,深入了解移步谷歌

模式 工作频率 速度 简要描述
AC 5G 最快 不兼容老旧设备
N 2.4G或5G 中等 5G带宽比AC低。如果需要 2.4G 选这个适中协议
Legacy 2.4G或5G 最慢 兼容性最强,带宽最低

工作频率-频宽:越大越快

ESSID : WIFI 名字

image-20220106230425824

接口配置

模式:WiFi 工作模式。具体模式??

网络:纳入这个 WiFi 的物理/虚拟接口。可以将不同物理/虚拟接口区分在不同的 WIFI 下互不干扰。

无线安全:WIFI 密码

image-20220226180155147

网络接口怎么配置要依据树莓派的接入方式。假设方式可以借鉴:OpenWrt路由器无线中继、桥接、信号放大、访客网络的实现方案

启动SSH

默认情况下,只允许从 lan 口 ssh 登录,我为了方便就配置成未指定,即任意端口流量都可以访问。

默认账号:root

默认密码:password

image-20220107151640229

分配SD卡剩余空间

resize2fs /dev/mmcblk0 出现问题未解决

OpenWrt 系统使用很少一部分空间,df -h 或者 lsblk 查看系统空间会与 SD 卡容量不匹配,原因是 SD 卡部分空间没有挂载。

image-20220107192204243

如果使用硬盘安装,下面操作中 mmcblk 替换成 sda

  1. 列出磁盘

    1
    fdisk -l

    image-20220107191355488

  2. 新建分区:n;分区类型:primary

  3. 分区开始地址是 /dev/mmcblk0p2 结束地址到 SD 卡末尾,地址自行按在实际情况计算;

  4. 保存退出:w

    操作过程记录:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Command (m for help): p
    Disk /dev/mmcblk0: 29.12 GiB, 31266439168 bytes, 61067264 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x5452574f

    Device Boot Start End Sectors Size Id Type
    /dev/mmcblk0p1 * 8192 110591 102400 50M c W95 FAT32 (LBA)
    /dev/mmcblk0p2 114688 1650687 1536000 750M 83 Linux
    /dev/mmcblk0p3 61067263 61067263 1 512B 83 Linux

    Command (m for help): n
    Partition type
    p primary (2 primary, 0 extended, 2 free)
    e extended (container for logical partitions)
    Select (default p):

    Using default response p.
    Partition number (3,4, default 3):
    First sector (2048-61067263, default 2048): 1650688
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (1650688-61067263, default 61067263):

    Created a new partition 3 of type 'Linux' and of size 28.3 GiB.

    Command (m for help): p
    Disk /dev/mmcblk0: 29.12 GiB, 31266439168 bytes, 61067264 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x5452574f

    Device Boot Start End Sectors Size Id Type
    /dev/mmcblk0p1 * 8192 110591 102400 50M c W95 FAT32 (LBA)
    /dev/mmcblk0p2 114688 1650687 1536000 750M 83 Linux
    /dev/mmcblk0p3 1650688 61067263 59416576 28.3G 83 Linux

    Command (m for help): w

    The partition table has been altered.
    Syncing disks.
  5. 格式化分区:mkfs.ext4 /dev/mmcblk0p3

    image-20220226173948780

  6. WEB 后台启动挂载点:

    image-20220226174852232

    UUID 根据容量可以判断新建的分区是哪个;新建一个文件夹用来当作挂载点:

    image-20220226174955739

  7. 重启一下

    image-20220226175306977

有线桥接部署

场景说明

  • 软路由 WAN 口用网线接到主路由 LAN 口:实现接入主路由子网、连通互联网;

  • IoT 设备连接软路由 WiFi 实现上网与被抓包;

  • 攻击机连接主路由 WiFi 通过 SSH 控制软路由抓包与提取流量包;

默认情况下,软路由的无线与有线是互相隔离的子网,即攻击机不能 ping IoT 设备,可以通过设置软路由防火墙取消子网隔离,方便操作。

MIS

配置LAN

进入接口管理,将 LAN 口调整为仅无线网卡,:

image-20220107004943039

image-20220106235714531

配置WAN

新加 WAN 接口,将有线网卡加进去,协议选择 DHCP :

image-20220107004958586

image-20220107000325646

保存&应用后,用网线将树莓派网口与路由器&光猫 LAN 口链接,刷新会出现上级路由 ip 段就是 WAN 配置正确:

image-20220107005046621

配置防火墙

下图是默认配置,这个配置已经可以通过一级路由上网了,如果有误删配置,可以参考下图重新配置一下。

image-20220107005417875

上面的这个配置总结特点:

  • 二级路由下设备可以访问一级路由设备,并且可以通过一级路由出网
  • 一级路由设备不能访问二级路由设备

到这里有线桥接就完成了,IOT 设备能够通过软路由->主路由出网。

others

连通一二级路由

如果需要开启一级路由设备允许访问二级路由设备,修改 wan 口入口流量允许转发到 lan 口(不管vpn接口也可以,因为没用到),然后允许 wan 口入站流量,具体设置看图:

image-20220107010009207

image-20220226221153041

配置一下路由表就能穿越两个路由,mac 配置:

1
2
3
4
5
6
7
8
9
# mac:192.168.199.131
# openwrt:192.168.199.140/192.168.1.1
sudo route add -net 192.168.1.0 192.168.199.140
ping 192.168.1.1
#PING 192.168.1.1 (192.168.1.1): 56 data bytes
#64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=1.647 ms
#64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.552 ms
#64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=12.220 ms
#64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=2.012 ms
IP 动态伪装、MSS 钳制

IP 动态伪装、MSS 钳制功能不是很清楚作用。测试几轮后,WAN 口需要打开 IP 动态伪装才能连接上一级路由。

如果上不了网,多半是防火墙或者是 DNS 的问题。

恩山论坛也在求助这个问题:贴子0贴子1

image-20220107112741669

在路由器上抓包

环境信息

  • 树莓派4b 搭载 openwrt
  • tcpdump
  • Wireshark
  • 科来网络分析系统

安装 tcpdump

[启动SSH](# 启动SSH)

1
2
3
opkg update
opkg install tcpdump
#tcpdump -h

tcpdump 参数可以查阅文章:常用的 tcpdump 命令参考手册Tcpdump命令抓包详细分析

1
tcpdump -vv -s0 -c 1000 -i wlan0 -w ./1.pcap
  1. -vv : 显示状态
  2. -c : 抓包多少条
  3. -i : 指定网卡,比如wlan0 wifi,eth0 有线网卡,br-lan 一般都是指lan的网桥 就是包括wifi和lan部分
  4. -s0 : 不限制包的长度,也是抓取完整的包
  5. -w : 文件路径: 保存抓到的数据包到指定文件 这里方便后期导出来到wireshark里分析哈哈

抓取流量包之后,拉回本机 wrieshark 分析就好了:

image-20220227122216257