当前位置: 首页 > 科技观察

硬件破解破解之固件分析

时间:2023-03-19 18:13:27 科技观察

前言固件分析,一种深入硬件底层(芯片级)的技术破解方法,在系统攻防对抗、硬件破解、逆向分析等实际工作中经常使用到。等。与其他技术破解攻击方法相比,科学有效的固件分析剥去攻击对象的“外衣”,直入“骨髓”,分析其逻辑代码、数据存储、数据类别、数据属性,等,发现的严重漏洞可以对被破解的攻击目标形成“致命级别的杀伤力”。固件分析由“固件”和“分析”两个词组成。看似简单的四个字,要想有效充分发挥其“杀伤力”,其背后的人需要庞大的技术体系支撑。这些技术系统不是孤立自成的,而是环环相扣、相辅相成的;每个技术体系、每个技术点都力求达到熟练甚至熟练的标准。此外,你还需要有过硬的心理素质。探索未知二进制“数据海洋”中的“黑匣子”,需要耐心、细心和信心。同时,你必须面对固件分析的高失败率,因为很多时候即使你能拿到固件,由于固件本身的保护(如加密混淆)或固件分析能力不足等因素,你仍然找不到有效的漏洞。你可能会不知所措、无助甚至焦虑。你得到的只是一个固件文件和一堆冷二进制数据。除此之外没有用。这个时候,你要及时调整心态和思路,继续“战斗”。以上内容对固件分析技术人员技术方面要求很高,技术要点深,心理素质强。浅谈固件分析技术前文提到,固件分析包括“固件”+“分析”两部分。不懂固件,谈何分析?《固件分析》——固件在前面的肯定是原因。考虑到篇幅,这里只对固件进行概览,不做赘述。什么是固件?什么是固件(firmware)?如何理解固件?不同的人有不同的答案,但每一个答案都会反映受访者对固件分析的理解程度。什么是固件?固件是一种软件和程序。什么是固件?固件是写在EPROM(ErasableProgrammableRead-OnlyMemory)或EEPROM(ElectricallyErasableProgrammableRead-OnlyMemory)(百度百科)中的程序。什么是固件?固件是指存储在设备内部的设备“驱动程序”。通过固件,操作系统可以根据标准的设备驱动程序实现对特定机器的操作。比如光驱、刻录机都有内部固件(百度百科)。以上答案都是正确的。我个人的回答是:固件是存储在FLASH/ROM芯片中的二进制数据集,可以被CPU直接或间接读取,可以运行指令/数据。这些指令/数据集基于CPU核心架构。及模型,高级编程语言(如C、C++等)由相应的编译器、链接器、加载器生成,并通过相应的编程器将指令/数据集烧写到相应设备中的存储芯片中.之所以区分固件和软件程序,是为了强调固件关注的是运行在智能设备、嵌入式设备、工控设备中的程序,而不是PC、服务器、手机内部的程序(但关注点不是绝对的,在很多情况下手机中的程序也被称为固件)。固件的位置存储在设备的FLASH/ROM芯片中,但在提取后以文件的形式呈现在固件分析人员面前。固件文件的格式不固定,因厂商和设备不同而不同。目前常见的固件文件格式包括:hex、bin、elf、axf、txt、ulmage等,对于固件分析人员来说,熟悉这些固件文件的内部编码规则、数据块定义等细节尤为重要,否则拿到固件你就不知道了,你也分析不了。固件的由来——编译、链接、加载对于固件,不仅要知道它是什么很重要,还要知道它为什么重要。虽然不同的固件有不同的格式和代码,但它们的来源大体相同。它们都是由高级编程语言编译而成。通过链接和加载生成,编译、链接和加载这3个步骤非常重要。它们是有效提高固件分析成功率的重点和难点。固件文件的形成机制、固件文件的内部函数结构、内部指令/RAM/数据分配机制、固件启动机制等核心概念的深入理解是非常有益的。但是,只有深入了解这些固件相关的知识,才能充分发挥固件分析的破解攻击价值。固件运行机制在熟悉了什么是固件和固件的由来之后,这里,就需要熟悉一下固件的运行机制了。不同类型的设备内部固件操作细节不同,但它们的操作机制大体相似。一般比较常见的运行机制是:poweronboot->uboot->cos->applet,对于没有操作系统运行的机制一般是:poweron->boot->applet或者poweron->applet。这里只是简单的解释一下。在实际的固件分析过程中,最好了解每一步的每个函数和每一行代码的作用,这样才能充分发挥固件分析的破解攻击价值。固件分析其他必要技术固件分析离不开电路/器件分析,因此需要具备必要的数模电子学知识;典型的固件分析涉及固件提取、IO控制查询、数字接口驱动、中断唤醒、工作模式切换、外围设备的驱动等,都离不开电路/器件分析。固件分析需要熟悉常用的数据通信协议/协议簇(如TCP/IP协议簇、CAN总线)。它使您在分析固件时更加强大和得心应手。固件分析需要熟悉主流CPU/MCU处理器的内部架构、内部硬件模块的工作原理(DMA、虚拟内存管理、中断处理、工作模式管理、外设模块等)、内部存储和运行机制等.,和熟悉/能够阅读和理解主流的CPU/MCU汇编语言(寄存器级操作)也很重要。分析固件时,每个函数的初始化、数据处理、代码跳转、函数执行,都会让你身处险境,清晰思考。固件分析,熟悉相关的加解密算法、安全通信、认证机制架构/原理,会让你少走很多弯路,懂得权衡利弊,避开隐藏的坑,提高固件分析的效率。固件分析,学习使用相关工具(包括但不限于:IDAPro、binwalk等)进行分析,不为固件分析做准备。固件分析,熟悉主流嵌入式操作系统和内核(如linux、android等)的工作原理、数据存储分配细节、权限管理、进程隔离保护/运行机制等难度很大。它们不能一夜之间学会。这需要时间、毅力,更重要的是智商。但是一旦掌握了这些知识,分析类似的固件就非常困难了。漏洞很容易被发现,而且是高危漏洞。当然,一旦到了这个级别,我个人认为已经是大牛级别,hacker级别了。后记随着信息安全的普及,固件分析不仅受到黑客爱好者的青睐,厂商和设计人员也越来越重视固件保护,这无疑会增加固件分析的难度,降低固件分析的成功率。正是由于这种矛与盾的竞争关系,推动了网络技术的不断进步,视步调而定,走慢者注定有被攻击被破解的风险。