日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓拒绝服务漏洞分析及漏洞检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  超級拒絕服務漏洞是一個安卓通用型拒絕服務漏洞,惡意***者可能利用此漏洞讓手機中的任意應用崩潰無法正常工作,幾乎影響目前市面上所有的安卓APP應用。

  漏洞分析:

  0xr0otXbalien交流所有可能導致應用拒絕服務的異常類型時,發現了一處通用的本地拒絕服務漏洞。該通用型本地拒絕服務可以造成大面積的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

  但后來交流中發現,當傳入一個自定義的序列化對象SerializablegetParcelable對象時,接收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捕獲異常即可。


轉載于:https://blog.51cto.com/10595711/1696056

總結

以上是生活随笔為你收集整理的安卓拒绝服务漏洞分析及漏洞检测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。