PUFsecurity看SolarWinds攻击事件: 8个该预先知道的对策
作者:黄圣峯 Huang Sheng-Feng 熵码科技资深项目经理
在去年十二月中,SolarWinds,这家专门提供IT管理解决方案的公司发生了一起软件供应链攻击事件。其软件构建环境以及代码签名架构受到攻击破坏并植入恶意后门程序。透过该公司软件版本管理与建构系统,随着所发行的软件修补程序,一并派送到客户端,进而造成后门程序的扩散,更严重者机密信息外泄。值得重视的是,这起事件被定位为国家级的攻击,透过软件供应链所影响的范围包含美国五百大企业及当局政府组织,影响甚巨。
根据资安专家分析,这是起攻击可分成多个步骤的行动计划。除了软件构建环境以及代码签名架构遭破坏外,攻击起始点也引人注目。可能源于开发人员松懈草率地将FTP证书以纯文本泄漏在 GitHub上。在攻击上透过压缩和编码的组合来隐藏可能被检测出的后门程序代码,愚弄专业的检测软件与开发人员的检阅流程。最后于版本管理系统中植入了非信任的原始码、取得相关凭证与签署人密钥,入侵了建构环境以及代码签名架构。黑客同时绕过了SolarWinds及其客户、私人企业与政府机构所建立的多种威胁侦测机制,透过漏洞进入了SolarWinds客户的网络之后,还能躲过这些环境中的防火墙与安全控制。
保护软件供应链与降低这类型的攻击风险普遍被认为遥不可及,从多面向来看这类型的攻击对安全专家来说是处于早期发掘问题的阶段。即便如此,透过组织审慎开发安全规范、程序及检测工具,还是能降低攻击发生的风险。我们提供了下面相关防范与建议,并使用软件、硬件、安全作业规范来减少软件供应链攻击事件的发生。
1.限制客户对服务主机的访问权限
除了草率不慎公开泄漏服务器凭证外,对于有效客户我们建议严格地限制客户IP的存取或是其他如凭证有效时间,此外亦详细记录存取日志,以作为第一层的防护把关。软件派送/更新下载点的安全防护格外重要,在服务布署上建议采用WAF或是RASP、服务器主机布署HIPS等防御系统,进而降低受到攻击的风险。
2.加强控管帐密私钥凭证
关于使用硬件安全以增强安全层级,在软件开发建构环节中,对于开发人员或者建构系统来说,有许多的密码、密钥、凭证需要妥善的管理,开发人员可以使用个人硬件Security key作为身分认证、进阶密钥与个人凭证的管理与保护。在组织信息架构当中我们建议构建HSM及KMS等系统解决密钥管理等安全的痛点,HSM硬件安全模块(Hardware Security Module)是一种可执行密码运算的硬件模块。在经过审慎的安全检测与确认后,硬件模块将能够为组织带来强健的安全性。HSM主要的篡改留证(tamper evidence/proof)、篡改抵抗(tamper evidence)两种方式的防篡改功能特性,应用HSM于软件建构当中可以在不曝露密钥的状况下进行文件、程序代码加密与签署程序,这样大大地确保软件加密与签署的安全性。KMS可以作为密钥、凭证的另一层管控,透过集中式管理可以解决软件开发中Secret散落的问题,像是 API 凭证,密码,证书等等,KMS提供严格的访问控制并记录详细的审核日志。另外,除了储存静态Secret,也能动态生成Secret,让应用程序只能在一段时间条件内存取敏感数据,大大降低了Secret被偷窃后的风险。
3.采最小授权原则避免账户滥用
过大的用户特权及帐户的滥用往往是在软件开发或测试阶段普遍出现的情况,我们建议在操作API或是执行账号时采用最小授权原则,只授权必要的权限或使用最低要求权限的账号,避免在账号泄漏或是让攻击行为黑客取得这些特权账号后造成的损害。此外,亦可在布署阶段透过SOP或是自动化检测进行权限账号的降权或是移除测试账号等程序。
4.加强软件发布与签章程序
软件发布进行签章程序,在客户端进行完整性检查,确保未被篡改。硬件安全模块可以加强签章程序的安全性。代码签章作为软件安全性依据及根本完全仰赖签章密钥的安全性。将密钥储存在一般计算机软件或是数据库中相当易于遭窃,是不安全的作法。因此,将密钥储存在安全、防篡改的硬件安全模块便是更加安全的最佳实践。
5.确实执行代码审查程序及安全凭证扫描
优良的软件工程程序,通常在合并代码或建构前进行代码审查,代码审查可以适时的移除像是格式化字符串攻击、竞争危害、内存泄漏、凭证泄漏及缓存溢出等计算器安全隐忧,甚至是恶意代码窜改植入后门的攻击,提升代码的安全性,除了靠有经验的开发人员审查外,也可以透过商业自动化代码脆弱分析扫描工具,在建构阶段就将安全漏洞检测出进行修补。
6.确实执行代码签名与完整性检查
代码签名可以确保系统的完整性及预防窜改。我们建议无论是原始码库、内部或外部的模块库、发布/布署的档案库甚至最后软件运行时间,都能够有确实执行代码签名及完整性检查,减少代码窜改的风险。而代码签名程序使用HSM(硬件安全模块)是加强安全性的做法,在HSM内进行代码签署更可确保签署凭证及密钥的安全。另一种安全签署环境则可以执行于Arm TEE/Intel SGX架构等安全环境当中的HSM,以增强密钥及签署的安全性。
7.导入第三方程式库安全检测
一个软件的组成及堆栈已很难完全由一家公司或是组织自行开发,通常仰赖外部函式库或模块的引用才能加速软件的发展。一个具公信力的公开套件库会针对所管理之套件模块进行安全性扫描,并对开发人员及相关组织的身份及套件做认证,引用外部套件、函式库,除了进行完整性检测外,建议选用认证过的开发组织及开发者所开发之函式库套件,避免使用来路不明的套件库,以获得较高的代码安全及质量。如果是Web软件框架及组件开发时直接引用第三方CDN网址,这样当CDN上代码被入侵,将演变为更大规模攻击跳板,所以引用也要格外小心。
8.部署供应端与客户端安全检测
为了杜绝软件供应链上下游业务流程造成安全性风险,建议制定组织安全规范,扩大风险安全评估体系,包含组织网络具有重要访问权限的供货商、数据的供货商、硬件系统供货商。使用商业的安全检测软件或是防病毒软件扫描软件,自动化检测及修复流程可以重复执行,并预先侦测出恶意软件或是找出软件安全漏洞,减少自行开发或向供货商采购中的软硬件风险。
透过上述安全建议,可以在软件供应链各环节减少漏洞与攻击的风险;而熵码科技所提供的PUF-based硬件安全,在PUF的随机性、不可复制性和稳定性基础上形成一信任根,再配合延伸解决方案所提供密钥管理、数字签名及密码算法等功能,可以在软件供应链防护当中为关键组件HSM及Security key 提供低成本及更高层级的安全防护。