浅谈一下如何挖掘一个IOT漏洞

目前我自己本身也是对IOT比较感兴趣,在一点点的学习,目前都是从最基本的路由器开始学起,也算是小有心得,故写此文,希望能够帮助到大家。

说在前面

首先我们要了解一下有哪些漏洞类型会出现在路由器里:最常见的漏洞主要有这么几个(这些是我目前所了解的,后续随着学习深入会逐步增加)栈溢出漏洞,任意命令执行漏洞,信息泄露漏洞,任意文件上传漏洞等等,需要掌握的技能主要有计算机系统基础,计算机网络的基本知识,需要了解一点pwn和web的攻击手法,另外,由于物联网固件大多采用ARM或者MIPS架构,而日常使用的电脑大多是X86,X64架构,所以需要你不仅对X86,X64的攻击利用链比较熟悉,还需要掌握ARM和MIPS的攻击调用链。同时,由于这些固件的代码量往往极其庞大,你需要有一定的代码审计能力,能够选择性的屏蔽无关代码,精准的找到核心漏洞代码。

学习路径

个人认为,首先需要做大量的复现,这些复现的目的是为了让你知道IOT究竟会有怎样的漏洞,这些漏洞通常都长什么样子,另外,最好是能够先针对某一种服务进行系统的学习,在路由器中,有很多开源的路由器服务,如goahead,httpd,jhttpd等服务,首先可以选择一种服务学好,这样其他的服务就能触类旁通了,就像先系统学习过c语言,再来学python就会感到很轻松一样。当你对路由器这一类产品有了一个比较深入的了解,并且自己挖到过CVE之后,你就可以进一步深入学习其他物联网设备的漏洞挖掘技巧了。

挖洞需要用到的工具

看我主页的另一篇博客

挖洞的思路

拿到一个固件,要先看看这个固件是干嘛的,并且要大胆猜测其功能,IOT设备的漏洞挖掘很大程度上要靠一个“猜”字,要根据经验猜某段代码对应什么功能。比方说一个路由器,我们可以猜测他有如下功能,最开始的你需要登录路由器,所以肯定有初始化的登录程序,包括配置ddns,设置拨号上网等功能,你需要在先前就对这些功能有所了解,这样才能在逆向分析的时候更加容易的才出这段代码是干什么的。

接下来你需要对二进制程序进行逆向分析(由于php等web漏洞我不是特别熟悉,所以我这里以我比较熟悉的二进制程序漏洞为例进行分析),首先你要查看一下这个固件的启动项,这通常存储在/etc/init文件夹底下,查看启动项的目的是为了知道这个服务都会运行哪些二进制程序,这些程序通常是goahead,httpd,jhttpd中的某一个,接着我们要对这个程序进行一个初步的逆向分析,利用IDA打开程序查看主函数,要能够大概确定每个函数是干嘛的,比如配置网络的函数,返回url的函数,异常检验的函数,负责重启的函数等等,接着需要搜索可能的危险函数,比如system,read,get等函数,这些函数可能会造成任意命令执行或者缓冲区溢出等漏洞。

倘若你真的发现了某个地方确实存在漏洞,那么接下来你需要做的是对这个函数的调用链进行溯源分析,要找到到底构造什么样的payload来触发这个payload,这通常也是最难的一步,有的时候甚至还需要用gdb动态调试,另外更有甚者,有些函数是从别的文件的被调用的,这些利用链就更增加了IOT固件分析的难度。

当你成功的完成了以上的步骤之后,那么恭喜你,你可以去提交CVE了,不过在此之前,记得优先提交CVND!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