# 未来安全趋势：基于软件定义网的移动防御

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-02-25T01:52:00Z
Canonical: https://wepostx.com/topics/717

> 乌云历史资料归档
>
> **原始作者：** 小飞
> **原始编号：** superkieran-wooyundrops:475
> **原始发布时间：** 2015-02-25 09:52
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

如今的企业内网，大多是都是建立在静态体系上的，所以那些内网攻击框架，工具，也是为静态网络度身定做。如Nmap,蠕虫病毒，DDOS，Cain等。那么如果让我们的防御体系转向，化静为动，会为内网安全带来什么呢？

# 0x01 背景

软件定义网络（SDN）是由美国斯坦福大学clean slate研究组提出的一种新型网络架构。简而言之就是，利用SDN技术将控制逻辑（控制器）从网络交换设备中“分离”了出来。当控制器是可编程的时候，我们就能通过控制器给网络设备的FLOW TABLE(流表)进行修改，让路由设备灵活地达到我们的需求。
而本文说的是基于SDN的MTD技术，这个MTD是MOving Target Defence（移动防御技术）的缩写。翻译过来就是基于软件定义网络的移动防御技术
移动目标防御技术是近年来美国科学技术委员会提出的网络空间“改变游戏规则”的革命性技术之一。今天我要介绍的就是将MTD通过SDN网络来实现。
现在大部分内网扫描工具，如Nmap，x-scan的扫描机制都大同小异，所以，我们今天就以著名的Nmap为例，讲解对抗Nmap信息收集的最新保护策略和技术展望。

# 0x02 SDN下的移动防御技术

移动防御技术（MTD）是相对于传统的静态网络提出的新型防御策略，它的目的在于混淆网络环境，让内网情况“亦真亦假” 最后达到阻止，拖延内网中恶意流成员攻击的目的。
我们来看看一个攻击者(小A)是如何一步步走向MTD布下的迷魂阵吧。
下面分成了三个部分，分别用主机存活性的随机（A），软件版本信息的随机(B)，IP地址的随机（C）来保护这个SDN控制下的内网

## Step A 网络踩点,扫描

在大多数内网渗透过程中，攻击的第一步就是研究攻击面，试图找出弱点和漏洞，这种踩点就包括识别存在已知漏洞的服务，或是扫描整个网段来找出同一个内网中的存活主机（用来传播蠕虫），用基于SDN的移动防御技术可以阻止这种踩点扫描让攻击成果显著减少。
大多是网络扫描工具都是通过ICMP，TCP或UDP扫描来完成。ICMP包的作用用来确认目标是否可连接可到达。TCP,UDP端口扫描能用来识别目标上运行着哪些服务。
这些扫描行为的应答（TCP RST,silent drop 或ICMP 不可达）也可能透露哪些服务被传输设备允许（过滤），另外IP包里面的TTL区段也被黑客用来识别靶机和目的地之间的节点距离。
于是，小A做好内网代理之后 执行了nmap -sP 192.168.1.0/24
基于SDN的路由设备能用来对抗这种网络扫描。 本文中，针对目标的非法通信是能够根据过滤规则被SDN设备发现并丢弃的，然后SDN设施还能生成不同的响应来迷惑攻击者，只有当通信是符合预编译好的过滤策略的时候，才能畅通无阻地经过路由器，要不然，充斥的将是来自SDN的欺骗。
接下来的伪代码向我们解释了SDN网络交换设备是怎样拦截，转发TCP包

```text
#!bash Require: Probabilities PrSA < PrA < PrPA < PrR < 1 hash table action buffer ← NULL while (new TCP packet p is received) do if (p is illegitimate traffic) then if (p.dest port not in action buffer) then r ← random real number ∈ [0, 1] store r in action buffer else r ← as in action buffer end if switch (r) case r < PrSA: respond with TCP SYN-ACK case r < PrA: respond with TCP ACK case r < PrPA: respond with TCP PUSH-ACK with random payload case r < PrR: respond with TCP RST packet default: drop silently end switch end if end while
```
从代码里面能看出，针对每一个非法的TCP连接请求，响应信息是由SDN路由器直接响应的，而并没有到达目标。 这样一来，返回的端口开闭状况，主机存活状况其实完全是随机的，无疑起到迷惑攻击者的作用（试想小A向一个根本没有开启1433的主机进行MSSQL弱口令碰撞的场景）

## Step B 服务版本和系统指纹扫描

为了能够在内网里面能够利用一个已公布的软件漏洞，小A最开始要做的事情无疑是识别目标机上有哪些缺陷服务以及他们的版本（当然如果小A掌握了通杀的0day那就另当别论）。举个例子，小A如果想攻击一个运行这Apache Tomcat 2.x的服务器，他就会发起一个HTTP GET请求到这个服务器的web端口，然后根据服务器的响应，他就能判断服务器是不是跑着有漏洞的apache组件啦。 于是，他执行了nmap -A 192.168.1.x
那么在这种情况下，一旦服务器的组件版本不可判断，攻击面就会变宽，随之而来的结果就是增加攻击成本和攻击事件，让攻击更容易被（IPS）发现。
不同的服务会有不同的技术来发送自己的版本信息，比如HTTP服务器就会在HTTP header的HTTP 200 OK响应中加入自己的httpd守护进程版本。运用基于SDN的MTD技术，我们能让SDN设备防止真实版本信息的泄露，并且替换其成一个虚假的version信息发送给攻击者
下面是一段对抗OS fingerprinting（Nmap）扫描的MTD伪代码

