作者简介:周子庆,数字原住民,曾就读于清华大学附属中学,后于清华大学微纳米力学与多学科交叉创新研究中心实习。于 2016 年加入了中国快递行业第一方阵中起步最晚、发展最快的中通大家庭。从软件开发到嵌入式开发,从机器人到工业工程设计,不断地进行着各种努力与尝试。在自我实现与企业进步交织的人生路线上,继续迎接着各种新的挑战,为自己的未来带来更多可能。

你一定看过不少什么「连了免费 Wi-Fi 支付宝里的钱不翼而飞」、「一夜醒来银行卡里的钱没了」之类的新闻。电影《我是谁:没有绝对安全的系统》中二十五岁的电脑极客更是能轻易入侵国际安全系统,其中一段故事描述的就是肉身入侵目标大楼,直接对目标网络进行攻击。

肉身入侵数据中心

回到现实里,这种物理入侵的情况可能吗?答案是肯定的,而且小朋友就能做到。许多公司都有提供开放的 Wi-Fi 无线局域网,这些无线局域网通常需要经过认证才能接入互联网。但在默认情况下,未经认证的设备都是可以访问到内网资源的。

通过 Wi-Fi 攻击演讲台上演示的电脑

那些没有进行相关限制的网络就很容易遭殃了,攻击者能够进行各种姿势地攻击。我们可以轻易地通过手机上现成的 App 使用 ARP 嗅探到内网的所有资源,甚至还能一键攻击所有设备,强制所有设备下线。小朋友都会弄!

通过手机 App 进行 arp 嗅探并攻击

我们公司就面临着这样的风险,园区内数百个 AP 发射着无数个开放的 Wi-Fi 网络,任何人都能从园区外连接我们的 Wi-Fi 网络。

改造前的网络拓扑示意图

面临着这么多问题和风险,每个人都有着不同的工作角色,要打造一个安全、可控,符合大家需求的办公网络可不简单呢:

首席信息官:保护公司知识产权、公司机密数据、客户信息是我们的底线,在保证信息安全的前提下还要具备良好的用户体验。

开发人员:我的程序都需要在大数据集群上运行,我得连上服务器才能工作。

前端开发人员:我需要接入各种移动设备终端,方便我调试。

普通用户:连网方便,不要搞太麻烦。自己的手机和电脑也要能连公司网络,这样工作起来方便。

我们的目标

针对这些不同角色诉求,我们制定了一下网络优化的目标:

• 统一的安全策略

• 稳定的体验

• 简化的操作

探索

动态 VLAN 划分技术

我们首先想到的就是采用动态 VLAN(Virtual Local Area Network 即虚拟局域网)划分技术,这简直就是能够实现「统一的安全策略」、「操作简化」目标的完美解决方案。

采用动态 VLAN 划分技术的情况下,我们可以将普通办公网络、开发网络、访客网络合并为单一 SSID 接入点。

优化合并后,用户对所在的网络区域无感知

不仅如此,我们还可以对权限的管控从帐号粒度精细化至设备粒度,仅允许指定用户的指定设备加入开发网络:

管理策略示意图

其实早在多年前,就有厂商基于 IEEE 802.1X (也就是WPA/WPA2企业级认证)标准实现了动态 VLAN 划分,并能稳定运行。但这种认证方式缺点也很明显,用户需要安装证书或者输入用户名密码,用户的学习成本和证书管理、定期更换密码的管理成本都太高了。 

加入 WPA2 企业级 Wi-Fi 网络

有没有什么办法能把好几个开发网络合并成一个开放网络呢?

还真有,主流的几个厂商都提供了 BYOD(Bring Your Own Device)解决方案。这个解决方案中,除了 IEEE 802.1X (WPA2 企业级认证)支持动态 VLAN 划分技术外,还支持普通的开放网络进行动态 VLAN 下发:

动态 VLAN 下发认证时序图

用户首先加入开放无线局域网,无线控制器会在受限的 VLAN 中分配一个临时 IP,在登录前不能访问任何网络资源(包括内网资源)。登录成功后,无线控制器会根据 Wi-Fi 协议发送一个下线信号给无线终端,强制将无线设备断开。设备断开网络后会再次主动尝试加入网络,这时无线控制器会根据认证网关的「统一的安全策略」将设备连入指定下发的VLAN,重新分配新的 IP。完成这一流程后,设备才能接入真正所处的网络。

网络拓扑示意图

这方案简直堪称完美。

连小编这么吹毛求疵的人都忍不住欢呼,这黑科技实在太方便了:

认证服务根据用户权限自动选择加入的目标 VLAN
遇到的问题

可是…

现实总是残酷的,经过我们一轮又一轮地测试,一轮又一轮的会议。并不能保证这种方案下有着稳定的用户体验。特别是 MacBook 需要手动开关下 Wi-Fi,或者等很久才能加入最终 VLAN。经过我们工程师抓包确认,无线控制器确实下发了下线指令。因此,我们推断 MacBook 网卡驱动可能经特别优化,会忽略掉无线控制器下发的下线指令封包。而最后测试下来,结果甚至连某些 PC 设备也不能被正常划入最终 VLAN。

