科普 | 你必須瞭解的漏洞利用緩解及對抗技術

#科普 | 你必須瞭解的漏洞利用緩解及對抗技術html

隨着軟件系統愈來愈複雜,軟件漏洞變得沒法避免。業界逐漸推出了讓漏洞沒法利用或利用難度提升的方法,簡稱漏洞緩解技術。咱們簡單介紹下Android和iOS中普遍使用的一些漏洞緩解及可能的繞過技術。固然這裏也包含一些相關聯的安全限制,而非真正意義的緩解技術。linux

##緩解及繞過技術點android

User Permissionshell

每一個app有本身uid,selinux_context,只有申請而且用戶容許纔有權限作它想作的事。要突破這些限制,能夠考慮經過每一個app合理的權限相互結合後產生的不合理性來入手。或者App之間交互的漏洞,如Android的FileProvider,先拿下此app等。瀏覽器

SELinux、MAC、Sandbox安全

SELinux是Security Enhanced Linux縮寫,可解釋爲「安全加固型Linux內核」,MAC是Mandatory Access Control的縮寫,意爲強制訪問控制。Sandbox即沙盒。它們含了一套很複雜的權限管理策略。基本採用白名單模式,默認禁止任意進程的絕大部分的行爲,限制文件訪問,限制系統調用及調用參數。即限制了每一個app的行爲,也減小了被攻擊面。要突破這些限制,比較可行的方法是攻擊如內核關閉等。服務器

PIE、ASLR、KALSRapp

PIE是Position Independent Executable的縮寫,與PIC,Position Independent Code同樣。ALSR是Address Layout Space Randomization加強內存地址空間分配的隨機度。可執行文件和動態加載的庫之間的間隔,先後順序均不一樣,更沒有規律。準確地址未知的狀況下攻擊者幾乎不可能完成攻擊,至關於戰場上目標都沒有找到。KALSR中的K是kernel的縮寫,保證每次設備啓動內核的虛擬地址是不一樣的。要突破這些限制,可採用堆噴射等噴射加各類類型的滑板,提升利用成功概率。信息泄漏漏洞,如泄漏內存,泄漏文件,獲取內存地址。dom

DEP、PXNiphone

DEP是Data Execution Protection的縮寫數據不可執行,意味着攻擊者不能直接執行本身的代碼,使攻擊難度變高。PXN是Privileged Execute Never的縮寫,內核態沒法運行用戶態可執行數據。要突破這些限制,可利用ROP(Return Orient Program),JOP(Jump Orient Program),stack pivot技術,用程序本身的代碼作攻擊者想作的事。原理是利用如今ABI(Application Binary Interface)的特色,改寫程序的棧,控制多個函數返回地址從而造成鏈,將原有程序本身的代碼片斷連起來作攻擊者想作的事。相似生物上的病毒。瀏覽器的話能夠改寫JIT(Just In Time)編譯器所用的內存。Android用戶態mprotect,mmap系統調用,把內存改爲可執行。

Trust Zone

可信空間,完成指紋、支付、解鎖、DRM和其餘認證最保險的一步。即便是操做系統內核也沒法訪問其內存。它完成簽名,加密等工做。要突破這些限制,先考慮拿下有權限訪問的service進程drmservie,gatekeeper。經過Fuzz接口找漏洞。若是拿到代碼執行的權限的話,就能夠跳過指紋驗證悄悄的扣款了。

平滑升級

App自動更新,系統自動下載並提醒開關機時候升級,保證及時修復bug,咱們也將此列入到漏洞緩解中。要突破這些限制,能夠考慮使用Google的app之間彼此信任,先拿下Google的一個app。讓這個app向Google Play發送安裝請求。

Code Sign

對代碼進行簽名,保證代碼從商店到用戶手機上不會有變化,防止被惡意植入代碼,也防止執行未被蘋果公司審覈的代碼。繞過方法這裏就不闡述了。

