如何解决 Java 安全问题?

简介:

如何解决 Java 安全问题?
如何解决 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 官方博客

相关文章
Java智慧工地(源码):数字化管理提升施工安全与质量
随着科技的发展,智慧工地已成为建筑行业转型升级的重要手段。依托智能感知设备和云物互联技术,智慧工地为工程管理带来了革命性的变革,实现了项目管理的简单化、远程化和智能化。
35 4
Java编译器注解运行和自动生成代码问题之@AutoService工作问题如何解决
Java编译器注解运行和自动生成代码问题之@AutoService工作问题如何解决
298 1
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
79 2
|
4月前
|
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
77 4
Java 泛型深入解析:类型安全与灵活性的平衡
Java 泛型通过参数化类型实现了代码重用和类型安全,提升了代码的可读性和灵活性。本文深入探讨了泛型的基本原理、常见用法及局限性,包括泛型类、方法和接口的使用,以及上界和下界通配符等高级特性。通过理解和运用这些技巧,开发者可以编写更健壮和通用的代码。
|
6月前
|
java安全特性
java安全特性
44 8
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
129 11
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
216 11
java系列之~~网络通信安全 非对称加密算法的介绍说明
这篇文章介绍了非对称加密算法,包括其定义、加密解密过程、数字签名功能,以及与对称加密算法的比较,并解释了非对称加密在网络安全中的应用,特别是在公钥基础设施和信任网络中的重要性。
【Java集合类面试十二】、HashMap为什么线程不安全?
HashMap在并发环境下执行put操作可能导致循环链表的形成,进而引起死循环,因而它是线程不安全的。

热门文章

最新文章