1. 攻击面在安全攻防中的价值
洛克希德-马丁公司的网络杀伤链(Kill Chain )模型描述的攻击过程一般包括7个阶段:侦察跟踪、武器构建、载荷投递、漏洞利用、安装植入、命令与控制、目标达成。侦察阶段主要实现对攻击目标(如服务器,公司网站,内网等)的各类信息收集,其中就包括通过各种技术手段进行主机和端口扫描,获取存活IP地址、系统类型、开放端口、服务版本等基本信息。
安全防守方一般基于传统的纵深防御理念,在物理、网络、系统、应用、数据、流程、人员管理等不同维度使用技术和管理手段,对各种攻击行为进行威慑、预防、检测、响应和恢复。针对攻击过程第一阶段的扫描行为,安全防守方可以采取的措施包括梳理并减少对外暴露的攻击面,进行系统和应用的安全基线加固,补丁更新、banner隐藏、日志和网络流量审计等手段,一方面减少和降低攻击者可以发现的风险资产数据,同时对早期的攻击行为及时进行预警。
根据实战经验,攻击者在侦察阶段收获的目标资产数据量多少和风险高低,某种程度上决定了后续攻击行动的难易程度和最终的攻击成果。一些HW行动中,经常会看到红方人员早期的拔线操作,其最终目标就是尽可能减少蓝方可以获取到的攻击面风险资产数据。因此从某种方式来看,最初的攻击面扫描和安全防护,对攻防双方来说有点像争夺滩头阵地。对于攻击者来说,需要尽可能拿到更多的攻击面信息,以便下一步开展武器化攻击活动;对于防守方来说,需要尽可能通过各种方法减少暴露的攻击面信息,以在攻击初期就可以截断攻击者后续的各类攻击行为。
我们可以试着想象一下这种场景:攻击者在攻击第一阶段进行资产漏洞扫描时,如果防守方突然通过某种方式给信息资产穿上了一层隐身衣,会是怎样一种情形?攻击者会发现无论是fping、nmap、zmap又或者是openvas、nessus、wvs等各种扫描工具均无功而返,根本不能和想攻击的服务器或应用建立任何的网络层连接,之前预先准备好的各种攻击工具、POC和0Day漏洞等招数全部落空,一脸郁闷吧。尽管现实中的实际情况不会这么绝对,但如果防守方可以把关键信息资产(如对外开放的公网服务、内部办公应用系统等)进行统一隐身管理,必然可以大大降低公司整体信息资产风险,显著提升公司安全防范能力。
这种隐身方法,除物理断网外,现有的一些安全技术也可以达到类似的攻击面隐藏效果,如Port-knocking、SPA及SDP解决方案。
2. 隐藏攻击面的几种方法
2.1. 端口敲门技术(Port-Knocking)
端口敲门是一种通过服务器上关闭的端口来传输约定信息的方法,从而在用户访问受保护服务之前对用户进行身份验证,主要用于对公网开放的服务如sshd进行安全防护。
Port-Knocking实现原理介绍
- 主机防火墙默认规则是DROP所有请求包,从外网来说,没有任何方法可以确认服务器是否存活(备注:因为DROP规则不会发送响应包,从而避免扫描器根据响应包确认端口的开放情况。REJECT/DENY规则会发送ICMP_PORT_UNREACHABLE返回给客户端,扫描器如nmap可据此判断出端口状态是filter,从而暴露服务器本身是存活的,端口是开放的,但禁止扫描器IP访问);
- Port-Knocking守护进程运行在服务端,并在主机防火墙DROP数据包时进行分析,如果某个源IP发送的一系列TCP或UDP数据包是按照服务端预先设定的特定顺序访问了对应的一组TCP或UDP端口(表示敲门暗语正确),则knockd进程自动调用iptables命令执行配置文件中预设的对应规则,如增加一条允许该IP地址访问服务器SSH端口的规则。如果数据包不满足服务端预设的端口访问顺序,则守护进程不会执行任何操作。
- 服务器是否在线对攻击者来说不可感知
- 漏洞服务不会对外暴露
- 建立多层防御体系
2.2. 单包授权技术(Single Packet Authorization)
SPA可以说是下一代的端口敲门技术,和Port-Knocking实现机制不同的是,SPA把敲门所需要的信息即授权包PA(Authorization Packet),编码在单个数据包内,然后发送给服务器的任意端口。
SPA传递的授权包信息类似:
AID : 发送数据包的客户端唯一ID,明文传输以便服务端根据该ID查到对应的解密密钥
PASSWORD : 客户端口令(和服务端共享)
NEW_SEED : 下次事务的新种子
RANDOM : 客户端发包前生成的随机数,避免重放攻击
MD5_HASH : 上述值的hash计算结果
和Port-Knocking技术相比,SPA具有如下优点:
- SPA仅需发送一个数据包,而Port-Knocking需要发送多个敲门数据包 (数据量大小)
- Port-Knocking数据包到达服务端顺序不一致时会导致敲门暗语错误从而认证失败,SPA不存在类似问题
- SPA数据包中包括一个一次性随机字段,可以避免重放攻击(重放攻击)
- SPA传输的数据是加密的,而Port-Knocking数据包中包括了明文端口敲门顺序(sniffer)
- 通过修改数据包源IP地址,攻击者可以破坏Port-Knocking认证过程,但是SPA服务器仅允许访问SPA载荷中最初加密的IP(避免MITM)
随着云时代的来临,2013年云安全联盟(CSA)提出了软件定义边界(Software Defined Perimeter,SDP)的概念,并于2014年发布了《SDP标准规范1.0》,为各安全厂商构建自己的SDP产品提供指南。
SDP标准的核心仍然是通过SPA协议对后端服务实现隐身后的防护,但扩展了SPA的应用场景。通过引入SDP控制器,可以支持多种身份认证和授权服务,通过连接接受主机(AH)的网关模型,可以对网关后的多台服务器或应用服务进行隐身和防护,从而在Iaas、Paas、SaaS、远程办公、私有云、混合云等场景下实现信息资产的隐身保护。
SDP技术方案的真正落地涉及到管理人员的安全认知改变,SDP产品性能和功能完善,IT基础架构及应用使用场景的身份认证和授权机制的改造,目前主要还是以取代远程VPN访问、内办公平台统一安全管理等内部应用场景。有关SDP的介绍和其他应用场景可参考之前发布的《零信任和软件定义边界》一文。
目前在其他行业如游戏行业,零信任或“连接之前首先进行身份验证”的安全理念也有一些实践成果,通过游戏客户端内嵌专用sdk和游戏服务端建立连接并进行合法性验证,可有效预防和降低DDOS和CC攻击,如阿里云游戏盾,缔盟云太极盾等。
可以肯定的是,基于ZTNA的颠覆性安全理念,几年后云计算、IOT、工业控制、卫星通信等多个行业必将有更多的SDP实现方案和案例落地。
2.4. 实现工具
- 服务隐身,如iptables recent模块,knockd项目,fwknop项目
- 网段内服务和应用隐身,SDP产品厂商如deepcloud,Pulse Secure等
- https://zeroflux.org/projects/knock knockd项目
- http://www.cipherdyne.org/fwknop/ fwknop项目
- https://ir.lib.uth.gr/xmlui/handle/11615/48775
- http://www.securitygeneration.com/wp-content/uploads/2010/05/An-Analysis-of-Port-Knocking-and-Single-Packet-Authorization-Sebastien-Jeanquier.pdf