當前位置:
首頁 > 新聞 > 利用lk-reducer進行Linux內核審計監控文件訪問

利用lk-reducer進行Linux內核審計監控文件訪問

在Android中,Linux內核是安全性的關鍵,因為它負責對系統中的所有內容執行訪問控制。如果攻擊者可以在內核模式下獲得任意代碼執行,那麼就可以繞過應用程序沙箱,直接訪問硬體等。

多年來,Linux內核源代碼已經在顯著增長。它包含所有支持的功能的代碼,包括在多個支持的體系結構中的各種硬體的驅動程序。在現代Linux內核源代碼樹相當繁雜。在本文中,我們的例子中使用的樹有729兆位元組。

dev:0:/android/source/kernel/msm$ du -hs . --exclude .git

729M

現在,你可能會想知道為什麼大小很重要。為了更好的理解,讓我們把自己放在鮑勃的實際工作中,他是一名職業的代碼審計。很多公司都會聘請他閱讀大量的源代碼來發現和修復代碼中的錯誤和或漏洞。鮑勃的成功是由於他設計並執行了一個最有效地使用他的時間的策略。

一些審計人員可能選擇使用自動化工具,還有一些審核員可能會選擇手動閱讀代碼。鮑勃喜歡更聰明地工作,所以他開發了一套正則表達式,他運行內核代碼來識別潛在的問題。在篩選結果並分析周圍的代碼後,他發現了一個比較嚴重的驅動問題。他拉出項目的測試設備,並快速發現驅動程序未載入。不好!現在鮑勃對此感到非常好奇,於是他伸出援手,詢問「Droid Army」中的哪些Android設備正在使用驅動程序。不幸的是,沒有設備使用該驅動程序。在我看來,這代表了鮑勃的戰略錯誤,導致他浪費了時間。有沒有辦法來避免這一命運呢?答案是「有」。

工具

Linux內核減速器,或簡稱為lk-reducer。這個工具有助於避免我們迄今為止討論過的一些問題。它可以在構建Linux內核時監視文件系統訪問。(絕對不是它的實用程序僅限於Linux內核,但它只是我們需要的地方。)這是可能的,因為提供Linux內核源代碼是Linux GNU公共許可證(LGPL)下的法定要求。通過監視構建過程,我們可以確定源樹中的哪些文件已被用於構建最終的內核映像。某些文件將不可避免地被使用,因此我們可以確定它們並不是必需的。因此,在源代碼審核期間,它們可以被忽略。而這就可以在手動和自動源代碼審查過程中節省不少時間。

示例

一旦下載並編譯了該工具,請給它提供一個Linux內核源碼樹的路徑:

dev:0:lk-reducer$ ./lk-reducer /android/source/kernel/msm

dev:0:msm$

現在,構建Linux內核來跟蹤哪些文件被訪問。記住不僅要配置和構造內核,還包括清理構造。否則,我們可能會錯過在清理過程中使用的文件,最後使用我們可以構造但不必清理的樹。

dev:0:msm$ export ARCH=arm64 SUBARCH=arm64 CROSS_COMPILE=aarch64-linux-androidkernel-

dev:0:msm$ make marlin_defconfig

HOSTCC scripts/basic/fixdep

HOSTCC scripts/kconfig/conf.o

SHIPPED scripts/kconfig/zconf.tab.c

SHIPPED scripts/kconfig/zconf.lex.c

SHIPPED scripts/kconfig/zconf.hash.c

HOSTCC scripts/kconfig/zconf.tab.o

HOSTLD scripts/kconfig/conf

drivers/soc/qcom/Kconfig:381:warning: choice value used outside its choice group

drivers/soc/qcom/Kconfig:386:warning: choice value used outside its choice group

#

# configuration written to .config

#

dev:0:msm$make

scripts/kconfig/conf --silentoldconfig Kconfig

drivers/soc/qcom/Kconfig:381:warning: choice value used outside its choice group

drivers/soc/qcom/Kconfig:386:warning: choice value used outside its choice group

CHK include/config/kernel.release

[... further build output omitted for brevity ...]

DTC arch/arm64/boot/dts/htc/msm8996-v3-htc_sailfish-xb.dtb

GZIP arch/arm64/boot/Image.gz

CAT arch/arm64/boot/Image.gz-dtb

dev:0:msm$ make mrproper

CLEAN.

