常规安全测试项及方法——移动应用基础版

前言

依据自己的经验整理常规的安全测试项及方法——移动应用类


一、程序自身安全

1.源代码保护(混淆)

要求准则:
要求应用程序在不改变代码逻辑的情况下,增加无用代码,或者重命名类名、方法名和变量名,使反编译后的源代码难于看懂,提高被识别的难度
检验方法或工具:源代码查看工具查看即可

2.加壳加固(Android)

要求准则:
要求在上架前要使用第三方加固软件对APP进行加壳加固,加固时建议在不影响应用程序正常运行的情况下尽量选择多项保护APP的安全策略,很多加固平台除了提供最基础的加壳还有动态反调试、本地文件加密、完整性校验等方案
检验方法或工具:源代码查看工具查看即可

3.完整性校验

要求准则:
要求应用程序必须有能够检测自身完整性的校验逻辑代码,确保在安装前或安装后不被篡改,添加恶意代码、资源等
检验方法或工具:源代码查看工具查看即可

4.安装包签名

要求准则:
安装包必须要经过签名才能上架,且签名信息中包含的组织信息必须详细,便于校验
检验方法或工具:Android:jadx-gui;iOS:/ 查看APP应用签名信息,需要包含APP所有人姓名、组织名称、所在城市等个人或组织信息

5.动态调试保护

要求准则:
Android应用:
进入AndroidManifest.xml配置文件,查看节点中android:debuggable属性值属性不为true,避免程序被任意调试
iOS应用:
查看应用主程序代码中是否调用ptrace设置PT_DENY_ATTACH参数进行反调试防御
检验方法或工具:
Android:jadx-gui 查看节点中android:debuggable属性值属性不为true
iOS:/ 调用了ptrace设置PT_DENY_ATTACH参数

6.数据备份保护(Android)(禁止任意数据备份)

要求准则:
要求正式环境下的Android应用必须在AndroidManifest.xml中设置android:allowBackup属性为false,避免数据被任意备份
检验方法或工具:Android:jadx-gui 查看AndroidManifest.xml中设置android:allowBackup属性为false

7.防进程注入

要求准则:
Android应用:
要求应用程序源代码有防御进程注入的代码或者应用程序有进行第三方加固
iOS应用:
要求Xcode的Build Setting中“Other Linker Flags”配置项中加入防御进程注入的配置项,如下编译选项,-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null
检验方法或工具:源代码查看工具查看即可

二、运行环境安全

1.本地端口开放要求

要求准则:
应用程序禁止在设备本地开放侦听端口,如果因为业务需要必须侦听本地端口,要做到如下两点:
1.禁止绑定0.0.0.0地址
2.对端口添加访问控制,只允许许可的IP设备进行通信
检验方法或工具:
Android应用:
在usb调试环境下输入netstat命令或者在移动设备上安装netstatplus程序,查看应用程序是否在本地侦听了端口
iOS应用:
usb调试模式下用lsof命令在iOS设备上查看是否在本地侦听了端口
结果:未在本地侦听端口,或者在本地侦听的端口已经做好了访问控制,禁止任何人随意链接

2.root/越狱环境检测

要求准则:
应用程序必须要对软件所处的设备环境进行检测,如果设备所处环境是root/越狱这样的高风险环境,需要对用户进行危险运行环境提示
检验方法或工具:越狱/root后的终端设备(安装app运行查看是否有提示)

3.网络环境检测

要求准则:
应用程序必须要对软件所处的网络环境进行检测,如果软件运行中网络环境突然切换到WiFi,需要对用户进行WiFi网络切换提示
检验方法或工具:终端设备,有网络切换提示

三、敏感信息安全

1.禁止硬编码

要求准则:
禁止将密码、密钥、数据库配置信息等敏感信息直接硬编码在程序代码中
检验方法或工具:源代码查看工具即可

2.数据库存储安全

要求准则:
数据(敏感数据)必须先经过加密后再存入数据库中,并且若数据库是SQLite类的数据库,那么数据库也要求加密保存
检验方法或工具:adb、数据库管理工具等,查看数据保存即可

3.shared_prefs存储安全(Android)

要求准则:
数据和配置信息必须经过加密后再存入SharedPreferences文件中,并且对SharedPreferences文件也要求加密存储
检验方法或工具:用adb检查保存在Android设备上的shared_prefs文件夹内是否有未加密的配置文件信息

4.NSUserDefault存储安全(iOS)

要求准则:
数据和配置信息必须经过加密后再存入NSUserDefault文件中,并且对NSUserDefault文件也要求加密存储
检验方法或工具:检查应用程序保存在iOS设备上的NSUserDefaults文件中是否保存了未加密的敏感信息

5.log日志禁止记录敏感信息

要求准则:
应用程序运行日志禁止记录敏感信息,包括登录账号密码、交易支付密码、身份证号码等敏感信息
检验方法或工具:
Android应用:
usb调试模式下使用adb logcat抓取log,然后进行包含敏感信息的操作功能,然后查看log日志中是否记录了敏感信息信息
iOS应用:
打开应用程序进行包含敏感信息的操作功能,查看应用程序NSLog中是否输出敏感信息

