实施高度安全的远程访问概念

继续有关组织主题的系列文章 远程访问 VPN 访问忍不住分享一下我有趣的部署经验 高度安全的 VPN 配置。 一位客户(俄罗斯村庄里有发明家)提出了一项不平凡的任务,但挑战被接受并创造性地实施。 结果是一个有趣的概念,具有以下特征:

  1. 终端设备防被替代的几项保障因素(对用户严格约束);
    • 评估用户的PC与认证数据库中允许的PC分配的UDID的符合性;
    • 通过 MFA,使用证书中的 PC UDID 通过 Cisco DUO 进行二次身份验证 (您可以附加任何 SAML/Radius 兼容的);
  2. 多重身份验证:
    • 具有现场验证和针对其中之一的二次身份验证的用户证书;
    • 登录名(不可更改,取自证书)和密码;
  3. 估计连接主机的状态(Posture)

使用的解决方案组件:

  • 思科 ASA(VPN 网关);
  • 思科 ISE(身份验证/授权/计费、状态评估、CA);
  • 思科 DUO(多重身份验证) (您可以附加任何 SAML/Radius 兼容的);
  • Cisco AnyConnect(工作站和移动操作系统的多用途代理);

我们先从客户的需求开始:

  1. 用户必须通过其登录名/密码身份验证能够从 VPN 网关下载 AnyConnect 客户端;所有必需的 AnyConnect 模块必须根据用户的策略自动安装;
  2. 用户应该能够自动颁发证书(对于其中一种场景,主要场景是手动颁发并在PC上上传),但我实现了自动颁发以进行演示(删除它永远不会太晚)。
  3. 基本身份验证必须分几个阶段进行,首先是证书身份验证,分析必要的字段及其值,然后是登录/密码,只有这一次必须将证书字段中指定的用户名插入登录窗口 主题名称(中文) 没有编辑能力。
  4. 您需要确保您登录的设备是发放给用户用于远程访问的公司笔记本电脑,而不是其他设备。 (已做出多种选择来满足此要求)
  5. 应通过检查整个庞大的客户要求表(总结)来评估连接设备(在此阶段为 PC)的状态:
    • 文件及其属性;
    • 注册表项;
    • 提供的列表中的操作系统补丁(稍后 SCCM 集成);
    • 特定制造商提供的防病毒软件的可用性以及签名的相关性;
    • 某些服务的活动;
    • 某些已安装程序的可用性;

首先,我建议您一定要观看最终实现的视频演示 Youtube(5 分钟).

现在我建议考虑视频剪辑中未涵盖的实现细节。

让我们准备 AnyConnect 配置文件:

我之前在有关设置的文章中给出了创建配置文件的示例(就 ASDM 中的菜单项而言) VPN负载均衡集群。 现在我想单独说明我们需要的选项:

在配置文件中,我们将指示 VPN 网关和用于连接到最终客户端的配置文件名称:

实施高度安全的远程访问概念

让我们从配置文件端配置证书的自动颁发,特别指出证书参数,并且特别注意该字段 缩写(一),其中手动输入特定值 你做了 测试机(由 Cisco AnyConnect 客户端生成的唯一设备标识符)。

实施高度安全的远程访问概念

这里我想说一句题外话,因为本文描述的是这个概念;出于演示目的,在 AnyConnect 配置文件的“Initials”字段中输入用于颁发证书的 UDID。 当然,在现实生活中,如果您这样做,那么所有客户端都将收到在此字段中具有相同 UDID 的证书,并且对他们来说没有任何作用,因为他们需要其特定 PC 的 UDID。 不幸的是,AnyConnect 尚未实现通过环境变量将 UDID 字段替换到证书请求配置文件中,例如使用变量 %用户%.

值得注意的是,该场景的客户最初计划以手动模式独立向此类受保护的 PC 颁发具有给定 UDID 的证书,这对他来说不是问题。 然而,对于我们大多数人来说,我们想要自动化(嗯,对我来说这是真的=))。

这就是我在自动化方面可以提供的。 如果 AnyConnect 还无法通过动态替换 UDID 来自动颁发证书,那么还有另一种方法,需要一点创造性思维和熟练的双手 - 我将告诉您这个概念。 首先,我们来看看 AnyConnect 代理如何在不同操作系统上生成 UDID:

  • Windows — DigitalProductID 和 Machine SID 注册表项组合的 SHA-256 哈希值
  • OSX — SHA-256 哈希 PlatformUUID
  • Linux — 根分区 UUID 的 SHA-256 哈希值。
  • 苹果iOS — SHA-256 哈希 PlatformUUID
  • Android – 请参阅文档 链接

