1

当今互联网时代,随着数据泄露和网络攻击的不断增加,安全问题已经成为了一项重要的考虑因素。传统的网络安全策略通常是通过防御外部威胁来保护网络。然而,这种方法已经无法满足当今复杂的安全风险。

相比传统安全策略,零信任(Zero Trust)更能够适应当今需要进行数据保护的多样化风险因素。零信任可视作一种安全框架,它假设所有用户、设备和网络流量都是不受信任的,并要求对所有请求进行身份验证和授权。这使得攻击者在进入网络后仍需要进行认证和授权,从而减少了网络面临的安全威胁。

零信任的实施方案可以基于不同组织的需求和情况而异,以下是一些常见的零信任实施方案:

  1. 多因素身份验证(MFA):使用多种身份验证措施来确认用户身份,例如密码、生物识别、硬件令牌等;
  2. 基于策略的访问控制:根据用户身份、设备、位置和网络流量等因素设置访问规则和权限,以确保只有被授权的用户才能访问敏感数据和应用程序;
  3. 实时风险评估:结合机器学习技术来分析用户和设备行为,检测异常活动和威胁情况,并及时采取措施,例如强制注销会话或暂停访问权限;
  4. 网络隔离(MSG,微分段):将网络分割为多个安全区域,限制用户和设备之间的通信,从而防止攻击者通过横向渗透来获取敏感数据和访问权限。
  5. 数据泄密防护:DLP、云桌面、终端沙箱、安全浏览器、RBI(远程浏览器隔离)都可以实现数据泄密防护效果。其中云桌面的安全性最高,因为数据只落在服务端,完全不会存储在用户设备上,但对带宽影响比较大。

这些方案可以单独或联合使用,以构建一个全面的零信任安全框架,以确保组织和用户数据的安全和隐私。

笔者之前参与过企业级的零信任网络建设,采用的方案是以 NIST 发布的《零信任架构》为指导,并与国内云安全联盟 CSA 成员深入探讨过各种实施细节,这里大致介绍一下当时的思路~

零信任基本组件

  1. 策略决策点(PDP,Policy Decision Point):主要用于控制访问策略的决策。具体来说,PDP 可以根据事先定义好的访问控制策略,决定是否允许用户或设备访问特定资源或执行特定操作;

    • 策略引擎:当用户发起访问请求时,策略引擎从周边各个系统获取用户的身份和安全状态,进行综合分析,然后计算是否允许该用户访问某个资源;
    • 策略管理:负责管理用户的身份凭证和会话创建,根据策略引擎的计算结果,通知策略执行点创建会话或关闭会话。
  2. 策略执行点(PEP,Policy Enforcement Point):零信任假设访问的主题不可信,而且身处的环境不可行,所以主体只有在通过 PDP 的严格校验后,才能访问企业资源。PEP 负责接收用户的访问请求,按 PDP 的指令放行或拦截;

    NIST 的策略执行点是一个抽象的概念,可以指代客户端和网关等组件。NIST 的主体和系统可以指用户,也可以指服务器,还可以指物联网设备。
  3. 策略管理点(PAP,Policy Administration Point):主要用于管理访问控制策略,负责存储和管理访问控制策略,并提供接口供管理员进行配置和修改。
graph LR
    A[主体] --> B[设备]
    B -->|不可信| C(策略执行点)
    C -->|可信| D[企业资源]
    E(策略管理点) --> F(策略决策点)
    C --> F
    F --> C

除策略之外,为零信任的 PDP 提供信息输入和管理支撑功能的信息来源还有:

  1. 持续诊断和缓解(CDM)系统:收集企业资产的安全状态,更新系统配置和软件,如果存在漏洞,策略决策点就可以采取修复或隔离措施;
  2. 行业合规系统:确保企业遵守了各种合规制度,包括一系列相关的策略规则;
  3. 威胁情报来源:为企业提供最新的漏洞、恶意软件、恶意 IP 地址等信息。PDP 可以有针对性地进行分析和屏蔽;
  4. 数据访问策略:定义了谁可以访问哪些数据,零信任架构可以在此基础上基于身份和数据属性进行更细粒度的策略管控;
  5. 公钥基础设施(PKI):生成并记录企业向主体、资源签发的证书;
  6. 身份管理系统:负责管理企业用户的身份信息,包括报名、邮箱等基本信息,岗位、部门等组织架构信息,角色、安全标签、绑定设备等其它相关信息;
  7. 行为日志:汇聚企业系统日志、网络流量、授权日志等。PDP 可以根据行为日志进行分析建模;
  8. 安全信息与事件管理(SIEM)系统:汇聚各个系统发出的安全事件及告警日志,便于零信任架构进行策略响应。

