客户端程序安全
位置无关代码
检测客户端是有启用Position Independent Executable(PIE)编译选项,采用PIE选项编译的引用程序允许使用地址空间随机分布功能(ASLR, Address Space Layout Ramdomization),提高内存漏洞被利用的难度。
测试方法: 如图,使用otool在iOS设备上进行操作,查看是否设置PIE标志。
威胁等级: 若客户端未启用PIE,此时为低风险;若无异常则无风险。
栈保护
检测客户端是否起启用Stack Smashing Protector(SSP)编译选项,采用SSP选项编译的应用程序能够防止栈溢出等栈破坏漏洞的攻击。
测试方法: 如图,使用otool在iOS设备上进行操作,查找__stack_chk_guard关键字。
威胁等级: 若客户端未启用SSP,此时为低风险;若无异常则无风险。
自动引用计数
检测客户端是否启用Automatic Reference Counting(ARC)编译选项,采用ARC选项编译的应用程序能够自动对Objective-C对象进行内存管理,防止造成内存破坏漏洞。
测试方法: 如图,使用otool在iOS设备上进行操作,查找_objc_release关键字。
威胁等级: 若客户端未启用ARC,此时为低风险;若无异常则无风险。
安装包签名
检测客户端是否进过正确签名(正常情况下应用都应该是签名的,否则服务在未越狱iOS 10上运行)。
测试方法: 如图,当输出结果为”valid on disk”时,表示签名正常。
从App Store下载的应用,其签名信息中的authority应类似下图:
威胁等级: 通常情况下非越狱手机只有使用开发者账号上架到App Store才可以下载,一般不会出现此类问题,若签名异常为低风险。
客户端程序保护
检测客户端安装程序,判断时候包含调试符号信息,是否能反编译为源代码,是否存在代码保护措施。
-
代码混淆 检测客户端安装程序,判断时候包含调试符号信息,是否能反编译为源代码,是否存在代码保护措施。
测试方法: 将ipa解包,发编译,对客户端程序文件进行逆向分析。
-
远程调试 检测客户端程序Entitlements.plist文件或者内嵌Entitlements中是否包含调试设置。
威胁等级: 若客户端未进行代码混淆为低风险,否则无风险。
应用完整性检测
检测客户端是否对自身完整性校验,客户端程序如果没有自校验机制,攻击者可能通过篡改客户端程序,显示钓鱼信息欺骗用户,窃取用户的隐私信息。
测试方法: 获取iOS应用程序包和资源文件,修改客户端程序文件或其他资源文件,检测客户端是否能够运行。(推荐修改配置文件、文本文件或者图片,使客户端显示钓鱼信息)。
客户端程序问津均保存在应用私有目录的.app的文件夹下。可以寻找文件夹中的配置文件和文本文件,能够影响程序运行的文件进行修改(可以通过文件名和文件类型进行推测,首选修改对象是html、js和配置文件等)。修改后需要重新运行客户端。 注意,应用程序在提交给App Store后可执行文件会被修改,所以开发时不能讲自身Hash硬编码进程序中,建议应用通过Apple的数字签名机制来判断是否被篡改。
威胁等级: 若客户端启动时不进行应用完整性检测为高风险;若只对原有文件进行检测而忽略是否存在新增文件时为中风险,不存在上述情况无风险。
进程安全
越狱检测
检测客户端程序是对越狱环境进行检测。
测试方法: 人工测试,在已越狱的iOS设备上运行客户端程序,检测程序在运行时是否提示当前处于不安全的越狱环境中。
威胁等级: 当客户端程序不存在越狱检测时低风险;存在越狱检测则无风险。
修复方案: 在程序中加入对越狱环境的检测;
反调试保护
检测客户端程序是否有反调试能力。
测试方法: 使用debugserver在iOS设备上attach应用程序,在mac端使用lldb进行调试,检测客户端是否具备反调试的能力。 在iOS设备上attach被测试的程序。
将1234端口转发到本地1234端口,使用lldb进行调试。
威胁等级: 当客户端程序不存在调试检测或者反调试时为中风险;当程序存在越狱检测时为低风险;存在反调试手段时无风险。
修复方案: 通过ptrace PT_DENY_ATTACH实现反调试,并在多个位置添加代码判断是否存于被调试状态,若处于被调试状态,则进程退出;
反dylib注入
检测客户端程序是否有反dylib注入的能力。通过注入动态链接库,hook客户端某些关键函数,从而获取敏感信息或者改变程序执行。
测试方法: 可使用cycript进行注入,检测程序是否被注入。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3V8FxALb-1640852199390)(C:\Users\swallow\AppData\Roaming\Typora\typora-user-images\image-20210831182601448.png)]
威胁等级: 当客户端存在动态注入隐患时为中风险;否则则无风险。
修复方案: 1. 在Build Setting中找到“Other Linker Flags”中加上一下编译选项。
-Wl,-sectcreate,___RESTRICT,___restrict,/dev/null;