因此,我们为我们的企业 Windows 操作系统创建一个脚本,通过此脚本,我们使用已知输入在本地计算 UDID,并通过在必填字段中输入此 UDID 来形成颁发证书的请求,顺便说一句,您也可以使用机器AD颁发的证书(通过在方案中添加使用证书的双重身份验证 多项证书).

让我们准备 Cisco ASA 端的设置:

让我们为 ISE CA 服务器创建一个信任点,它将向客户端颁发证书。 我不会考虑钥匙串导入过程;我的设置文章中描述了一个示例 VPN负载均衡集群.

crypto ca trustpoint ISE-CA
 enrollment terminal
 crl configure

我们根据用于身份验证的证书中的字段,根据规则配置隧道组的分发。 我们在上一阶段制作的 AnyConnect 配置文件也在此处进行配置。 请注意,我正在使用该值 安全银行RA,将具有颁发证书的用户转移到隧道组 安全银行VPN,请注意我在 AnyConnect 配置文件证书请求栏中有此字段。

tunnel-group-map enable rules
!
crypto ca certificate map OU-Map 6
 subject-name attr ou eq securebank-ra
!
webvpn
 anyconnect profiles SECUREBANK disk0:/securebank.xml
 certificate-group-map OU-Map 6 SECURE-BANK-VPN
!

设置身份验证服务器。 就我而言,这是用于第一阶段身份验证的 ISE,以及作为 MFA 的 DUO(半径代理)。

! CISCO ISE
aaa-server ISE protocol radius
 authorize-only
 interim-accounting-update periodic 24
 dynamic-authorization
aaa-server ISE (inside) host 192.168.99.134
 key *****
!
! DUO RADIUS PROXY
aaa-server DUO protocol radius
aaa-server DUO (inside) host 192.168.99.136
 timeout 60
 key *****
 authentication-port 1812
 accounting-port 1813
 no mschapv2-capable
!

我们创建组策略和隧道组及其辅助组件:

隧道组 默认WEBVPN组 主要用于下载 AnyConnect VPN 客户端并使用 ASA 的 SCEP 代理功能颁发用户证书;为此,我们在隧道组本身和关联的组策略上激活了相应的选项 AC-下载,以及加载的 AnyConnect 配置文件(用于颁发证书的字段等)。 此外,在此组策略中,我们指出需要下载 ISE 姿势模块.

隧道组 安全银行VPN 在使用前一阶段颁发的证书进行身份验证时,客户端将自动使用该证书,因为根据证书映射,连接将专门落在该隧道组上。 我将在这里告诉您一些有趣的选择:

  • 辅助认证服务器组 DUO # 在 DUO 服务器(Radius Proxy)上设置辅助身份验证
  • 证书中的用户名CN # 对于主要身份验证,我们使用证书的 CN 字段来继承用户登录
  • 证书中的辅助用户名 I # 对于 DUO 服务器上的二次身份验证,我们使用提取的用户名和证书的首字母 (I) 字段。
  • 预填用户名客户端 # 使用户名预先填写在身份验证窗口中且无法更改
  • secondary-pre-fill-username 客户端隐藏 use-common-password 推送 # 我们隐藏二次验证DUO的登录名/密码输入窗口,并使用通知方式(短信/推送/电话)-停靠来请求验证而不是密码字段 这里

!
access-list posture-redirect extended permit tcp any host 72.163.1.80 
access-list posture-redirect extended deny ip any any
!
access-list VPN-Filter extended permit ip any any
!
ip local pool vpn-pool 192.168.100.33-192.168.100.63 mask 255.255.255.224
!
group-policy SECURE-BANK-VPN internal
group-policy SECURE-BANK-VPN attributes
 dns-server value 192.168.99.155 192.168.99.130
 vpn-filter value VPN-Filter
 vpn-tunnel-protocol ssl-client 
 split-tunnel-policy tunnelall
 default-domain value ashes.cc
 address-pools value vpn-pool
 webvpn
  anyconnect ssl dtls enable
  anyconnect mtu 1300
  anyconnect keep-installer installed
  anyconnect ssl keepalive 20
  anyconnect ssl rekey time none
  anyconnect ssl rekey method ssl
  anyconnect dpd-interval client 30
  anyconnect dpd-interval gateway 30
  anyconnect ssl compression lzs
  anyconnect dtls compression lzs
  anyconnect modules value iseposture
  anyconnect profiles value SECUREBANK type user
