freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

基于树莓派实现IOT流量抓取
山石网科 2022-03-04 13:04:19 165586
所属地 广东省

缘起

在研究某些 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 都行:

1646369881_62219c59e60fd558cb603.png!small?1646369882511

烧录固件

1646369888_62219c60c1920e84c3321.png!small?1646369888958

1646369897_62219c6919437aec845f7.png!small?1646369897358

1646369904_62219c7047af2cae940ed.png!small?1646369904527

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

初始化

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

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

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

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

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

连接无加密的 OpenWrt :

1646369912_62219c78be861b900ad7a.png!small?1646369913132

默认后台:192.168.1.1

默认账号:root

默认密码:password

接口:配置 WAN、LAN 接口

无线:配置无线网络

1646369922_62219c825c7c655ae607e.png!small?1646369922653

无线配置

设备配置

1646369930_62219c8a6c132387d43fc.png!small?1646369930745

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

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

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

ESSID: WIFI 名字

1646369939_62219c93d580a2d892650.png!small?1646369940164

接口配置

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

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

无线安全:WIFI 密码

1646369954_62219ca2bab7850202eef.png!small?1646369955013

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

启动SSH

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

默认账号:root

默认密码:password

1646369968_62219cb073f6c67d67603.png!small?1646369968737

分配SD卡剩余空间

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

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

1646369980_62219cbcef1e23271e546.png!small?1646369981341

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

  1. 列出磁盘

    fdisk -l

    1646369987_62219cc3039a253df549a.png!small?1646369987476

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

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

  4. 保存退出:w

    操作过程记录:

    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

    1646369998_62219cce8f4622d4cb482.png!small?1646369998850

  6. WEB 后台启动挂载点:

    1646370006_62219cd66aec9c50f4462.png!small?1646370007319

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

    1646370013_62219cdd37140b9d07420.png!small?1646370013593

  7. 重启一下

    1646370020_62219ce412efca9e07231.png!small?1646370032953


有线桥接部署

场景说明

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

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

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

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

1646370028_62219cec963f26fa5bbf2.png!small?1646370032949

配置LAN

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

1646370036_62219cf4619c3e8ee844f.png!small?1646370036735

1646370042_62219cfac888a2e9e1abf.png!small?1646370043082

配置WAN

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

1646370051_62219d030e20d8c1506e8.png!small?1646370051890

1646370057_62219d09b44f44369a25d.png!small?1646370057932

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

1646370064_62219d10d584ccdf50b3f.png!small?1646370065203

配置防火墙

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

1646370073_62219d1941f447e63b3dd.png!small?1646370073712

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

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

  • 一级路由设备不能访问二级路由设备

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

others

连通一二级路由

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

1646370083_62219d2399150683389be.png!small?1646370083839

1646370090_62219d2aa6db143020710.png!small?1646370091012

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

# 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

1646370100_62219d347b347e6c2d650.png!small?1646370100738

在路由器上抓包

环境信息

  • 树莓派4b 搭载 openwrt

  • tcpdump

  • Wireshark

  • 科来网络分析系统

安装 tcpdump

启动SSH

opkg update
opkg install tcpdump
#tcpdump -h

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

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 分析就好了:

1646370112_62219d409ac1b77b8c2c7.png!small?1646370114971


# 树莓派 # IoT安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 山石网科 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
山石网科 LV.7
山石网科安研院
  • 94 文章数
  • 90 关注者
Linux内核攻击面研究
2023-03-13
详解Flask SSTI 利用与绕过技巧V2
2023-03-06
Shadowsocks 重定向攻击
2023-02-09
文章目录