乐趣区

关于逆向工程:ios逆向与安全攻防

一、iOS 逆向工程根底

  • 苹果开发者打算
  • 脱壳
  • 重签名
  • 日志打印
  • 本地文件
  • 网络通信
  • Hook

1. 苹果开发者打算

  • 只有退出苹果开发者打算,能力对利用进行非法签名。
  • Debug 版本和 Release 版本。
  • 开发者调式设施。
  • iOS 利用分为 AppStore 利用和企业应用。
  • developer.apple.com

2. 脱壳

  • AppStore 上架利用,都被苹果加了一层壳。
  • 在越狱设施中运行,dump 内存数据整合成未加密的可执 行文件。
  • Clutch,DumpDecrypted,MonkeyDev
  • Clutch -d com.company.app

3. 重签名

  • 代码签名机制
  • 应用本人的开发者证书从新对批改后的利用进行签名,使之可 以运行在本人的调试设施中,以便后续动态分析。
  • codesign,iOS App Signer,MonkeyDev

4. 连贯设施

  • 能够通过 USB、wifi 连贯 mac 和 iOS 设施。
  • usbmuxd
  • python tcprelay.py -t 22:2345 • ssh root@localhost -p 2345

5. 日志打印

  • 对利用的日志输入实时监控。
  • idevicesyslog,Console,Xcode

6. 本地文件

  • ipa 包资源文件
  • data 目录数据文件(用户数据、各种缓存数据)
  • keychain 数据
  • ipa 包能够间接解压
  • 数据文件 ssh 到越狱设施查看
  • keychaindumper

7. 网络通信

  • 监听、截获设施的网络通信数据。
  • Burp Suite,Charles,WireShark
  • 导入证书
  • bypass 证书验证 SSL Kill Switch

8. 动态剖析

  • IDA Pro,Hopper,Ghidra,class-dump,strings
  • 提取字符串、类、函数办法、导入函数等信息 • class-dump -s -H -S target -o outputDir

9.Hook

  • 对要害函数办法进行 Hook,打印要害信息或扭转函数行为。
  • Theos,MonkeyDev
  • Logos 语法
@hook Class
- (void)targetMethod {NSLog(@”Hooked”);
    @orig;
} 
@end

二、iOS 利用平安编码

  • iOS 系统安全机制简介
  • iOS 利用常见破绽及问题点
  • 如何编写平安的 iOS 利用

1.iOS 系统安全机制简介

  • 代码签名——避免未经受权的程序在设施上运行
  • 沙盒机制——利用只能拜访数据本人的数据
  • KeyChain——平安存储本地数据
  • 隐衷信息权限管制——避免利用未受权拜访用户隐衷信息

2.iOS 利用常见破绽及问题点

  • 本地存储问题——敏感信息不恰当地存储造成信息泄露
  • 网络通信问题——通信形式、报文数据处理不当造成信息泄露
  • 源码相干问题——敏感代码未混同加密造成信息泄露
  • 业务破绽——权限管制不当导致攻击者有能力进行未受权操作
2.1 本地存储文件个别能够在以下门路找到:

配置文件 /var/mobile/Containers/Data/Application/[UUID]/Library/Preference

缓存 /var/mobile/Containers/Data/Application/[UUID]/Library/Caches

数据库 /var/mobile/Containers/Data/Application/[UUID]/Documents

测试数据 & 证书数据 /var/mobile/Containers/Bundle/Application/[UUID]/APP.app

2.1.1 本地存储

破绽案例
应用 NSUserDefaults 明文存储用户设定的手势明码。利用工具提取设施中利用对应的用户配置 plist 文件后,即可查看相应字段,找到明码。
倡议计划
对敏感信息加密后应用 KeyChain 存储

2.2 网络通信

未应用 https 且明文通信
http 通信内容能够被轻松截获、篡改。如果报文内容为明文,可导致信息泄露。
https 服务端证书未认证
通信内容能够被截获、篡改,同样造成中间人攻打。
敏感参数弱加密
一旦被攻打,敏感信息容易被破解、透露。
未进行加签 / 验签
一旦被攻打,报文数据被篡改,如订单号、数量等。
外发不明数据
有问题的 IDE 或不明第三方 SDK 导致,敏感信息可能被透露。

2.2.1 网络通信

破绽案例
应用网络流量抓包工具监听设施的网络流量,能够看到未做全网络通信防护措施的利用通信明文数据。
倡议计划
利用内全局应用 https 进行网络通信,并且对服务端证书做强校验,同时对报文中的敏感信息进行加密,对通信报文整体进行加签、验签,利用不擅自接入第三方 SDK 或模块。

2.3 源码相干问题

