Android O中的Seccomp過濾器
文 / Google Android 安全工程師 Paul Lawrence
在執行 Android 的裝置中,強制執行 Android 安全模型的重任交給核心處理。由於安全團隊已加固 Android 使用者空間,隔離程式並削弱程式的許可權,因此,越來越多的安全攻擊將其焦點轉到核心上。系統呼叫是攻擊者攻擊核心的常用方式之一。
所有 Android 軟體都使用系統呼叫(簡稱為 syscall)與 Linux 核心進行通訊。核心提供許多特定於裝置和 SOC 的系統呼叫,讓使用者空間程式(包括應用)可以直接與核心進行互動。所有應用都依靠這一機制,通過唯一的系統呼叫來檢索訪問對應的行為(如開啟檔案或傳送一條 Binder 訊息)。不過,其中許多系統呼叫 Android 未予使用或未予正式支援。
Android O 利用一個名為 seccomp 的 Linux 功能,它可使應用軟體無法訪問未使用的系統呼叫。由於應用無法訪問這些系統呼叫,因此,它們不會被潛在的有害應用利用。
seccomp 過濾器
Android O 包含一個 seccomp 過濾器,該過濾器已安裝到 zygote 程式中,所有 Android 應用均衍生自該程式。由於此過濾器已安裝到 zygote,因而會影響到所有應用,因此,Android 安全團隊採取了額外的措施,以防止破壞現有應用。seccomp 過濾器允許:
通過 bionic(用於 Android 的 C 執行時)顯示所有系統呼叫。這些系統呼叫是在 bionic/libc/SYSCALLS.TXT 中定義的。
支援 Android 啟動的系統呼叫。
常用 Android 應用使用的系統呼叫,通過執行 Google 的完整應用相容性套件確定。
Android O 的 seccomp 過濾器會阻止某些系統呼叫,如 swapon/swapoff(已被捲入一些安全攻擊)和關鍵控制系統呼叫(對應用沒有作用)。此過濾器在 arm64 中共阻止了 271 個系統呼叫中的 17 個,在 arm 中共阻止了 364 個系統呼叫中的 70 個。
開發者
在一臺執行 Android O 的裝置上測試您的應用是否使用了非法系統呼叫。
檢測到非法系統呼叫
在 Android O 中,系統將使呼叫非法系統呼叫的應用崩潰。日誌列印輸出可顯示非法系統呼叫,例如:
受影響的開發者應改寫他們的應用,使其不會呼叫非法系統呼叫。
在測試期間切換 seccomp 過濾器
除記錄錯誤外,seccomp 安裝程式在執行 userdebug 和 eng builds 的裝置上遵守 setenforce,這讓您可以測試 seccomp 是否引發了某個問題。如果您輸入:
則不會將任何 seccomp 策略安裝到 zygote。由於您無法從一個正在執行的程式中移除 seccomp 策略,因此,您必須重新啟動 shell 以使該選項生效。
裝置製造商
由於 Android O 在 //bionic/libc/seccomp 包含相關 seccomp 過濾器,因此,裝置製造商無需進行任何額外的實現。不過,在 //cts/tests/tests/security/jni/android_security_cts_SeccompTest.cpp 中有一個檢查 seccomp 的 CTS 測試。此測試檢查是否已阻止 add_key 和 keyctl 系統呼叫、是否已允許 openat 以及是否存在某些特定於應用的系統呼叫(為實現相容性,必須有這些系統呼叫)。
推薦閱讀:
Android O官方版本即將到來, 先來看看DP4開發者預覽版
相關文章
- Vue中過濾器Vue過濾器
- 13.gateway中的過濾器的介紹以及自定義過濾器Gateway過濾器
- Spring Cloud Gateway中的過濾器工廠:重試過濾器SpringCloudGateway過濾器
- JavaWeb 中 Filter過濾器JavaWebFilter過濾器
- Redis 中的布隆過濾器Redis過濾器
- .net core中的哪些過濾器過濾器
- angular中的自定義過濾器Angular過濾器
- 【過濾器】web中過濾器的使用與亂碼問題解決過濾器Web
- Android——Intent和Intent過濾器AndroidIntent過濾器
- Java 中的 Filter 過濾器詳解JavaFilter過濾器
- 4、過濾器的使用及自定義過濾器過濾器
- 過濾Servlet--過濾器Servlet過濾器
- spring中的過濾器與攔截器Spring過濾器
- 過濾器過濾器
- .net core中的哪些過濾器 (Authorization篇)過濾器
- 誠翔濾器光刻膠過濾器濾芯:保障光刻過程的高效與安全過濾器
- 點雲濾波器與過濾器過濾器
- Filter過濾器的使用Filter過濾器
- django2中自定義過濾器Django過濾器
- java過濾器中如何轉移地址?Java過濾器
- 代理過濾器過濾器
- vue 過濾器Vue過濾器
- Filter過濾器Filter過濾器
- hbase過濾器過濾器
- CAN過濾器過濾器
- Servlet過濾器Servlet過濾器
- 26、過濾器過濾器
- jms過濾器過濾器
- DataV過濾器過濾器
- Vue過濾器Vue過濾器
- .Net MVC中定義全域性過濾器及在Action中排除全域性過濾器MVC過濾器
- Xor過濾器:比布隆Bloom過濾器更快,更小過濾器OOM
- Web中的監聽器【Listener】與過濾器【Filter】 例項Web過濾器Filter
- SpringBoot中的過濾器和攔截器的實現Spring Boot過濾器
- 請教關於Jive中過濾器的問題過濾器
- asp.net core MVC 過濾器之ActionFilter過濾器(二)ASP.NETMVC過濾器Filter
- 通過android:ssp高效過濾Android IntentsAndroidIntent
- Guava的布隆過濾器Guava過濾器