iOS环境下的中间人攻击风险浅析

0x00概述

中间人攻击(Man-in-the-Middle Attack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。通过中间人攻击可以窃取信息、进行篡改、欺骗等多种攻击。

对于Android平台上的中间人攻击已经讨论的比较多,今天来聊聊iOS平台上的中间人攻击,以及iOS的可信证书管理。

0x01中间人攻击

在未做特殊说明的情况下,本文所有实验环境为:

iPhone 5 + iOS 8.1.2 + 已越狱。

1.1 中间人攻击分级

iOS平台上根据中间人攻击的难度,可以将中间人攻击分为3个等级:

1) level1:在没用向手机中安装攻击者证书的情况下可以进行中间人攻击

2) level2:在向手机中安装攻击者证书的情况下可以进行中间人攻击

3) level3:在向手机中安装攻击者证书的情况下也不可以进行中间人攻击

对于这三种情况,我们以一个例子分别对这三种情况进行说明。借用Owasp关于iOS https中间人演示的例子,稍做修改。正常情况下,程序启动时如图1,点击“Fetch Secret”程序请求server端数据并显示,如图2。

图 1 启动界面
图 2 正常获取数据

1.1.1 不导入证书可中间人

在此次连接的NSURLConnection对象的delegate类中只实现一个connection:didReceiveAuthenticationChallenge:方法,如图3。

图 3 连接校验方法

设置burp suite,开启代理,如图4。

图 4 burp suite设置

手机设置代理为burp suite运行pc的地址,如图5。

图 5 手机代理设置

运行程序,点击“Fetch Secret”,程序正常获取到了与图2相同的数据,burp suite也截获了所有信息,如图6,中间人攻击成功。

图 6 burp suite截获数据

1.1.2 导入证书可中间人

修改程序,在NSURLConnection对象的delegate类中实现connection:willSendRequestForAuthenticationChallenge:方法,如图7。

图 7 连接校验方法

其他设置与1.1.1小节完全相同,程序发现连接异常,终止获取数据,如图8,burp suite也理所当然获取数据失败。

图 8 获取数据失败

此时,向手机中安**urp suite证书,如图9。

图 9 安装*burp证书

重新打开应用,点击“Fetch Secret”,应用正常获取数据,burp suite也截获了全部数据,中间人攻击成功。

1.1.3 导入证书不可中间人

继续对程序进行修改,将公钥证书放入应用中,并修改connection:didReceiveAuthenticationChallenge:方法在连接过程中获取证书信息,对server端证书进行强校验,如图10。同时,注释掉connection:willSendRequestForAuthenticationChallenge:方法,因为如图实现了这个方法,方法connection:didReceiveAuthenticationChallenge:将不会被调用。

图 10 连接校验方法

其他设置不变,手机中依然安装有burp suite证书,打开应用,点击“Fetch Secret”,应用无法正常获取数据,如图11,burp suite也不能截获数据,中间人攻击失败。


图 11 证书错误1
图 12 证书错误2

1.1.4 一些建议

一般来说,建议应用信任手机中的所有证书即可,在应用中置入公钥证书对连接进行强校验确实最为安全,但会引发诸多问题,如证书更新、证书过期、证书作废等。

如果需要更新客户端证书,都必须升级客户端版本,而升级客户端是一个较为漫长的过程。 例如证书被黑客窃取,需要紧急作废证书,而许多用户却有没有及时升级客户端的习惯,这将可能导致大面积用户使用出现网络异常的情况。就目前来看,也确实很少看到有应用将安全级别做到level3。

0x02可信证书管理

上一章节中谈到向手机中导入可信证书的问题,小生在编写一个iOS工具的时候无意发现iOS证书管理的一个有趣的地方。通过“Settings”->“General”->“Profiles”可以查看当前设备信任的证书列表,但这个列表就真的是设备信任的证书列表吗?

2.1奇葩的中间人攻击情形

按照上一章节建议,将应用防中间人级别设置为level2,即应用信任当前设备上的所有证书,如果要使用burp suite对该应用进行中间人攻击,需要向设备中安**urp的证书,而目前设备上的信任证书如图13所示,设备上只有一个用于连接公司内网的员工证书。

图 13 证书列表

在这样的情况下,burp suite应该不能获取到应用的通信内容,而结果如何了。为了排除结果受到iOS系统在https通信时的10分钟缓存机制,先对设备进行重启或静置10分钟;启动应用进行通信,发现应用正常获取到了与图2所示相同的数据,而burp suite也成功截获了与图6所示相同的通信内容。这是什么鬼……

2.2 TrustStore.sqlite3

iOS系统下有一个有一个sqlite3文件,其绝对路径为:

“/private/var/Keychains/TrustStore.sqlite3”

该文件中存储的才是当前设备真正信任的证书列表,而通过“Settings”->“General”->“Profiles”查看到的证书列表与该文件中存储的证书列表可以不同步,如果我们手动对该sqlite3文件进行更改,就能让手机实际的可信证书列表与在“Profiles”中看到的完全不一样。小生写了一个工具,对该sqlite3文件进行管理,查看该文件中的存储,如图14。

图 14 证书列表

其中,ID为0的证书是图12中看到的用于连接公司内网的员工证书;ID为1的证书为burp suite证书,而这张证书没有在“Profiles”中显示。这就是导致能中间人的原因。

我们删除掉该sqlite3文件中的ID为1的证书,如图15,并对设备进行重启或静置10分钟,再进行2.1章节中的实验。

图 15 删除burp证书

打开应用,点击“Fetch Secret”,应用报错,如图16。

图 16 证书错误

如果重新将burp suite证书手动插入TrustStore.sqlite3文件中,如图16,并对设备进行重启或静置10分钟,再进行2.1章节中的实验,发现中间人攻击成功。而本文中对TrustStore.sqlite3文件的所有手动操作,都不会影响到“Profiles”中的任何显示,“Profiles”始终只显示一张员工证书。

图 17 插入证书

2.3不显示证书的中间人攻击(越狱后环境)

根据2.1和2.2小节的描述,如果攻击者通过越狱插件、甚至是通过某些猥琐手段逃过App Store检查的恶意应用,对已越狱的iphone手机上的文件“/private/var/Keychains/TrustStore.sqlite3”进行修改,向其中插入了一张攻击者证书,例如burp suite证书,攻击者就可以在受害者的网关上神不知鬼不觉的进行中间人攻击(当然level3安全级别下的应用是没门的),受害者完全不知情,因为受害者通过“Settings”->“General”->“Profiles”查看可信证书的时候,不会发现任何异常,即可以在不显示证书的情况下窃取受害者数据、进行篡改等。

所以,对于已越狱的手机,不要以为“Settings”->“General”->“Profiles”下没有安装一些奇奇怪怪的证书就高枕无忧了。

0x03小节

iOS系统的中间人攻击方法与防范措施,总结在在0x01章节中,小生认为普通应用只需要信任当前设备上的所有可信证书即可。关于iOS系统的可信证书列表,越狱过的朋友还是去检查下“/private/var/Keychains/TrustStore.sqlite3”文件中是否有“Profiles”中未显示或显示不对等的情况。

图18 噢噢
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容