四、数据传输安全

1.网络数据传输

要求准则:
要求应用程序数据网络传输必须使用HTTPS加密传输,并且加密协议建议使用TLS1.2及其以上版本
检验方法或工具:fiddler、BurpSuite等抓包工具抓取通信数据,分析检测网络协议

2.关键数据加密传输

要求准则:
密码、交易金额、身份证号码等敏感信息必须要先使用高强度加密算法(如:MD5+salt)加密后再进行网络传输
检验方法或工具:fiddler、BurpSuite等抓包工具抓取通信数据,分析敏感数据加密

3.服务器证书校验

要求准则:
当应用程序采用HTTPS协议传输时,必须要对接收到的服务器证书做合法性和正确性校验,以防止钓鱼、HTTPS中间人等攻击
检验方法或工具:源代码查看工具查看应用程序源代码,是否有服务器证书校验的逻辑代码存在即可

五、Android组件安全

1.组件导出要求

要求准则:
如果组件无需被其他进程或服务调用,要求在AndroidManifest.xml配置文件中把android:exported设置为false,或者使用android:permission属性来指定一个权限字符串
检验方法或工具:jadx-gui

2.Activity界面防劫持

要求准则:
要求APP在Activity的OnPause函数中加入提示信息,每当Activity切入到后台的时候给出提示信息,防止恶意钓鱼页面覆盖APP原界面
检验方法或工具:源代码查看工具查看即可,也可多次切换app进入后台查看提示

3.WebView组件使用要求

要求准则:
1.在使用API<=17的SDK版本中,应避免对addJavascriptInterface方法进行调用。可使用OnPrompt替换addJavascriptInterface进行跨语言调用
2.在调用WebView组件时,应删除WebView中不安全的内置接口:searchBoxJavaBridge、accessibility、accessibilityTraversal。
检验方法或工具:jadx-gui

六、iOS内存保护

1.地址随机化

要求准则:
要求应用程序在编译时采用Position Independent Executable (PIE)选项,提高内存利用难度
检验方法或工具:查看应用程序编译环境

2.堆栈保护

要求准则:
要求应用程序在编译时采用Stack Smashing Protector (SSP)选项,防止栈溢出等攻击
检验方法或工具:查看应用程序编译环境

3.自动引用计数

要求准则:
要求应用程序在编译时采用Automatic Reference Counting(ARC)选项,防止造成内存破坏漏洞
检验方法或工具:查看应用程序编译环境

七、日志与异常处理

1.异常处理

要求准则:
要求应用程序源代码,有安全异常捕获的逻辑代码存在,且有安全异常日志记录
检验方法或工具:源代码查看工具

2.日志审计

要求准则:
要求应用程序服务端有登录认证、敏感操作等重要操作的日志记录
检验方法或工具:服务器管理工具

八、其他/增强安全

1.界面切换

要求准则:
1.要求APP在切换到其他应用时,在登录页面中已经填写的账号密码等敏感信息应进行清空,防止用户敏感信息泄露
2.要求切换到后台的APP页面必须模糊化,避免信息泄漏
检验方法或工具:终端设备,切换应用检查

2.屏幕录像

要求准则:
针对安全性要求较高的APP,例如金融APP,对于包含敏感信息的页面,要求应用程序具备阻止截屏、录像功能,或对截屏、录像操作进行提示
检验方法或工具:终端设备,进行录像操作检查

3.软件更新

要求准则:
要求应用程序设计并提供安全更新的功能,发布新版本的安全更新时应提示用户下载,需要验证程序的签名证书是否合法,防止程序被替换并植入恶意代码
检验方法或工具:终端设备,更新软件,在线升级检查

4.APP权限最小化

要求准则:
要求APP只获取和业务功能需要的系统权限,不必要的系统权限不应在AndroidManifest.xml文件中添加
检验方法或工具:Android:jadx-gui;iOS:/ 产看文件检查有无多余不必要权限。

5.自定义键盘

要求准则:
针对安全性要求较高的APP,例如金融APP,要求在登录认证、交易等操作时使用程序自定义键盘,并且键盘位要随机
检验方法或工具:终端设备

6.手势密码

要求准则:
针对采用了手势密码进行认证的APP,必须满足如下要求:
1.必须要将手势密码加密后保存在设备本地的安全数据库中,也可以将手势密码保存在服务端,每次登录时将用户输入的手势密码上传到服务端校验(建议手势密码保存使用手势密码+IMEI号进行hash加密保存)
2.手势密码五次输入错误后,要求重新输入用户和登录密码进行身份认证
检验方法或工具:源代码查看工具

7.第三方库安全

要求准则:
要求APP应用开发使用的所有第三方库版本不存在已知的安全漏洞
检验方法或工具:百度,官网等查询

总结

基础的移动应用安全检查几乎没有太多技术要求,大多只需要手机下载app使用即可完成,最多也就是对一些常见工具的简单使用,查看一下源代码逻辑等。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值