注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

那些星星点点的微芒,终会成为燃烧生命的熊熊之光

 
 
 
 
 

日志

 
 

[转]关于手机应用安全的一些个人感悟(2012年终技术类总结2)  

2012-12-09 13:11:45|  分类: 安全一路走来 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


关于移动应用安全,推荐看碳基体最新的总结ppt:http://vdisk.weibo.com/s/jVB2B/1354783291  。本文是一些个人业余研究的不成体系感悟。 

一、关于android应用的反编译:jdgui不是万能 

反编译安卓应用中dex2jar+jdgui是最常见的用于快速了解手机应用逻辑的方法,不过不少情况下你会发现jdgui给出的代码存在明显逻辑不通的情况。比如说,怎么在还没开始运算,就return呢?怎么运算运算着,就break label呢? 



图1:jdgui给出的代码存在逻辑不通问题 

如果结合apktool反编译出来的smail指令代码,你就会发现:jdgui的逻辑判断调整算法可能存在问题。smail指令显示并不存在else、while、for等语法,这些都是靠各种goto来完成控制。jdgui按顺序解析指令,并根据if和goto指令动态进行逻辑判断以及调整。比如如下smail指令: 

====================================================== 
if-lt v0, v2, :cond_0    //表示当v0

…...    //这些是v0>=v1时执行的指令 

:cond_0 

……    //这些是跳转(goto)到“:cond_0”目标标签后要执行的指令 
====================================================== 


