【Linux】關於Linux內核利用和安全加固的思考

1. Linux內核利用思考

    在網絡安全領域,對於系統的滲透是一個值得我們去思考的問題,目前,許多人認爲Linux是很安全的操作系統,事實上相較於其他系統確實也比較安全,但是安全這個概念是相對的,雖然Linux有很強大的安全機制,但是它還是存在一些安全問題。

2. Linux漏洞檢測工具

    目前來說,關於Linux內核利用這個方面值得我們去注意,因爲這種利用方式的危害巨大,一旦攻擊者利用Linux內核,一般來說將系統完全控制不是問題。對於Linux系統是否存在權限提升漏洞我們可以用 Linux privilege checker來進行檢測。

3. Linux提權輔助工具

    還有一個工具是Linux Exploit Suggester,它是被設計用來幫助檢測給定的一些基於Linux內核或者Linux的機器的安全缺陷,它主要提供以下的功能:

  • 評估已經公開的內核暴露漏洞,輸出內核之中已經公開的Linux內核漏洞的存在情況,比如說下面的輸出實例:
$ ./linux-exploit-suggester.sh
...
[+] [CVE-2017-16995] eBPF_verifier

   Details: https://ricklarabee.blogspot.com/2018/07/ebpf-and-analysis-of-get-rekt-linux.html
   Exposure: highly probable
   Tags: debian=9.0{kernel:4.9.0-3-amd64},fedora=25|26|27,[ ubuntu=14.04 ]{kernel:4.4.0-89-generic},ubuntu=(16.04|17.04){kernel:4.(8|10).0-(19|28|45)-generic}
   Download URL: https://www.exploit-db.com/download/45010
   Comments: CONFIG_BPF_SYSCALL needs to be set && kernel.unprivileged_bpf_disabled != 1

[+] [CVE-2017-1000112] NETIF_F_UFO

   Details: http://www.openwall.com/lists/oss-security/2017/08/13/1
   Exposure: probable
   Tags: [ ubuntu=14.04{kernel:4.4.0-*} ],ubuntu=16.04{kernel:4.8.0-*}
   Download URL: https://raw.githubusercontent.com/xairy/kernel-exploits/master/CVE-2017-1000112/poc.c
   ext-url: https://raw.githubusercontent.com/bcoles/kernel-exploits/cve-2017-1000112/CVE-2017-1000112/poc.c
   Comments: CAP_NET_ADMIN cap or CONFIG_USER_NS=y needed. SMEP/KASLR bypass included. Modified version at 'ext-url' adds support for additional distros/kernels

[+] [CVE-2016-8655] chocobo_root

   Details: http://www.openwall.com/lists/oss-security/2016/12/06/1
   Exposure: probable
   Tags: [ ubuntu=(14.04|16.04){kernel:4.4.0-(21|22|24|28|31|34|36|38|42|43|45|47|51)-generic} ]
   Download URL: https://www.exploit-db.com/download/40871
   Comments: CAP_NET_RAW capability is needed OR CONFIG_USER_NS=y needs to be enabled
...
  • 驗證內核安全強化措施所處的狀態,它可以檢查內核提供的大多數安全設置,驗證內核編譯時的配置,同時驗證運行時的設置,方便我們瞭解內核在運行時的安全狀態,類似於checksec.sh工具的現代延續版,工具使用實例:
 $ ./linux-exploit-suggester.sh --checksec

Mainline kernel protection mechanisms:

 [ Disabled ] GCC stack protector support (CONFIG_HAVE_STACKPROTECTOR)
              https://github.com/mzet-/les-res/blob/master/features/stackprotector-regular.md

 [ Disabled ] GCC stack protector STRONG support (CONFIG_STACKPROTECTOR_STRONG)
              https://github.com/mzet-/les-res/blob/master/features/stackprotector-strong.md

 [ Enabled  ] Low address space to protect from user allocation (CONFIG_DEFAULT_MMAP_MIN_ADDR)
              https://github.com/mzet-/les-res/blob/master/features/mmap_min_addr.md

 [ Disabled ] Restrict unprivileged access to kernel syslog (CONFIG_SECURITY_DMESG_RESTRICT)
              https://github.com/mzet-/les-res/blob/master/features/dmesg_restrict.md

 [ Enabled  ] Randomize the address of the kernel image (KASLR) (CONFIG_RANDOMIZE_BASE)
              https://github.com/mzet-/les-res/blob/master/features/kaslr.md

 [ Disabled ] Hardened user copy support (CONFIG_HARDENED_USERCOPY)
              https://github.com/mzet-/les-res/blob/master/features/hardened_usercopy.md
...

在這裏插入圖片描述
在這裏插入圖片描述

4. Linux內核利用

    現今的操作系統大多數都是基於環保護模型,通常爲4層模型,如下圖所示:
在這裏插入圖片描述
    基於相同的機制,內存管理是Linux內核提供的最強大的功能之一。對於內核的利用,一般分爲以下幾點:

4.1 任意內核讀寫問題

    這種攻擊通過將數據傳遞到Linux內核,進而實現攻擊,windows、macOS都爆出過這類問題漏洞,感興趣的可以去存在15年之久的macOS內核任意地址讀寫漏洞分析(含PoC)看看。

4.2 內存損壞漏洞問題

在這裏插入圖片描述

4.2.1 1-內核棧漏洞:

    堆棧爲一個比較特殊的內存空間。在這個內存空間之中會自動增長。攻擊者正是利用了內存空間會增長的一點,一旦函數調用過多,會致使調用堆棧無法容納這些調用的返回地址,導致數據越界,覆蓋老的堆棧數據產生棧溢出漏洞。

4.2.2 2-內核堆漏洞:

    堆一般用於動態內存分配。內核堆利用是非常危險的,因爲在多數情況下,攻擊者往往不需要準備任何的Linux模塊調試環境,即可實現堆利用。

4.2.3 競爭條件

    一般由於兩個或者多個進程競爭使用不能被同時訪問的資源,使得這些進程有可能因爲時間上推進的先後原因而出現問題,這就叫做競爭條件(Race Condition)。爲了避免這個問題,linux實現了我們所謂的Mutex(互斥對象)。

4.2.4 地址空間佈局隨機化

    這是參與保護緩衝區溢出問題的一個計算機安全技術。是爲了防止攻擊者在內存中能夠可靠地對跳轉到特定利用函數。ASLR包括隨機排列程序的關鍵數據區域的位置,包括可執行的部分、堆、棧及共享庫的位置。

4.2.5 緩衝區溢出防禦技術

    所謂的緩衝區溢出,就是向固定長度的緩衝區寫入超出其分配長度內容,造成緩衝區中數據溢出,從而覆蓋了緩衝區周圍的內存空間,攻擊者精心構造填充數據,導致原有流程改變,使得程序執行特殊的代碼,進而獲取控制權。

4.3 空指針引用問題

NULL指針錯誤會引發空指針NullPointerException異常。
在這裏插入圖片描述

5.對Linux安全加固

    反正就是定期更新Linux內核和應用程序,建議使用SFTP和OpenSSH,還有SELinux,密碼設置要複雜,對/etc/sysctl.conf配置進行有效強化,對faillog記錄多多觀察,大概就是這樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章