服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS开发避免安全隐患的要点总结

iOS开发避免安全隐患的要点总结

2021-05-26 15:45宜信技术 IOS

在本篇文章里小编给各位整理了关于iOS开发如何避免安全隐患的知识点总结,需要的朋友们学习下。

现在很多ios的app没有做任何的安全防范措施,导致存在很多安全隐患和事故,今天我们来聊聊ios开发人员平时怎么做才更安全。

一、网络方面

用抓包工具可以抓取手机通信接口的数据。以charles为例,用charles可以获取http的所有明文数据,配置好它的证书后就可以模拟中间人攻击,获取https加密前的明文数据。

1.1 中间人攻击

先简要地说下什么是中间人攻击:

①客户端:“我是客户端,给我你的公钥” -> 服务端(被中间人截获)。

所以现在是:

客户端->中间人

②然后中间人把消息转给服务端,也就是:

中间人->服务端

③服务端把带有公钥的信息发送给客户端,但是被中间截获。所以是:

服务端-[服务端的公钥] ->中间人

④中间人把服务端的公钥替换成自己的公钥,发送给客户端,声称是服务端的公钥:

中间人-[中间人的公钥] ->客户端

⑤客户端用得到的公钥加密,实际是用中间人的公钥进行加密,所以中间人可以用自己的私钥解密,获取原始数据,然后再用服务端的公钥对原始数据(或者修改原始数据内容)加密后发送给服务端。

这样中间人就可以获取到双方的通信数据,并可以制造虚假数据。

1.2 如何防范中间人攻击?

下面开始说如何防范:

1.2.1 ssl pinning

ssl pinning的原理就是把服务端的公钥存到客户端中,客户端会校验服务端返回的证书是否和客户端保存的一致,这样就避免了中间人替换证书进行的攻击。

ssl pinning的实现比较简单,只需要把ca证书放入项目中,通过security framework实现nsurlsession上的ssl pinning。如果用的是afnetworking,代码更简单一点:

iOS开发避免安全隐患的要点总结

这样通过charles抓包就会报错。

iOS开发避免安全隐患的要点总结

证书验证有可以只验证公钥(afsslpinningmodepublickey),也可以完全验证证书(afsslpinningmodecertificate)。

但是用ssl pinning有个很严重的问题,就是如果证书有问题,只有发布新版本才能解决。如果新版本一直审核不通过,app的网络通信就全部挂掉了。

比如赛门铁克(symantec)证书被google和ios12不信任的问题。如果app内置了证书,就必须要重新发版。

1.2.2 接口内容进行加密

很多的app接口只对请求的参数进行加密和各种验证,而接口返回过来的数据就是明文。如果不用ssl pinning来防止中间人攻击,也可以把接口返回的数据也进行加密,这样抓包工具抓到包后也依然不能破解。

比如微信,微信中的接口用的是http协议,但是内容全部进行了加密。

iOS开发避免安全隐患的要点总结

现在常用的是对称加密,加密效率比较快。如果app里有的数据特别重要,还是要用非对称加密,非对称加密更安全,但是效率会比较慢。

二、日志 2.1 swift日志

swift中打印日志的语法可以用print,也可以用nslog。但是尽量别用nslog,因为swift中用nslog,系统日志中是能查到的。可以通过pp助手、itools或者xcode的devices and simulators 来查看系统日志。

用print打印日志就不会出现在系统日志中。

2.2 oc日志

在release环境下不要输出nslog日志。一般大家都会用宏定义解决,如下:

iOS开发避免安全隐患的要点总结

三、信息的存储 3.1 密钥

大部分的程序员喜欢直接把密钥放到宏或者常量里。

如:#define aes_key @“aaa123"

这样做很容易就可以被反编译出来。安全性比较差。可以用以下方法加强安全,增加破解的难度。

对密钥(a)进行加密后定义为宏(b),使用的时候进行解密得到密钥(a)。其中对密钥a加密的密钥为c。

因为在宏定义的时候我们如果定义成字符串,会直接存在data段,这样破解者很容易获取到。比较安全的做法是把c和b定义成uint8_t[]数组,这样每个字符就会放到text段的每个单独指令中。指令执行后生成字符串。这样就会很安全。

用一段长文本,按规则提取出里面的密钥,密钥是随机的。

在服务端和客户端定义一段长文本,app端随机生成起始位置和长度,把起始位置和长度进行移位等操作,生成相应的数字,对数字进行base64编码,生成的字符串 传给服务端,服务端根据这个字符串 就能 解析出相关的密钥。

代码如下:

iOS开发避免安全隐患的要点总结

这样只是增加了破解者获取密钥的难度,其实并不能完全阻止破解者获取。

3.2 keychain

越狱的iphone可以查看导出keychain保存的信息。keychains的内容存放在sqlite中,目录为:/private/var/keychains。可以通过keychain-dump可以查看钥匙串里存放的的内容。

所以保存到keychain的数据一定要是加密之后的数据。 

3.3 plist、sqlite

plist、sqlite可以直接在ipa安装文件中获取到,所以不要在这些文件中存放重要信息,如果要保存,就进行加密后再存放。

四、app加固 4.1 代码混淆

代码混淆就是把易读的类名、方法名替换成不易读的名字。常用的方法有宏替换和脚本替换。

比如本来方法名为:- (void)loadnetdata; 进行代码混淆后,用class-dump导出头文件后会显示成修改后的方法名:- (void)showxhevaluatess;

4.2 用c语言

核心代码用c语言写,但是c语言的函数也可以被hook,比如用fishhook。开发人员可以用静态内联函数来防止hock,破解者就只能去理解代码的逻辑。

4.3 检测tweak

可以检测 /library/mobilesubstrate/dynamiclibraries 下的 plist 文件里是否包含自己app的bundle id。如果包含,可以进行限制app的功能、提示该手机不安全 等。

延伸 · 阅读

精彩推荐
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17