歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

深入探索在野外發現的iOS漏洞利用鏈(五)

來源:本站整理 作者:佚名 時間:2019-09-16 TAG: 我要投稿

這個漏洞鏈目前被三個不同的團隊發現,分別是攻擊者惡意組織、Project Zero的Brandon Azad和360安全的@S0rryMybad。
在2018年11月17日,@S0rryMybad利用此漏洞在天府杯PWN比賽中贏得20萬美元的獎金。Brandon Azad在2018年12月6日獨立發現并向Apple報告了同樣的漏洞。Apple在2019年1月22日修復了這一問題,并在iOS 12.1.4的發布說明(修復CVE-2019-6225漏洞)中對@S0rryMyBad和Brandon表示了感謝。該漏洞甚至被評為Blackhat 2019中的最佳特權提升漏洞。
但是,為什么已經擁有可用的iOS漏洞利用鏈#4(包含2019年2月向Apple報告的0-day漏洞)的攻擊者會暫時舍棄這個利用鏈,轉而使用一個全新的利用鏈呢?我們推測,可能是因為這個利用鏈更加可靠,只利用了一個漏洞,而沒有使用漏洞的組合,同時還避免了iOS漏洞利用鏈#4中用于沙箱逃逸的基于線程的重新分配技術中固有的缺陷。
然而,更加重要的是這個漏洞的本質原因。2014年,Apple添加了一個名為“vouchers”的新功能的未完成實現,并且這個新代碼的一部分涉及到了一個新的系統調用(從技術上看,是一個任務端口MIG方法),據我所知,這個位置從來沒有被利用過。需要明確的是,如果有一次測試中使用過預期的參數調用了系統調用,那么就會引發內核錯誤(Kernel Panic)。如果任何一位Apple開發人員在這四年內試圖使用過這個功能,他們的手機會立即崩潰,他們也就隨即會發現這一問題。
在這篇詳細的文章中,我們將詳細介紹攻擊者如何利用該漏洞安裝惡意植入工具,并監控設備上的用戶活動。我的下一篇文章將分析植入工具本身,包括命令和控制以及其監控能力的演示。
 
在野外的iOS漏洞利用鏈#5 – task_swap_mach_voucher
目標:iPhone 5s – iPhone X,11.4.1版本到12.1.2版本。
第一個不受支持的版本:12.1.3 – 2019年1月22日
iPhone6,1 (5s, N51AP)iPhone6,2 (5s, N53AP)iPhone7,1 (6 plus, N56AP)iPhone7,2 (6, N61AP)iPhone8,1 (6s, N71AP)iPhone8,2 (6s plus, N66AP)iPhone8,4 (SE, N69AP)iPhone9,1 (7, D10AP)iPhone9,2 (7 plus, D11AP)iPhone9,3 (7, D101AP)iPhone9,4 (7 plus, D111AP)iPhone10,1 (8, D20AP)iPhone10,2 (8 plus, D21AP)iPhone10,3 (X, D22AP)iPhone10,4 (8, D201AP)iPhone10,5 (8 plus, D211AP)iPhone10,6 (X, D221AP)
15G77 (11.4.1 – 2018年7月9日)16A366 (12.0 – 2018年9月17日)16A404 (12.0.1 – 2018年10月8日)16B92 (12.1 – 2018年10月30日)16C50 (12.1.1 – 2018年12月5日)16C10 (12.1.2 – 2018年12月17日)
 
Vouchers功能
Vouchers是2014年在iOS 8中引入的一項功能。Vouchers的代碼似乎已經寫到操作系統中,但沒有完全被實現,上述存在漏洞的代碼如下:
/* Placeholders for the task set/get voucher interfaces */
kern_return_t
task_get_mach_voucher(
  task_t                 task,
  mach_voucher_selector_ __unused which,
  ipc_voucher_t*         voucher)
{
  if (TASK_NULL == task)
    return KERN_INVALID_TASK;
  *voucher = NULL;
  return KERN_SUCCESS;
}
kern_return_t
task_set_mach_voucher(
  task_t                 task,
  ipc_voucher_t __unused voucher)
{
  if (TASK_NULL == task)
    return KERN_INVALID_TASK;
  return KERN_SUCCESS;
}
kern_return_t
task_swap_mach_voucher(
  task_t         task,
  ipc_voucher_t  new_voucher,
  ipc_voucher_t* in_out_old_voucher)
{
  if (TASK_NULL == task)
    return KERN_INVALID_TASK;
  *in_out_old_voucher = new_voucher;
  return KERN_SUCCESS;
}
也許有些讀者不能很快發現上述代碼段中存在的漏洞,實際上這很正常。自2014年以來,這個漏洞一直保留在代碼庫和所有iPhone上,可以從任何沙箱內部觸發。如果任何人嘗試使用這段代碼,并使用有效的voucher調用task_swap_mach_voucher,那么就會觸發這個漏洞。在這四年中,幾乎可以肯定的是,盡管可以從任意沙箱中觸發漏洞,但還沒有任何代碼實際使用過task_swap_mach_voucher功能。
這個功能很可能從未被調用過任何一次,無論是在開發、測試、QA還是生產環節中。因為只要有人測試,就會直接導致內核錯誤(Kernel Panic)并強制重啟。我們只能假設這段代碼順利通過了代碼審計、測試和QA過程。task_swap_mach_voucher是任務端口上的內核MIG方法,它也無法被iOS沙箱禁用,進一步加重了該漏洞的威脅程度。
我們要了解為什么這里存在實際的漏洞,就需要深入分析MIG自動生成的代碼,該代碼調用task_swap_mach_voucher。下面是task_swap_mach_voucher的相關MIG定義
routine task_swap_mach_voucher(
                               task        : task_t;
                               new_voucher : ipc_voucher_t;
                         inout old_voucher : ipc_voucher_t);

[1] [2] [3] [4] [5]  下一頁

【聲明】:黑吧安全網(http://www.eyhadu.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        彩票大数据