零信任网关

网关是作为 PEP 的存在,分为四层和七层网关,这两套网关属于相互补充的关系。

graph LR
    A[终端] --> B[安全浏览器]
    B -->|TLS| C(防火墙)
    C --> D(七层网关)
    D -->|授信访问| E[公网 HTTP 资源]
    A --> F[UEM]
    F -->|安全隧道| G(防火墙)
    G --> H(四层网关)
    H --> I(七层网关)
    I --> J[内网 HTTP 资源]
    H --> K[其它资源]

四层网关能覆盖更丰富的使用场景,比如 SSH、远程桌面协议(RDP)、文件传输协议(FTP)等,但四层网关的性能不如七层网关,而且暴露了网络层的资源,安全性较低。

七层网关可以在应用层针对 HTTP 请求进行安全策略的控制,对不同业务域名、URL、请求方式设置不同的安全策略,管控粒度也比四层网关更细。所以不能因为所有的七层协议都会过四层,就不做七层网关。

七层网络零信任

image.png

  1. 转发请求
    用户的所有 HTTP 请求都应该由七层网关做转发,首先得把业务系统的域名 DNS 对应到七层网关的 IP 或域名,七层网关收到用户的访问请求后,通过数据包中的域名信息识别出用户的访问目标,然后判断请求的合法性,将合法请求转发给业务系统的真实服务器,并将返回的数据按原路发给用户,这里为了兼容,在数据包中应标记用户的源 IP ,否则业务只能看到网关地址。
  2. 获取身份
    客户端请求中存在 cookietoken,七层网关会提取这些信息进行身份校验。
  3. 验证身份
    网关将访问者的身份信息和其它环境信息发给 PDP,PDP 进行计算后返回验证结果。这里会对网关的性能造成影响,为了提升验证速度,会用到多级缓存。
    多级缓存的好处是能防止 PDP 过载造成雪崩,而且身份的过期时间也有个随机范围,防止出现同一时间大量未认证用户进行认证造成拥挤。多级缓存分为 Lua 本地缓存(L1)和 Redis 分布式缓存(L2),L1 比 L2 的过期时间要短得多,且使用 LRU 淘汰算法防止存储数据过多。
  4. 放行或拦截
    根据验证结果将访问请求转发到真实的服务器或报错页面,或跳转到权限平台。

    由于所有的流量都会经过七层网关,就可以对用户的设备和行为进行动态检测,一旦发现异常,立即拦截。而且用户只会与七层网关直接交互,看不到业务系统的真实 IP,只有验证成功的用户才能接入具有权限的系统,相当于给业务系统罩上了一层防护罩。

七层 PDP 管控粒度

image.png

这里的零信任授权策略基于 ABAC 模型,包括:

  • 主体对象:这里可以是用户身份(岗位、部门、子公司),也可以是物联网设备(设备 ID)或者应用身份(应用 ID);
  • 资源对象:可以是应用(域名、应用 ID、URL 地址),API(API 地址),服务器(IP、端口、网段、地域);
  • 执行动作:最基本的动作就是放行或拦截,还可以是 HTTP Method(GET、POST、DELETE 等);
  • 条件环境:对主体对象的限制,比如用户设备必须是可信设备、必须在办公网环境等。

四层网络零信任

image.png

其实和七层网关类似,但这里有个封装及解码的过程,零信任 Agent(终端组件)将用户身份封装在非 HTTP 或私有协议的数据包里,并通过 TLS 加密,四层网关收到请求后解码 TLS 包,获取数据包内的身份信息交由 PDP 进行计算,决定放行或拦截。

四层 PDP 管控粒度

image.png

