新型思科路由器后门SYNful Knock

新型思科路由器后门SYNful Knock

思科路由器在国内有多大的使用量?做过系统集成的知道,在百度搜索中也可以知道,那思科路由器出现后门,可能影响其大多数型号,你惊慌吗?做过网络管理的都知道,路由器可能很长时间都不会升级其系统固件,攻击者拿到这些后门利用方法,就可以长期使用,你害怕吗?

影响范围涉及4个国家及常见型号

通常来说,思科路由器的植入后门以前经常被认为是理论可行或较难实现,但近日有国外安全公司Fireeye发现这种针对路由器的植入式后门正悄然流行,涉及Cisco 1841/Cisco 2811/Cisco 3825路由器及其他常见型号。目前发现在乌克兰、菲律宾、墨西哥和印度这4个国家中正有至少14个类似的植入后门在传播。

通过弱口令登录替换思科路由器固件

这个后门是通过修改思科路由器的固件植入恶意代码实现的,类似病毒感染正常文件。攻击者需要通过其他途径将这个后门固件上传或者加载到目标路由器上。目前看攻击者并没有利用任何的0day漏洞来上传固件,而是利用路由器的缺省口令或者弱口令来登录路由器,然后上传后门固件,替换原有正常固件。只要路由器管理员不升级固件,攻击者就可以持久获得对路由器的长期控制。

将僵尸木马的手法移植到路由器上

这个后门植入了一个万能后门口令,攻击者可以利用这个后门口令通过telnet或者控制台登录路由器。它还采用了动态加载模块的技术,可以非常方便的随时加载新的恶意功能模块,在Windows/Unix系统下的僵尸木马网络中这已是很常见的技术了,但用在路由器后门中还是比较少见。每个模块都可以通过HTTP协议来更新、加载和删除。

这个后门被命名为” SYNful Knock”,可能是因为后门的网络控制功能(CnC)会通过一个特殊的TCP SYN包来触发。

思科路由器植入后门的技术细节

(由于尚未获得真实样本,本章节技术细节均来自FireEye公司的相关技术报告,仅供参考)这个后门通过篡改一个正常的Cisco IOS映像文件来植入恶意功能,主要的修改操作包括:

  • 修改所有translation lookaside buffer (TLB)的属性为可读可写(RW)

正常IOS映像文件中,有些TLB的属性是只读的(RO),而此后门会将所有TLB的属性都设置为可读可写(RW),这可能是为了实现通过Hook IOS函数来加载模块。如果TLB属性不是可读可写(RW),那对缓存内存页的修改就不能被同步到内存中原始内存页中。可以通过” show platform”命令来检查TLB的属性情况,如果发现全部TLB属性都被设置为RW(如下图所示),那可能意味着系统被植入了恶意后门。

  • 修改一个正常的IOS函数,初始化恶意软件

据信是修改了一个与进程调度相关的函数入口,将其指向一段恶意代码,这段代码完成恶意软件的初始化后,再执行原有正常函数功能。选择该函数是因为其在每次系统重启时都会被调用,这样攻击者就可以持续获得控制权。

  • 用恶意代码重写一些正常的协议处理函数

为了防止映像文件大小发生变化,此后门会直接用恶意代码替换原有的一些正常函数的代码。

  • 用恶意代码需要使用的字符串重写正常函数用到的字符串

同样为了防止大小变化,攻击者还会将CnC通信时用到的一些字符串直接替换正常函数使用的字符串。这样导致在执行一些正常IOS命令时,就可能返回一些如下的异常结果:

后门口令

攻击者在后门映像中植入了一个万能口令,保证攻击者可以绕过正常口令限制随时登录系统。这个后门口令可以通过控制台、Telnet、enable(提升到管理员时)时输入,一旦匹配则赋予攻击者管理权限,否则就会继续正常的口令检查过程。目前看SSH和HTTPS登录时没有设置后门口令。

网络命令和控制(CnC)

此后门还使用了模块化方式来完成命令控制,可以随时将恶意功能加载到路由器中执行,这在路由器后门中还是比较少见的。这大大增强了恶意软件的可扩展性。一旦路由器重启,所有加载的恶意模块都会消失,攻击者需要重新上传恶意模块。

