一、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查看办法
- 开发者自查
- /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并对证书严格、正确地进行校验。
- 移除热更新机制。