《移动终端安全ppt课件.pptx》由会员分享,可在线阅读,更多相关《移动终端安全ppt课件.pptx(93页珍藏版)》请在三一办公上搜索。
1、移动终端安全,赵 双2022年11月13日星期日,About me,赵双, ID:Dflower研究方向:漏洞挖掘、恶意代码分析、 WEB渗透测试、Android安全国内安全技术小组insight-labs成员 (www.insight-labs.org)0day安全:软件漏洞分析技术(第2版) 作者之一OWASP China 2010、XCon 2011 Speaker,0 x00 ANDROID安全机制,Android架构,Android架构,Linux Kernel(Linux内核层):Android 的 Linux 核心为标准的 Linux 2.6内核,并加入移动设备相关的驱动程序显示
2、驱动、Flash 内存驱动、照相机驱动、音频驱动、WiFi 驱动、键盘驱动、蓝牙驱动、Binder IPC 驱动、Power Management(能源管理),Android架构,Libaries(系统运行库层)运行库:以系统中间件的形式提供 Android 运行环境:Dalvik虚拟机Dalvik 虚拟机 VS JAVA 虚拟机:它执行的不是 JAVA 标准的字节码(bytecode )而是 Dalvik 可执行格式(.dex)中执行文件。 Java VM 是以基于栈的虚拟机,而 Dalvik 是基于寄存器的虚拟机。,Android架构,Application Framework(应用框架层
3、):为应用程序层的开发者提供 API。,Android架构,Application(应用层):系统应用:主屏幕(Home),联系人(Contact),电话(Phone),浏览器(Browsers)等其他应用:开发者使用应用程序框架层的 API 实现的程序。,Android组件模型,Activity(活动)Activity 就是一个界面,一个应用程序由一个或者多个Activity组成Service(服务)运行在后台的没有可视化的用户界面的功能模块Broadcast Receiver(广播接收器)专注于接收广播通知信息,并做出对应处理的组件Content Provider(内容提供器)应用程序间数
4、据共享的一种标准接口,以类似于URI的方法将一些特定的应用程序数据供给其它应用程序使用,Android权限分类,手机所有者权限自用户购买 Android 手机后,用户不需要输入任何密码,就具有安装一般应用软件、使用应用程序等的权限;Root 权限Android 系统的最高权限,可以对所有系统中文件、数据进行任意操作。如果将 Android 手机进行 root 权限提升,则此后用户不需要输入任何密码,都将能以 Android root 权限来使用手机。应用程序权限应用程序对 Android 系统资源的访问需要有相应的访问权限,它在应用程序设计时设定,在 Android 系统中初次安装时即生效。,
5、Android 应用程序权限,Android默认应用是没有任何权限去操作其他应用或系统相关特性的,应用在进行某些操作时都需要显式地去申请相应的权限。每个应用程序的 APK 包里面都包含有一个 AndroidMainifest.xml 文件,该文件除了罗列应用程序运行时库、运行依赖关系等之外,还会详细地罗列出该应用程序所需的系统访问权限。在应用安装的时候,package installer会检测该应用请求的权限,根据该应用的签名或者提示用户来分配相应的权限。,权限级别,normal:低风险权限,在安装的时候,系统会自动授予权限给 app。dangerous:高风险权限,系统不会自动授予权限给 a
6、pp,在用到的时候,会给用户提示。signature:签名权限,将权限授给具有相同数字签名的应用程序。signatureOrSystem:签名或系统权限,将权限授给具有相同数字签名的应用程序或系统类app,一般不推荐使用。,0 x01 Android安全现状,1. Android系统漏洞,拒绝服务权限绕过代码执行信息获取权限提升,2. Android软件漏洞,数据泄漏组件暴露代码执行客户端注入服务端注入,3. Android恶意程序,Android恶意程序的危害:发送扣费短信窃取用户隐私赚取广告流量下载其他恶意程序发送垃圾短信,4. APK重打包,重打包是指将正常的APK程序文件解压缩/反编译
7、后进行修改,然后重新打包签名国内第三方市场充斥着大量的重打包程序攻击者常常利用重打包技术将恶意代码注入到正常APK文件中Example:Geinimi,正常样本,恶意样本,5. Android僵尸网络,已经出现的僵尸网络:SMS僵尸网络:ZeuSHTTP僵尸网络:Geinimi、AnserverBotIRC僵尸网络:AndroidOS.Foncy.A其他僵尸网络P2P僵尸网络C2DM/GCM云推送僵尸网络,Android Rootkit,NCSU大学研制出Android点击劫持rootkit原型隐藏:已经安装的软件在桌面、launcher和系统设置中消失,但实际上依然存在于手机系统中并能正常运
8、行劫持: 桌面或launcher中的图标被用户点击后,实际执行其他的恶意应用程序http:/web.ncsu.edu/abstract/technology/wms-jiang-clickjack/,6. Android恶意广告,恶意广告成为危害用户、开发者乃至整个Android产业链的毒瘤94.71%的安卓手机用户被装有广告软件,平均每部手机上存在11.68款含广告的软件,63%的用户里存在至少一款恶意广告。恶意广告的危害影响手机操作体验消耗流量窃取隐私,7. Android用户隐私泄漏,复旦大学公布一项调研成果显示,目前市场上最热门的330个安卓应用程序中,有58%存在泄露用户隐私的情况。
9、泄漏的数据包括IMEI手机号码地理位置 SIM 卡序列号通讯录短信,Android:用户隐私泄漏,中国信息安全测评中心,2012 年 Android 手机软件个人信息安全测评报告显示,超过50%的软件具有泄漏用户隐私的威胁,0 x02 Android漏洞,目录,短信伪造漏洞 SMS Phishing, Smishing活动劫持漏洞 Activity Hijacking通知滥用漏洞 Notification Abuse输入法监听 Input Hack第三方软件漏洞,短信诈骗,发件人:8613572331876建行提示:2012年2月21号,您的建行卡支出1200.00,如有疑问请与我行客服核实:
10、400-6886058中国建行,发件人:95533建行提示:2012年2月21号,您的建行卡支出1200.00,如有疑问请与我行客服核实:400-6886058中国建行,短信诈骗,识别和拦截欺诈短信的最广泛方法使用的方法是检查发件人号码安全软件(如360手机卫士)的垃圾 短信拦截功能主要依靠发件人黑名单和 短信内容关键字进行过滤,短信诈骗,如果发件人的号码是受信任的号码呢?,常规的短信伪造方法,向短信数据库(content:/sms/inbox)插入一条记录 ContentValues values = new ContentValues(); values.put(address, ”955
11、33); values.put(type, 1); values.put(read, 0); values.put(“body”, “这是一条伪造短信); values.put(date, new Date().getTime(); values.put(person, null); Uri uri = this.getApplicationContext().getContentResolver() .insert(Uri.parse(content:/sms/inbox), values);,常规的短信伪造方法,但是这种方法存在一个问题需要声明android.permission.WRIT
12、E_SMS安装时系统会提示用户程序具有编辑短信的权限可能会被安全防护软件判定为危险程序,Android smishing 漏洞,发现时间:2012年11月,由Xuxian Jiang(NCSU)发现影响范围:Android4.2版本以下的Android系统漏洞描述:允许不具有WRITE_SMS的程序进行短信伪造http:/www.csc.ncsu.edu/faculty/jiang/smishing.html,demo,漏洞原理,出现该漏洞的原因是Android系统的com.android.mms.transaction.SmsReceiverService系统服务未判断启动服务的调用者,攻击
13、者可以通过该应用发送伪装短信到用户收件箱。,漏洞分析,POC代码:,漏洞分析,com.android.mms的AndroidManifest.xml,SmsReceiverService被导出的时候没有使用permission声明(signature或signatureOrSystem或Dangerous),在代码中也没有显式调用checkPermission,这违反了android开发规范,使得组件暴露导致权限绕过(permission redelegation),Permission redelegation,很多第三方软件也存在大量permission redelegation漏洞,例如
14、:小米MIUI错误报告程序( bugreport):可以被任意程序调用,并将结果保存至/sdcard/MIUI/debug_log/bugreport-.log文件中,该log文件可以被任意第三方应用软件读取,目录,短信伪造漏洞 SMS Phishing, Smishing活动劫持漏洞 Activity Hijacking通知滥用漏洞 Notification Abuse输入法监听 Input Hack第三方软件漏洞,Android活动栈,Android运行时,会在很多活动(Activity)中进行切换系统维护着一个Activity的历史栈,用于在用户点击后退时,恢复前一个Activity,栈
15、顶指向当前显示的Activity。,Android活动劫持,启动一个后台服务(Service),不停枚举当前进程中是否有预设的进程启动如果发现有预设进程,则使用Intent开启钓鱼Activity,并使用FLAG_ACTIVITY_NEW_TASK选项使得这个Activity位于栈顶,DEMo,目录,短信伪造漏洞 SMS Phishing, Smishing活动劫持漏洞 Activity Hijacking通知滥用漏洞 Notification Abuse输入法监听 Input Hack第三方软件漏洞,Android通知 vs IOS通知,Android通知,通知标题(Title)大图标通知内
16、容(Text)其他信息(Info)小图标通知时间,通知滥用,Android系统在显示通知消息的时候并不指明该通知是由哪个应用发出的用户通常通过通知消息中的图标和内容来想当然地判定通知消息的发起者恶意程序可以通过模仿正常应用的通知消息来误导用户,从而发起钓鱼等攻击,DEMo,目录,短信伪造漏洞 SMS Phishing, Smishing活动劫持漏洞 Activity Hijacking通知滥用漏洞 Notification Abuse输入法监听 Input Hack第三方软件漏洞,Android输入法,Android系统在启动第三方输入法的时候会弹出如图所示的警告框iOS系统不允许安装使用第三
17、方输入法为什么?,Android输入法机制,所有的输入法应用都需要继承特定的service。Android平台的输入法框架为输入法应用定义了一个基类InputMethodService。InputMethodService提供了一个输入法的标准实现。定义了输入法生命周期内的重要函数,提供给开发人员进行相应的处理。当用户触发输入法显示的时候(客户端控件获得焦点),InputMethodService启动。首先调用onCreate()函数,该函数在输入法第一次启动的时候调用,适合用来做一些初始化的设置,与其他service相同;调用onCreateInputView()函数,在该函数中创建Keyb
18、oardView并返回;调用onCreateCandidatesView()函数,在该函数中创建候选区实现并返回;调用onStartInputView()函数来开始输入内容,输入结束后调用onFinishInput()函数来结束当前的输入,如果移动到下一个输入框则重复调用onStartInputView和onFinishInput函数;在输入法关闭的时候调用onDestroy()函数。,Android输入法机制,在InputMethodService中,有几个值得注意的方法或类getCurrentInputEditorInfo() 可以获得当前编辑框的一组对象属性EditorInfo,有如下的
19、关键属性EditorInfo .hintText:编辑框的默认值,如图所示,其中Password和Email address 即为编辑框的默认值EditorInfo .packageName:所属的apk的包名,例如手机qq中的所有编辑框的packageName都是com.tencent.qqgetCurrentInputConnection()这个方法可以获得当前的编辑框的一个InputConnection对象,而这个对象则有多个强大的方法可以调用commitText(CharSequencetext, int newCursorPosition),用来向编辑框写入值,输入法监听,可以自己实
20、现一个输入法,在输入每一个字符的时候记录,最后在onFinishInput方法处把输入框的值发送到特定服务器或者利用重打包的方法修改一个现有的输入法(例如搜狗),在commitText和onFinishInput处插入恶意代码,将输入的内容通过自定义的监听类发送到特定服务器,DEMO,目录,短信伪造漏洞 SMS Phishing, Smishing活动劫持漏洞 Activity Hijacking通知滥用漏洞 Notification Abuse输入法监听 Input Hack第三方软件漏洞,外部数据存储导致数据泄漏,小米MIUI 备份程序用户数据泄漏漏洞编号 WooYun-2012-0818
21、7在MIUI中,用户通过备份程序(Backup.apk)将个人数据、应用程序和应用数据保存在本地,以便升级或刷机以后恢复。该应用将备份内容以明文方式保存在SD卡上。,内部数据存储导致数据泄漏,网易手机邮Android客户端 帐户密码明文存储漏洞编号:WooYun-2012-10060在/data/data/ease.rpmms/shared_prefs/config.xml明文保存如下数据:1. 账号;2. 密码的base64编码值;3. 手机号,传输问题导致数据泄露,陌陌 登陆数据明文传输漏洞编号:WooYun-2012-05088,数据验证导致服务端注入,金山词霸:手机客户端Feedbac
22、k XSS漏洞注入管理员后台漏洞编号WooYun-2012-10989,数据验证问题导致客户端注入,利用恶意二维码攻击快拍漏洞编号 WooYun-2012-09145识别出来的二维码以html形式展示,可以执行html和JS脚本,用以读取本地文件和XSS跨站脚本攻击,x=new XMLHttpRequest();x.open(“GET”,file:/localhostdefault.prop,false);Alert(x.responseText);,0 x03 Android Malware,在用户不察觉的情况下接收和执行控制者发出的指令,Android Bot,发送扣费短信,盗取敏感信息,
23、赚取网络流量,发送垃圾短信,下载其他病毒,Android bot种类,传统BotHTTP BotTCP BotSMS BotGCM Bot,IRC BOT (属于TCP Bot),加入IRC聊天频道,保持静默,接收到新消息,控制命令?,执行指令,Y,N,DEMO,IRC BOT,SMS BOT,注册SMSReceiver,监听SMS广播,接收到新短信,控制命令?,终止广播,执行指令,传递广播,Y,N,DEMO,SMS Bot,使用GCM 推送服务,GCM BOT,Bot 注册:(1) Bot 向Google的C2DM Server发送C2DM用户名(硬编码在bot里,GCM的话发送的是Send
24、er ID)(2) C2DM服务器返回一个注册ID (3)Bot将注册ID发送到 C&C Server,GCM Bot,命令传递:(a) Botmaster 通过C&C Server 发送命令(当然Botmaster和C&C Server可以合二为一) (b) C&C Server使用C2DM用户名和密码(如果是GCM的话就是API Key)向C2DM Server进行验证,之后发送控制命令和bot的注册ID(3)C2DM Server 根据注册ID将控制命令推送给Bot,GCM Bot,静默状态下的隐蔽性所有使用推送服务的应用共享同一个C2DM长连接,GCM BOT,67,控制命令的隐蔽性控
25、制命令来自Google服务器Android手机中,许多内置程序或其他程序都会接收C2DM消息,如Gmail、Google Map,Facebook等。,GCM BOT,68,心跳包流量消耗GCM Bot 900 bytes/hourIRC Bot(interval 90s) 5760 bytes/hourHTTP(interval: 10min): 7200 bytes/hour,GCM BOT,基于HTC Dream手机的功率模型,估计僵尸木马在运行1小时过程中的WiFi和3G电量消耗,GCM BOT,70,接收命令耗时WiFi环境:2s: 60%2min: 95%3G环境:5s: 53%2
26、min: 99%,GCM BOT,71,特点比较,HTTP BOT 需要定时连接C&C服务器检查新命令,会耗费大量的网络流量 周期性连接可能会暴露C&C服务器 TCP BOT 时刻保持在线,响应命令快 长时间连接容易暴露C&C服务器SMS BOT 不需要与服务器保持连接,响应命令快 发送短信会产生一定费用 需要使用敏感权限:Receive_SMS, Send_SMSGCM BOT Bot和C&C Server之间的通信隐蔽在GCM服务中,不容易被发现和检测耗费流量少,不需要单独的keep-alive机制,接收命令耗时短一旦被发现,容易被阻断,恶意代码的传播:重打包,AndroidManifes
27、t.xml,Original Class,Malicious Class,MainActivity,将MainActivity替换为恶意activity,启动activity,1. Write a malware,重打包 Repackage,启动恶意服务,启动原程序的main activity,原app的main activity,稍后我们会对其进行修改,结束自身activity,1. 准备要注入的木马程序,2. 反编译原app, 修改其AndroidManifest.xml,重打包 Repackage,a) Remove the “android.intent.action.MAIN” at
28、tribute of the original main activity,b) Add malwares main activity with “NoTitleBar” and “android.intent.action.Main” attributes, add necessary services, receivers, etc.,c) Add necessary permissions,3. 反编译恶意代码的APK,将其smali和资源文件拷贝到原APK的反编译目录中4. 修改恶意代码Main Activity类的smali代码,将 “startactivity”变量设置为原app的
29、main activity5. Repackage and Sign,重打包 Repackage,DEMO,重打包 REPACKAGE,重打包的福音:Android签名验证漏洞,漏洞危害:在不破解加密签名的前提下修改合规APK的代码(重打包),可以绕过android应用的签名验证安全机制漏洞原理:由于ZIP格式允许存在两个或以上完全相同的路径,而安卓系统没有考虑这种场景。在该情况下,android包管理器校验签名取的是最后一个文件的hash,而运行APK加载的dex文件却是zip的第一个dex文件。,0 x04 Android恶意代码分析,APK文件是一个ZIP格式的压缩文件,解压之后可以得到
30、 :META-INF directory: 包括manifest, certificate等Res directory: 资源文件Resources.arsc: 编译后的资源文件AndroidManifest.xml:程序全局配置文件,包括app的package infos, activities, receivers, permissions等Classes.dex: dex格式的Dalvik虚拟机执行码,APK文件格式,Disassembly将dex字节码转换为smali格式的汇编码 (http:/ http:/pallergabor.uw.hu/androidblog/dalvik_op
31、codes.html,Disassembly & Decompilation,Decompilation将dex字节码转换为Java源代码,Disassembly & Decompilation,GEINIMI(给你米)是在中国大陆传播广泛的一款Android恶意代码GEINIMI常被采用重打包的方式隐藏在众多第三方市场中的游戏等应用中,GEINIMI 分析,GEINIMI 分析- AndroidManifest, , ,GEINIMI 分析- AndroidManifest, ,Add a receiver, a service and an activity,GEINIMI 分析 - An
32、droidManifest,GEINIMI 分析 Source Code,MainActivity:com.dseffects.MonkeyJump2.jump2.c.rufCuAtj,Jump to com.dseffects.MonkeyJump2.jump2.h,GEINIMI分析 Source Code,连接到127.0.0.1:5432/4501/6543 并发送消息:“hi, are you online?”,如果收到回应“yes, Im online”,表明GEINIMI已经存在 ,则比较已经存在的版本与当前版本哪个较新。,com.dseffects.MonkeyJump2.ju
33、mp2.h,启动一个bot服务,然后结束自身activity,GEINIMI 分析 Source Code,com.dseffects.MonkeyJump2.jump2.f,一旦接受到SMS_RECEIVED 或者BOOT_COMPLETED广播,onReceive函数就会被调用,该函数会拦截并读取短信内容,终止掉SMS_RECEIVED广播以防其他应用接收到该短信,如果是BOOT_COMPLETED广播,则会启动bot服务,GEINIMI 分析 Source Code,Bot服务会定时从C&C服务器读取控制命令存储到Hashmap中,GEINIMI 分析 Source Code,控制命令采用DES加密,解密后的命令:,恶意代码分析常用工具,反编译工具APKToolDex2JarJDGUI静态分析工具Androguard(http:/,Thank you,赵 双2022年11月13日星期日,