攻击者通过发送一些特殊的TCP报文来开启CnC控制,即使路由器管理员设置了一些过滤策略,后门仍然会接收并处理这些报文。

进行CnC控制的主要过程如下:

1.首先攻击者会发送一个特制的TCP SYN报文到已植入后门的路由器的80端口。这也是路由器HTTP服务器的默认端口。这个报文的SEQ序号和ACK序号的差值必须是0xC123D,ACK序号不需要一定是0。 2.后门会响应一个TCP SYN-ACK报文。报文格式满足:

  • ACK序号和SEQ序号差值变为0xC123E
  • TCP选项被固定设置为: “02 04 05 b4 01 01 04 02 01 03 03 05”
  • TCP紧急指针设置为0x0001, 但紧急标志位URG未置位
  • SEQ序号拷贝自第一个SYN报文中的ACK序号,而通常情况下,SEQ序号是随机生成的。

3.在三方握手完成后,控制端会发送下列命令报文:

  • PUSH和ACK标志位置位
  • TCP头开始偏移0x62字节处写入一个字符串”text”
  • TCP头偏移0x67字节处开始是CnC命令数据

命令格式如下:

命令长度(4字节)

命令数据(异或)

命令校验和(4字节)

 

命令数据部分是正常命令数据与一个静态串异或的结果。

4.植入的后门会返回包括命令执行结果的正常HTTP服务器响应数据,但执行结果并没有进行编码或加密处理。响应数据如下:

CnC命令格式

后门支持5种控制命令,包括显示模块状态、为模块加载分配内存、加载模块、激活模块、卸载模块,最多可加载100个模块。

每个命令消息都以8个字节开头,前4个字节都置0,后四个字节是命令编号(0到4)。每个命令编号的含义见下表:

后门支持5种控制命令,包括显示模块状态、为模块加载分配内存、加载模块、激活模块、卸载模块,最多可加载100个模块。

每个命令消息都以8个字节开头,前4个字节都置0,后四个字节是命令编号(04)。每个命令编号的含义见下表:

编号

描述

0

显示所有加载模块和当前状态。

响应格式如下:

模块编号(4字节)

模块状态代码(4字节)

 

状态代码如下:
  00 –
内存已分配

  01 – 模块已加载入内存

  02 – 模块已激活

1

为要加载的模块分配内存。

请求命令提供2个缓冲区长度,第一个缓冲区大小是可执行代码的大小,第二个可能是配置和存储区的大小。后门会根据这两个长度分配缓冲区,并返回缓冲区地址。

请求格式如下:

模块ID4字节)

第一个缓冲区长度(4字节)

第二个缓冲区长度(4字节)

 

响应格式如下:

第一个缓冲区地址(4字节)

第二个缓冲区地址(4字节)


命令执行后会设置该模块状态为0.

2

将可执行代码和数据加载到已分配的内存中。

请求格式如下:

HOOK数据(0x80字节)

第一个缓冲区长度(4字节)

第二个缓冲区长度(4字节)

第一个缓冲区数据

第二个缓冲区数据


命令执行后会设置该模块状态为1.

3

激活一个已加载的模块。

后门映像会解析命令2中发送的HOOK数据,并在IOS寻找合适的函数进行HOOK,然后执行模块代码。

 

请求格式如下:

模块编号(4字节)


命令执行后会设置该模块状态为2.

4

卸载一个模块。

后门映像会释放已经分配的内存,并设置其状态为0

 

如果一个命令消息的前4字节不是0,则前4字节会被认为是一个模块ID,这个模块ID对应的代码会直接被执行。

防护方式

如果一个命令消息的前4字节不是0,则前4字节会被认为是一个模块ID,这个模块ID对应的代码会直接被执行。

防护方式

常见的国外厂商防护方式

