- A+
3. 嵌入式操作系统:嵌入式linux,VxWorks,FreeRTOS,Windows XP Embedded,Windows CE,RTX,uCLinux等等,这一块跟嵌入式操作系统相关。
4. 非操作系统(这里特指非智能设备):如照相机,摄影机,洗衣机,电子玩具,键盘,鼠标,摄像头,话筒等等电子设备,还包括有仪器,电子卡,SIM卡等等。
前两类设备,对于熟悉 Android 和 iOS 的朋友应该问题不大。看雪这两个版块有很多非常好的文章,感兴趣的可以到这两个板块进行学习。这里我主要讲的是后两类设备的入门学习。这两类设备需要嵌入式开发相关的知识和单片机相关的知识作为准备。
对于嵌入式系统大部分都是 POSIX 标准,这一块儿的入门,大家可以先学习 Linux,然后学习嵌入式操作系统移植,入门应该不难,对其进行安全研究和逆向分析和传统方式也差不多,毕竟都是基于操作系统的,学习思路很相似,只是逆向这一块儿涉及的汇编会不一样。
对于那些非操作系统类型的设备,安全研究和逆向分析相对来说要难一些,因为这些设备多半都是封闭式或者半封闭式的,基本上都需要拆开封装,分析电路板并对电路板进行测试分析。这方面入门主要以单片机学习来入门会走得更远。我们可以先学习单片机再学习嵌入式,也可以反过来,无所谓。这两个方面都需要了解硬件,只是着重点不同而已。
2. 开源硬件DIY:开源硬件资料齐全,需要一点硬件方面的知识,但主要考验动手能力和排错能力,比如树莓派(现在大量系统都主动来支持树莓派,特别是3,潜力无限),Ardurino,Atmel Xplained(PRO),CooCox开发工具,伽利略开发板等等;还有专门的机器人开源项目(DFRobot,TurtleBot等),四轴飞行器(3DR Solo,MikroKopter,Crazepony等),3D打印机(Ormerod,Mamba3D,Ultimaker等)等等。
3. 固件逆向工程:逆向固件,发现固件级别的安全问题,比如华盛顿大学和加州大学圣地亚哥的研究员通过利用蓝牙固件漏洞获取到了一个汽车远程信息处理单元的远程代码执行权限。
4. 固件代码植入:向固件中植入恶意程序,比如方程式组织的硬盘固件病毒,这一块儿可以作为个人兴趣安全研究,比如今年blackhat上有一个议题就是向PLC中植入病毒,大家可以关注一下。
5. 固件DIY:国外很多人玩,比如把鼠标改造成扫描仪,将背光键盘改造成贪吃蛇游戏等等,后面我会将这些文章分享出来,介绍分析方法和实现原理。
6. 硬件DIY:自己diy硬件,这一块需要你具备硬件方面的知识更多一些,自己设计电路图,自己焊接,需要一些手工技能,这方面该板块后续也会引入一些帖子来介绍方法。
7. 破解:比如各种卡的破解等。
物联网的玩法简单些,无需关心硬件,传统的渗透测试和模糊测试的方法同样适用,更深入点的可以 dump 出固件,这些固件(嵌入式系统固件)都是以一定格式存放的嵌入式操作系统及其文件系统,只需要提取出其中关心的程序(通常是 ARM 和 MIPS 汇编的程序)进行分析来发现安全漏洞。
当然你可以挑选最简单的来玩,比如很多智能家居设备,比如智能开关,智能冰箱,智能电饭煲等等这些智能设备都会支持 Android 和 iOS 进行控制,你可以直接分析测试这些 app 是否存在一些安全问题。
学习单片机更重要的是去学习与外围设备的通信,接口连线,调试方法等等。1) 外围设备包含LED灯、A/D(D/A)转换器、键盘、数码管、液晶屏、传感器、红外线、无线电、电机等等。
2) 接口包含USART、RS232、PCI、SPI、I2C,USB等等.
如果你了解了这些,那么基本上就有一定基础了。
当然并不是所有外设你需要完全学会,你可以在研究到相关外设时再查资料学习。你可以把精力放在逆向上,一边写代码一边逆向,了解单片机从加电复位到你自己的代码执行这个期间的过程搞明白。
如果你不学习单片机,直接进行物联网方向的安全分析也是没有问题,这方面实际只要找到了攻击面,就好入手,但是高手都是会了解得更深入才能最大限度的扩大攻击面。
2. 汇编知识,实际上对于8051,avr,arm,mips这些处理器架构,大家不必要去纠结汇编问题,当你研究某一个平台时有一本参考书籍就可以了,这些都是公共平台。
3. 电子电路,这一块不需要太过于深入,能够简单识别电器元件以及其功能,能够识别框图,读懂一些芯片图,引脚和接口图就可以。主要当你拆解一款设备后,你能够认识那些是控制器,那些是flash,以及找到datasheet后能够看懂芯片说明图。
4. 熟悉一些工具的使用是必备的:
1)调试工具比如 JTAG/SWD 仿真器,OPENJTAG, 使用usb转串口工具等等,如果能够准确找到相关MCU相关的编程器的话就更好。这方面在后需要的文章中会给大家介绍,如何使用OPENOCD来进行固件调试,以及如何直接取出FLASH并且读取FLASH数据。
2) USB协议分析工具如USBPcap,Wireshark.这些工具在该设备提供升级但是你又无法进行调试时用来分析USB数据包,你可以分析升级固件程序的机制,然后使用libusb库来编写自己的固件dump工具和擦写工具。这块后续通过分析文章给大家介绍。
3) 有一定基础后可以自己DIY调试仿真器,FLASH读取器等,按照自己的需求进行设计,现在国外很多爱好者都是自制的。