无线安全学习笔记

安全笔记:
1.无线安全需要考虑的范围:
1)app在设备上的数据安全;
2)app与server在交互过程中的数据安全;
3)app在越狱用户手机上的安全;
4)server的安全:越权操作检查,csrf(请求回放),css跨站脚本,sql注入等等;
5)社会工程:员工安全培训,公司系统权限管理等;
2.无线安全不需要考虑的范围:
1)iOS系统被越狱的漏洞;
3.app在设备上的数据安全:
1)信息使用加密的方式存储,可以使用自己想用的任何加密方式,也可以使用ios自带的保护api进行保护,保护时可在设备未解锁的状态下防止文件被访问,自带的加密方式密钥是每台设备不一样的,只固化在硬件中,因此较难破解,暴力破解时通过猜测用户的密钥来加设备密钥的方式来进行破解,但每猜错一次,设备密钥的获取时间都会加长,因此安全性较好;只有数字的密钥时4位破解约18分钟,4位数字+字母就能达到19天,6位数字+字母要用时196天;
2)加密密钥以及所有的敏感信息不可以用明文存储,可以通过服务器端加密存储的方式,通过动态获取的方式来每次启动app时获取;
3)获取过程中提供相应的token逻辑很可能被用来做重放攻击,重放攻击的防护办法有:带时间戳、带上类似csrf token的内容;https协议也能有效防止回放攻击,但我试过好像不行;但我们现在似乎没有做重放攻击的防护;一方面可能造成服务器端数据异常,另一方面在被ssh的越狱手机上,可能被监听到用户的请求,然后攻击者通过回放来获取信息?
4.ios与server在交互过程中的数据安全:
1)使用https;
2)用户名与密码不能通过明文传输;
5.app在越狱用户手机上的安全:
1)为防止反编译分析,必须对关键信息的.h文件进行混淆之后再编译打包;
2)本地信息加密存储;
3)内存分配释放要完整,调用已被释放的对象本会crash,但如果被黑客利用,则可能会执行黑客所准备好的代码;
4)阻止gdb依附;
5)使用自定义键盘代替系统键盘,防止录屏幕(自定义的无屏幕按下效果)和键盘缓存被获取;
6)二进制和资源文件要做自检;
7)如果越狱手机ssh被破解,https在越狱手机上也可能被监听的,因此用户名密码还是可能泄漏,怎么整?
8)用过的敏感信息内容记得尽早释放,如果未释放而等系统释放,则信息在内存中驻留时间过长而容易被人获取;

5.server端的安全,也就是web安全了。

6.其它安全问题:

1)缓冲区溢出概念:通过改写程序返回地址等方法,使目标程序执行恶意代码,改写返回地址就是利用程序调用函数时,需要将返回指标入栈等原理,通过分配额外本地变量,可以破坏栈中的变量,从而达到改写返回地址的目标,也叫堆栈缓冲区溢出;

2)xcode下需要开启aslr选项,也就是pie选项(don't create position independent executable),置为NO;

3)urlschema跳转方式的攻击,也是存在的,比如某些恶意程序或h5可以通过微信等的urlschema来使目标手机上的微信添加app或发起视频聊天等等,比较难防范,需要结合业务进行校验;

4)db中的信息必须加密存储,否则会被读取,ios下的sqlite数据库提供类似的加密选项;sql语句也要防止被注入;

5)键盘如果开启了自动补全功能则会被记录输入记录,密码等敏感信息输入框一定不能这样,可考虑自定义键盘;


7.android安全:
1)防止反编译,google有混淆方案,核心敏感的代码用c/c++写,再用java调用;
2)使用https进行交互,且客户端对证书进行认证;
3)本地存储使用加密,而密钥存在服务器端或使用黑匣子以某些格式存在文件中;
4)使用签名防止被篡改后的app所替换;
5)url schema安全需要特别分析,需要对数据合法性做校验;
6)ui webview除js与webview互相调用时严格校验机制外,其安全与web安全一样,钓鱼,xss,csrf,sql注入,爬虫,重放,机器人抽奖等等;
7)日志输出一定关闭,或对敏感信息输出进行详细排查;
8)如提供content provider供其它应用访问数据时,一定要做严格的安全认证及权限限制;
9)密码登录错误次数限制,验证码,会话超时重新登录,手势密码,关键业务输入密码确认等逻辑设置,使手机遗失时安全性提高;(适用iOS)

8.cookie安全
1)禁止在Cookie中记录机密信息,如要记录则需要加密签名处理过后;
2)和登录认证相关的Cookie必须设置httponly属性为true,可以防止css攻击把cookie带去第三方站点,也可防止脚本访问cookie;
3)只在https环境下传递的Cookie需要设置secure属性为true(ssl);

9.几个安全概念

1)证书:包括公钥,来源标识(加密者),信息接收方接收到信息及证书,就可以用证书中的公钥进行解密;

2)签名:使用证书对内容进行加密的过程;

3)身份:证书+私钥可以标识完整的身份,其中一种存在形式也即p12文件;

4)keychain安全性:在非越狱设备上还是安全的,在越狱设备上,keychain完全可以导出,所以最好还是自己加密比较靠谱;

5)流媒体播放:有许多开源的库解决方案,不需要自己从头来写,比较好的如https://github.com/yixia/Vitamio-iOS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章