iOS 安全模型浅析(四) ---- 防御代码漏洞和越狱检测

防御代码漏洞:

iOS用两套标准机制来预防代码执行攻击:地址空间结构随机化(ASLR)和XN bit(eXecute Never的缩写,标记该段内存区域不包含可执行代码)。每次执行程序时,ASLR都会随机分配内存、数据、堆和栈的内存位置。共享库需要在多个进程中使用,因此共享库的内存地址只在每次系统重启时随机设置,而不是每次执行程序时。函数和哭的内存地址很难预测,这就预防了缓冲区溢出攻击(return-to-libc),这种攻击依赖于基本库函数的已知地址。

XN bit一般对于非ARM平台的NX(No-eXecute) bit,允许操作系统将某段内存标记为不可执行,这是由CPU来控制的,学过计算机组成原理的同学都知道,每个CPU指令都有专门的地址存放。在ios中,这个机制默认应用在程序的堆和栈上。这就意味着,哪怕攻击者可以将恶意代码注入程序的堆和栈,他们也无法重定向应用程序来执行攻击代码。

每个程序都有一段既能写又能执行的内存,前提是他必须经过苹果的官方签名授权系统的签名。Safari中的JavaScript即时(JIT)编译器会用到这段内存。你平时在应用程序中经常使用的WebView并不具备访问相同功能的权利,这样就可以避免代码执行攻击。苹果一直禁止第三方的JIT,好处是更安全,而坏处也很明显,就是iOS平台上的Chrome等其他浏览器无法做到像Safari那样好用,因为他们只能使用WebView。

越狱检测:

越狱的本质就是通过一系列步骤来禁用掉苹果的签名机制,从而允许设备运行未经苹果官方审核的应用。越狱还允许你使用那一些便利的开发和测试工具,当然这些工具永远不会通过AppStore的审核。越狱的用户有能力做正常情况下其他iOS用户做不到的事。越狱还有一个至关重要的能力,就是黑箱测试应用程序。

和大多数人想的不一样,越狱不一定要禁用掉iOS的沙盒机制,他只是允许你在沙盒外安装应用程序。安装在移动用户主目录下的应用程序(即从AppStore下载的)仍然受到沙盒的限制。第三方的iOS应用程序需要安装在越狱设备中权限更高的/Applications目录下,与苹果股票应用安装在一起(就是那些你删不掉的系统应用).

越狱检测很早就有,不过没啥用。他的目的是检测设备是否存在不受信任、未经签名的第三方应用程序,从而判断设备是否处在高风险环境中。公平地说,第三方程序库中不乏恶意软件和行为不端的应用程序(像XX万能钥匙。。大家应该很清楚为什么能直接连上别人家的网),但总体来说,越狱检测不值得你浪费时间去做,因为他无法阻止一个坚定地攻击者。

有一段时间苹果官方推出过越狱检测的API,但很快就在后续的iOS版本中删掉了。具体原因众说纷纭,但是即使没有此API,开发者也找到了一些越狱检测的方法,大家知道就行了,没必要在这里费太多精力。

1.创建一个新进程,例如调用fork()、vfork()、popen()等方法。这是明显会被沙盒机制所禁止的事情。当然,大部分越狱系统上沙河依然是有效的,所以这种检测毫无意义。无论你设备是否越狱,总是可以从AppStore下载应用的。

2.读取沙盒外部的文件,开发者通常想要尝试访问一些二进制代码,这些二进制代码通常对应于ssh、bash,还有一些位于Cydia.app目录和Cydia经常使用的apt仓库等位置。但是这些检测很容易被绕过,并且Xcon6之类的工具也能帮助用户绕过这些自动检查。

3.不要使用太直白的方法名,比如isJailbroken,否则攻击者可以轻易定位并禁掉越狱检测。根据渗透测试同事多年的工作经验来看,像那种不改默认密码或者密码一猜就中的服务器数据库,简直是弱智写的。。还有这些很容易知道是做什么用函数。

还有些更复杂的技术,比如苹果的iBooks应用会尝试运行随着应用打包的未签名代码,而精明的开发者同样会尝试使用_dyld_image_count()和_dyld_get_image_name()来检查载入动态库(dynamiclibrartes, dylibs)的数量和他们的名字,并使用_dyld_get_image_header()来检查他们在内存中的位置。想要绕过这些检测通常需要给应用程序打一个二进制补丁。

想必读者都注意到了,我不是很喜欢搞越狱检测。就像二进制混淆技术和DRM一样,越狱检测被攻击者绕过时只会显得你更加愚蠢。毕竟对于攻击者来说,一些粗略的越狱检测只能拖慢自己前进的脚步几个小时而已。你要知道,对手的爱好就是破解程序,他们通常有大把的时间用来暴力破解,几个小时的时间对于他们而言并没有什么实际意义。我曾经看别人开发过一个二进制混淆程序,然后找渗透测试的同事帮忙测试,仅仅一个工作日就被搞清了算法。

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

推荐阅读更多精彩内容