`
shuai1234
  • 浏览: 972108 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

iOS安全攻防(二十):越狱检测的攻与防

 
阅读更多

越狱检测的攻与防

 

 

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

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

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

 

 

 

 

首先,你可以尝试使用NSFileManager判断设备是否安装了如下越狱常用工具:
/Applications/Cydia.app
/Library/MobileSubstrate/MobileSubstrate.dylib
/bin/bash
/usr/sbin/sshd
/etc/apt


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

 

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. +(BOOL)isJailbroken{  
  2.     if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]){  
  3.         return YES;  
  4.     }  
  5.     // ...  
  6. }  


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


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

 

 

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]){  
  2.      NSLog(@"Device is jailbroken");  
  3. }  



 

但是不是所有的工具都会注册URL scheme,而且攻击者可以修改任何应用的URL scheme。 


那么,你可以尝试读取下应用列表,看看有无权限获取:

 

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]){  
  2.         NSLog(@"Device is jailbroken");  
  3.         NSArray *applist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/User/Applications/"  
  4.                                                                                error:nil];  
  5.         NSLog(@"applist = %@",applist);  
  6. }  


越了狱的设备是可以获取到的:

 

 

攻击者可能会hook NSFileManager 的方法,让你的想法不能如愿。


那么,你可以回避 NSFileManager,使用stat系列函数检测Cydia等工具:

 

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #import <sys/stat.h>  
  2.   
  3. void checkCydia(void)  
  4. {  
  5.     struct stat stat_info;  
  6.     if (0 == stat("/Applications/Cydia.app", &stat_info)) {  
  7.         NSLog(@"Device is jailbroken");  
  8.     }  
  9. }  



 

攻击者可能会利用 Fishhook原理 hook了stat。

 

那么,你可以看看stat是不是出自系统库,有没有被攻击者换掉:

 

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #import <dlfcn.h>  
  2.   
  3. void checkInject(void)  
  4. {  
  5.     int ret ;  
  6.     Dl_info dylib_info;  
  7.     int (*func_stat)(const charchar *, struct stat *) = stat;  
  8.     if ((ret = dladdr(func_stat, &dylib_info))) {  
  9.         NSLog(@"lib :%s", dylib_info.dli_fname);  
  10.     }  
  11. }  


如果结果不是 /usr/lib/system/libsystem_kernel.dylib 的话,那就100%被攻击了。
如果 libsystem_kernel.dylib 都是被攻击者替换掉的……

 

那也没什么可防的大哥你随便吧……  



那么,你可能会想,我该检索一下自己的应用程序是否被链接了异常动态库。

列出所有已链接的动态库:

 

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #import <mach-o/dyld.h>  
  2.   
  3. void checkDylibs(void)  
  4. {  
  5.     uint32_t count = _dyld_image_count();  
  6.     for (uint32_t i = 0 ; i < count; ++i) {  
  7.         NSString *name = [[NSString alloc]initWithUTF8String:_dyld_get_image_name(i)];  
  8.         NSLog(@"--%@", name);  
  9.     }  
  10. }  


通常情况下,会包含越狱机的输出结果会包含字符串: Library/MobileSubstrate/MobileSubstrate.dylib 。


攻击者可能会给MobileSubstrate改名,但是原理都是通过DYLD_INSERT_LIBRARIES注入动态库。


那么,你可以通过检测当前程序运行的环境变量:

 

 

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. void printEnv(void)  
  2. {  
  3.     charchar *env = getenv("DYLD_INSERT_LIBRARIES");  
  4.     NSLog(@"%s", env);  
  5. }  

 

 

未越狱设备返回结果是null,越狱设备就各有各的精彩了,尤其是老一点的iOS版本越狱环境。

转:http://blog.csdn.net/yiyaaixuexi/article/details/20286929

分享到:
评论

相关推荐

    iOS应用安全攻防

    iOS 安全 攻防,英语好的直接撸就好了,英语不好的权当学英语了

    ZXHookDetection:【iOS应用安全、安全攻防】hook及越狱的基本防护与检测(动态库注入检测、hook检测与防护、越狱检测、签名校验、IDA反编译分析加密协议Demo);【数据传输安全】浅谈http、https与数据加密

    ZXHookDetection ...[防]判断是否越狱(使用NSFileManager) + (BOOL)isJailbroken1{ if(TARGET_IPHONE_SIMULATOR)return NO; for (int i = 0;i &lt; sizeof(JailbrokenPathArr) / sizeof(char *);i++) {

    IOS应用安全攻防

    《IOS应用安全攻防》PDF高清电子书,不过是英文的。

    ios6 越狱 方法

    二、iOS 6越狱步骤 1. 寻找越狱工具:当时流行的iOS 6越狱工具有Evasi0n等。你需要找到适用于iOS 6的最新越狱工具并下载。 2. 运行越狱程序:在Windows或Mac上运行下载的越狱工具(如ios6 越狱.exe),连接你的iOS...

    jailbreakdetection:iOS越狱检测分析-越狱和越狱的iOS设备的比较

    关于可以用来以大大改进和更好的方式检测越狱设备的各种方法的文档。 包含越狱在iOS系统上所做的更改的差异,并将越狱与越狱系统进行比较。 以及可直接在应用程序中使用的源代码,以检测系统状态(越狱或越狱)。 ...

    程序员移动开发中的iOS安全攻防知识分享

    iOS安全攻防知识分享 iOS安全攻防是移动开发中的重要领域,涉及到iOS平台的安全性和可靠性。本文将从hook原理、LLDB命令、Mach-O文件、dyld、iOS应用签名原理、代码注入等几个方面对iOS安全攻防进行讲解。 一、...

    高清完整版 IOS应用安全攻防

    高清完整版 IOS应用安全攻防

    IOSDetect:IOS设备信息检测 HOOK检测 应用安全 安全攻防 越狱 重打包 patch 签名检测 注入检测

    IOS 设备信息检测:应用安全 安全攻防 HOOK 越狱 重打包 patch 签名 注入1、越狱检测:jab字段,不为空表示越狱 2、重打包检测: cert字段:证书信息,查看是否为Apple证书 3、inline hook检测 (详细)cydiahook字段,...

    ios越狱ios越狱ios越狱

    二、iOS越狱的类型 1. 软越狱:不涉及硬件改动,主要通过漏洞利用实现,可随时恢复到未越狱状态,但可能不支持最新版本的iOS。 2. 硬越狱:涉及对iOS设备硬件的修改,通常永久性,对设备有潜在风险,且可能导致...

    太极越狱(iOS8.4越狱) v2.4.5 官方版.zip

    太极越狱是一款iOS 8-iOS 8.1越狱工具,太极越狱支持iOS 8.0 — iOS 8.1.1 ;支持机型:iPhone 4s- 6Plus; iPad / iPad Air / 2; iPad mini / mini2; iPod touch 5,请您在越狱前备份您的重要资料。太极越狱是国人自主...

    ios6.1.3越狱工具

    《iOS 6.1.3越狱工具:深入解析与应用指南》 在移动设备的世界里,越狱一词对于许多iOS用户来说并不陌生。它指的是通过特定的工具和技术手段,解除苹果公司对iOS设备的封闭式管理,使得用户可以自定义系统、安装未...

    iOS7.X完美越狱

    **iOS 7.x完美越狱详解** iOS 7.x完美越狱是指针对苹果公司iOS操作系统7.x版本的一次越狱过程,允许用户绕过苹果的官方限制,获取设备的root权限,从而安装未经苹果App Store审核的应用程序,个性化设备设置,以及...

    iOS应用安全攻防视频.txt

    根据提供的文件信息,我们可以归纳出一系列与“iOS应用安全攻防”相关的知识点。这些知识点将基于标题、描述以及部分给出的内容进行展开。 ### iOS应用安全攻防概述 #### 一、iOS安全基础 1. **iOS系统架构简介**...

    ios11~11.1.2恢复未越狱状态

    4. **安全检查文件**:为了确保设备在恢复后确实处于未越狱状态,可能还会有文件或工具来检测设备的固件签名和完整性,以确认其未被篡改。 5. **越狱解除脚本**:在某些情况下,越狱可能涉及到对系统文件的修改。这...

    Frida-Scripts:iOS越狱检测绕过的Frida脚本

    这个压缩包“Frida-Scripts-iOS越狱检测绕过的Frida脚本”显然是针对iOS设备的,旨在帮助用户规避应用程序中的越狱检测机制,以便进行更深入的分析或调试。 `Frida` 是一个开源工具,它允许开发者通过JavaScript来...

    ios 7.x 越狱文件

    Evasi0n7.exe就是一个著名的越狱工具,它利用了当时iOS 7.x版本中的多个安全漏洞来实现越狱。 2. **权限提升**:成功利用漏洞后,越狱工具会提升其执行权限,从普通用户权限升级到root权限,这样就可以修改系统文件...

    ios完美越狱最新版v1.5

    iOS完美越狱V1.5版(evasi0n)为用户提供了对iOS设备更自由的控制,但同时也伴随着安全风险和潜在的软件兼容性问题。在决定是否进行越狱时,用户应充分了解这些利弊,并采取适当的预防措施,确保设备的稳定和数据安全...

    IOS越狱工具:absinthe win2.0.2工具下载

    《iOS越狱工具Absinthe Win 2.0.2详解及使用指南》 iOS越狱,对于许多寻求个性化和自由度的用户来说,是一种极具吸引力的技术操作。Absinthe Win 2.0.2是专为苹果设备,如iPhone、iPad以及iPod Touch设计的一款著名...

    ios 短信接收,越狱

    在iOS平台上,短信接收通常是一项受限的功能,主要是由于苹果对系统的封闭性和安全性设计。然而,如果你的iPhone已经越狱,那么你可以通过特定的方法来实现这个功能。越狱是指解除iOS设备上的软件限制,允许安装非...

Global site tag (gtag.js) - Google Analytics