jdgui会可能显示为: 
====================================================== 
if(v0>=v1){         //和“if-lt v0, v2, :cond_0”相反 
    //这些是v0>=v1时执行的指令 

     
…… //这些是跳转(goto)到“:cond_0”目标标签后要执行的指令 
====================================================== 



如果增加如下goto指令: 
====================================================== 
if-lt v0, v2, :cond_0    //表示当v0

…...    //这些是v0>=v1时执行的指令 

goto :target_0    //执行完毕后跳到:target_0 

:cond_0 

……    //这些是跳转(goto)到“:cond_0”目标标签后要执行的指令 

:target_0    //:target_0目标标签 

……    //执行:target_0后面的指令 
====================================================== 

jdgui有可能显示成: 
====================================================== 
if(v0>=v1){         //和“if-lt v0, v2, :cond_0”在执行逻辑上存在潜在相反 
    ……   //这些是v0>=v1时执行的指令 
}else{ 
    ……     //这些是跳转(goto)到“:cond_0”目标标签后要执行的指令 


//执行target_0指令 
====================================================== 

但也有可能显示成: 
====================================================== 
if(v0>=v1){         //和“if-lt v0, v2, :cond_0”在执行逻辑上存在潜在相反 
    ……   //这些是v0>=v1时执行的指令 


……     //这些是跳转(goto)到“:cond_0”目标标签后要执行的指令 
……    //执行target_0指令 

====================================================== 


如果一个if指令集内出现多个不同目标标签的goto时,由于jdgui是按指令顺序进行判断和调整的,那么就有可能因为jdgui的动态调整、导致多个goto无法形成合理的闭合逻辑,这在查看的代码表现上就是和原逻辑相反、或者执行顺序上对不上等各种不符合逻辑的怪事。如果原代码逻辑存在while、for等循环的情况下,这个问题会更加明显。 


遇到这种情况,应对方法有二: 
(1)不看反编译出来的java代码,直接看smail。难度颇高,但却是成为大神的必备之路。 

(2)用XJad反编译jar。它就不会调整逻辑,只是“按原样”解析,这是jdgui动态调整失效、但又想看java逻辑的最便捷方法。 



图2:XJad按原样解析给出的代码 

附上根据XJad的代码进行修改,最终调通的java代码。可以见到,实际逻辑和反编译出来的还是存在相当大的差别。 


关于手机应用安全的一些个人感悟(2012年终技术类总结2)


图3:修改后可调通的代码 


二、关于android应用的日志调试:了解应用运行的有效手段 

如果在反编译代码无法得出有用信息的情况下,那么寻找甚至插入日志调试代码是另一个很有效的手段。从开发的角度来看,日志调试和记录是必需的编码手段,而其控制手段无非靠某个配置、变量或者常量。android源于java,其面向对象的特性会导致许多日志类并不会剔除,这就为通过修改smail指令获取调试内容创造了条件。比如某应用采用日志类常量控制手段,所以反编译修改其常量后,logcat就将整个通讯过程打印出来了: 




图4:修改某应用日志类常量获取应用运行信息。 

如果要了解的逻辑并没有日志输出,或者应用将日志类内的所有方法逻辑去掉,此时的方法就只能通过插入smail指令方法来恢复日志功能。而插入的地方和指令内容需要紧密联系应用逻辑,所以并无通用插入法则。 


三、关于安卓webview的数据库存储:可作为判定应用是否钓鱼的一种辅助手段 

安卓应用调用webview时,会往应用的私有存储位置(/data/data/[应用标识]/databases)建立webview.db和webviewCache.db。这两个数据库存储了该应用调用webview的历史访问路径、密码记录(明文)、cookies等等。有些应用伪造页面、用webview打开之,妄图通过隐藏url以实现钓鱼,这种情况下,可以通过检查这两个数据库存储的webview数据,就可以使其暴露。 

但恶意开发者也可以不伪造页面,通过监控webview,也能完成用户输入数据等各种敏感数据的获取。所以说,这方法存在很大局限性。 

另外一个问题是,在root状态下的任何一个应用,是可以读取任意地方的数据的;而且如果要清除应用的webview信息,只能通过应用管理下的“清除数据”完成。所以恶意开发者通过这里窃取信息,并非不可能。 

关于手机应用安全的一些个人感悟(2012年终技术类总结2)

图5:webviewCache.db 


关于手机应用安全的一些个人感悟(2012年终技术类总结2)

图6:webview.db中的cookies。SUS是个httponly cookies,而android并不支持 


四、关于手机安全研究的困惑 

年初,曾放言要进入Windows Phone 7的编程研究中;但要少花钱的当下,最终还是跟随了最便宜的安卓平台,并且圈定在和工作最相关的后端api接口通讯设计研究中。 

时光已经到了年底,越研究却只有各种困惑。手机api接口的数据纯粹和丰富性让恶意采集者欢呼雀跃,而针对手机api接口的攻击又无法采取web常见的辅助手段来防御,再加上安卓等操作系统的易于反编译性、考虑服务器负载导致通讯过程不加密或加密算法易被猜测,这一切都使得普通应用的接口防御设计无从入手;而对我来讲,所有的“破坏式”研究根本无法转化为有益的实际开发设计经验,这样的情况可谓始料不及。当提交搜狗号码通缺陷却无法提出防御建议时,心里曾问自己:研究了这么久,有啥用? 

破坏容易建设难,末日过后,该往何处去? 


五、附录:个人所接触到的有关手机应用中,关于接口通讯部分的一些安全问题 

(1)手机应用采取HTTP POST(甚至是HTTP GET)明文发送用户名和密码、或者通讯录、或者IMEI等唯一标识码。 
案例: 
(A)新浪微盘客户端漏洞造成用户密码泄漏:http://www.wooyun.org/bugs/wooyun-2010-012961 
(B)网易新闻iphone端敏感信息泄露(密码明文传输):http://www.wooyun.org/bugs/wooyun-2010-07673 

(2)手机应用加密算法不健壮导致容易被破解或者模拟;或者太健壮导致通讯服务器撑不住高并发和高流量。 

(3)手机应用留了太多的调试入口或者调试信息输出。 
案例: 
(A)深信服手机客户端日志信息泄露:http://www.wooyun.org/bugs/wooyun-2010-013940 
(B)SECURITY remove lock pattern from being logged: 
https://github.com/CyanogenMod/android_frameworks_base/commit/56c014f289e04c0fd769af55c861b6e7bf7b4280 
(关联:zone讨论)CyanogenMod被发现居然将用户设置的锁屏手势记录在日志中: 
http://zone.wooyun.org/content/1426 

(4)手机应用接口输出数据过于丰富,导致敏感信息泄露。 
案例: 
交委开发软件 泄露的哥隐私:http://gcontent.oeeee.com/b/7d/b7da6c184018c1c0/Blog/379/7fc1ff.html 

(5)手机应用接口没有做频次等各种恶意行为检测和限制处理。 
案例: 
搜狗号码通手机客户端可被恶意攻击、以及隐私泄露问题:http://www.wooyun.org/bugs/wooyun-2012-06459 

(6)手机应用接口没有检查传入参数,仅依赖加密手段,导致出现SQL注入等web应用常见的问题。 
案例: 
(A)蚂蜂窝手机应用背后的HTTP API接口存在SQL注入漏洞:http://www.wooyun.org/bugs/wooyun-2012-04324 
(B)“魂斗罗”手机应用程序SQL注入(仅靠简要描述归入此类):http://www.wooyun.org/bugs/wooyun-2010-014531 

(7)手机应用在演示期没做好保密工作,出现应用安装包泄露,导致演示服务器、或演示服务器所在的可连通内外网的C段ip集体暴露。 

(8)手机应用数据交由云端处理时出现逻辑错误,导致信息泄露等问题。 
案例: 
UC云端加速引擎存在非正常泄露referer问题:http://www.wooyun.org/bugs/wooyun-2010-09025

(9)手机应用配置文件和证书等容易被修改,从而导致可被“打包党”替换配置,以进行钓鱼。 
案例: 
建设银行android客户端设计逻辑缺陷导致用户被钓鱼:http://www.wooyun.org/bugs/wooyun-2010-04930 

(10)手机应用使用webview(此时无法看到url地址),容易被“打包党”替换配置、或者被恶意开发者仿造网页页面、或者被开发者监控webview等,以进行帐号等钓鱼。 
案例: 
某应用开发商开发的恶意手机应用以盗取微博账号(可惜微博被删,找不到了)

  评论这张
 
阅读(64)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017