越狱检测的攻与防(1)

在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。

iOS7相比之前版本的系统而言,升级了沙盒机制,封锁了几乎全部应用沙盒可以共享数据的入口。即使在越狱情况下,限制也非常多,大大增加了应用层攻击难度。比如,在iOS7之前,我们可以尝试往沙盒外写文件判断是否越狱,但iOS7越狱后也无该权限,还使用老方法检测会导致误判。

那么,到底应该如何检测越狱呢?攻击者又会如果攻破检测呢?本文就着重讨论一下越狱检测的攻与防。


首先,你可以尝试使用NSFileManager判断设备是否安装了如下越狱常用工具:

/Applications/Cydia.app

/Library/MobileSubstrate/MobileSubstrate.dylib

/bin/bash

/usr/sbin/sshd

/etc/apt


但是不要写成BOOL开关方法,给攻击者直接锁定目标hook绕过的机会

+(BOOL)isJailbroken{

if([[NSFileManagerdefaultManager]fileExistsAtPath:@"/Applications/Cydia.app"]){

returnYES;

}}

攻击者可能会改变这些工具的安装路径,躲过你的判断。

那么,你可以尝试打开cydia应用注册的URL scheme:

if([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"cydia://package/com.example.package"]]){

NSLog(@"Device is jailbroken");

}

你可能感兴趣的:(越狱检测的攻与防(1))