移动渗透top 10

来源:互联网 发布:最好企业网络投资理财 编辑:程序博客网 时间:2024/04/30 09:16

OWASP统计的2015移动安全问题TOP 10

M1:平台误用

未使用平台安全特性的误用,包括android intent,permission,TouchID,Keychain等,存在该风险的app有以下几种表现:

1.违反已公布的准则:Android iOSWindowsPhone平台都有自己的安全准则,例如如何使用iOS Keychain或如何导出Android service,如果app不遵守准则就会产生风险

2.违背公约或者惯例

3.无意的误用:标志位错误,权限错误等

 

M2:不安全的数据

包括不安全的数据存储和无意的数据泄露

不安全的数据存储包括:SQL数据库、Log文件、manifest XML文件、二进制存储、CookieSD卡、云同步等

无意的数据泄露包括:系统、Framework层、编译器环境、新硬件等,由于未文档化URL缓存、按键缓存、剪贴板缓存、后台数据、日志、浏览器Cookie、第三方分析数据等的处理方式

 

M3:不安全的通信

包括TCP/IP,WiFi,,NFC,audio,红外线,GSM,3G,SMS,TLS通信等

例子:缺乏证书检查、不安全的握手协议、隐私信息泄露

 

M4:不安全的认证

包括未能鉴别用户、未能保存用户身份、不安全的会话管理,会话问题包括:会话标识可预测、未能注销用户、会话生命周期风险

 

M5:加密不充分

包括弱密码、短秘钥、加密类型错误、密码学漏洞

 

M6:不安全的授权

包括在客户端进行授权操作、认证取代授权

 

M7:客户端代码质量

M8:代码篡改

M9:逆向工程

M10:外部函数

 

移动安全工具


移动渗透测试工具:

iMAS                iOS安全测试工具

GoatDroid      android安全测试工具

iGoat               iOS安全学习工具

Damn Vulnaerable iOS Application       攻防技巧练习工具

MobiSec          移动测试框架

Androick         移动app评估

NowSecure App Testing Community Edition app测试工具

Seraphimdroid        安全学习工具

 

CodeInspect  Android二进制应用分析

Fino                  Android安全评估工具

Introspy          Android黑盒测试

 

Android反编译工具:

      ApkTool  smali  Jeb  Jd-Gui  ApkStudio  Dex2jar  Bytecode-Viewer  dexdisassembler  FernFlower 

 

安全测试过程

1.      信息收集

手动跟踪程序理解其运作过程,更深入一些可以嗅探网络

