app安全测试_安卓app安全测试 - CSDN
精华内容
参与话题
  • 移动APP安全测试要点

    万次阅读 2018-08-02 15:46:44
    安全检测要点 Allowbackup漏洞 WebView漏洞 关键数据明文传输 任意账号注册 登录界面可被钓鱼劫持 有争议的整改建议 关键数据明文传输 登录界面钓鱼劫持 总结 评估思路 移动APP面临的威胁 ...

    安卓移动APP安全测试

     

    文章目录

    评估思路

    移动APP面临的威胁

    风起云涌的高科技时代,随着智能手机和iPad等移动终端设备的普及,人们逐渐习惯了使用应用客户端上网的方式,而智能终端的普及不仅推动了移动互联网的发展,也带来了移动应用的爆炸式增长。在海量的应用中,APP可能会面临如下威胁:

    新技术新业务移动APP评估思路

    在这次的移动APP安全测试实例中,工作小组主要通过如下7个方向,进行移动终端APP安全评估:

    运营商自动化APP测评思路

    运营商自主开发的自动化APP安全检测工具,通过”地、集、省”三级机构协作的方式,来完成移动终端APP安全检测与评估。APP测试思路如下:

    安全检测要点

    Allowbackup漏洞

    AndroidManifest.xml文件中allowBackup属性值被设置为true。当allowBackup标志为true时,用户可通过adb backup来进行对应用数据的备份,在无root的情况下可以导出应用中存储的所有数据,造成用户数据的严重泄露。

    整改建议

    将参数android:allowBackup属性设置为false,不能对应用数据备份。

    WebView漏洞

    应用中存在WebView漏洞,没有对注册JAVA类的方法调用进行限制,导致攻击者可以利用反射机制调用未注册的其他任何JAVA类,最终导致javascript代码对设备进行任意攻击。

    整改建议

    通过在Java的远程方法上面声明一个@JavascriptInterface 来代替addjavascriptInterface;

    在使用js2java的bridge时候,需要对每个传入的参数进行验证,屏蔽攻击代码;

    Note :控制相关权限或者尽可能不要使用js2java 的bridge 。

    关键数据明文传输

    应用程序在登录过程中,使用http协议明文传输用户名和密码,并未对用户名和密码进行加密处理。通过监控网络数据就可以截获到用户名和用户密码数据,导致用户信息泄露,给用户带来安全风险。

    整改建议

    在传输敏感信息时应对敏感信息进行加密处理。

    任意账号注册

    使用手机号133*****887注册某个APP,获取验证码46908;

    在确认提交时,拦截请求,修改注册的手机号码,即可注册任意账号,这里修改为1338*****678(任意手机号);

    分别使用133*****887和133*****678(任意手机号)登录,均可以通过验证登录,看到最终结果。

    image015 image017

    整改建议

    注册过程最后的确认提交时,服务器应验证提交的账号是否是下发验证码的手机号。

    登录界面可被钓鱼劫持

    应用存在钓鱼劫持风险。应用程序没有做防钓鱼劫持措施,通过劫持应用程序的登录界面,可以获取用户的账号和密码,可能导致用户账号信息的泄露。

    整改建议:

    应用程序自身通过获取栈顶activity,判断系统当前运行的程序,一旦发现应用切换(可能被劫持),给予用户提示以防范钓鱼程序的欺诈。

    获取栈顶activity(如下图),当涉及敏感activity(登录、交易等)切换时,判断当前是否仍留在原程序,若不是则通过Toast给予用户提示。

    使用HTML5架构或android+HTML5混合开发,实现登陆、支付等关键页面,降低被劫持的风险。

    有争议的整改建议

    在实施整改过程中,运营商、APP厂商及安全厂商之间就如下几点存在争议:

    关键数据明文传输

    根据客户测评结果以及移动终端APP厂商理解,目前的数据安全问题可为:

    • 客户端安全(数据录入)。
    • 客户端到服务器安全(数据传输)。
    • 服务器端安全(数据存储)。

    而关键数据明文传输属于客户端数据录入安全,针对此部分,目前不仅是移动终端APP,包括Web安全方面,对此部分要求也是不一而分,具体可以体现为:

    • 具有现金流的交易平台: 此类业务安全级别要求最高,在数据传输方面也是目前做得最好的。主要代表是:淘宝、京东、各大银行网银等。
    • 具有较大社会影响力的平台: 此类业务安全级别低于上述业务,但由于账户数据丢失以后,对其自身以及社会影响较大,所以在传输上也不会采取明文传输。如:百度、腾讯等。
    • 数据丢失本身不会造成较大的影响的平台: 此类业务账户数据本身价值不大,丢失以后也不会造成影响,或者本身不会受到太大关注,一般都不会对传输数据进行加密。这样的例子比比皆是。

    当然也有厂商提出,明文传输在某些专业的漏洞检测和通报的网站上,是不属于安全漏洞的,为了验证此异议,在某平台上提交了一份关于明文传输的漏洞,得到的结果请看下图:

    登录界面钓鱼劫持

    APP应用存在钓鱼劫持风险。应用程序没有做防钓鱼劫持措施,通过劫持应用程序的登录界面,可以获取用户的账号和密码,可能导致用户账号信息的泄露。

    这一条检测结果,最大的争议在于按照整改建议整改以后,对一般用户来说,没有任何作用。首先,我们了解一下钓鱼劫持如何产生。

    Android钓鱼原理

    需要理解,Android启动一个Activity时,是这样设计的,给Activity加入一个标志位FLAG_ACTIVITY_NEW_TASK,就能使它置于栈顶并立马呈现给用户。但是这样的设计却有一个缺陷。如果这个Activity是用于盗号的伪装Activity呢?这种现象在XcodeGhost事件中,已经被证实是可以实现的。

    在Android系统当中,程序可以枚举当前运行的进程而不需要声明其他权限,这样的话,就可以编写一个程序,启动一个后台的服务,这个服务不断地扫描当前运行的进程,当发现目标进程启动时,就启动一个伪装的Activity。如果这个Activity是登录界面,那么就可以从中获取用户的账号密码,具体的过程如下图:

    检测原理描述清楚以后,就需要给出让软件厂商能够明白的整改建议以及漏洞情景重现。

    Android钓鱼情景演示

    以小米手机为例:

    1.当打开3个APP时,最后一个打开的APP”语音助手”,切换至手机桌面,长按HOME键查看进程,”语音助手”会显示在进程的第一个。

    2.点击”微信”以后,切换至”微信”,再查看进程,可以看到,进程中由于”微信”已切换至当前窗口,故进程中不存在。

    3.可以从第1步看到,当切换至手机桌面时,无论是语音助手、手机令牌、还是微信,都是默认后台运行,而且切换出来以后无任何提示。这样,当恶意activity收到微信登录界面或者其他敏感界面的时候,就会抢先推送至客户,从而让客户轻易的输入了帐号,并获取了客户的信息,但此时微信不会做任何提示。

    4.再来观看一下某行手机APP,当切换至手机桌面时,会对客户做出提示。如下图:

    假设一下页面是恶意推送的activity,那么在恶意推送的APP页面,应该会显示出此类提示,告知客户,此页面并非正常APP的页面。

    用户打开正常页面 vs 用户打开了恶意页面

    总结

    从工信部《新技术新业务信息安全评估管理办法(试行)》(工信部保〔2012〕117号)及运营商的相关文件规定,以及绿盟科技实施的移动APP安全测试项目来看,移动APP安全测试在运营商的重要地位。

    本文通过对一次移动APP安全测试及评估的实际案例,希望能够对安全从业者在移动终端APP评估方面,也欢迎大家在QQ群里参与这方面的讨论。

    展开全文
  • APP测试安全测试

    万次阅读 2017-05-03 22:13:53
    事情虽然解决了,但是引起该问题的一个原因是在测试中没有安全测试,而安全测试的标准,方法都没有。因此今天将之前工作中参与过的安全测试以及从网上查阅到有关安全测试的资料进行整理。有不足的之处,尽情谅解。 ...

    一、前言

      在SDK最近的项目中上线的包被第三方杀毒软件报出有病毒的问题,后来经过查验发现是SDK悬浮窗动画的逻辑被检验出有病毒,最后进行了修改。事情虽然解决了,但是引起该问题的一个原因是在测试中没有安全测试,而安全测试的标准,方法都没有。因此今天将之前工作中参与过的安全测试以及从网上查阅到有关安全测试的资料进行整理。有不足的之处,尽情谅解。

      二、软件权限

      1)扣费风险:浏览网页,下载,等情况下是否会扣费,一般在游戏APP,和社交APP等需要考虑这些。

      2)隐私泄露风险。例如在我们安装APP应用时通常会看到"xx要读取手机通讯录"等提示,这些提示可以提示用户拒绝接受,这些是APP测试中的测试点。

      3)校验input输入。对于APP有输入框的要对输入的信息进行校验,比如密码不能显示明文。在测试中红人馆注册时需要对input进行测试。

      4)限制/允许使用手机功能接人互联网,收发信息,启动应用程序,手机拍照或者录音,读写用户数据。这个在通信行业用的比较多,比如展讯,高通等芯片厂商,他们在出厂芯片时要对手机各个功能进行测试。

      三、代码安全性

      之所以单独拿出来说,是因为在SDK测试过程中SDK代码被第三方工具检测出游病毒代码,这样一来就会影响输入法的使用。因此在后续测试中要尝试加入安全性测试

      四、安装与卸载安全性

      1)应用程序应能正确安装到设备驱动程序上

      2)能够在安装设备驱动程序上找到应用程序的相应图标。在SDK测试项目中发现有些设备受权限的问题,无法下发图标创建快链。

      3)是否包含数字签名信息。在SDK测试项目中基本上没有,但是在输入法打包和主线版本上存在这样的测试。

      4)安装路径应能指定

      5)没有用户的允许应用程序不能预先设定自动启动

      6)卸载是否安全,其安装进去的文件是否全部卸载

      7)卸载用户使用过程中产生的文件是否有提示

      8)其修改的配置信息是否复原

      9)卸载是否影响其他软件的功能

      10)卸载应该移除所有的文件

      11)安装包的存放。在SDK下载安装包的测试中我们经常会看到下载下来的包后面有四个随机的字符串,这个的目的是为了防止第三方工具恶意删除安装包的问题。

      在SDK测试项目中有专门针对下载安装卸载的用例,对安装的路径和下载的文件夹路径等有相关的测试,测试结果页表明,某些手机(例如华为mate1)在删除了某个下载路径文件夹之后受权限应用不会自动创建。

      五、数据安全性

      1) 当将密码或其他的敏感数据输人到应用程序时,其不会被储存在设备中,同时密码也不会被解码

      2) 输人的密码将不以明文形式进行显示

      3) 密码,信用卡明细,或其他的敏感数据将不被储存在它们预输人的位置上

      4) 不同的应用程序的个人身份证或密码长度必需至少在4一8个数字长度之间

      5) 当应用程序处理信用卡明细,或其他的敏感数据时,不以明文形式将数据写到其它单独的文件或者临时文件中。以防止应用程序异常终止而又没有删除它的临时文件,文件可能遭受人侵者的袭击,然后读取这些数据信息。

      6) 当将敏感数据输人到应用程序时,其不会被储存在设备中

      7) 备份应该加密,恢复数据应考虑恢复过程的异常通讯中断等,数据恢复后再使用前应该经过校验

      8) 应用程序应考虑系统或者虚拟机器产生的用户提示信息或安全警告

      9) 应用程序不能忽略系统或者虚拟机器产生的用户提示信息或安全警告,更不能在安全警告显示前,利用显示误导信息欺骗用户,应用程序不应该模拟进行安全警告误导用户

      10) 在数据删除之前,应用程序应当通知用户或者应用程序提供一个"取消"命令的操作

      11) "取消"命令操作能够按照设计要求实现其功能

      12) 应用程序应当能够处理当不允许应用软件连接到个人信息管理的情况

      13) 当进行读或写用户信息操作时, 应用程序将会向用户发送一个操作错误的提示信息

      14) 在没有用户明确许可的前提下不损坏删除个人信息管理应用程序中的任何内容

      15) 应用程序读和写数据正确。

      16) 应用程序应当有异常保护。

      17) 如果数据库中重要的数据正要被重写,应及时告知用户

      18) 能合理地处理出现的错误

      19) 意外情况下应提示用户

      20) HTTP、HTTPS覆盖测试。在测试中我们经常会遇到与请求的加密解密测试,以确保产品的安全性

    展开全文
  • App安全测试

    千次阅读 2018-08-13 17:27:38
    目录   一、安装包测试   1.1、关于反编译 ...六、组件安全测试   七、服务端接口测试   一、安装包测试   1.1、关于反编译   目的是为了保护公司的知识产权和安全方面的考虑等...

    目录

     

    一、安装包测试

     

    1.1、关于反编译

     

    1.2、关于签名

     

    1.3、完整性校验

     

    1.4、权限设置检查

     

    二、敏感信息测试

     

    三、软键盘劫持

     

    四、账户安全

     

    五、数据通信安全

     

    六、组件安全测试

     

    七、服务端接口测试

     

    一、安装包测试

     

    1.1、关于反编译

     

    目的是为了保护公司的知识产权和安全方面的考虑等,一些程序开发人员会在源码中硬编码一些敏感信息,如密码。而且若程序内部一些设计欠佳的逻辑,也可能隐含漏洞,一旦源码泄漏,安全隐患巨大。

     

    为了避免这些问题,除了代码审核外,通常开发的做法是对代码进行混淆,混淆后源代码通过反软件生成的源代码是很难读懂的,测试中,我们可以直接使用反编译工具(dex2jar和jd-gui工具)查看源代码,判断是否进行了代码混淆,包括显而易见的敏感信息。

     

    1.2、关于签名

     

    这点IOS可以不用考虑,因为APP stroe都会校验。但Android没有此类权威检查,我们要在发布前校验一下签名使用的key是否正确,以防被恶意第三方应用覆盖安装等。可使用下列命令检查:

     

    jarsigner -verify -verbose -certs apk包路径

     

    若结果为“jar 已验证”,说明签名校验成功。

     

    1.3、完整性校验

     

    为确保安装包不会在测试完成到最终交付过程中因为知足者趾问题发生文件损坏,需要对安装包进行完整性校验,通常做法是检查文件的md5值,而且一般可以通过自动化做校验。

     

    1.4、权限设置检查

     

    一般用户对自己的隐私问题十 分敏感,因此,我们需要对APP申请某些特定权限的必要性进行检查,如访问通讯录等。对于没有必要的权限,一般都建议开发 直接支除。

     

    Android:直接检查manifest文件来读取应用所需要的全部权限,并结合需求进行校验此权限是否为必须的。manifest文件的修改也需要关注,在增加新权限前需要进行评估。

     

    IOS:没有类似manifest文件来查看,IOS的用户权限只有在用户使用APP到了需要使用的权限时,系统才会弹出提示框,提示用户当前APP需要访问照片、联系人列表等组件。我们可以扫描代码来查看项目工程中有哪些权限设置。通过搜索关键类名,如通讯录一般需要访问ABAddressBookRef,照片是UIImagePickerController等。如果是纯黑盒测试,则必须覆盖到所有代码路径才能保证没有遗漏,也可使用代码覆盖率测试判断是否覆盖。

     

    二、敏感信息测试

     

    数据库是否存储敏感信息,某些应用会把cookie类数据保存在数据库中,一旦此数据被他人获取,可能造成用户账户被盗用等严重问题,测试中在跑完一个包含数据库操作的测试用例后,我们可以直接查看数据库里的数据,观察是否有敏感信息存储在内。一般来说这些敏感信息需要用户进行注销操作后删除。如果是cookie类数据,建议设置合理的过期时间。

     

    日志是否存在敏感信息,一般开发在写程序的过程中会加入日志帮助高度,所有可能会写入一些敏感信息,通常APP的发布版不会使用日志,但也不排除特殊情况。

     

    配置文件是否存在敏感信息,与日志类似,我们需要检查配置文件中是否包含敏感信息。

     

    三、软键盘劫持

     

    如果用户安装了第三方键盘,可能存在劫持情况,对此,我们在一些特别敏感的输入地方可以做检查,例如金融类APP登录界面的用户名密码输入框等,看是否支持第三方输入法,一般建议使用应用内的软键盘。

     

    四、账户安全

     

    4.1、密码是否明文存储在后台数据库,在评审和测试中需要关注密码的存储。

     

    4.2、密码传输是否加密,测试中我们需要查看密码是否被 明文传输,如果是HTTP接口,我们可以使用FIddler等工具直接查看。

     

    4.3、账户锁定策略。对于 用户输入错误密码次数过多的情况,是否会将账户临时锁定,避免被暴力破解,

     

    4.4、同时会话情况。一些应用对同时会话会有通知功能,这样至少可以让用户知识他的账户可能已经被泄漏了。在一定程度上能免提升用户体验。

     

    4.5、注销机制。在客户端注销后,我们需要验证任何的来自该用户的,需要身份验证的接口调用都不能成功。

     

    五、数据通信安全

     

    5.1、关键数据是否散列或加密。密码在传输中必须是加密的,其他敏感信息传输前也需要进行散列或者加加密,以免被中间节点获取并恶意利用。

     

    5.2、关键连接是否使用安全通信,例如HTTPS。在获知接口设计后我们需要评估是否其中内容包含敏感信息,如果未使用安全通信,需要知会开发修改。

     

    5.3、是否对数字证书合法性进行验证。即便使用了安全通信,例如HTTPS,我们也需要在客户端代码中对服务端证书进行合法性校验。测试中可以使用Fiddler工具模拟中间人攻击方法。如果客户端对于Fiddler证书没有校验而能正常调用,则存在安全隐患。

     

    5.4、是否校验数据合法性。在一些情况下,我们需要有方法来确保服务端下发的明文数据不被篡改。通常开发侧的实现方式是对数据进行数字签名并在客户端进行校验。我们可以模拟后台返回进行相关的测试工作。此外,对于其他一些客户端未进行数据校验的接口,我们也需要有意识地思考如果不进行校验是否会产生问题,并通过模拟后台返回验证。

     

    六、组件安全测试

     

    这里主要是指Android平台各个组件是否能被 外部应用恶意调用从而带来一些安全问题。包括Activity、Service、ContentProvider、Broadcast等等。采用的测试方法是通过使用drozer工具结合查看代码的方式,具体使用方法可查看官方文档。

     

    七、服务端接口测试

     

    主要关注服务端接口是否存在以下问题

     

    7.1、SQL注入

     

    7.2、XSS跨站脚本攻击

     

    7.3、CSRF跨站请求伪造

     

    7.4、越权访问

     

    除了上述服务端问题外,我们还需要结合实际的需求,设计和代码,分析是否需求或设计本身就会带来安全问题。

     

    举个例子:如一个购物的应用,下单地的流程包含两个接口,接口A返回订单详情,其中包括订单号码和金额总价。调用接口A后用户在客户端看到一个订单页面。用户点击提交后调用接口B,客户端传给接口B的参数为接口A返回的订单号码和金额总价,接口B的后台根据传给接口B的金额总价从用户账户中扣款,扣款成功后即根据订单号码发货。

     

    这一设计有什么问题呢?那就是接口B完全信任了客户端传入的金额总价而未做校验。恶意用户可以直接调用接口B,传入伪造的金额和真实订单号,这样就能以便宜的价格购物。

     

    附录

     

    1.软件权限

     

    1)扣费风险:包括短信、拨打电话、连接网络等。

     

    2)隐私泄露风险:包括访问手机信息、访问联系人信息等。

     

    3)对App的输入有效性校验、认证、授权、数据加密等方面进行检测

     

    4)限制/允许使用手机功能接入互联网

     

    5)限制/允许使用手机发送接收信息功能

     

    6)限制或使用本地连接

     

    7)限制/允许使用手机拍照或录音

     

    8)限制/允许使用手机读取用户数据

     

    9)限制/允许使用手机写入用户数据

     

    10)限制/允许应用程序来注册自动启动应用程序

     

    2.数据安全性

     

    1)当将密码或其它的敏感数据输入到应用程序时,其不会被存储在设备中,同时密码也不会被解码。

     

    2)输入的密码将不以明文形式进行显示。

     

    3)密码、信用卡明细或其他的敏感数据将不被存储在它们预输入的位置上。

     

    4)不同的应用程序的个人身份证或密码长度必须至少在4-8个数字长度之间。

     

    5)当应用程序处理信用卡明细或其它的敏感数据时,不以明文形式将数据写到其他单独的文件或者临时文件中。以防止应用程序异常终止而又没有删除它的临时文件,文件可能遭受入侵者的袭击,然后读取这些数据信息。

     

    6)党建敏感数据输入到应用程序时,其不会被存储在设备中。

     

    7)应用程序应考虑或者虚拟机器产生的用户提示信息或安全警告

     

    8)应用程序不能忽略系统或者虚拟机器产生的用户提示信息或安全警告,更不能在安全警告显示前,利用显示误导信息欺骗用户,应用程序不应该模拟进行安全警告误导用户。

     

    9)在数据删除之前,应用程序应当通知用户或者应用程序提供一个“取消”命令的操作。

     

    10)应用程序应当能够处理当不允许应用软件连接到个人信息管理的情况。

     

    11)当进行读或写用户信息操作时,应用程序将会向用户发送一个操作错误的提示信息。

     

    12)在没有用户明确许可的前提下不损坏删除个人信息管理应用程序中的任何内容。

     

    13)如果数据库中重要的数据正要被重写,应及时告知用户。

     

    14)能合理的处理出现的错误。

     

    15)意外情况下应提示用户。

     

    3.通讯安全性

     

    1)在运行软件过程中,如果有来电、SMS、蓝牙等通讯或充电时,是否能暂停程序,优先处理通信,并在处理完毕后能正常恢复软件,继续其原来的功能。

     

    2)当创立连接时,应用程序能够处理因为网络连接中断,进而告诉用户连接中断的情况。

     

    3)应能处理通讯延时或中断。

     

    4)应用程序将保持工作到通讯超时,进而给用户一个错误信息指示有链接错误。

     

    5)应能处理网络异常和及时将异常情况通报用户。

     

    6)应用程序关闭网络连接不再使用时应及时关闭,断开。

     

    4.人机接口安全测试

     

    1)返回菜单应总保持可用。

     

    2)命令有优先权顺序。

     

    3)声音的设置不影响使用程序的功能。

     

    4)应用程序必须能够处理不可预知的用户操作,例如错误的操作和同时按下多个键。

     

    展开全文
  • APP 安全测试

    千次阅读 2018-04-04 21:18:18
    一、安装包测试 1.1、关于反编译 目的是为了保护公司的知识产权和安全方面的考虑等,一些程序开发人员会在源码中硬编码一些敏感信息,如密码。而且若程序内部一些设计欠佳的逻辑,也可能隐含漏洞,一旦源码泄漏,...

    一、安装包测试
      1.1、关于反编译
      目的是为了保护公司的知识产权和安全方面的考虑等,一些程序开发人员会在源码中硬编码一些敏感信息,如密码。而且若程序内部一些设计欠佳的逻辑,也可能隐含漏洞,一旦源码泄漏,安全隐患巨大。
      为了避免这些问题,除了代码审核外,通常开发的做法是对代码进行混淆,混淆后源代码通过反软件生成的源代码是很难读懂的,测试中,我们可以直接使用反编译工具(dex2jar和jd-gui工具)查看源代码,判断是否进行了代码混淆,包括显而易见的敏感信息。
      1.2、关于签名
      这点IOS可以不用考虑,因为APP stroe都会校验。但Android没有此类权威检查,我们要在发布前校验一下签名使用的key是否正确,以防被恶意第三方应用覆盖安装等。可使用下列命令检查:
      jarsigner -verify -verbose -certs apk包路径
      若结果为“jar 已验证”,说明签名校验成功。
      1.3、完整性校验
      为确保安装包不会在测试完成到最终交付过程中因为知足者趾问题发生文件损坏,需要对安装包进行完整性校验,通常做法是检查文件的md5值,而且一般可以通过自动化做校验。
      1.4、权限设置检查
      一般用户对自己的隐私问题十 分敏感,因此,我们需要对APP申请某些特定权限的必要性进行检查,如访问通讯录等。对于没有必要的权限,一般都建议开发 直接支除。
      Android:直接检查manifest文件来读取应用所需要的全部权限,并结合需求进行校验此权限是否为必须的。manifest文件的修改也需要关注,在增加新权限前需要进行评估。
      IOS:没有类似manifest文件来查看,IOS的用户权限只有在用户使用APP到了需要使用的权限时,系统才会弹出提示框,提示用户当前APP需要访问照片、联系人列表等组件。我们可以扫描代码来查看项目工程中有哪些权限设置。通过搜索关键类名,如通讯录一般需要访问ABAddressBookRef,照片是UIImagePickerController等。如果是纯黑盒测试,则必须覆盖到所有代码路径才能保证没有遗漏,也可使用代码覆盖率测试判断是否覆盖。
    二、敏感信息测试
      数据库是否存储敏感信息,某些应用会把cookie类数据保存在数据库中,一旦此数据被他人获取,可能造成用户账户被盗用等严重问题,测试中在跑完一个包含数据库操作的测试用例后,我们可以直接查看数据库里的数据,观察是否有敏感信息存储在内。一般来说这些敏感信息需要用户进行注销操作后删除。如果是cookie类数据,建议设置合理的过期时间。
      日志是否存在敏感信息,一般开发在写程序的过程中会加入日志帮助高度,所有可能会写入一些敏感信息,通常APP的发布版不会使用日志,但也不排除特殊情况。
      配置文件是否存在敏感信息,与日志类似,我们需要检查配置文件中是否包含敏感信息。
      

    三、软键盘劫持
      如果用户安装了第三方键盘,可能存在劫持情况,对此,我们在一些特别敏感的输入地方可以做检查,例如金融类APP登录界面的用户名密码输入框等,看是否支持第三方输入法,一般建议使用应用内的软键盘。
      

    四、账户安全
      4.1、密码是否明文存储在后台数据库,在评审和测试中需要关注密码的存储。
      4.2、密码传输是否加密,测试中我们需要查看密码是否被 明文传输,如果是HTTP接口,我们可以使用FIddler等工具直接查看。
      4.3、账户锁定策略。对于 用户输入错误密码次数过多的情况,是否会将账户临时锁定,避免被暴力破解,
      4.4、同时会话情况。一些应用对同时会话会有通知功能,这样至少可以让用户知识他的账户可能已经被泄漏了。在一定程度上能免提升用户体验。
      4.5、注销机制。在客户端注销后,我们需要验证任何的来自该用户的,需要身份验证的接口调用都不能成功。
      

    五、数据通信安全
      5.1、关键数据是否散列或加密。密码在传输中必须是加密的,其他敏感信息传输前也需要进行散列或者加加密,以免被中间节点获取并恶意利用。
      5.2、关键连接是否使用安全通信,例如HTTPS。在获知接口设计后我们需要评估是否其中内容包含敏感信息,如果未使用安全通信,需要知会开发修改。?
      5.3、是否对数字证书合法性进行验证。即便使用了安全通信,例如HTTPS,我们也需要在客户端代码中对服务端证书进行合法性校验。测试中可以使用Fiddler工具模拟中间人攻击方法。如果客户端对于Fiddler证书没有校验而能正常调用,则存在安全隐患。
      5.4、是否校验数据合法性。在一些情况下,我们需要有方法来确保服务端下发的明文数据不被篡改。通常开发侧的实现方式是对数据进行数字签名并在客户端进行校验。我们可以模拟后台返回进行相关的测试工作。此外,对于其他一些客户端未进行数据校验的接口,我们也需要有意识地思考如果不进行校验是否会产生问题,并通过模拟后台返回验证。
      

    六、组件安全测试
      这里主要是指Android平台各个组件是否能被 外部应用恶意调用从而带来一些安全问题。包括Activity、Service、ContentProvider、Broadcast等等。采用的测试方法是通过使用drozer工具结合查看代码的方式,具体使用方法可查看官方文档。
      

    七、服务端接口测试
      主要关注服务端接口是否存在以下问题
      7.1、SQL注入
      7.2、XSS跨站脚本攻击
      7.3、CSRF跨站请求伪造
      7.4、越权访问
      除了上述服务端问题外,我们还需要结合实际的需求,设计和代码,分析是否需求或设计本身就会带来安全问题。
      举个例子:如一个购物的应用,下单地的流程包含两个接口,接口A返回订单详情,其中包括订单号码和金额总价。调用接口A后用户在客户端看到一个订单页面。用户点击提交后调用接口B,客户端传给接口B的参数为接口A返回的订单号码和金额总价,接口B的后台根据传给接口B的金额总价从用户账户中扣款,扣款成功后即根据订单号码发货。
      这一设计有什么问题呢?那就是接口B完全信任了客户端传入的金额总价而未做校验。恶意用户可以直接调用接口B,传入伪造的金额和真实订单号,这样就能以便宜的价格购物。
      附录
      1.软件权限
      1)扣费风险:包括短信、拨打电话、连接网络等。
      2)隐私泄露风险:包括访问手机信息、访问联系人信息等。
      3)对App的输入有效性校验、认证、授权、数据加密等方面进行检测
      4)限制/允许使用手机功能接入互联网
      5)限制/允许使用手机发送接收信息功能
      6)限制或使用本地连接
      7)限制/允许使用手机拍照或录音
      8)限制/允许使用手机读取用户数据
      9)限制/允许使用手机写入用户数据
      10)限制/允许应用程序来注册自动启动应用程序
      2.数据安全性
      1)当将密码或其它的敏感数据输入到应用程序时,其不会被存储在设备中,同时密码也不会被解码。
      2)输入的密码将不以明文形式进行显示。
      3)密码、信用卡明细或其他的敏感数据将不被存储在它们预输入的位置上。
      4)不同的应用程序的个人身份证或密码长度必须至少在4-8个数字长度之间。
      5)当应用程序处理信用卡明细或其它的敏感数据时,不以明文形式将数据写到其他单独的文件或者临时文件中。以防止应用程序异常终止而又没有删除它的临时文件,文件可能遭受入侵者的袭击,然后读取这些数据信息。
      6)党建敏感数据输入到应用程序时,其不会被存储在设备中。
      7)应用程序应考虑或者虚拟机器产生的用户提示信息或安全警告
      8)应用程序不能忽略系统或者虚拟机器产生的用户提示信息或安全警告,更不能在安全警告显示前,利用显示误导信息欺骗用户,应用程序不应该模拟进行安全警告误导用户。
      9)在数据删除之前,应用程序应当通知用户或者应用程序提供一个“取消”命令的操作。
      10)应用程序应当能够处理当不允许应用软件连接到个人信息管理的情况。
      11)当进行读或写用户信息操作时,应用程序将会向用户发送一个操作错误的提示信息。
      12)在没有用户明确许可的前提下不损坏删除个人信息管理应用程序中的任何内容。
      13)如果数据库中重要的数据正要被重写,应及时告知用户。
      14)能合理的处理出现的错误。
      15)意外情况下应提示用户。
      3.通讯安全性
      1)在运行软件过程中,如果有来电、SMS、蓝牙等通讯或充电时,是否能暂停程序,优先处理通信,并在处理完毕后能正常恢复软件,继续其原来的功能。
      2)当创立连接时,应用程序能够处理因为网络连接中断,进而告诉用户连接中断的情况。
      3)应能处理通讯延时或中断。
      4)应用程序将保持工作到通讯超时,进而给用户一个错误信息指示有链接错误。
      5)应能处理网络异常和及时将异常情况通报用户。
      6)应用程序关闭网络连接不再使用时应及时关闭,断开。
      4.人机接口安全测试
      1)返回菜单应总保持可用。
      2)命令有优先权顺序。
      3)声音的设置不影响使用程序的功能。
      4)应用程序必须能够处理不可预知的用户操作,例如错误的操作和同时按下多个键。


    展开全文
  • Android APP安全测试入门

    千次阅读 2015-05-24 10:17:57
    背景 最近这两年移动端真是非常...有句古语:”工欲善其事,必先利其器”,我们要研究App安全,没有几款高大上的神器是会非常麻烦的,因此本文主要给大家分享一下笔者学到的一些基础知识,主要是一些移动端测试辅助工
  • APP安全测试

    千次阅读 2016-01-12 10:37:04
     App安全问题首先是数据安全App本地存储的数据和网络请求数据中有没有涉及到用户的隐私数据。  本地存储数据可以查看看应用的shared_prefs文件和数据库文件中的数据(root后在应用安装目录内,或者查看外部...
  • 移动APP安全测试

    2019-06-25 16:25:51
    1 移动APP安全风险分析 1.1 安全威胁分析 安全威胁从三个不同环节进行划分,主要分为客户端威胁、数据传输端威胁和服务端的威胁。 1.2 面临的主要风险 1.3 Android测试思维导图 1.4 反编译工具 有两种...
  • app安全测试你知道多少

    千次阅读 2018-08-02 15:37:51
    六、组件安全测试 七、服务端接口测试 八、附录 一、安装包测试 1.1、关于反编译 目的是为了保护公司的知识产权和安全方面的考虑等,一些程序开发人员会在源码中硬编码一些敏感信息,如密码。而且若程序内部一....
  • 移动互联网安全测试技术简介

    万次阅读 2015-08-04 15:50:19
    我们在讲“移动互联网安全测试技术”之前,先来了解下移动互联网安全测评服务!它的整个生命周期包含安全检测、安全评估、安全加固和APP发布渠道监测。 安全检测 对象:所有待上线的APP 目标:防止恶意软件流入...
  • 之前安全加介绍了金融行业 实战微信银行渗透测试, 运营商 渗透测试实战 ,今天让我们来说说移动APP渗透测试方案,这涉及安全威胁分析及风险、APP安全测试内容及流程、测试要点。 BTW:昨天的 渗透测试 的...
  • 给你一个App,你将如何测试

    万次阅读 2017-04-13 10:17:06
    在日常工作的摸索中,我将如何做好app测试简单归结为如下内容。 (1) 功能测试 每项开发的新功能都需要进行测试app测试中功能测试是一个重要方面。测试人员应该要进行手动测试和后期的自动化测试维护。刚开始...
  • APP测试工具选择

    万次阅读 2017-10-10 16:55:48
    功能测试自动化  a) 轻量接口自动化测试  jmeter,  b) APP UI层面的自动化  android:UI Automator Viewer,Android Junit,Instrumentation,UIAutomator,  iOS:基于Instrument的iOS UI自动化,性能...
  • app专项测试

    千次阅读 2018-05-23 17:38:26
    专项的测试方法,包括:兼容性测试、流量测试、电量测试、弱网络测试、稳定性测试、安全测试和环境相关测试。 第一:兼容性测试 针对App通常会考虑这些方面: 1)操作系统版本 包括Andoird版本,iOS版本 2)...
  • 手机APP测试要点

    千次阅读 2017-06-19 18:57:09
    1、功能测试 最基本的,只考虑是否达到了需求上说明的功能。...4、安全测试 软件权限(短信、定位、相机、联系人等) 5、安装卸载 安装路径、安装向导、卸载提示,卸载是否干净,是否支持取消卸载,
  • Web测试App测试区别

    万次阅读 多人点赞 2018-10-27 14:14:40
    从技术上来说,WEB测试APP测试测试类型也基本相似,都需要进行功能测试,性能测试安全测试,GUI测试测试类型。他们的主要区别在于具体测试的细节和方法有区别,比如:性能测试,在WEB测试只需要测试响应...
  • 0x00 背景随着移动互联的扩张,移动APP承载了更多企业的终端梦。“用户手机安装APP以后,企业即埋下一颗种子,可持续与用户保持联系。” 种子是种下了,可要是它本身就是个[特洛伊木马]呢?试想你在某某知名APP平台...
  • 移动APP测试平台测评分析

    千次阅读 2017-08-04 16:22:30
    随着智能手机的普及率和渗透率越来越高,App开发软件也越来越多。有专家预测,2017年的App应用下载量将会突破2500亿,整个移动科技市场规模将会达到770亿美元。身处在这个“移动”的时代,APP开发的增长势头势必越发...
  • APP测试与WEB测试的区别

    万次阅读 多人点赞 2018-04-26 16:48:23
    单纯从功能测试的层面上来讲的话,APP 测试、web 测试 在流程和功能测试上是没有区别的。 根据两者载体不一样,则区别如下: 系统结构方面 web项目,b/s架构,基于浏览器的;web测试只要更新了服务器端,客户端...
  • app常见专项测试

    万次阅读 多人点赞 2018-12-13 15:17:34
    常见的apk专项测试,主要有几类(主要指项目中经常用到的) 1、稳定性 2、安全性 3、兼容性 4、版本升级 5、流量测试 6、实际测试总结(对整个项目团队是如何进行测试以及测试的内容) 一、稳定性测试 稳定...
  • 给你一个App,你将如何测试?

    千次阅读 2018-05-22 15:57:58
    在日常工作的摸索中,我将如何做好app测试简单归结为如下内容。(1) 功能测试每项开发的新功能都需要进行测试app测试中功能测试是一个重要方面。测试人员应该要进行手动测试和后期的自动化测试维护。刚开始测试...
1 2 3 4 5 ... 20
收藏数 141,344
精华内容 56,537
关键字:

app安全测试