如何解决 Java 安全问题,目前的应对策略都十分笨拙,往往适得其反。幸运的是,有一种新的方法可以将安全机制嵌入 Java 执行平台——或者更具体地说,嵌入 Java 虚拟机中,进而规避一些「Big Problem」。
保证 Java 应用的安全是一个艰巨的任务,在目前的软件开发领域,Java 程序员往往会从第三方库导入成千上万行代码。导入的代码常用于执行通用任务,如数据库访问、XML 处理、日志记录等。但是如果代码是开源的,没有人能保证其安全性或对其进行严格的渗透测试。因此,漏洞可以通过「导入代码」的后门入侵到内部系统。造成了企业对这些漏洞一无所知,攻击者却对它们了如指掌的现状。
当程序中出现缺陷代码时,攻击者可能在后端利用 SQL 注入等方式进行服务器攻击或数据访问。当然,开发者培训和静态软件分析工具都可以减少这类危险,但无法在应用进入生产环境后处理漏洞。因此,无需开发者干预的安全方法是更符合实际的选择。
由第三方库造成的漏洞典型当属2014年初的 Heartbleed 事件。简单地说,一个在 OpenSSL 加密库中发现的安全漏洞,影响了互联网上三分之二的 Web 服务器。虽然这个漏洞和 JAVA 无关,但依旧值得我们警醒。
传统 Java 防御
Java 应用的安全防护通常基于网络或测试,但这两种方法都不可靠。
首先是基于网络的防御措施包括Web应用防火墙和运行时入侵防御系统,可以为生产系统抵御外部威胁。为了避免阻塞合法的流量,这些系统必须进行微调以降低其有效性。否则,就得投入大量精力来调整,使之只允许合法流量通行。毕竟,如果授权的流量都被阻塞,真实用户也可能被拒之门外。也不得不说,网络级防御机制(如 IP 防火墙)阻塞流量时,终止网络连接的方法非常笨拙。
其次是应用测试工具会分析软件是否存在漏洞,其分析结果可能会让开发者大吃一惊,也可能数量非常庞大,让人难以区分哪些是关键问题、次要问题和误报。此外,如果漏洞侥幸入侵成功,这些工具在系统运行时根本无法起到保护作用。
新方法:带 RASP 的 JVM
目前,运行应用自我保护 RASP 是保护 Java 应用的新方法,在应用运行时结合应用行为(应用程序现在正在做什么)和实时情境进行实时分析。因此,持续的安全分析成为运行环境中的原生功能,系统能在识别攻击后即时响应。由于安全功能作用于程序内部,并且具备应用行为的指令意识,RASP 避免了其他防御方法常见的误报。
OneRASP 认为,实现 RASP 的最佳途径是充分利用 Java 虚拟机。JVM 是介于服务器操作系统和应用之间的完整运行环境,可以实时调整应用运行时的行为,且不需要修改应用代码。其次,因为 JVM 还控制着 Java 应用的全部 I / O,它可以阻塞未经授权的操作。最重要的是,它可以通过应用现有的错误处理程序,有效阻止任何入侵代码的执行。
RASP 的 OneRASP 是基于几乎所有主流的 JVM ,它添加了安全规则引擎来保护 Java 代码,且无需修改应用代码。规则引擎支持细粒度的监控,同时还控制所有的应用行为,包括文件和网络访问、类加载、反射、方法调用、SQL 查询、脚本功能等,能够自动地缓解攻击。
监督用户输入
在 JVM 中嵌入应用安全还意味着可以在程序执行过程中跟踪用户输入——即 「变量污点跟踪」功能,能够防止不受信任的用户输入导致的数据访问(如 SQL 查询)或未经验证的敏感操作(反射)。污点跟踪通过阻止恶意输入从不受信任的源传给信任源(例如从 HTTP 查询字符串到 SQL 数据库),实现对代码注入攻击(如 SQL 注入)的安全防御。
由于带 RASP 的 JVM 可以全面阻止恶意代码的执行,不论其来自应用内部、第三方库还是网络,因此战胜零日漏洞完全不在话下。此外,无需重启或中断服务,安全管理员就可以为运行的应用添加新规则,没有安全供应商的补丁也能即时阻止新发现的漏洞。
RASP 实例
Apache Struts 2 是一个用于开发 Java Web 应用的开源 Web 应用程序框架。在过去的几年中,我们发现了 Struts 框架中存在的诸多严重漏洞,攻击者可以借助这些漏洞对缺乏保护的服务器进行远程攻击。
为了修复这些漏洞,用户要么等待官方补丁(可能是几个星期或几个月),再对补丁进行测试和部署,要么重写代码,再重新测试和部署应用。
然而,有了 OneRASP 后,只需应用一条安全规则,无需重启或中断应用,在运行时就阻止入侵代码的执行。
众所周知,安全解决方案总免不了误报,对于关键任务型应用尤甚。RASP 能将此类风险降到最低。通过监测运行环境中的应用执行,能更细致地监测应用行为和上下文。这种方法比网络层检测更为精密;因此,实际部署前的性能调优与应用行为建模也更加简单。
最后,尽管没有哪种安全处理可以完全摆脱处理开销,但将安全操作嵌入 JVM 内,再由 JIT(Just-In-Time)编译器进行优化,可以确保最小化对性能的影响。与那些远程调用(如 REST API 调用)应用外部服务或「工具代理」将调试代码插入应用中的安全方法相比,本地「in-JVM」安全机制的性能优势可谓显而易见。
RASP 这种「由内而外」的保护方法有很多优势。将安全方法嵌入 JVM 内部,可以确保企业关键代码的可用性,同时最小化对性能的影响。这种方式还可以保护多个应用,无需要修改软件,比添加补丁更为快速灵活。
本文系 OneAPM 工程师编译整理。如今,多样化的攻击手段层出不穷,传统安全解决方案越来越难以应对网络安全攻击。OneRASP 实时应用自我保护技术,可以为软件产品提供精准的实时保护,使其免受漏洞所累。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方博客