安卓“超级拒绝服务漏洞”分析及自动检测工具(转载)

2小时前 (11:22:10)阅读2回复0
yk
yk
  • 管理员
  • 注册排名3
  • 经验值71075
  • 级别管理员
  • 主题14215
  • 回复0
楼主

  做者:360捉虫猎手研究员 0xr0ot Xbalien

  “超等回绝办事破绽”是360平安研究人员近期发现的一个安卓通用型回绝办事破绽,歹意进攻者可能操纵此破绽让手机中的肆意利用瓦解无法一般工做,几乎影响目前市道上所有的安卓APP利用。对此360捉虫猎手开发了一个主动化的检测东西,以便开发者自查修复。

  “超等回绝办事破绽”检测东西:/

  破绽阐发

  0xr0ot和Xbalien交换所有可能招致利用回绝办事的反常类型时,发现了一处通用的当地回绝办事破绽。该通用型当地回绝办事能够形成大面积的app回绝办事。

  针对序列化对象而呈现的回绝办事次要是因为利用中利用了getSerializableExtra() 的API,因为利用开发者没有对传进的数据做反常揣度,歹意利用能够通过传进畸形数据,招致利用当地回绝办事。

  破绽利用代码片段:

  好比XXX处传进BigInteger.valueOf(1)极有可能发作转型反常错误java.lang.ClassCastException。

  但后来交换中发现,当传进一个自定义的序列化对象Serializable或getParcelable对象时

  ,领受Intent的目标组件在getSerializableExtra()、getParcelable()等会抛出类不决义的反常java.lang.NoClassDefFoundError。那是因为,当你给破绽利用传进一个利用自己并没有的序列化类对象,在利用上下文中必定是找不到那个类的。

  自定义的序列化类很简单:

  对应的进攻代码中XXX处传进new DataSchema(),我们发现传进的key不论是否与破绽利用不异,城市抛出类不决义的反常。

  跟着测试的深进,我们通过logcat发现,在错误日记里纷歧定是getSerializableExtra()、getParcelable()招致的。然后我们就延伸了下,试着向getXXXExtra()传进我们自定义的序列化类对象,发现城市抛出类不决义的反常。

  测试app代码片段:

  接着我们测试了市道上大量支流利用,涵盖BAT等。发现那种办法能够通杀。我们起头觉得那个是android自己的问题,起头翻源代码。

  最初当解析到Serializable对象时,因为加载不到类,抛出反常

  但是回头想想,谷歌必定不是认为那是android的破绽,开发者只要加个try catch 捕获反常就能够了。

  破绽修复:

  不论是get什么extra,只如果getXXXExtra(),加上try catch捕获反常即可。

  破绽检测:

  为了便利开发者测试,360捉虫猎手发布了一个主动化的超等回绝办事破绽检测东西。下载地址:/

  开发者能够通过以下办法停止排查:

  1.监控java.lang.RuntimeException的错误日记

  在adb shell下敲进

  adb shell logcat | grep java.lang.RuntimeException

  利用我们的检测东西测试各个组件,假设发现如下类型的报错日记,即存在超等回绝办事破绽

  java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object (name = com.qihoo.intentfuzztester.extradata.DataSchema)

  2. 一段实在存在破绽的代码片段

  固然getExtras只承受Int类型数据,但putExtra打进一个序列化对象Serializable,法式仍然会瓦解,原因是getInt在底层仍然会对数据停止unparcel()的预处置,详细参考之前的破绽阐发。

  参考:

  

0
回帖

安卓“超级拒绝服务漏洞”分析及自动检测工具(转载) 期待您的回复!

取消