一家区域性商业银行的个人金融部门为了提升客户体验,开发了一套客户资产全景视图系统。这套系统可以在一张界面上展示客户在该行的存款、理财、基金、保险和贷款等各类资产的总额和明细。系统上线后受到了客户经理和理财顾问的欢迎,方便了为客户提供综合化的金融服务方案。

该系统的背后调用了一个内部API接口,这个接口汇总了银行核心系统、理财系统、基金系统和信贷系统等多个业务系统的数据,并以JSON格式返回给前端展示。问题在于,开发团队在设计这个内部接口时,为了便于前后端联调,没有在接口层面实施独立的身份验证机制。开发团队的逻辑是,既然前端页面已经登录了银行的内部管理系统,后端接口就没必要再做一次鉴权。这个逻辑在后端接口只被银行内部管理系统使用时看似没有问题,但实际部署中,这个接口的调用地址是可以直接被浏览器开发者工具捕获的。

一名理财顾问在日常工作中无意间发现了这个问题。他在使用客户全景视图系统时,为了排查一个显示问题打开了浏览器开发者工具,发现所有客户数据都是通过一个固定的URL地址获取的。他试着将这个URL复制到了另一个浏览器标签页中直接访问,结果后台直接返回了一长串客户数据的JSON报文。他又试着将URL中的客户编号参数换成其他编号,结果系统不加鉴别地返回了其他客户的资产信息。这意味着任何一个能够访问银行内部网络的员工,只要知道这个URL地址和客户编号规则,就可以查询任意客户的完整资产信息。

理财顾问将这个发现报告给了IT部门,IT部门立即关闭了这个接口的直接访问权限,并启动了紧急修复。但问题在于,这个有缺陷的接口已经在生产环境中运行了将近一年。虽然银行内部的安全日志没有发现大规模的数据被恶意查询的记录,但从技术角度来说,任何一个内部员工在过去一年中都有机会利用这个接口窃取客户信息,银行无法完全排除数据已经被内部人员批量查询和泄露的可能性。这个事件随后被报告给了银保监部门,监管部门要求银行进行全面自查,并评估数据泄露的实际风险和可能的受影响客户范围。

这个案例体现了一个在金融行业非常普遍但容易被忽视的安全隐患:内部系统之间的接口信任关系。很多金融机构在内部系统集成时,默认所有内部服务之间的通信都是安全的,因此常常在接口层面省略鉴权。但在实际的企业内部网络中,拥有内部网络访问权限的人员范围要比想象中的大得多。除了正式的IT员工和业务员工,外包运维人员、驻场开发人员、临时访问的人员、甚至保洁和物业人员如果通过物理方式接入了内网,都有可能访问到这些缺乏保护的内部接口。更不用说,内部网络中还有大量的工作站可能被植入恶意软件,如果恶意软件扫描到了这些开放的内部接口,后果将更加严重。金融机构在构建内部系统时,应当遵循纵深防御的原则,即使是在内部网络中,每一次数据访问请求也应当经过严格的身份认证和权限校验。接口层面的鉴权机制不应依赖于上层应用已经通过认证这一假设,而应当独立实现并严格执行。对于涉及客户金融资产信息的接口,还应当实施访问频率控制和异常行为检测,对于短时间内大量查询不同客户信息的请求,系统应当自动告警并限制访问。