一、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 网络申请缓存

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

NSURLRequestReloadIgnoringLocalCacheDataNSURLRequestReloadIgnoringCacheDataconnection 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并对证书严格、正确地进行校验。
  • 移除热更新机制。