识别app使用的网络接口,包括:移动通信(GSM,GPRS,EDGE,LTE) 无限(WiFi(802.11标准,蓝牙,NFC) 虚拟接口(VPN)

识别app使用的网络协议?是否是安全协议,是否可以切换为不安全协议

App是否用于商务?如何存储信用卡交易信息,付款内部特点

监视组件通信:NFC 蓝牙 GPS 摄像头麦克风传感器 USB

收集开源情报 (搜索引擎、源码库、开发论坛等)找到源码或配置信息

使用何种框架

是否和其他application service data交互?如电话(SMS,phone),联系人,自动更正/字典服务,从其他app或服务接收信息,GoogleWallet,iCloud,社交网络(Facebook,Twitter,LinkedIn,Google+),Dropbox,Evernote,Email

确定服务器程序环境?主机提供商(AWS,APP Engine,Heroku,Rackspace,Azure),开发环境(Rails,Java,Django,ASP.NET),单点登录认证api(GoogleApps,Facebook,iTunes,OAuth),其他api(支付网关,SMS消息,社交网络,云存储,广告)

对暴漏网站资源进行全面爬取,找到感兴趣的数据或行为,包括:泄露敏感数据、UI中的隐藏数据、错误信息、缓存信息等

2.      静态分析

准备工作:

         如果没有源码尝试反编译程序

         查看app请求权限,是否有配置错误,调试标识是否存在,有无读写权限

         使用的框架是什么,是否是跨平台框架

         使用了哪些库和第三方库?这些库是否过期,是否有漏洞,是否有提权接口,是否为native代码

         App有无检查是否root/越狱?如何做到的,是否能绕过,例如改名改路径

         使用了哪些对象产生各种视图?该结果对于之后的测试用例很有效,例如有些使用web浏览器功能,有些则是本地ui控件

         所有的代码都可以运行在标准运行时环境下还是某些文件/库在使用动态加载方式

         将每个权限和实际实现对应起来,通常开发者请求的权限比实际使用的多,确定同样的功能是否可以用更低权限完成

         定位硬编码的API key证书密文

         找到不可信数据起点,判断是否可以绕过访问控制,验证和标准化输入数据,传给其他解释器

                   web service调用

                   从其他app和服务接收数据

                   收到的短信

                   从文件系统读取的信息

认证

         通过UI找到用户认证处理代码,通过篡改,重放和暴力破解模拟用户输入

         检查认证方式是在线/离线,如果认证时离线的可以尝试SQLi绕过认证

         检查app是否使用除了用户名/密码之外的信息,例如上下文信息(设备描述符/位置),证书,令牌

         是否用到刷卡或触摸密码?或是传统的用户名密码,访问

         评估将可见对象映射成为认证字符串,检验是否有足够的熵

         是否允许其他设备的传入连接(Wi-FiDirect, Android Beam, network services)

                   App是否正确认证远程用户或对等端并授权访问资源

                   App如何处理多次身份验证尝试失败

                   是否有通知用户遭受潜在攻击的机制

         是否存在对认证失败的用户锁定机制?最大多少次尝试,如何处理分布式用户锁定?如何锁定?

         单点登录:OAuthFacebook GoogleApps

         SMS

                   传感器如何认证?密码头部信息

                   是否使用一次性(OTP)密码?其他app是否能访问该数据

                   如果攻击者篡改OTP使用gprs modem会怎样

                   App有无验证篡改的OTP

         USSD

                   是否使用USSD/Flash消息认证?基于USSD的认证比SMS更可信

         推送消息:

                   App通过推送消息处理信息,那么是符合验证发送者身份的

授权:

         运行时重新检查文件权限

         是否能以当前角色访问?是否有角色特定功能,定位不可信源(数据库文件 http响应)的潜在标识用于提升权限,查找非常规的访问方式

许可:

         在本地获取支付信息是许可检查是否可公婆(运行时篡改二进制,或修改本地配置文件)

         代码提示许可无效是否只是ui层的限制

         许可检查是由服务器做还是平台许可服务做的

         App如何检测篡改?是否发送警告,是否打开关闭失败,是否擦除数据

会话管理:

         确定会话超时在本地还是服务器端,确定会话超时设置为最小值

         app用到的敏感信息是否在内存刷新知道会话结束

         会话id有没有传入url,检查用到的post方法和隐藏域

         检查服务器端会话篡改

         检查会话令牌随机性和有序性

数据存储:

加密:算法是否最佳组合?密码怎样生成密钥?加密方法是否存在减弱有效性的方面?密钥如何管理和存储?是否降低破解复杂性?

         验证app是否利用沙箱之外的存储区存储未加密数据,例如:

                  访问控制粒度有限的位置(sd卡,tmp目录等)

                   备份目录或不合适的位置(iTunesbackup, external storage)

                   云存储服务例如Dropbox,Google Drive, S3

         App在某刻向文件系统写入敏感信息,例如:

                   凭据(用户名密码 api密钥认证令牌)

                   支付信息

                   病人数据

                   签名文件

         是否存在敏感信息使用公开api(例如联系人)写入磁盘

信息收集:

         日志

                   App是否打日志,是否可访问敏感信息

                   访问日志的机制是什么,是否受保护

                   是否有隐私信息作为日志

                   设备标识是否能标志用户(苹果设备UDID)

                   App是否上传日志到服务器?扩展名和内容是否经过验证,能否嵌入恶意代码

         缓存:文本、位置信息、剪贴板、截图、浏览器缓存、非标准缓存位置(SQLite数据库)HTTP响应缓存

         异常:崩溃日志中是否有敏感信息?app容器外部如何处理数据和日志

         第三方库和API:需要哪些权限?是否访问或传输敏感信息

Web App相关:

         XSSHTML注入:检查不可信数据传递给webviewbrowser的代码,判断是否正确编码和规范化输入

         命令注入(app使用了shell):定位到可以修改用户输入的点,确定攻击者是否可以任意注入命令或控制

         CSRFSQL注入、CookiesHTML5XML注入、跨域策略

网络:是否使用不安全协议收发敏感信息?FTP SNMPv1 SSHv1,用于实现协议的库是否存在漏洞

传输层保护:

         App是否正确实现证书锁定

         是否验证证书是否过期,是否合法授权,目的端信息匹配证书?

         是否操作系统/app共同验证证书还是仅操作系统?

         检查是否存在修改再不同接口传输的行为 (3G/4G vs. Wi-Fi),是否加密

有用的字符串:

DEBUG

printStackTrace

username/userID/password/passwd/pwd/

key/encrypt/decrypt/MD5/MD4

timeout/session.invalidate

root/jailbreak

test/demo/

sqlconnection/sqlevents/sqldemo/sqlconn/sqltest

account/URL/hostname/ipaddress

proxy

3.       动态分析

判断应用类型:

原生程序:可以安装到设备上的app,大部分代码存储在设备上,通过HTTP/s协议请求数据

Web服务:使用SOAPREST网络服务通信的原生程序

浏览器:许多商业程序都设计成为基于手机浏览器的app

混合程序:原生程序和浏览器的混合

建立基线:

生成文件系统指纹(app安装前)

        安装配置使用app:检查文件系统已确定创建了哪些文件/数据库,数据是如何存储的,是否有敏感数据未加密或保护不当;注意信用卡、支付等高敏感信息,查看数据库,日志,缓存和崩溃日志

调试:

        附加调试,在感兴趣的代码上下断点

        检查日志和通知

        观察内部通信和外部服务/进程通信

活跃测试:

        本地app测试:

             暴漏的IPC接口:嗅探模糊测试绕过授权检查

             加密:暴力破解key,pin.hash尝试使用泄露信息重建加密数据

    Web app XSS/HTML注入,命令注入,CSRF,SQL注入,Cookies,HTML5Storage

         认证:

                   访问认证端口:NFC,SMS,推送消息,IPC通道

         授权:

                   尝试绕过特权功能

                   检查配置和本地数据是否可以改写

                   检查文件系统权限

文件系统分析:

                   评估app在整个生命周期中的行为,是否在进入不同阶段(转入前台,转入后台,退出程序)为保持状态调用了特殊功能

                   缓存数据存储

                   寻找设备上的文件

                   存储未加密数据

                   加密的备份数据

                   用户名/密码或app特定的设备id

                   App权限,访问控制

                   证书、支付信息或更敏感的信息和日志、文本、崩溃记录等

                   AppUI回溯栈是否存储敏感信息

                   使用取证工具是否能恢复文件系统数据和数据库

         内存分析:

                   (注销用户/UI组件间切换)操作后是否内存中保存敏感信息

                   能否通过转储内存和设备信息获取加密密钥、证书、支付信息和其他敏感信息

远程app/服务测试

         认证:

                   哪些功能可用(3G,4G,Wifi,etc)

                   若远程认证服务器不可用会发生什么?

                   评估密码要求的强度

                   测试账户锁定的实现

                   分析认证所需各个方法,注意通常wifi是认证的薄弱环节,确保认证的强壮性和不依赖于某些属性(MDN,ESN,etc)

                   检查认证令牌是否在用户初始化密码后弃用

                   单点登录是否启用

                   基于SMS的:OTP(一次性密码),双因素认证

                   推送消息

                   许可

         授权:

                   如果远程授权处理服务不可用会发生什么?

                   测试是否可以直接访问后端资源?

                   服务端访问控制是否强制执行

                   横向和纵向特权提升

         会话管理:熵分析、设备描述相关?、注销后会话令牌刷新?、生命周期、设备上处理会话令牌、特权提升、无效的会话终止、Session Fixation、登录前/登录/登陆后Session检查、唯一会话生成

         传输层测试:中间人攻击、窃听、SSL检查、SSLStriping

         服务端攻击:出发未处理异常、XSSSQL注入、XML炸弹、缓冲区溢出、上传漏洞、Open Redirect、跨域资源共享

         服务/网络/app扫描:扫描前几步得到的目标服务器漏洞

        

0 0
原创粉丝点击