不采用IEEE 802.1X 的情况下,用户加入网络的等待时间过长

为了解决获取不到最终 VLAN IP 的问题,我们甚至尝试缩短了临时 VLAN DHCP 分配 IP 的有效期,设备的 DHCP 租期到期后,MacBook 确实会掉线重连。可就算设置了到丧心病狂的 10 秒,整个过程也需要一两分钟。即便是我们制作了专门的页面,提示用户正在接入网络,用户也不能容忍。

用户不能适应权限管控的突然变化

精细化的管控给我们带来了更高的管理成本:由于我们要求访问开发网络的设备需提前注册备案设备 MAC 地址,那些没有备案的设备会被默认划入普通办公网 VLAN。也就是说,如果开发人员的设备 MAC 地址如果没有注册备案,就会无法访问开发网络。

开发组的同学设备连开发网络前需要申请权限(每个设备仅一次)

开发同学对这突如其来的变化,感到一脸懵逼:

而已经连接了 普通办公网络 的设备,想要切换到 开发 VLAN,就需要先将设备注销下线。重新加入网络后,给设备申请访问权限才能重新划入到开发 VLAN。但面对这一情况,用户的反应是:

反思

在理想情况下,所有权限策略正确,用户遵循流程。「动态 VLAN 划分」这一方案确实能做到让用户对所在的网络区域无感知,抹掉各个 VLAN 之间的界限。

可现实是,当开发人员想要从普通办公网连入开发网络时,他们并不知道该怎么做。开发人员作为最终用户时,并不是所有人都想了解网络架构的实现方案细节,他们只想尽快访问目标网络以完成手下的工作。

现在只能硬着头皮,吸取前面的教训,争取能重新制定出能令所有人满意的方案,再来看一遍我们的目标:

• 统一的安全策略

• 稳定的体验

• 简化的操作

方案的优化

推倒重来?

前面的工作都前功尽弃了吗?当然不是。

「动态 VLAN 划分」方案中,我们已经实现了「统一的安全策略」这一目标。但原方案中,存在几个问题:

• 设备接入网络时的体验不佳

有时接入快,有时接入慢,体验不稳定

• 最终用户不知道如何切换到开发网络

目前的操作不简化

• 设备接入权限一刀切

用户不适应,管理成本高

帮助最终用户快速切换到开发网络

「最终用户不知道如何切换到开发网络」这个问题,可以通过优化流程解决:除了网络连接页面下的「申请内网访问权限」入口,在 App 中添加另外的权限申请入口,使已加入普通办公网络的设备能直接申请,申请完毕后自动完成 VLAN 切换,无需用户手动操作设备注销网络。

实现稳定的接入体验

但「稳定的体验」在短期内就很难实现了。我们团队暂时没有能力去针对 MacBook 的情况进行优化,厂商暂时也不能解决该问题。

因此,我们基于原有的解决方案,将 Wi-Fi 网络拆分成三个 SSID,对应不同的 VLAN,用户可根据自己的角色选择 SSID。

明确各网络功能角色

若用户未按自己的角色去选择网络,将无法加入网络。因为在用户登录的过程中,统一认证服务会校验用户的权限,连接对应网络时只有匹配到对应角色时才予以放行,否则提示其接入其他对应网络。

用户所在分组无权接入开发网络

认证和区域划分是通过 IAM 应用层实现的

为了降低帐号的管理成本和系统的维护成本,我们未直接使用 Radius 计费服务与认证网关对接。尽管我们的 IAM 服务(SSO)实现了 Radius 计费协议,但 Radius 定制上网策略的灵活性欠佳。因此我们封装了整个上网认证流程,自有的 IAM 服务(SSO)直接与认证网关交互,在接入应用层决定用户可以加入何种网络区域。通过设备的 IP 命中 CIDR 网段,判断用户所在的网络和用户所在部门以决定是否放行:

通过 CIDR 网段判断用户所在网络并判断用户所在部门以决定是否放行

用户体验

多因子验证 - 从记住密码到 MFA

在以往,用户都是在浏览器记住密码直接登录的。自己是方便了,可也方便了黑客在网络中嗅探明文密码。

用户通过浏览器记住密码登录

而我们公司早在去年就淘汰了静态密码,现在需要通过手机进行多因子验证才可以登录企业网络,这一举措帮助我们大幅降低了帐号被盗用的风险。

通过手机登录

用户在登录企业内网或内部系统时,点击「通过手机登录」后手机就会收到推送确认:

用户收到登录推送通知

用户进入园区后,只需在手机上打开「中通宝盒」App,用户的手机便会自动进行上网认证:

手机打开 App 自动连网

二层网的威胁

Web 认证致命的缺点

做了这么多,黑客黑不进来了吧?我是不是能下班了?