Secure Boot、Verifying Boot

Secure Boot是iOS中的、Verifying Boot是Android中的,它們保證系統代碼不被修改,保證完美越獄、完美root沒法實現。還有一些手機廠商自定義的緩釋措施,如Android的system分區強制只能只讀掛載,須要修改部分驅動中的數據才能實現對system分區的修改

##示例初探

在以前發佈的《PXN防禦技術的研究與繞過》這篇文章,裏面詳細解釋瞭如何繞過DEP、PXN這兩種緩釋措施,用的基本方法就是JOP和ROP技術。咱們將在此基礎上解釋root工具中繞過其餘幾種防禦的方法。

文章提到將thread_info中的addr_limit改成0xffffffffffffffff:

addr_limit是用於限制一個線程虛擬地址訪問範圍,爲0至addr_limit,改爲0xffffffffffffffff表示所有64位地址所有可訪問。Google至今沒有在Android上啓用KALSR,arm64內核通常都固定在0xffffffc000000000開始的虛擬地址上,並無隨機化也就是說能夠隨意讀寫內核了。雖然Android沒有KALSR但內核堆的地址依舊是不可預知的至關於一種隨機化,想要利用CVE-2015-3636(pingpong)這類UAF類型漏洞必需要用到噴射或者ret2dir這類內存掩蓋技術。

通常是將uid、gid修改成0,0是root的uid,即此線程擁有了root權限,capabilities修改成0xffffffffffffffff掩蓋全部比特位,表示擁有全部capability。至此user permissions緩釋就被繞過了,也能夠把本身僞形成其餘任意用戶。

將「selinux_enforcing」這個內核中的全局變量設爲0後,selinux至關於被關閉了。此舉能夠繞過SElinux的緩釋。

MAC、Sandbox是iOS中的緩釋措施,做用至關於Android中的SELinux。蘋果公司的Code Sign要求除了開發所用程序,全部可執行代碼必需要蘋果公司簽名才能在iPhone運行。Android雖然要對APK簽名但APK依舊能夠任意加載可執行程序。

在這次阿里聚安全攻防挑戰賽中即可以體驗一把如何突破ASLR、DEP等漏洞緩解技術。該題是由螞蟻金服巴斯光年實驗室(AFLSLab) 曲和、超6、此彼三位同窗完成設計,將模擬應用場景準備一些包含bug的程序,並側重於PWN形式,服務端PWN須要選手具有二進制程序漏洞挖掘和利用能力,經過逆向服務端程序,找出服務端程序的各種問題,而後編寫利用代碼,在同服務端程序的交互中取得服務端程序的shell權限,進而拿到服務器上的敏感信息。另外在Android應用PWN能力方面,須要選手具備遠程得到任意代碼執行和arm64平臺反彙編理解邏輯的能力,尋找可以突破DEP、ASLR等防禦,進而控制目標APP執行本身的代碼。

此次參與出題的螞蟻金服巴斯光年實驗室(AFLSLab)是螞蟻金服安全中心(俗稱螞蟻神盾局)旗下近期剛成立不久的移動安全實驗室,除護航支付寶錢包及螞蟻金服相關產品的安全外,也同時爲守護外部廠商、商戶、生態夥伴終端基礎安全。雖然成立時間很短,但已經爲google、三星、華爲等公司上報多個安全漏洞。實驗室技術負責人曲和表示,指望經過這次比賽吸引更多應用及系統漏洞挖掘和漏洞利用的選手進行交流學習,共同爲互聯網安全新生態而努力。

重磅預告,今晚20:00阿里聚安全攻防挑戰賽預熱賽整點開啓!可是咱們不作任何淘汰!不淘汰!不淘汰!不淘汰!

####做者:此彼@巴斯光年實驗室,更多挑戰賽信息,請關注阿里聚安全攻防挑戰賽官網

相關文章
相關標籤/搜索