DouglasFreshHabian/D00rb3ll

GitHub: DouglasFreshHabian/D00rb3ll

针对视频门铃的 IoT 安全实战教程资源库,涵盖从硬件接口调试、固件提取到自动化分析与漏洞挖掘的完整复现流程。

Stars: 13 | Forks: 1

# 🚪🔔 D00rb3ll Typing SVG # 关于 ### 这个仓库包含了配合我 YouTube 系列“IoT 黑客攻击:视频门铃”的相关文件。随着系列视频的推进,我会不断更新这个仓库。 ## 为什么做这个项目? 🗯 这个项目的目标是提供一个透明的视角,来审视一款广泛使用的消费设备的固件。作为我正在进行逆向工程努力的一部分,我会继续向这个仓库添加见解、静态和动态分析结果以及修改内容。 无论你是一名 Linux 爱好者、安全研究人员、逆向工程师还是黑客,这个项目都旨在提供有用的资源,帮助揭示固件的运行方式,并可能识别出漏洞、安全缺陷或其他感兴趣的内容。 ## 📷 [黑客攻击 IoT 视频门铃 - 内部有什么?](https://youtu.be/dVZNmC5-uO4?si=WXdHWTCoSJMnTiCV) ### ![黑客攻击 IoT 门铃 - Youtube 缩略图。](https://github.com/DouglasFreshHabian/D00rb3ll/blob/main/Graphics/Thumbnail-1.png) ## 第一个视频已发布,标题为 [“黑客攻击 IoT 视频门铃 - 内部有什么?”](https://youtu.be/dVZNmC5-uO4?si=WXdHWTCoSJMnTiCV) ## 工具: 🛠 ### 软件: 💾 1. flashrom: 用于与 SPI 芯片交互。 2. strings: 用于从二进制文件中收集信息。 3. binwalk: 用于解包和提取固件中的文件。 ### 硬件: 💻 1. [USB 转 TTL 适配器](https://amzn.to/4h6SqPY) 2. [PCBite 探针](https://amzn.to/4f4CbRr) 3. 运行 Linux 的计算机 (kali Linux, Ubuntu) ## 方法论: 🔍🌍
🖱 点击此处展开 在这个视频中,我们通过将 *usb-to-ttl* 适配器连接到设备板子上的 RX 和 TX 焊盘,获得了一个 IoT 设备的非交互式 shell。 我们使用 `minicom` 获得了一个波特率为 **115200** 的串行 shell。虽然我们无法与设备进行交互,但我们能够查看并捕获 启动日志,这让我们了解了大量关于该设备的信息。 ### 确定 USB 转 TTL 适配器插入时的名称和位置: ``` sudo dmesg -w ``` ### 是时候运行 Minicom 了... ``` minicom -D /dev/ttyUSB0 -b 115200 -C Bootlogs.txt ``` ### 让我们快速分解一下这个命令: ``` minicom -D, --device # Specify the device, typically attached to '/dev/ttyUSB0' in the Linux filesystem -b, --baudrate # Specify the baud rate, typically a value of 115200 and then perhaps 9600 -C, --capturefile=FILE # Open capture file at startup and whatever you get on the screen get saved to a logfile. ``` ### 👢 [启动日志:](https://github.com/DouglasFreshHabian/D00rb3ll/blob/main/Bootlogs.txt) 我在这个仓库中包含了启动日志文件,以便你可以跟随第一个视频进行操作。 我们要做的事情之一是使用正则表达式提取所有的 IP 地址: ``` grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' ``` 有很多重复项,所以我们通过管道将输出传递给 `sort -u` ``` grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort -u ``` 我们还在日志文件上运行了一个自定义的 `bash` 脚本,以自动化执行一些此类手动任务。那个 bash 脚本名为 [Lookup.sh](https://github.com/DouglasFreshHabian/D00rb3ll/blob/main/Lookup.sh),你也可以在这个仓库中找到它。它接受一个日志文件作为 输入,使用上述正则表达式提取 IP 地址,对它们进行排序以去除重复项,并将 剩余的地址打印到屏幕上,同时显示总数。然后它会检查你是否安装了 `geoiplookup`, 检查网络连接,并继续对每一个 IP 地址执行两个命令:`geoiplookup` 和 `whois`。它将结果打印到屏幕上并将结果 保存到文件中。目前,它只处理 IP 地址。也许我们可以为 URL 添加某种类似的功能...
仅从一个日志文件中,我们就了解了大量关于此固件的信息。其中最重要的一点是,它使用的是基于 ***OpenWRT*** 的 Linux 操作系统。 该操作系统的名称是 ***Tina Linux***。如果你还没有这样做,请去我的 YouTube 频道,点击那个点赞按钮,订阅并查看下一个视频... ``` $ sed -n '36,47p' Bootlogs.txt BusyBox v1.27.2 () built-in shell (ash) _____ _ __ _ |_ _||_| ___ _ _ | | |_| ___ _ _ _ _ | | _ | || | | |__ | || || | ||_'_| | | | || | || _ | |_____||_||_|_||___||_,_| |_| |_||_|_||_|_| Tina is Based on OpenWrt! ---------------------------------------------- Tina Linux (Neptune, 5C1C9C53) ---------------------------------------------- ``` ## [黑客攻击 IoT 视频门铃:提取与分析固件](https://youtu.be/fGCQTk4-eE4?si=HizJNpvhUviEKrlf) ### ![黑客攻击 IoT 门铃 - Youtube 缩略图-2.](https://github.com/DouglasFreshHabian/D00rb3ll/blob/main/Graphics/Thumbnail-Video-2.png) 这里的固件是使用 CH341A SPI 编程器和 `flashrom` 实用工具提取的。生成的固件镜像 doorbell.bin 以原始形式共享,使任何人都能够深入研究静态分析、仿真或任何其他形式的研究。 ## 工具: 🛠 ### 软件: 💾 1. flashrom: 用于与 SPI 芯片交互。 2. strings: 用于从二进制文件中收集信息。 3. binwalk: 用于解包和提取固件中的文件。 ### 硬件: 💻 1. [ch341a_spi bios/eeprom spi 闪存芯片编程器](https://amzn.to/3BKu12p) 2. 运行 Linux 的计算机 (kali Linux, Ubuntu) ## 方法论: 🔍🌍 探测闪存芯片: ``` flashrom --programmer ch341a_spi ``` ## 好的,让我们开始动手: ✋🤚 读取并转储固件:
🖱点击此处展开 命令: ``` flashrom --programmer ch341a_spi --chip [Chip Name] --read doorbell-1.bin ``` 最好转储固件两次,以确保你拥有完整的镜像。 ``` flashrom --programmer ch341a_spi --chip [Chip Name] --read doorbell-2.bin ``` 然后比较镜像 1 和镜像 2,如果没有差异,你就知道你获得了完整的、未损坏的镜像: ``` diff --side-by-side doorbell-1.bin doorbell-2.bin ```
## 在开始分析之前,最好先获取镜像的哈希值:
🖱点击此处展开 我们可以使用多个命令行工具来完成此操作,包括 sha256sum、sha512sum 和 md5sum。 获取 md5 哈希: ``` md5sum firmware.bin 5169b9d806903c2df8c07f6d6ec06171 doorbellfirm.bin ``` 获取 sha256 哈希: ``` sha256sum firmware.bin 59df39887e8e72a9d9b0847bbf7a73aa9afacf9fa5ec1a771493160e470f2131 doorbellfirm.bin ``` 获取 sha512 哈希: ``` sha512sum firmware.bin 090ba7fcc514530399953de1e65dfc08851aabf08905eab21d501c0630900d445deda27634b5f70b5fe3861ffa735d001987ece7739f31e84a3e8c2f03a0b178 doorbellfirm.bin ```
## 固件的基本分析: 💻🕵️ 在进行进一步分析之前,收集基本的字符串并识别固件中潜在嵌入的信息: ``` file doorbell.bin # Determine the file type binwalk doorbell.bin # Ran with no options, binwalk will scan the image and print the results to the screen strings -n 10 doorbell.bin # Strings will print any sequences of "human-readable" characters, that are atleast 10 characters long (-n 10) hexdump -C doorbell.bin | head # Looking for signatures in the header ``` ## 解包固件: 🔐🌐 为了解包固件并提取嵌入的文件或隐藏元素,我使用了 binwalk: ``` binwalk doorbell.bin # Ran with no options, binwalk will scan the image and print the results to the screen binwalk -E doorbell.bin # Calculates file entropy which tells us whether the firmware is encrypted or not binwalk -eM doorbell.bin # Extract known file types (-e), and recursively scan extracted files (-M) ``` ## 固件文件系统的基本分析: 🗃🕵️
🖱点击此处展开 如果你想跟着操作,我在这个仓库中包含了 passwd 和 shadow 文件。 #### 我们正在进行 *静态* 分析,稍后在系列中我们将查看 *动态* 分析。 ##### 以下是我们正在寻找的一些东西: + /etc/shadow 和 /etc/passwd 里面的内容 + 配置文件 + 脚本文件 + .bin 文件 + 关键词,例如 admin、password、remote、AWS keys 等 + 二进制文件,例如 ssh、tftp、dropbear 等 + 被禁用的 C 函数 + 存在命令注入漏洞的函数 + URL、电子邮件地址和 IP 地址 + 以及更多… #### 很有趣... 在 passwd 文件中,我们发现了一个拥有 shell 的 *root* 用户! ``` $ cat passwd root:$1$0WlvKUDR$.yqcW5hBKyVJKCHQ4njdB/:0:0:root:/root:/bin/ash daemon:*:1:1:daemon:/var:/bin/false ftp:*:55:55:ftp:/home/ftp:/bin/false network:*:101:101:network:/var:/bin/false nobody:*:65534:65534:nobody:/var:/bin/false ``` #### 接下来我们检查 **shadow** 文件: ``` $ cat shadow root:91rMiZzGliXHM:1:0:99999:7::: daemon:*:0:0:99999:7::: ftp:*:0:0:99999:7::: network:*:0:0:99999:7::: nobody:*:0:0:99999:7::: ``` #### 这甚至对新手来说也很容易破解!我们将使用 `john`,也称为 *John The Ripper*。 我们只关心 `shadow` 文件的第一行。复制该行并将其粘贴到固件镜像文件系统之外的一个名为 hash.txt 的文件中。 ``` $ cat hash.txt root:91rMiZzGliXHM:1:0:99999:7::: ``` 安装 John: ``` sudo apt install john ``` 最后,只需在包含哈希的文件上运行 `john`,无需任何选项: ``` $ john hash.txt Created directory: /home/kali/.john Using default input encoding: UTF-8 Loaded 1 password hash (descrypt, traditional crypt(3) [DES 256/256 AVX2]) Will run 4 OpenMP threads Proceeding with single, rules:Single Press 'q' or Ctrl-C to abort, almost any other key for status Almost done: Processing the remaining buffered candidate passwords, if any. Proceeding with wordlist:/usr/share/john/password.lst tina (root) 1g 0:00:00:01 DONE 2/3 (2025-03-31 08:15) 0.9803g/s 26739p/s 26739c/s 26739C/s 123456..HALLO Use the "--show" option to display all of the cracked passwords reliably Session completed. $ john hash.txt --show root:tina:1:0:99999:7::: 1 password hash cracked, 0 left ```
## 密码: 🗝 root 用户的密码是 tina。 我想可以肯定地说 ***tina*** 来自 ***Tina Linux***,这意味着设备正在使用默认密码。我通过对同一制造商的另一款门铃执行相同的步骤验证了这一点。 密码实际上是一样的,***tina***。 ## [黑客攻击 IoT 门铃:自动化分析](https://www.youtube.com/watch?v=GhEeZATJi2Y) ### ![黑客攻击 IoT 门铃 - Youtube 视频 3 缩略图](https://github.com/DouglasFreshHabian/D00rb3ll/blob/main/Graphics/Video-3-Thumbnail.png) ## 🔍 自动化固件分析概述 在本视频中,我们深入探讨如何使用一套强大的工具来自动化固件分析过程,以节省时间、减少手动工作并发现 IoT 固件中的潜在漏洞。以一款低成本的视频门铃为目标,我们遵循 **OWASP 固件安全测试方法论**,从手动分析过渡到自动化分析技术。 ## 🧰 视频中介绍的工具 Tool | Purpose | Link ---------------- | -------------------------------------------------------------------------- | ----- [linPEAS](https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS) | 检测 SSH 密钥、密码和配置错误 | https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS [firmwalker](https://github.com/scriptingxss/firmwalker) | 扫描提取的固件文件系统以查找机密、密钥、配置、硬编码凭据 | https://github.com/scriptingxss/firmwalker [checksec.sh](https://github.com/petervas/checksec.sh) | 评估二进制安全性(NX, PIE, RELRO, stack canaries 等) | https://github.com/slimm609/checksec.sh [ClamAV](https://clamav.net) | 扫描提取文件中的已知恶意软件、病毒和威胁 | https://www.clamav.net [ChatGPT](https://chat.openai.com) | 协助分析 shell 脚本并解释逻辑 | https://chat.openai.com ## 📄 额外资源 OWASP 固件安全测试方法论:贯穿本系列始终。可通过 Doug 的 [Fresh PDF Library GitHub 仓库](https://github.com/DouglasFreshHabian/FreshPDFLibrary) 获取。 这一集标志着从 **手动分析** 到 **可扩展、可重复的自动化** 的关键转变,使得发现嵌入式设备中的安全缺陷变得更加容易。 ## 贡献与合作: 🤝 #### 这是一个开放的项目,我欢迎社区的贡献和反馈。如果你有关于固件的见解、改进或额外的发现,请随时提交 issue 或 pull request。 ## 持续的逆向工程努力:🥈🏆🥉 ## 这是我们的固件测试清单: 📋 - [x] 信息收集与侦察 - [x] 获取固件 - [x] 分析固件 - [x] 提取文件系统 - [x] 分析文件系统 - [ ] 固件仿真 - [ ] 动态分析 - [ ] 运行时分析 - [ ] 二进制利用 #### 随着我继续对固件进行逆向工程,我将在此记录我的发现和方法。 ## ☕ 支持这个项目 如果 **D00rb3ll™** 以任何方式帮助了你,请考虑支持持续开发:

Buy Me A Coffee