Android 上的强化问题:动态代码评估:不安全的反序列化

问题描述

我在 Android 项目 (Java) 上运行了强化扫描,但遇到了一些问题。 该报告没有建议如何修复它。

它将具有清单声明接收器的启动器类标记为“动态代码评估:不安全的反序列化”。但我没有反序列化任何对象。

    <activity
        android:name=".LaunchScreen"
        android:screenorientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

我从谷歌搜索,大部分是Java对象反序列化,没有一个和Android相关。


扫描结果:

动态代码评估:不安全的反序列化

摘要 在运行时反序列化用户控制的对象流可允许攻击者在服务器上执行任意代码、滥用应用程序逻辑或导致拒绝服务。

说明 Java 序列化将对象图转换为字节流,其中包含对象本身以及从字节流中重建它们所需的元数据。开发人员可以创建自定义代码来帮助反序列化 Java 对象的过程,他们甚至可以用不同的对象或代理替换反序列化的对象。自定义反序列化过程在对象返回到应用程序并转换为预期类型之前的对象重建期间进行。当开发人员尝试强制执行预期类型时,代码可能已经被执行。自定义反序列化例程在可序列化类中定义,这些类需要出现在运行时类路径中并且不能被攻击者注入,因此这些攻击的可利用性取决于应用程序环境中可用的类。不幸的是,常见的第三方类甚至 JDK 类都可能被滥用来耗尽 JVM 资源、部署恶意文件或运行任意代码。某些协议在传输层的幕后使用 Java 序列化。 RMI 和 JMX 是这些协议的示例。

建议 如果可能,请不要在未验证对象流内容的情况下反序列化不受信任的数据。为了验证被反序列化的类,应该使用前瞻反序列化模式。对象流将首先包含类描述元数据,然后是其成员字段的序列化字节。 Java 序列化过程允许开发人员阅读类描述并决定是继续对象的反序列化还是中止它。为此,有必要对 java.io.ObjectInputStream 进行子类化并提供 resolveClass(ObjectStreamClass desc) 方法自定义实现,其中类验证和验证应为 2016 年 9 月 29 日下午 5:09 版权所有 2015 Hewlett Packard Enterprise Development LP 13 举行。有一些可以轻松使用的前瞻模式的现有实现,例如 Apache Commons IO (org.apache.commons.io.serialization.ValidatingObjectInputStream)。始终使用严格的白名单方法仅反序列化预期类型。不推荐使用黑名单方法,因为攻击者可以使用许多可用的小工具来绕过黑名单。另外,请记住,尽管实现代码执行的某些类是公开的,但可能还有其他未知或未公开的类,因此始终首选白名单方法。应审核白名单中允许的任何类,以确保反序列化是安全的。为避免拒绝服务攻击,建议您覆盖 resolveObject(Object obj) 方法,以便计算正在反序列化的对象数量,并在超过阈值时中止反序列化。当在库或框架中进行反序列化时(例如,在使用 JMX、RMI、JMS、HTTP 调用程序时),上述建议没有用,因为它超出了开发人员的控制范围。在这些情况下,您可能需要确保这些协议满足以下要求: - 不公开。 - 使用身份验证。 - 使用完整性检查。 - 使用加密。此外,HPE Security Fortify Runtime 提供每次应用程序从 ObjectInputStream 执行反序列化时强制执行的安全控制,保护应用程序代码以及库和框架代码免受此类攻击。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)