不,你以为做完以上的工作就万事大吉了吗?别忘了,我们的 Wi-Fi 网络依旧是一个开放网络,依旧依旧是任何人都可以加入的,虽然不能通过 IP 访问到内网资源了,但我们还有个大杀器 —— ARP 嗅探

不就是嗅探内网主机吗?没认证的时候又不能访问的到内网,这能有啥用啊?

还真有用:

两台设备获取到了相同的 IP 地址

MAC 地址伪造

尽管我们不能访问到内网主机,但是我们可以欺骗网关,把自己伪造成那些已经认证过的设备啊!网关会误以为是那台设备,于是分配了相同的 IP 给到我们的设备。

MAC 地址伪造示例

在同一二层网络存在两个 MAC 地址相同的设备还能正常上网吗?hmmm... 不算太正常,但丝毫不影响干坏事。由于数据包会被(可以看作是)随机发往两台设备,因此会存在丢包的现象。但这并不影响我们渗透内网,足以把自己伪装成正常员工上网了。而且我们实验下来,新上线(重新加入 Wi-Fi 网络)的设备似乎会把老设备“挤”下线,抢占到网络资源。

(左)真正的用户 被“挤”掉,(右)伪造的用户 正常上网

开启交换机端口隔离

那这岂不是无解了?MAC 地址伪造几乎可以绕过所有 WEB 认证机制。确实是这样,但如果黑客嗅探不到内网的 MAC 地址,那也就没辙了。因此,我们可以开启交换机的端口隔离,阻止 ARP 嗅探。

交换机隔离配置示例

如果我们采用了动态 VLAN 划分技术,则仅需在临时 VLAN 中开启端口隔离。因为开启端口隔离后会导致同一网段内的设备无法通信,这会给日常使用带来不便,比如打印机部署时需要放在另一网段,否则就无法访问到。

最后一步 - 有线网络的访问控制

无线网络的改造已经告一段落了,在这里还有一个需要注意的点,那就是关于有线网络的控制。基于无线网的经验,我们对有线网络的不同区域也进行了相应的管控。例如,仅允许开发人员加入开发:

改造后的网络示意图

总结

到这里,经过改造的网络,再也不是谁谁谁就能直接访问到内网了。开发网络也只有开发人员才能访问。小编望着各位黑阔大佬,悬着的心总算可以放下一点点了:

黑客大佬正控制整栋楼的灯光

展望

这也是给各位的几点建议。

1. 如果你正在准备组网,或者有条件的话,还是上 IEEE 802.1X 吧。802.1X 是基于二层网络工作的认证协议。在未经认证的情况下,交换机会保持端口的关闭状态,只允许认证信息报文通过,不允许业务数据通过。802.1X 也能支持动态 VLAN 的划分,相比 Portal 认证体验更好。

802.1X 认证

2. 采用动态 VLAN 划分技术的情况下,开启临时 VLAN 的端口隔离。以此避免黑客滞留在此区域通过 ARP 嗅探后伪造 MAC 地址作为正常认证后的设备接入网络。

3. 采用多区域(多SSID)划分的情况下,要视业务情况开启交换机的端口隔离。需要网段内自由通讯的区域(例如两开发间前后端联调、前端要经常在移动设备上调试样式等)还是建议使用 802.1X 认证。

送给开发人员的小彩蛋

伴随着开源的潮流,不少开源项目都托管在 Github 上,我们开发过程中自然离不开这些轮子。可经常有小姐姐求助为什么 git 拉不下来啊,好慢啊,npm install 一个下午还没好等等问题。

我们针对这一情况在网络出口前增设了透明网关,通过 ACL 策略控制开发网络 VLAN ,设置策略路由增跳透明网关。

开发网络优化

透明网关内含 DNS 清洗服务,可对特定开发资源的网络进行优化:

优化前

优化后

经优化后的网络,可大幅提高开发和学习资源的访问速度,帮助开发人员提高生产力。

参考资料

https://en.wikipedia.org/wiki/802.1x

https://en.wikipedia.org/wiki/Bring_your_own_device

下回预告

是否通过重重考验成功接入了办公网络就可以随心所欲访问内部应用和数据了呢?那就是应用层的智能访问控制话题了,欲知后事如何,请听下回分解。

团队简介

中通信息安全团队是一个年轻、向上、踏实以及为梦想而奋斗的大家庭,我们的目标是构建一个基于海量数据的全自动信息安全智能感知响应系统及管理运营平台。我们致力于支撑中通快递集团生态链全线业务(快递、快运、电商、传媒、金融、航空等)的安全发展。我们的技术栈紧跟业界发展,前有 React、Vue,后到 Golang、Hadoop、Spark、TiDB、AI 等。全球日均件量最大快递公司的数据规模也将是一个非常大的挑战。我们关注的方向除了国内一线互联网公司外,也关注 Google、Facebook、Amazon 等在基础安全、数据安全等方面的实践。 

声明:本文来自中通安全应急响应中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。