IOS安全测试(资源学习笔记)

客户端程序安全

位置无关代码

检测客户端是有启用Position Independent Executable(PIE)编译选项,采用PIE选项编译的引用程序允许使用地址空间随机分布功能(ASLR, Address Space Layout Ramdomization),提高内存漏洞被利用的难度。

测试方法: 如图,使用otool在iOS设备上进行操作,查看是否设置PIE标志。

image-20210831175108388

威胁等级: 若客户端未启用PIE,此时为低风险;若无异常则无风险。

栈保护

检测客户端是否起启用Stack Smashing Protector(SSP)编译选项,采用SSP选项编译的应用程序能够防止栈溢出等栈破坏漏洞的攻击。

测试方法: 如图,使用otool在iOS设备上进行操作,查找__stack_chk_guard关键字。

image-20210831175506829

威胁等级: 若客户端未启用SSP,此时为低风险;若无异常则无风险。

自动引用计数

检测客户端是否启用Automatic Reference Counting(ARC)编译选项,采用ARC选项编译的应用程序能够自动对Objective-C对象进行内存管理,防止造成内存破坏漏洞。

测试方法: 如图,使用otool在iOS设备上进行操作,查找_objc_release关键字。

image-20210831175856502

威胁等级: 若客户端未启用ARC,此时为低风险;若无异常则无风险。

安装包签名

检测客户端是否进过正确签名(正常情况下应用都应该是签名的,否则服务在未越狱iOS 10上运行)。

测试方法: 如图,当输出结果为”valid on disk”时,表示签名正常。

image-20210831180132507

从App Store下载的应用,其签名信息中的authority应类似下图:

image-20210831180206140

威胁等级: 通常情况下非越狱手机只有使用开发者账号上架到App Store才可以下载,一般不会出现此类问题,若签名异常为低风险。

客户端程序保护

检测客户端安装程序,判断时候包含调试符号信息,是否能反编译为源代码,是否存在代码保护措施。

  1. 代码混淆 检测客户端安装程序,判断时候包含调试符号信息,是否能反编译为源代码,是否存在代码保护措施。

    测试方法: 将ipa解包,发编译,对客户端程序文件进行逆向分析。

  2. 远程调试 检测客户端程序Entitlements.plist文件或者内嵌Entitlements中是否包含调试设置。

威胁等级: 若客户端未进行代码混淆为低风险,否则无风险。

应用完整性检测

检测客户端是否对自身完整性校验,客户端程序如果没有自校验机制,攻击者可能通过篡改客户端程序,显示钓鱼信息欺骗用户,窃取用户的隐私信息。

测试方法: 获取iOS应用程序包和资源文件,修改客户端程序文件或其他资源文件,检测客户端是否能够运行。(推荐修改配置文件、文本文件或者图片,使客户端显示钓鱼信息)。

image-20210831180617289

客户端程序问津均保存在应用私有目录的.app的文件夹下。可以寻找文件夹中的配置文件和文本文件,能够影响程序运行的文件进行修改(可以通过文件名和文件类型进行推测,首选修改对象是html、js和配置文件等)。修改后需要重新运行客户端。 注意,应用程序在提交给App Store后可执行文件会被修改,所以开发时不能讲自身Hash硬编码进程序中,建议应用通过Apple的数字签名机制来判断是否被篡改。

威胁等级: 若客户端启动时不进行应用完整性检测为高风险;若只对原有文件进行检测而忽略是否存在新增文件时为中风险,不存在上述情况无风险。

进程安全

越狱检测

检测客户端程序是对越狱环境进行检测。

测试方法: 人工测试,在已越狱的iOS设备上运行客户端程序,检测程序在运行时是否提示当前处于不安全的越狱环境中。

威胁等级: 当客户端程序不存在越狱检测时低风险;存在越狱检测则无风险。

修复方案: 在程序中加入对越狱环境的检测;

反调试保护

检测客户端程序是否有反调试能力。

测试方法: 使用debugserver在iOS设备上attach应用程序,在mac端使用lldb进行调试,检测客户端是否具备反调试的能力。 在iOS设备上attach被测试的程序。

image-20210831181448323

将1234端口转发到本地1234端口,使用lldb进行调试。

image-20210831181655220

威胁等级: 当客户端程序不存在调试检测或者反调试时为中风险;当程序存在越狱检测时为低风险;存在反调试手段时无风险。

修复方案: 通过ptrace PT_DENY_ATTACH实现反调试,并在多个位置添加代码判断是否存于被调试状态,若处于被调试状态,则进程退出;

反dylib注入

检测客户端程序是否有反dylib注入的能力。通过注入动态链接库,hook客户端某些关键函数,从而获取敏感信息或者改变程序执行。

测试方法: 可使用cycript进行注入,检测程序是否被注入。

在这里插入图片描述

威胁等级: 当客户端存在动态注入隐患时为中风险;否则则无风险。

修复方案: 1. 在Build Setting中找到“Other Linker Flags”中加上一下编译选项。

-Wl,-sectcreate,___RESTRICT,___restrict,/dev/null;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值