基于 Android APP 安全测试流程(二) – 作者:redhatd

1、大纲

APP的键盘测试(可选)

抓包分析APP交互数据

业务功能测试(大体方向)

合规性测试(可变)

2、app的键盘测试( 可选)

其实这个很简单,可以做为可选项目,因为有些APP不重视这部分,或者不需要这部分。

但是涉及到支付交互的时候输入键盘部分应引起重视。

说了键盘记录不得不说input    input会想系统写入你输入的东西具体实现代码。  对开发有兴趣可以了解一下。

方法A:

1 首先找到input 命令的位置:

system//bin/input

2 查看input的内容如下

cat .system//bin/input

# Script to start “input” on the device, which has a very rudimentary

# shell.

#

base=/system

export CLASSPATH=$base/framework/input.jar

exec app_process $base/bin com.Android.commands.input.Input $*

发现这句是重点: exec app_process $base/bin com.android.commands.input.Input

3 在framework 查找文件:

find ./ -iname input

4 最后发现下面文件是input命令的源码实现:

/frameworks/base/cmds/input/src/com/android/commands/input/Input.java

方法B:(引用https://blog.csdn.net/u010886975/article/details/54580605)

我们将监听输入字符。创建一个实例GetInputChar继承AccessibilityService,重写onAccessibilityEvent方法 @Override

public void onAccessibilityEvent(AccessibilityEvent event) {  
        try {  
            String inputChar= event.getText().get(0).toString();  
            Log.i(">>>>>>>", inputChar);
            AccessibilityNodeInfo rootNode = getRootInActiveWindow();   
        } catch (IndexOutOfBoundsException e) {  
            e.printStackTrace();  
        }     
    }

然后在Manifest中声明权限

<service               
android:name="com.example.testgettext.GetInputChar"               
android:enabled="true"               
android:exported="true"               
android:label="@string/app_name"               
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >               
<intent-filter>                   <action android:name="android.accessibilityservice.AccessibilityService" />              
 </intent-filter>                
<meta-data                   
android:name="android.accessibilityservice"                  
 android:resource="@xml/accessibility" />          
 </service>

在我们的res文件目录下建立一个xml文件夹,创建一个accessibility.xml文件,内容如下:


<?xml version=”1.0″ encoding=”utf-8″?> 

  <accessibility-service xmlns:android=”http://schemas.android.com/apk/res/android”      
android:accessibilityEventTypes=”typeViewFocused|typeViewTextChanged”       

android:accessibilityFeedbackType=”feedbackVisual”       

android:canRetrieveWindowContent=”true”      

 android:description=”@string/aaa”     

android:packageNames=”xxx.xxx.xxx”     

android:notificationTimeout=”100″ />

这里的packageNames上指定,你想要监控APP的包名。就OK了。 

安装好app之后,到设置->辅助功能:刚刚安装的App打开即可。

这里说下一般APP的键盘情况分为以下几种

1:APP输入调用安卓系统键盘

一般认为高风险,可能被劫持利用。

2:APP调用应用中自带键盘输入

一般认为中风险,可能被其他APP以触摸点绝对定位方式劫持。

3:APP调用应用中自带键盘并随机打乱键盘顺序 (这种设置一般银行APP比较多 有打乱数字和键盘按键的 还有在这个界面下禁止截图的)

一般认为低风险,就算被劫持,利用可能性也很低。

图片不方便截如有工商银行APP自己看下密码输入弹出的APP自带键盘即可。

3、抓包分析APP交互数据

不过由于目前APP  没有什么像DVWA 测试APP平台  具体测试细节真不方便写。

抓包分析前提分析两种情况:

1:测试的APP是手机上的APP

2:测试的APP是电脑安卓模拟器上的APP


先说第一种 测试的APP是手机上的APP

可以使用BURP 直接以手机代理的形式,来获取APP相关的交互数据 (http和https 报文  https报文获取 需要导证书这里不赘述了)

前提:手机和电脑在同一个WIFI 或者同一网段可相互访问

本机防火墙也有可能拦截对应端口记得打开。

手机:设置WLAN—修改网络配置—高级—代理

代理地址设置 BURP 的IP 以及端口地址   当然BURP 也需要新增一行 

注意:这个IP地址需要填写PC端地址就是打开BURP的主机

image.pngBURP上面增加一行配置

image.png

在使用手机APP访问网站就截获到了数据包
image.png
第二种情况模拟器上的安卓应用。

虽然也可以使用上面的方法,但是由于有些模拟器网络跟主机分段上的问题,以及一些APP不光采用HTTP、HTTPS协议的问题。

这里介绍另一种方法来抓包

软件:科来网络分析系统     

这软件其实跟wireshark  是一类 只是有友好的中文 适合新手 能够单独分析某个进程的网络报文,不必在逐一筛选。技术交流版免费使用。

下载:

http://www.colasoft.com.cn/products/capsa.php   

官网有时候很慢还是另外找下载吧。(安装简单不解释)

点击下面的本地进程分析-选择一个你在使用的网卡-然后点击开始

image.png

这时 用安卓模拟器上应用来做注册操作 或者你想得到的一些APP访问的网络的操作  然后停止截获,再分析数据包。

回放是用来分析数据包的。。也可以边分析边截获但是数据报文会变得很大

image.pngimage.png

会抓取本地很多数据分了进程之后更容易识别  我的安卓模拟器进程是memuHeadless.exe

image.png
科来的好处就是不光分析HTTP包也分析其他报文 如 TCP UDP

HTTP报文部分就是一般burp看到的部分 
image.png

域名和服务器地址有了你基本可以开始常规测试。如扫描,burp截包改包

不过与一般WEB 不同的是,有些页面可能传输变量值服务器才有回应。

常规渗透测试参考:

1、开源安全测试方法手册OSSTMM

2、NIST SP 800-42 网络安全测试指南

3、OWASP TOP10  漏洞 (这个应该知道的人最多)

4、PTES 渗透测试执行标准


如果你还不知道渗透测试的菜鸡还是看看这个吧   

http://www.freebuf.com/column/194109.html

4、业务功能测试

一般说的逻辑漏洞测试,这边也是不好演示。

只能说下大概思路常见问题

image.png

1:从已知的用户ID  手机号  账号等 可以查询到其他用户相关的信息    (属于越权查询)

一般是采用BURP 或者其他抓包软件如 Fiddler 等 自行构造HTTP报文,截包抓包改包提交其他用户ID 或其他信息,服务器能返回其他用户关键信息说明越权存在。

2:枚举类逻辑漏洞 (存在暴力破解可能)

APP在输入验证码可能没有对输入的验证码错误次数进行限制,可以针对6位数字设置字典,暴力破解。也有如密码,用户ID等账号的枚举问题。

3:短信遍历发送 & 时间发送间隔可改

在提交短信发送请求时,可能发送针对多个手机号发送短信,或者按钮上有时间发送间隔,但是使用抓包软件改包提交发送请求不受时间间隔限制。

4:提现金额&购买数量问题

提现时可以开启两个进程进行提现测试,如果应用没有数据库锁定会取出两次金额,购买数量可以改包,增加数量,支付应用调取相关值可以回退。

5、合规性测试(可变)

这个针对大型集团公司(如运营商 金融行业),对自己APP有相关规定的,会有一些特殊的测试项目。应适当增加测试条目

规范案例:《网上银行系统信息安全通用规范》(2012)中关于客户端安全方面的要求。

要求类型 具体要求 备注






a) 金融机构应采取有效技术措施保证客户端处理的敏感信息、客户端与服务器交互的重要信息的机密性和完整性;应保证所提供的客户端程序的真实性和完整性,以及敏感程序逻辑的机密 APP测试流程第一部分包含
https://www.freebuf.com/column/196665.html
b) 客户端程序上线前应进行严格的代码安全测试,如果客户端程序是外包给第三方机构开发的,金融机构应要求开发商进行代码安全测试。金融机构应建立定期对客户端程序进行安全检测的机制 第三服务代码审计要求
c) 客户端程序应通过指定的第三方中立测试机构的安全检测,每年至少开展一次 第三服务渗透测试 风险评估要求
d) 应对客户端程序进行签名,标识客户端程序的来源和发布者,保证客户所下载的客户端程序来源于所信任的机构。 APP测试流程第一部分包含
e) 客户端程序在启动和更新时应进行真实性和完整性校验,防范客户端程序被篡改或替换。 需要对程序内反编译后修改测试是否能安装
f) 客户端程序的临时文件中不应出现敏感信息,临时文件包括但不限于 Cookies。客户端程序应禁止在身份认证结束后存储敏感信息,防止敏感信息的泄露。 客户端不留存cookies 和敏感信息
不应该在手机端搜索到
g) 客户端程序应提供客户输入敏感信息的即时加密功能,例如采用密码保护控件。 数据输入,传输,接受关键数据应强制加密
h) 客户端程序应具有抗逆向分析、抗反汇编等安全性防护措施,防范攻击者对客户端程序的调试、分析和篡改。 APP测试流程第一部分包含
i) 客户端程序应防范恶意程序获取或篡改敏感信息,例如使用浏览器接口保护控件进行防范。 针对PC客户端 抓包分析
j) 客户端程序应防范键盘窃听敏感信息,例如防范采用挂钩
Windows 键盘消息等方式进行键盘窃听,并应具有对通过挂钩窃听键盘信息进行预警的功能。
针对PC客户端
(现在APP也有防窃听要求) 本文章键盘测试包含
k) 客户端程序应提供敏感信息机密性、完整性保护功能,例如采取随机布放按键位置、防范键盘窃听技术、计算 MAC 校验码等措施。 本文章键盘测试包含 随机按键位置要求






a)客户端程序应保护在客户端启动的用于访问网上银行的进程,防止非法程序获取该进程的访问权限。 进程注入测试
b) 客户端程序应采用反屏幕录像技术,防范非法程序获取敏感信息。 程序应有反录像反截图保护
c) 客户端程序应采取代码混淆等技术手段,防范攻击者对客户端程序的调试、分析和篡改。 代码混淆要求  APP测试流程第一部分包含
d) 客户端程序开发设计过程中应注意规避各终端平台存在的安全漏洞,例如,按键输入记录、自动拷屏机制、文档显示缓存等。 针对客户端本身系统漏洞或其他木马程序利用可能性

6、暂时就写到这吧 下次写基于开发平台的一些测试。

来源:freebuf.com 2019-03-28 10:59:18 by: redhatd

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论