与七层 PDP 采用相似的授权策略,这里列出差异:

  • 资源对象:包括 IP、端口、协议;
  • 执行动作:除放行或拦截外,还能针对 SSH 的具体命令做授权。

获取真实源 IP

上面说到后端业务应用获取到请求的来源都是代理 IP,如何获取真实的 client IP 呢,当时有几套方案:

  1. 只针对 HTTP 协议,可以在网关设置 X-Real-IPX-Forwarded-For,将真实 IP 传递给后端应用。但如果是四层协议呢?
  2. 可以通过 NAT 日志获取。但数据量太大,很容易成为计算瓶颈;
  3. 可以使用 HAProxysend-proxy 功能,第一次 socket 连接时,服务端会收到 proxy 协议,改造下 TCP 服务器,就可以拿到客户端 TCP 连接时的真实 IP。但服务端和客户端全部要重新适配,推广困难;
  4. 最终我们选择了 TOA(TCP Option Address)方案,后端应用可以按需通过 SDK 获取到真实 IP。

image.png

client IP 可以放在 TCP Options 字段里。Options 字段最长 40 字节,每个选项由三部分组成:op-kind、op-length、op-data,最常见的 MSS 字段就在这里。 目前 Options 使用的 op-kind 并不多,只需要构建一个不冲突的 op-kind 就可以把 client IP 填充进去。IPv4 地址占用 4 个字节,IPv6 占用 16 字节,填充到 Options 里是没有问题的。
对于 UDP 协议而言,既然有 TOA 就会有 UOA(UDP Option Address),实现方式就是对同一条流的前几个报文插入 UOA。

风险与信任评估

以上的授权策略是静态的,是提前预制好的,在真实的网络环境下存在各式各样的威胁,需要通过一套风控机制来辅助动态授权,使内网更加可信。

大致可以从以下几个方面进行评估:

  1. 身份认证:如果用户通过人脸识别或扫码登录设备,则信任分值更高;通过账号密码登录,则信任分值更低。对于信任分值低的用户访问敏感服务可以触发二次设备认证;
  2. 设备状态:是否安装了 DLP,是否通过了基线扫描,是否将安全补丁更新到最新都可以计算分值;
  3. 威胁情报:对接威胁情报库,对于不信任的 IP 或账号(黑灰产手机号)可以直接拦截交给安全人员专门处理。威胁情报库不一定完全外采,比如可以基于 WAF 或 SIEM 识别一些风险 IP 加入自有情报库(比如曾经有数据泄露或内网扫描行为);
  4. 环境可信度:是否是常用设备,是否存在同一账号多设备登录的行为,浏览器是否常用等都可以。

统一身份认证

在实施零信任方案之后,身份由零信任系统进行统一管理、认证、授权,这样做的好处是:

  1. 身份认证在网络层,未经身份认证的用户无法与业务系统建立网络连接;
  2. 零信任可以统一实施多因子认证,提高所有业务系统的身份认证强度,取代 SSO;
  3. 可以针对敏感业务或有风险的用户进行二次认证,兼顾安全和体验。

准入

graph LR
    A[无线客户端] --> B[接入设备]
    B --> C(IEEE 802.1X)
    C -->|Controlled Port| D[无线网络]
    B -->|Uncontrolled Port| D

无线客户端和接入设备(WiFi 路由器)之间使用 EAPoL 协议(局域网上的可扩展认证协议),并且安装 802.1X 客户端软件,从而使用户能够通过启动客户端软件发起 802.1X 认证。

接入设备和认证服务器之间使用 RADIUS(远程认证拨号用户服务),接入设备为客户端提供入网端口,该端口逻辑上划分为两个 Channel(也叫逻辑 Port),一个用来接收认证信息(Uncontrolled Port),一个用来传递业务数据包(Controlled Port)。

接收认证信息的 Channel 常开,传递业务数据包的 Channel 在未授权的情况下关闭,授权状态可配置,分三种:

  • 自动认证(认证授权)
  • 强制授权(谁来都授权)
  • 强制不授权(谁来都不认)

触发认证方式有两种:

  • 客户端主动触发,向组播 / 广播 MAC 发送认证报文(EAPoL-Start 报文触发)
  • 设备要求客户端认证(类心跳模式),主动向客户端发送 EAP-Request / Identity 报文来触发认证(这个办公设备现在很少见了,哑终端还有一些在使用,因为比较傻)
