iOS安全攻防之越獄裝置檢測

來源:互聯網
上載者:User

標籤:etc   div   ica   int   com   檢測   ==   advance   detail   

    iOS 越獄(iOS Jailbreaking),是用於擷取蘋果公司便攜裝置作業系統iOS最高許可權的一種技術手段,使用者使用這種技術及軟體可以擷取到 iOS 的最高許可權,甚至可能可以進一步解開電訊廠商對行動電話通訊的限制。手機越獄後會面臨更多的安全風險,不建議對iOS裝置進行越獄。在開發中可以針對越獄裝置進行安全防範。

  可以嘗試用 NSFileManager 判斷裝置是否安裝了越獄外掛程式。

#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])const char* jailbreak_tool_pathes[] = {    "/Applications/Cydia.app",    "/Library/MobileSubstrate/MobileSubstrate.dylib",    "/bin/bash",    "/usr/sbin/sshd",    "/etc/apt"};
#pragma mark - 判斷裝置是否被越獄+ (BOOL)isJailBreak{    for (int i=0; i<ARRAY_SIZE(jailbreak_tool_pathes); i++) {        if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithUTF8String:jailbreak_tool_pathes[i]]]) {            XSDLog(@"The device is jail broken!");            return YES;        }    }    XSDLog(@"The device is NOT jail broken!");    return NO;}

 

  可以通過嘗試讀取應用列表,看有無許可權:  

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]){        NSLog(@"Device is jailbroken");        NSArray *applist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/User/Applications/"                                                                               error:nil];        NSLog(@"applist = %@",applist);    }

  未越獄裝置是無法讀取資料的,越獄裝置是可以獲得一個列表。

 

  使用stat系列函數檢測Cydia等工具:

#import <sys/stat.h>void checkCydia(void){    struct stat stat_info;    if (0 == stat("/Applications/Cydia.app", &stat_info)) {        NSLog(@"Device is jailbroken");    }}

  

  可以看看stat是不是出自系統庫,有沒有被攻擊者換掉:

#import <dlfcn.h>  void checkInject(void){    int ret ;    Dl_info dylib_info;    int (*func_stat)(const char *, struct stat *) = stat;    if ((ret = dladdr(func_stat, &dylib_info))) {        NSLog(@"lib :%s", dylib_info.dli_fname);    }}
輸出結果為:

  如果結果不是 /usr/lib/system/libsystem_kernel.dylib 的話,那就100%被攻擊了。
如果 libsystem_kernel.dylib 都是被攻擊者替換掉的……

 

  動態庫檢測:

#import <mach-o/dyld.h>void checkDylibs(void){    uint32_t count = _dyld_image_count();    for (uint32_t i = 0 ; i < count; ++i) {        NSString *name = [[NSString alloc]initWithUTF8String:_dyld_get_image_name(i)];        NSLog(@"動態庫檢測結果--%@", name);    }}

  通常情況下,會包含越獄機的輸出結果會包含字串: Library/MobileSubstrate/MobileSubstrate.dylib 。

  結果:

  

 

  通過檢測程式當前啟動並執行環境:

#include <stdlib.h>void printEnv(void){    char *env = getenv("DYLD_INSERT_LIBRARIES");    NSLog(@"===%s", env);}結果:2017-05-23 15:02:30.232140+0800 TestSecurityAdvance[16888:919836] ===(null)
  未越獄裝置返回的是 null。

  參見:念茜的部落格。

 

iOS安全攻防之越獄裝置檢測

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.