CLEAN arch/arm64/kernel/vdso

CLEAN arch/arm64/kernel

CLEAN crypto/asymmetric_keys

CLEAN kernel/time

CLEAN kernel

CLEAN lib

CLEAN net/wireless

CLEAN security/selinux

CLEAN usr

CLEAN arch/arm64/boot/dts/htc

CLEAN arch/arm64/boot

CLEAN .tmp_versions

CLEAN scripts/basic

CLEAN scripts/dtc

CLEAN scripts/kconfig

CLEAN scripts/mod

CLEAN scripts/selinux/genheaders

CLEAN scripts/selinux/mdp

CLEAN scripts

CLEAN include/config include/generated arch/arm64/include/generated

CLEAN .config .version include/generated/uapi/linux/version.h Module.symvers

dev:0:msm$

完成構造和清理流程後,只需退出子shell即可生成數據文件:

dev:0:msm$ exit

exit

processing remaining events...

inotify event collection phase is over, dumping results to "lk-reducer.out"...

cleanup complete

從這裡開始,你就可以分析數據文件,並選擇是否從當前源代碼樹中刪除文件或將其複製到另一個地方。我個人比較傾向於將文件複製到另一個目錄並從那裡進行審核。

注意:如果你正在使用Git的樹,那麼你可能需要過濾掉.git子目錄,就像我在這裡完成的那樣。你可以隨時查看原始存儲庫中的歷史記錄。

dev:0:msm$ grep ^A lk-reducer.out | cut -c 3- | grep -v ./.git/ > lk-reducer-keep.out

dev:0:msm$ mkdir ../msm-marlin-reduced

dev:0:msm$ tar cf - -T lk-reducer-keep.out | tar xf - -C ../msm-marlin-reduced/

dev:0:msm$ du -hs ../msm-marlin-reduced/

132M ../msm-marlin-reduced/

如你所見,我們將源代碼從729兆位元組縮小到只有132兆位元組。更重要的是,我們知道最後的內核映像沒有內置的代碼。

當然,這不是在審計Linux內核時面臨的唯一問題。即使我們已經刪除了在構建時未被訪問的代碼,由於探測,系統配置或其他可能無法控制的狀態,一些剩餘的代碼可能無法使用。此外,文件中的代碼可能仍然會被預處理器拋出,或者在編譯期間被優化。此外,此工具無法幫助你了解威脅模型或確定可能對審核感興趣的攻擊面。

結論

這篇文章定義了Linux內核研究員們面臨的一個問題,並提出了一個旨在幫助解決問題的工具。我們很高興地發布這個工具來協助社區進行Linux內核的源代碼審核。我們希望該工具能為你節省時間,使你更有效率。你可以在Github上找到該工具。

本文翻譯自

http://www.droidsec.org/blogs/2017/05/22/a-simple-tool-for-linux-kernel-audits.html

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

解密美國神秘部門的無限制搜查令:「國家安全信函」
CVE-2017-7494緊急預警:Samba蠕蟲級提權漏洞,攻擊代碼已在網上擴散
2017年上半年最受矚目的黑客事件,你知道幾個?
如何使用SilentCleanup繞過UAC?

TAG:嘶吼RoarTalk |

您可能感興趣

細述:Linux 監控系統 Linux-dash
Grafana+Telegraf+Influxdb監控Tomcat集群方案
在Linux終端中監控CPU利用率:Stress Terminal UI(s-tui)
利用Skywalking-netcore監控你的應用性能
Linux上監控Tomcat down掉後自動重啟Tomcat
dubbo+zipkin調用鏈監控
基於telegraf+influxdb+grafana構建監控平台的技術分享
springboot:使用Spring Boot Actuator監控應用
Prometheus+Grafana實現監控系統
微服務監控之Spring Boot Admin
配置SAP Solution Manager連接監控遠程Microsoft SQL Server
監控管理之Spring Boot Admin使用
amon-又一個linux監控工具
Prometheus+Grafana打造Mysql監控平台
Zabbix低級發現監控supervisor管理的進程
在 Linux 上用 Bash 腳本監控 messages 日誌
FortiAppMonitor:用於監控macOS上的系統活動的強大工具
Randomevent 監控進行中……
Domestic Kitten:針對伊朗的監控活動
在 Linux 中如何使用 iotop 和 iostat 監控磁碟 I/O 活動?