日志打印
通过日志打印的调试信息,攻击者能够还原业务逻辑。
要害源码未混同
攻击者能够逆向利用,还原要害业务逻辑。
敏感字符串未加密
AppSecret、加解密应用的密钥等敏感字符串未加密造成信息泄露。
未检测设施运行环境
无奈及时发现注入、调试等攻击行为。

2.3.1 源码相干问题

破绽案例
不管越狱与否,都能够通过工具查看实时日志打印。某利用打印了网络申请,能够看到报文中的明文数据。
倡议计划
利用在开发实现上传 App Store 审核前,能够通过宏定义形式去掉 Release 版本中所有日志打印。

2.3.2 源码相干问题

破绽案例
通过工具导出了所有可执行文件中的办法名,通过搜寻能够很容易地发现诸如 loginWithPassword 的要害办法名。
倡议计划
对要害办法名应用宏定义进行随机数字符串替换,减少攻打难度和老本。

2.4 业务破绽

越权
攻击者取得了本不属于他的权限,能够查看、批改信息。
扫号、爆破
应用工具批量发送特定网络申请探测用户信息或明码信息。
认证绕过
通过批改网络通信数据包等操作批改认证断定后果。
短信破绽
未对短信接口做限度造成短信轰炸或短信内容任意编辑。
重放
数据包未做签名、工夫戳等机制,造成能够重放网络申请。

3. 如何编写平安的 iOS 利用

准则:敏感信息的爱护
防止所有可能造成敏感信息透露事件的产生。
WHY:为什么要爱护敏感信息
防止上述破绽和问题的产生,爱护公司和客户的财产、信息安全。
WHAT:什么是敏感信息
业务信息、用户身份、调试信息等所有与公司、用户、程序行为相干的信息。
HOW:如何爱护敏感信息
遵循敏感信息存取准则(迪米特法令),加密存储,按需提取。

3.1 剪贴板
  • 尽量避免应用零碎剪贴板,倡议应用自定义剪贴板
  • 应用实现后尽快删除
  • 禁用敏感信息 TextField 的复制 / 剪切
3.2 截屏缓存

folder/to/AppData/Library/Caches/Snapshots/

  • 监听利用退出前台事件
  • 对以后页面进行截屏
  • 进行含糊解决
  • 笼罩到最上层
3.3 键盘缓存
  • 零碎键盘默认会对非明码非数字进行缓存。
  • 倡议调整对应 TextField 的属性,敞开主动修改选项。

内存中的实例变量

  • 不要将明码明文寄存在实例变量中。
  • 敏感数据及时加密和摘除。
3.4 网络申请缓存

设置网络申请缓存策略,不在本地缓存网络申请报文

NSURLRequestReloadIgnoringLocalCacheData
NSURLRequestReloadIgnoringCacheData

connection willCacheResponse{return nil;}
3.5 网络通信平安
  • 网络通信报文数据须要加密和加签。
  • https 服务端证书须要认证。
3.6 应用 NSURLConnection 证书认证

connection didFailWithError:(NSError *)error;
该办法为连贯失败的回调,若证书验证失败,会触发该办法。

connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;
当收到 HTTPS 服务端认证的 challenge 时的回调办法,在该办法中实现对服务端证书的认证。

-(BOOL)shouldTrustProtectionSpace:(NSURLProtectionSpace *)protectionSpace;
证书认证的具体实现,非协定办法,须自行实现。

3.7AFNetworking 证书认证

[AFHTTPSessionManager manager].securityPolicy = [self customSecurityPolicyWithCertName:@”myCer2020″];
设定安全策略未读取指定证书文件进行证书验证

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
进行 SSL 证书认证

3.8 开发环境平安

XcodeGhost 查看办法

  1. 开发者自查
  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ 门路下有无 Library 文件夹
  • Target->Build Setting->Search Paths->Framework Search Paths 有无可疑 Framework
  • 在 Gatekeeer 关上的状况下执行 spctl –assess –verbose /Applications/Xcode.app

2.ipa 动态检测

  • strings [executable file] grep “http://init.icloud-analysis.com”
3.9 第三方组件平安

案例
2018 年 5 月,盘古实验室对外披露了 ZipperDown 破绽。破绽次要起因是第三方组件,SSZipArchive 或 ZipArchive,在解压 zip 压缩包时未对符号链接过滤,导致攻击者利用 ”../” 能够替换利用沙盒内任意资源文件

破绽造成条件:

  • 利用开发时应用了 SSZipArchive 或 ZipArchive 第三方库
  • 利用在收取 zip 压缩包文件时未应用平安的网络协议
  • 利用应用了 JSPatch 或相似的热更新机制

修复计划

  • 更新 SSZipArchive 或 ZipArchive 第三方库,或开发人员按照破绽原理自行修复。
  • 所有流量走 https 并对证书严格、正确地进行校验。
  • 移除热更新机制。
退出移动版