既然有漏洞,那就打补丁,升级!但在实际的操作环境中,执行会遇到挑战:

  1. 安全需求弱的小客户, 难度特别大
  2. 安全需求强的小客户, 可执行,但是整改周期特别长
  3. 安全需求弱的大客户, 难度特别大,因为要涉及到整体业务链路停机
  4. 安全需求强的大客户, 可执行,但是整改周期特别长,牵涉面广

绿盟科技推荐的防护方式

绿盟科技推荐用1个基准3个阶段来进行落地防护。1个基准,把风险面转化为风险点;3个阶段,分为设计及实施、试运行及验收、长期运维。各部分内容在项目实施过程中细节较多,下面仅提要说明。

设计、实施

  1. 统计系统范围内cisco设备的数量以及需要纳入统一策略管理的其他厂商的设备集合,实现 风险的识别
  2. 设计时采用区域隔离:管理域与生产域严格隔离(VLAN技术和防火墙),实现风险的控制
  3. 管理域实现堡垒机统一纳管,并且在堡垒机中设定相关口令策略, 实现风险的转移
  4. 设计选型时,在稳定的基础上使用较为新的IOS固件并做MD5校验, 实现风险的削弱
  5. 设计网络入侵检测及防护设备(NIDS/NIPS)对此事进行检测,并且把对应异常网络事件进行每日监控, 实现风险的监控
    • 从整个SYNful Knock事件过程中,有三个重要阶段事件:弱口令猜测,后门外链,后门命令控制。NIPS不仅仅能够针对每一个阶段单独防护,同时能够建立起逐层防护的机制;
    • 首先是弱口令,NIPS中弱口令规则能够进行Telnet弱口令事件告警,提示管理员关注账号弱口令问题,同时也能够阻断暴力猜测行为;
    • 其次后门外链,通过检测TCP会话建立过程中特征,阻断后门的通信连接;
    • 最后后门命令控制,需要使用CnC或者TCP方式进行命令控制,NIPS在检测流量时,对控制命令进行检测,达到阻断控制的效果。即便是植入了后门,阻断命令发送无法对其命令控制
  6. 选型考虑国产设备, 实现风险的规避

试运行、验收

  1. 做基础安全评估(漏洞扫描、基线核查、内网渗透测试)
  2. 重新规整所有用户口令;
  3. 测试入侵检测日报的可用性;

等等……

长期运维

  1. 新交维的系统:按设计、实施规范定期作为维护;
  2. 老系统:

    • 快速处理: 搭建TFTP服务器 强制备份所有线上IOS镜像,并且对已经备份的IOS进行与官方下载IOS镜像进行md5校验;
    • md5校验成功的处理方式:参照 2.2
    • md5校验失败的处理方式:
      • 本着安全原则,清除IOS已经不保险了,建议采用替换的方式把有问题设备替换下来;
      • 有问题的设备返厂检测吧,当然也可以考虑将其做成蜜罐;
      • 建议做一次网络区域内的大排查,不然很危险哦;
    • 按新系统设计标准,对管理域进行整改。
  3. 分析 每日入侵检测报告(木马)

小结

本文主要技术细节部分来自于FireEye公司的一篇技术报告,其大致的过程就是这样的

  1. 寻找能登录的cisco 设备(通过暴力破解、社工、弱口令等方式),能进去是前提;
  2. 传一个带马的IOS上去;找机会重新加载新的IOS,同时痕迹清理;
  3. 然后加固路由器,防止被其他人拿走这个”成果”;
  4. 开始植入木马等恶意程序,然后实施攻击动作,比如JS劫持等

从报告披露的信息来看,针对Cisco路由器的后门映像植入技术已经逐渐从理论走向实用化,后门功能从简单的万能口令已经扩展到模块化远程加载任意恶意代码。由于路由器位于网络的核心出入口位置,一旦攻击者可以在路由器中执行代码,意味着攻击者可以对经过路由器的网络流量进行各种操作,而不仅限于路由器原有提供的功能,从而导致更大的危害。

参考链接:https://www.fireeye.com/blog/threat-research/2015/09/synful_knock_-_acis.html

英文版本: https://blog.nsfocus.net/synful-knock-backdoor-targeting-cisco-routers/

Spread the word. Share this post!

Meet The Author

Leave Comment