这是一起发生在2019年前后的事件,主角是新加坡卫生部的医疗服务信息平台。新加坡作为亚洲地区数字政府建设水平较高的国家之一,很早就开始推进卫生系统的数字化和统一管理,建立了覆盖全国的公民电子健康记录系统。这个系统存储着新加坡数百万公民和长期签证持有者的个人身份信息、病史记录、药物过敏史、检验检查结果、血型信息等医疗健康数据。这些数据在过去都是锁在政府专网里的,受严格的安全保护。但为了提升医疗服务效率,新加坡卫生部决定将这些数据和相关的分析系统部署到面向互联网公开接入的平台上,以实现更便捷的数据共享和分析功能——这个想法很好,但在执行中出了问题。

问题出在哪里呢?新加坡卫生部委托了一家技术公司来开发和部署这个面向互联网的卫生数据分析平台。这本来是一个好事,促进医疗数据为科研和公共政策服务。但在平台搭建和部署过程中,安全配置出现了致命失误。系统的数据库尽管面向互联网开放,配置了一个供内部用户使用的数据库查询和管理的端口,但这个端口没有按照安全管理标准进行配置——它直接就暴露在公网上,并且用户认证功能没有被正确启用或者说根本就没有启用。什么概念呢?就是任何一个能上网的人,只要知道这个服务器的IP地址和端口号,不需要输入任何用户名和密码,不需要经过任何身份验证,就可以直接连接到这个数据库,把里面的数据表一个个打开来看。

发现这个问题的是网络安全领域的安全研究者,他们在常规的互联网扫描中注意到了这个被暴露的数据库端口,尝试连接后发现居然不需要密码就能访问。安全研究者进一步查看数据库内容,发现里面存储的是百万级别的新加坡公民和居民的健康数据记录,包括姓名、身份证号、联系方式、血型、门诊诊断、处方记录、实验室检验结果等大量敏感的医疗健康信息。安全研究者按照负责任的披露流程,将这个漏洞报告给了新加坡政府相关机构。

新加坡卫生部接到报告后迅速采取了补救措施,关闭了该端口的公共访问权限,并启动了对数据泄露可能范围和影响的评估。官方的后续说明中承认确实有部分公民的个人健康数据因为此次配置失误而被暴露在了公共互联网上,不过官方的说法是"没有证据表明数据被恶意访问或被下载"。但这里存在一个逻辑上很难解释的问题——这个端口已经暴露了相当一段时间,在没有任何访问日志和监控预警机制的情况下,你是无法准确判断有多少人访问过这个端口的。你只能说没有抓到一个能证明恶意访问的现行犯,但无法说没有人访问过。安全研究者能发现并连上去,别的人也可能早就发现了。

泄密链路的简化版是这样的:新加坡卫生部委托技术公司开发数据分析和共享平台→数据库端口在配置时未做用户认证就面向互联网开放→整个数据库无需密码即可被任何知道地址的人访问→安全研究者在扫描中发现该端口并确认数据敏感性→向政府报告→政府在确认漏洞后关闭端口。整个过程中,最核心的漏洞其实很简单——云服务或者互联网服务的安全部署上,数据库不应该以非认证的方式暴露在公网中。但现实中因为这个技术团队可能在配置安全策略时出了差错,或者上线前没有进行安全扫描和审计,导致了数据库裸奔的状态持续了相当长的时间。

这个事件给我们带来的核心认识是:健康数据是个人信息里非常敏感的一类,保护它的安全等级应该很高。新加坡卫生部的案例说明,即使是在信息化建设水平较高的发达国家,数据开放共享和网络安全保护之间的关系依然需要认真考量。数据开放不应该以牺牲安全为前提。数据库的互联网暴露必须经过严格的安全评审,要执行默认拒绝、最小权限、强制认证原则上线。不是"所有的数据和接口都应该对公众开放",而是"只有被授权的人和系统才能访问"。这个原则在健康数据这样一个高度敏感的领域尤其重要。建立科学的数据访问管理体系需要在上线前进行安全专业的密码验证、权限分级、日志审计、异常检测等多项措施,看似步骤很多,但缺任何一环都可能成为下一个新闻标题。