译者:dengxun@360A-Team
来源:360安全监测与响应中心
Digital Security安全研究员
漏洞挖掘者
利用程序开发人员
第一部分: Cisco IOS逆向工程
第二部分: Cisco IOS shellcode编写
1.动机
2.主要难题
3.Image-independet (译者注:非镜像相关性) shellcode
a. 反汇编shellcode
b. Interrupt-Hijack(中断劫持) shellcode
4.TCL shellcode
a. 如何工作?
b. 特性
c. 限制
d. 如何编写?
操作系统
CiscoIOS XE(基于Linux)
CiscoNX-OS(基于Linux)
CiscoIOS XR(基于QNX)
ASAOS(基于linux)
CatOS
CPU构架
PowerPC(Book-E)
MIPS
Intelx86_x64
1.镜像可能使用自解压
2.镜像可能包含如下内容:
a. 加载器(loader)
b. Flash驱动
c. 附加硬件的固件
d. 安全证书
3.Binwalk 可以工作,但它产生了巨量的输出
4.要进行自动分析,你需要编写一个解包工具(unpacker)
如何快速找到process_create()
粘合代码/简单代码/死代码
Libc在哪里?
MagicPeople, voodoo people!
Cisco IOS包含一个GDB服务器,但。。。
它不能工作于常规GDB客户端,因为IOS的RSP协议有一些不同。
你能够:
此版本不包含GDB服务器,但你可以针对目标平台静态编译一个gdbserver然后复制到设备上。复制完之后打开linux shell来操作。
在Linux shell下使用gdbserver附加到进程iosd上(flash:/map at /mnt/sd3/user)。
我们的测试任意经常需要仔细处理Cisco设备的二进制漏洞,测试人员又从公共途径获取所需的shellcode,因此我们需要稳定强大的工具来完成这件事情。
1.没有公开API和系统调用给第三方开发者。系统调用时ROMMON中的接口。
a. 写入字符到控制台
b. 重启
c. 改写confreg等
2.Cisco IOS 二进制文件多种多样
Cisco IOS 是个高度集成的静态大ELF文件,没有任何的模块(类似 *.so这样的)
Signature-based shellcode byAndy Davis
Version-independent IOS shellcode, 2008
不变的代码结构
2.Disassembling shellcode byFelix ‘FX’ Lindner
Cisco IOS Router Explotation 2009
不变的唯一字符串
3.Interrupt-Hijack shellcode byColumbia University NY
Killing the Myth of Cisco IOS Diversity, 2011
不变的中断处理程序
基本技术
优缺点
Interrupt-Hijack shellcode
Two-stage攻击
Stage1:
Stage 2:
优缺点
(译者注:此处图片内容为思科和火眼发现SYNful Knock恶意代码以及该代码介绍等,以下仅翻译部分恶意代码的介绍)
SYNfulKnock 是一个持续型恶意代码,它能让攻击者获得设备控制权并使用修改过的软件镜像破坏了完整性。恶意代码可通过HTTP协议激活多个模块并通过向设备发送构造好的TCP包进行控制。
看起来,SYNful Knock工作原理和Interrupt-Hijack shellcode具有相似性。
1.由John K. Ousterhout, Berkely创造于1980年http://www.tcl.tk
2.解释性语言,可运行于多种平台(支持套接字、文件系统、正则表达,列表等)
3.TCL于2003年开始被Cisco IOS(Release 12.3(2)T)作为通用脚本语言
4.在IOS里面,Cisco为TCL扩展了几个特殊的命令
a. exec – 执行一个IOS Shell命令
b. ios_config – 修改IOS配置
c. typeahead – 模拟用户输入
d. 更多。。。
5.Embedded Event Manager(EEM)的TCL规则
Stage 1:
Stage 2:
目标
目标
1.TCL C API
a. 用于嵌入式
b. 用于功能扩展
c. TCL API
2.使用函数指针表tclStubs 进行平台抽象
3.我们可以通过查找0xfca3bacf查找tclStubs的地址
目标
特点
高级特性
属性
限制