以上是无线设备终端准入的方式,如果终端通过了准入,零信任系统可以从 RADIUS 日志获取到认证信息,针对常用非敏感系统就无需二次认证。当然,终端上仅有准入是不够的,基于此我们将它升级为 UEM(Unified Endpoint Management,统一终端管理)。

UEM

UEM 可以管理多种类型的设备,包括智能手机、笔记本、服务器、POS 设备等。UEM 通常具有以下功能:

  1. 在办公网络环境下,可信设备无感知入网,非可信设备禁止入网;
  2. 基于设备互信的双因子认证,可以集成动态口令、扫码认证、数字证书等;
  3. 支持对设备硬件信息、系统信息以及软件列表信息抓取,自动生成终端设备指纹信息,实现设备唯一性管理;
  4. 支持终端安全基线扫描,安装了黑名单应用或未安装 DLP 的设备禁止入网;
  5. 对指定的人或者设备,进行冻结、锁定以及挂失等操作,以实现禁止非法设备入网;
  6. 可记录入网行为,包括人员、终端、时间、入网方式等信息,实现对网络准入状态的实时监控。

通过 UEM 可以保障终端可信,敏感数据还能通过 mTLS 双向加密传输,即使遭遇了中间人攻击,拦截流量,由于没有客户端证书也无法伪装成用户与服务器通信。

安全浏览器

对于非职能人员(比如客服、销售、渠道等),往往需要的系统权限很少,但存在通过业务系统访问敏感数据的场景,他们的终端也不可控,往往存在设备共享的可能,如果都安装 UEM 管理成本会很高,所以针对这部分人群,我们基于 NW.js 自研了安全浏览器,相比常规的浏览器具备以下功能:

  1. 浏览器携带自签名的安全证书,零信任网关会对这些浏览器的合法性进行校验;
  2. 强制登录,用户必须携带身份信息访问内部业务系统,且无法访问外部系统;
  3. 所有页面内容无法被复制,而且会打上明水印,防止通过录屏泄露数据;
  4. 用户访问的网页数据和下载文件都会被审计;
  5. 安全功能增强,无法安装第三方插件,对 Cookie 和缓存数据二次加密等。

零信任实施

零信任的推广落地也是个大问题,需要多方目标一致,精诚合作。国际上已经形成了比较成熟的方法来应对,可以按照 5 个步骤来进行:

image.png

  1. 确定防护面
    通过资产盘点发现企业所有的网络设备及数据资产,为之建立清晰的目录,记录数字资产与网络设备之间关系。再由识别引擎,结合识别策略和识别模型,识别出数据中的敏感数据,对数据进行分类分级,并做出综合的分析。
  2. 记录事务流转
    梳理数据的流转路径,和运营所需的网络和数据之间的依赖关系,其实是对企业的业务进行梳理。了解重要数据的流转路径和交互对象,了解企业的数据使用场景,可以分析出重要数据可能存在的风险,有助于后续采取有针对性的技术措施。
  3. 构建零信任环境
    根据重要数据的分类分级信息和安全风险,为访问数据的人、设备和应用等主体规划数据的访问权限,遵循最小权限原则。并设计一个确定的网络架构,以保护其承载的生产服务及关键数据。
  4. 创建零信任策略
    根据重要数据的流转路径和分布位置,在网络中部署零信任产品。创建策略以支持细粒度的执行规则,以便在网络中只允许存在已知或合法的系统通信流量。
  5. 持续监控并维护
    零信任防护能力并不是一步到位的,为了使零信任方案能够发挥预期的效果,需要对整个防护体系的工作状态进行监控,根据出现的问题和业务变化,及时调整策略。监视的结果将成为正常行为的基线,再建立预警机制对各类异常行为作出响应。

总之,零信任是一种新兴的安全框架,它能够提供比传统安全策略更加细致和精确的保护机制。随着企业对数据、网络和系统的安全需求越来越高,零信任将成为一个必不可少的安全措施,以应对未来不断增长的安全威胁,保护组织和用户的利益和安全。


wzhvictor
1.5k 声望257 粉丝

宝剑锋从磨砺出,梅花香自苦寒来