```text
#!bash while (new TCP packet p destined to target is received)do if (p is illegitimate traffic) then if (p has TCP SYN set) then s ← random 32-bit number respond with TCP SYN-ACK and s as the seq# else generate random payload and respond end if end if end while
```
除此之外，还需要提及的是，TCP,UDP 和ICMP的包也总会泄露对攻击产生帮助作用的信息。虽然现代操作系统已经有产生随机响应的机制，但TCP 序列号以及针对某些包的TCP ICMP UDP响应还是能被识别出目标运行的是什么操作系统。比如说一个linux的系统的随机TCP序列码的生成方式是和其他是系统不一样的。上面这段伪代码就描述了SDN的控制器是如何给非法的通信生成随机TCP响应和载荷。

## Step C 随机主机变换（RHM） #核心

其实从上文并不难发现，随机化是移动防御技术一个主要策略和手段，这是由于如果目标的ip在一直变化。或者说目标和攻击者之间的网络策略一直在发生改变，那么攻击难度实际上是显著上升的。所以，我们完全可以把这种随机化上升到ip地址这个层面来看，在这个层面上进行了MTD保护的网络，是可以很好抵御蠕虫攻击和DDOS攻击的。
本文的重点也是在于基于openflow的随机主机变换（OpenFlow Random Host Mutation)下面就简称OF-RHM。
OF-RHM机制说明白一点就是让后端主机的ip看起来是随机变化的，这个随机包括了地址随机和变换间隔随机两个方面。在这样的网络中，那些假定了内王的IP在一段有效时间（比如一个月）内是静态的攻击程序（绝大多数蠕虫病毒，DDOS攻击）都会失去作用。
我们来看看SDN实现ip随机的业务逻辑是怎样的

![原文图片](/media/2016/06/d68a00af1df51ee28cb16f8a1f728f37)

OF-RHM需要两个客观条件：
一，IP变换对于后端主机应该是透明的，也就是说，OF-RHM应该让后端的真实ip（rIP）保持不变，但是主机之间的联系使用的应该是存活期很短的虚拟ip（vIP），vIP在一段间隔时间内就应该变化一次。 由于由vIP->rIP的转换是在SDN控制器所操纵的流表内进行的，而流表是完全有能力建立这种对应关系，所以完全不用担心内网主机之间不能通信这个问题。
二，这种IP变换应具有高不可预测性以及频率，让攻击者在摸清网络环境之前就发生一次变换，使攻击者始终处于迷惑状态。
说了 这么多其实并不够具体，我们用图解法来看看内网中主机通信到底是如何进行的。
根据研究，有两种主机通信办法
一：通过name进行通信
图解很清楚，这里我简单解释下。这里的DNS服务器是有NOX控制器实时更新的，保证v--r的转换

![原文图片](/media/2016/06/44f7d8ac8176bd6f5b8a563330d5d3a0)

二，通过rIP进行通信
通过rIP通信需要某些主机（认证主机）具有指定的几台的rIP（真实ip）所以，这种主机之间的通信一定程度上其实是伪随机的，不过，大可不必担心的，NOX 控制器里的认证过程完全能够规避风险，比如mysql服务器和web之间的认证关系是存储在NOX 控制器里的，所以这里WEB服务器就是认证主机了，然而，它就不能通过rIP访问到具有员工信息的oracle服务器

![原文图片](/media/2016/06/301296df956476c04e054e3c008738e3)

相信你们能从上面的伪代码中看到，其实这些策略中相当重要的一环就是判断策略，来判断哪些是非法访问，哪些是能被服务器放行无阻的。其实判断策略可以有很多种。 比如，可以基于ACL（预设访问名单）STEP C 随机主机变换中的通过rIP通信就是这种；也可以是启发式的，通过行为判断（类似IPS）触发随机机制。

# 0x03 结语

总而言之，用SDN构建出的网络是灵活的，目前华为等大厂商也逐渐在高端路线上考虑SDN路由器（尽管SDN路由器动辄上千，但是对于大型企业来说，安全和功能强大显然更加重要）
传统的静态网络已经走过从ARPNET到INTERNET走过了属于它的几十年，在绝大多数攻击模式都是针对静态内网的今天，拥有创新思维，化静为动地去思考如何保护内网显得尤为重要和关键。虽然SDN和MTD又都是走在前面的美国人所提出的，但从跟上脚步，也不失一种智慧，中国人的智慧。（我们不都是这么干的吗）

## Replies