!
group-policy AC-DOWNLOAD internal
group-policy AC-DOWNLOAD attributes
 dns-server value 192.168.99.155 192.168.99.130
 vpn-filter value VPN-Filter
 vpn-tunnel-protocol ssl-client 
 split-tunnel-policy tunnelall
 default-domain value ashes.cc
 address-pools value vpn-pool
 scep-forwarding-url value http://ise.ashes.cc:9090/auth/caservice/pkiclient.exe
 webvpn
  anyconnect ssl dtls enable
  anyconnect mtu 1300
  anyconnect keep-installer installed
  anyconnect ssl keepalive 20
  anyconnect ssl rekey time none
  anyconnect ssl rekey method ssl
  anyconnect dpd-interval client 30
  anyconnect dpd-interval gateway 30
  anyconnect ssl compression lzs
  anyconnect dtls compression lzs
  anyconnect modules value iseposture
  anyconnect profiles value SECUREBANK type user
!
tunnel-group DefaultWEBVPNGroup general-attributes
 address-pool vpn-pool
 authentication-server-group ISE
 accounting-server-group ISE
 default-group-policy AC-DOWNLOAD
 scep-enrollment enable
tunnel-group DefaultWEBVPNGroup webvpn-attributes
 authentication aaa certificate
!
tunnel-group SECURE-BANK-VPN type remote-access
tunnel-group SECURE-BANK-VPN general-attributes
 address-pool vpn-pool
 authentication-server-group ISE
 secondary-authentication-server-group DUO
 accounting-server-group ISE
 default-group-policy SECURE-BANK-VPN
 username-from-certificate CN
 secondary-username-from-certificate I
tunnel-group SECURE-BANK-VPN webvpn-attributes
 authentication aaa certificate
 pre-fill-username client
 secondary-pre-fill-username client hide use-common-password push
 group-alias SECURE-BANK-VPN enable
 dns-group ASHES-DNS
!

接下来我们转向 ISE:

我们配置一个本地用户(可以使用AD/LDAP/ODBC等),为了简单起见,我在ISE本身创建了一个本地用户并在字段中分配它 描述 电脑唯一识别码 允许他通过 VPN 登录。 如果我在 ISE 上使用本地身份验证,我将仅限于一台设备,因为字段不多,但在第三方身份验证数据库中我不会有这样的限制。

实施高度安全的远程访问概念

我们看一下授权策略,它分为四个连接阶段:

  • 步骤1“ — 下载 AnyConnect 代理并颁发证书的策略
  • 步骤2“ — 主要身份验证策略 登录(从证书)/密码 + 带 UDID 验证的证书
  • 步骤3“ — 使用 UDID 作为用户名通过 Cisco DUO (MFA) 进行二次身份验证 + 状态评估
  • 步骤4“ — 最终授权处于以下状态:
    • 合规;
    • UDID验证(来自证书+登录绑定),
    • 思科 DUO MFA;
    • 通过登录进行身份验证;
    • 证书认证;

实施高度安全的远程访问概念

让我们看一个有趣的情况 UUID_VALIDATED,看起来验证用户实际上来自一台 PC,并在该字段中关联了允许的 UDID 产品描述 帐户,条件如下所示:

实施高度安全的远程访问概念

第1,2,3、XNUMX、XNUMX阶段使用的授权配置文件如下:

实施高度安全的远程访问概念

您可以通过查看 ISE 中的客户端会话详细信息来准确检查来自 AnyConnect 客户端的 UDID 如何到达我们。 详细我们会看到AnyConnect通过机制 ACIDEX 不仅发送有关平台的信息,还发送设备的 UDID 思科-AV-PAIR:

实施高度安全的远程访问概念

我们关注一下颁发给用户的证书和字段 缩写(一),用于将其作为 Cisco DUO 上辅助 MFA 身份验证的登录名:

实施高度安全的远程访问概念

在日志中的 DUO Radius 代理端,我们可以清楚地看到身份验证请求是如何发出的,它使用 UDID 作为用户名:

实施高度安全的远程访问概念

从 DUO 门户中,我们看到成功的身份验证事件:

实施高度安全的远程访问概念

在用户属性中我已经设置了 别名,我用于登录,反过来,这是允许登录的PC的UDID:

实施高度安全的远程访问概念

结果我们得到:

  • 多因素用户和设备身份验证;
  • 防止用户设备被欺骗;
  • 评估设备的状况;
  • 通过域机器证书等增强控制的潜力;
  • 通过自动部署的安全模块提供全面的远程工作场所保护;

Cisco VPN 系列文章链接:

来源: habr.com

添加评论