越獄檢測的攻與防

在應用開發(fā)過程中哟忍,我們希望知道設備是否越獄,正以什么權限運行程序瑟押,好對應采取一些防御和安全提示措施搀捷。iOS7相比之前版本的系統(tǒng)而言,升級了沙盒機制多望,封鎖了幾乎全部應用沙盒可以共享數(shù)據(jù)的入口嫩舟。即使在越獄情況下,限制也非常多怀偷,大大增加了應用層攻擊難度家厌。比如,在iOS7之前椎工,我們可以嘗試往沙盒外寫文件判斷是否越獄饭于,但iOS7越獄后也無該權限蜀踏,還使用老方法檢測會導致誤判。那么掰吕,到底應該如何檢測越獄呢果覆?攻擊者又會如果攻破檢測呢?本文就著重討論一下越獄檢測的攻與防殖熟。

首先随静,你可以嘗試使用NSFileManager判斷設備是否安裝了如下越獄常用工具:
/Applications/Cydia.app
/Library/MobileSubstrate/MobileSubstrate.dylib
/bin/bash
/usr/sbin/sshd
/etc/apt

但是不要寫成BOOL開關方法,給攻擊者直接鎖定目標hook繞過的機會

+(BOOL)isJailbroken{
if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]){
    return YES;
}
// ...
}

攻擊者可能會改變這些工具的安裝路徑吗讶,躲過你的判斷。

那么恋捆,你可以嘗試打開cydia應用注冊的URL scheme:

if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]){
 NSLog(@"Device is jailbroken");
}

但是不是所有的工具都會注冊URL scheme照皆,而且攻擊者可以修改任何應用的URL scheme。

那么沸停,你可以嘗試讀取下應用列表膜毁,看看有無權限獲取:

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

越了獄的設備是可以獲取到的:


攻擊者可能會hook NSFileManager 的方法愤钾,讓你的想法不能如愿瘟滨。那么,你可以回避 NSFileManager能颁,使用stat系列函數(shù)檢測Cydia等工具:

#import <sys/stat.h>

- void checkCydia(void)
{
struct stat stat_info;
if (0 == stat("/Applications/Cydia.app", &stat_info)) {
    NSLog(@"Device is jailbroken");
}
}

攻擊者可能會利用 Fishhook原理 hook了stat杂瘸。

那么,你可以看看stat是不是出自系統(tǒng)庫伙菊,有沒有被攻擊者換掉:

 #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 都是被攻擊者替換掉的……

那也沒什么可防的大哥你隨便吧……
那么镜硕,你可能會想运翼,我該檢索一下自己的應用程序是否被鏈接了異常動態(tài)庫。

列出所有已鏈接的動態(tài)庫:

#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 血淌。

攻擊者可能會給MobileSubstrate改名,但是原理都是通過DYLD_INSERT_LIBRARIES注入動態(tài)庫财剖。

那么悠夯,你可以通過檢測當前程序運行的環(huán)境變量:

-void printEnv(void)
{
char *env = getenv("DYLD_INSERT_LIBRARIES");
NSLog(@"%s", env);
 }

未越獄設備返回結果是null,越獄設備就各有各的精彩了峰伙,尤其是老一點的iOS版本越獄環(huán)境疗疟。

貌似只用最后一種就可以了!個人意見

文章轉自:念茜的博客瞳氓。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末策彤,一起剝皮案震驚了整個濱河市栓袖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌店诗,老刑警劉巖裹刮,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異庞瘸,居然都是意外死亡捧弃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門擦囊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來违霞,“玉大人,你說我怎么就攤上這事瞬场÷蚋耄” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵贯被,是天一觀的道長眼五。 經(jīng)常有香客問我,道長彤灶,這世上最難降的妖魔是什么看幼? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮幌陕,結果婚禮上诵姜,老公的妹妹穿的比我還像新娘。我一直安慰自己苞轿,他們只是感情好茅诱,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搬卒,像睡著了一般瑟俭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上契邀,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天摆寄,我揣著相機與錄音,去河邊找鬼坯门。 笑死微饥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的古戴。 我是一名探鬼主播欠橘,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼现恼!你這毒婦竟也來了肃续?” 一聲冷哼從身側響起黍檩,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎始锚,沒想到半個月后刽酱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瞧捌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年棵里,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姐呐。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡殿怜,死狀恐怖,靈堂內的尸體忽然破棺而出曙砂,到底是詐尸還是另有隱情稳捆,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布麦轰,位于F島的核電站,受9級特大地震影響砖织,放射性物質發(fā)生泄漏款侵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一侧纯、第九天 我趴在偏房一處隱蔽的房頂上張望新锈。 院中可真熱鬧,春花似錦眶熬、人聲如沸妹笆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拳缠。三九已至,卻和暖如春贸弥,著一層夾襖步出監(jiān)牢的瞬間窟坐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工绵疲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哲鸳,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓盔憨,卻偏偏與公主長得像徙菠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子郁岩,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 在應用開發(fā)過程中婿奔,我們希望知道設備是否越獄缺狠,正以什么權限運行程序,好對應采取一些防御和安全提示措施脸秽。 那么儒老,到底應...
    無灃閱讀 1,234評論 0 3
  • 注:原文---念茜的博客 在應用開發(fā)過程中,我們希望知道設備是否越獄记餐,正以什么權限運行程序驮樊,好對應采取一些防御和安...
    richar_閱讀 306評論 0 0
  • 在應用開發(fā)過程中,我們希望知道設備是否越獄片酝,正以什么權限運行程序囚衔,好對應采取一些防御和安全提示措施。 iOS7相比...
    圈少閱讀 315評論 0 0
  • 但是不是所有的工具都會注冊URL scheme雕沿,而且攻擊者可以修改任何應用的URL scheme练湿。 那么,你可以嘗...
    圈少閱讀 250評論 0 0
  • 后來再也沒有寫過日記审轮。 我用過很多的筆記本肥哎,大的小的,薄的厚的疾渣,有做筆記用的篡诽,有抄寫自己喜歡的句子用的,也有隨便寫...
    喜陽閱讀 230評論 1 2