zoukankan      html  css  js  c++  java
  • Android应用安全之Android APP通用型拒绝服务漏洞

    0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞。该通用型本地拒绝服务可以造成大面积的app拒绝服务。

    针对序列化对象而出现的拒绝服务主要是由于应用中使用了getSerializableExtra() 的API,由于应用开发者没有对传入的数据做异常判断,恶意应用可以通过传入畸形数据,导致应用本地拒绝服务。
    漏洞应用代码片段:

    Intent i = getIntent();
    if(i.getAction().equals("serializable_action")){
        i.getSerializableExtra("serializable_key"); //未做异常判断
    }

    攻击应用代码片段:

    但后来交流中发现,当传入一个自定义的序列化对象Serializable或getParcelable对象时,接收Intent的目标组件在getSerializableExtra()、getParcelable()等会抛出类未定义的异常java.lang.NoClassDefFoundError。这是因为当你给漏洞应用传入一个应用本身并没有的序列化类对象,在应用上下文中肯定是找不到这个类的。
    自定义的序列化类很简单: 

    随着测试的深入,我们通过logcat发现,在错误日志里不一定是getSerializableExtra()、getParcelable()导致的。然后我们就延伸了下,试着向getXXXExtra()传入我们自定义的序列化类对象,发现都会抛出类未定义的异常。

    测试app代码片段:

    /frameworks/base/core/java/android/content/Intent.java 

    readMapInternal解析传递进来的数据

    但是回头想想,谷歌肯定不是认为这是android的漏洞,开发者只要加个try catch 捕获异常就可以了。

    漏洞修复:
    不管是get什么extra,只要是getXXXExtra(),加上try catch捕获异常即可。

    漏洞检测:
    为了方便大家测试我们写了个简单的验证程序。
    使用方法:
    adb shell am start -n com.qihoo.checkextracrash/.MainActivity -e package_name packagename -e class_name componentname

    http://yunpan.cn/cyxmpwnk3MMT3(提取码:7a7d)

    参考:

    http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/os/Parcel.java

    转载自:http://blogs.360.cn/360mobile/  作者:0xr0ot & Xbalien

  • 相关阅读:
    Java web登录验证
    servlet总结
    Hadoop学习笔记(五)之HBASE
    C#学习笔记(二)
    C#学习笔记(一)
    Hadoop学习笔记(五)hdfs的四大机制和两大核心
    Hadoop学习笔记(三)Hadoop的hdfs的原理和运行机制
    Hadoop学习笔记(二)搭建伪分布式和集群模式的环境
    Linux系统常见命令
    python之路--day15--常用模块之logging模块
  • 原文地址:https://www.cnblogs.com/goodhacker/p/5152907.html
Copyright © 2011-2022 走看看