初識Linux滲透:從列舉到核心利用

IT168GB發表於2018-07-31

背景

許多人都認為Linux是最安全的作業系統,因此在對Linux的安全問題上也放鬆了警惕。那麼事實真的如此嗎?其實安全從來都只是相對的,Linux也不例外。雖然它載入了強大的安全機制,但仍可能受到來自各方面帶來的安全威脅。本文我們主要將討論有關Linux架構的主要利用技術,以及相關的安全防禦措施。

PS:本文僅用於技術討論與分享,嚴禁用於非法用途

Linux 概述

2.png

作業系統的主要目的是用於管理計算機硬體及軟體資源,併為計算機程式提供通用服務。Linux作業系統是由 Linus Torvalds於1991年開發的一個UNIX作業系統的克隆版本。不要混淆了Linux和Unix。它具有GNU通用公共許可證(GPL)的許可。Linux下為我們提供了強大的Shell系統使用者介面,用於接收使用者輸入的命令並把它送入核心執行。一些比較知名的shell包括:Bourne again shell (Bash), C shell (csh), Korn shell (ksh)。你可以透過cat /etc/shells檢視你當前的shell環境型別。

3.png

以下是一些非常常用的linux命令:

ls:列出檔案和目錄

find:查詢檔案

cd:切換路徑

cp:複製

mv:移動

mkdir:建立一個目錄

rmdir:刪除目錄

rm:刪除檔案

想要了解有關命令的更多細節資訊,只需鍵入man命令即可。

4.png

Linux 流和重定向

當你與Linux環境進行互動時,它將為你提供輸入/輸出重定向功能以簡化你的體驗。關於輸入輸出流的操作, 有以下三種流你可以使用:

標準輸入流 (stdin)

標準輸出流 (stdout)

標準錯誤輸出 (stderr)

這三個主要流的圖示如下:

5.png

另一個功能是重定向。它主要用於對流的重定向。執行文字重定向,你可以使用以下符號:

“>”:覆蓋檔案。

“>>”:將輸入新增到檔案中。

以下是一些重定向符號及其用途列表:

6.jpg

Linux檔案系統層次結構

在Linux中,一切都可以看做檔案,包括所有允許/禁止讀寫執行許可權的目錄和裝置。Linux的 設計如下:

7.png

/root:系統管理員的主目錄

/home:包含所有使用者的個人檔案

/bin:包含所有二進位制檔案(可執行檔案)

/sbin:超級管理命令,這裡存放的是系統管理員使用的管理程式

/lib:包含所需的庫檔案

/usr:包含普通使用者使用的二進位制檔案

/opt:包含可選的附加應用程式

/etc:包含程式所需的所有配置檔案

/dev:包含裝置檔案

/media:包含臨時可移動裝置的檔案

/mnt:包含檔案系統的掛載點

/boot:包含引導載入程式檔案

/tmp:包含臨時檔案

/var:包含變數檔案,如日誌檔案

/proc:包含有關係統程式的資訊

8.png

使用者和組

使用者和組在Linux中至關重要,同時它提供多工和多使用者功能。管理使用者和組,你可以使用以下linux命令:

Useradd:新增新使用者

Passwd:更改使用者密碼

Userdel:刪除使用者,你可以新增“-r”選項刪除使用者的檔案

檢視使用者組檔案:cat /etc/group

9.png

建立一個組:

newgrp  <Group-Name-Here>

許可權

在Linux中使用者和組的許可權主要包括:

讀,以字母r表示

寫,以字母w表示

執行,以字母x表示

要檢視檔案的許可權,除了-l選項外,還可以使用ls命令:


11.png

chmod , chown 和 chroot 命令:

要更改檔案許可權,可以使用chmod命令,格式如下:

chmod  <Permission Letters> <File/Directory>

或者你也可以使用八進位制表示來代替字母

12.png

chown用於更改檔案的所有者。

chroot改變程式執行時所參考的根目錄位置。

Cronjobs 和 Crontabs:

自動化和任務排程是系統管理中非常重要的方面,尤其是在使用Linux時。自動化任務使系統管理員的工作變得更加輕鬆。Linux為我們提供了很好的任務排程功能,以在特定的時間執行命令或指令碼,我們稱之為Cron。排程 任務建立格式如下:

<Day of the week> <Month> <Day of the Month> <Hour> <Minutes> <Command>

13.png

要檢查Crontab(包含有關cronjobs資訊的檔案),只需鍵入cat /etc/crontab即可

14.png

Linux 攻擊向量

以上我們對Linux系統環境和命令已經有了一個初步的瞭解。下面,我們把目光轉向有關Linux所面臨的安全威脅上。攻擊者的攻擊媒介多種多樣,通常攻擊向量可以分為以下三種主要型別:

網路威脅

主機威脅

應用威脅

我們將在後半部分詳細討論有關針對Linux的安全威脅。在開始攻擊Linux之前,列舉是必不可少的工作階段。

使用Nmap檢測系統

15.png

我們可以使用Nmap來幫助我們檢測,當前主機是否在Linux上執行。只需輸入nmap – O <target>即可。

Linux 列舉

有許多開源工具可以幫助我們列舉Linux機器。推薦大家使用LinEnum,在我看來這是最好用的工具之一。

你可以在這裡進行下載:

使用:./LinEnum.sh -k keyword -r report -e /tmp/ -t

選項:

-k 輸入關鍵字

-e 輸入匯出位置

-t 包括徹底(冗長)測試

-r 輸入報告名稱

-h 顯示幫助文字

不帶引數執行 = 有限掃描/沒有輸出檔案

-e 要求使用者輸入輸出位置,例如/tmp/export。如果不存在該目錄檔案,則會自動為你建立。

-r 要求使用者輸入報告名稱。報告(.txt檔案)將儲存到當前工作目錄。

-t 執行徹底(慢速)測試。如果不加該引數,則會執行預設的“快速”掃描。

-k 可選,支援使用者在大量檔案中搜尋單個關鍵字。

16.png

LinEnum可幫助你查詢有關Linux主機的資訊,包括:

系統資訊:

主機名

網路詳情

當前IP

預設路由詳情

DNS伺服器資訊

使用者資訊:

當前使用者詳細資訊

最後登入使用者

顯示使用者登入主機

列出所有使用者,包括uid/gid資訊

列出root帳戶

提取密碼策略和雜湊儲存方式資訊

檢查umask值

檢查/etc/passwd中是否儲存密碼雜湊值

提取“預設”uid的完整詳細資訊,例如0,1000,1001等

嘗試讀取受限制的檔案,即/etc/shadow

列出當前使用者的歷史檔案(如bash_history,.nano_history等)

基本的SSH檢查

Linux提權

根據定義:“提權主要是利用程式設計錯誤或設計缺陷,來授予攻擊者特殊許可權以訪問網路及其相關資料和應用程式等。”(摘自techtarget.com)。

提權可分為垂直和水平兩種;平行提權,即許可權型別不變,許可權ID改變。垂直提權,即許可權ID不變,許可權型別改變。野外使用的提權技術種類繁多其中包括:

Linux Services Exploitations:透過查詢linux服務或配置中的錯誤來提權。

萬用字元:萬用字元可用於注入任意命令。

具體可以參考,之前釋出的一篇有關 的文章。

SUID 濫用:

在這種技術中,攻擊者使用需要root許可權的合法工具(如nmap)在系統上執行惡意命令

Linux核心利用:

這種利用的危害極大。一旦攻擊者成功利用linux核心,他們將能夠完全控制系統。

檢查系統是否存在許可權提升漏洞,可以使用 “Linux privilege checker”。下載地址:

17.png

Linux Exploit Suggester

Linux Exploit Suggester是一款由PenturaLabs開發的,可根據作業系統版本號自動查詢相應提權指令碼的工具。其主要功能包括:

“Remote” 模式 (–kernel 或 –uname 開關)

“Direct” 模式 (預設)

“CVE list” 模式 (–cvelist-file 開關)

“Check security” 模式 (–checksec 開關)

使用:./linux-exploit-suggester.sh

下載地址:

甚至它還為我們提供了加固措施:

18.png

19.png

Linux核心利用

如今的作業系統大都基於“環保護模型”(ring protection mode)。該模型通常分為4層,編號從0到3,如下圖所示:

20.png

Linux作業系統也基於相同的機制,但只有2層:User Land 和 Kernel Land。記憶體管理(Memorymanagement)是linux核心提供的最強大的功能之一。

核心利用技術:

1.空指標引用

NULL指標錯誤會引發空指標NullPointerException異常。換句話說,就是程式設計物件引用了值為NULL的地址。

21.jpg

2.任意核心讀/寫

該攻擊主要是透過將資料傳遞到Linux核心實現的。

3.記憶體損壞漏洞

為方便內部的處理,記憶體被劃分為了4096位元組的記憶體塊,並被命名為page。12個最低有效位是偏移量;其餘的是頁碼。在最新的x86架構中,Linux核心將虛擬空間(通常為4GB)當中的3GB給了UserLand,另外1GB用於kernel land。此操作稱為分段。該操作稱之為分段。

核心使用頁碼來表示物理和虛擬之間的對應關係地址。為了管理不同的記憶體區域,這裡使用了虛擬記憶體區域(VMA):

22.png

A-核心棧漏洞:

堆疊是一個特殊的記憶體空間。這個記憶體空間會自動增長。而攻擊者也正是利用了這一點,一旦函式呼叫過多,就會致使呼叫堆疊無法容納這些呼叫的返回地址,導致資料越界,覆蓋老的堆疊資料產生棧溢位漏洞。

B-核心堆漏洞:

堆用於動態記憶體分配。核心堆利用是非常危險的,因為在多數情況下,攻擊者往往不需要準備任何的Linux模組除錯環境,即可實現堆利用。

Race Condition(競爭條件)

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

緩衝區溢位防禦技術

這裡有許多已實現技術,可以幫助你抵禦緩衝區溢位攻擊,例如:

地址空間佈局隨機化:  Address space layout randomization (ASLR),是參與保護緩衝區溢位問題的一個電腦保安技術。是為了防止攻擊者在記憶體中能夠可靠地對跳轉到特定利用函式。ASLR包括隨機排列程式的關鍵資料區域的位置,包括可執行的部分、堆、棧及共享庫的位置。

stack canary

stack canary防護技術主要用於防止stack overflow(堆疊溢位)。如果能在執行時檢測出stack overflow破壞,就有可能對函式棧進行保護。目前的堆疊保護實現大多使用基於 “Canaries” 的探測技術來完成對這種破壞的檢測。

23.png

Non-executable stack

不可執行堆疊(NX)是一種虛擬記憶體保護機制,透過限制特定記憶體和實現NX位來阻止shell程式碼注入在堆疊上執行。

Linux 返回導向程式設計(ROP)

返回導向程式設計(ROP)是一種高階的記憶體攻擊技術,簡單的來說它的特點就是透過控制返回指標來使程式導向新的控制流,利用場景包括使用ROP來繞過DEP、ASLR這樣的防禦機制。

24.png

Linux安全加固

以下是我對你的一些Linux安全加固建議:

定期更新Linux核心和應用程式。

避免使用像FTP和telnet這類的不安全服務,建議使用SFTP和OpenSSH。

僅使用必要的應用和服務,最大化的減小攻擊面。

如果條件允許,建議使用SELinux。

使用強密碼策略。

關注faillog記錄。

強化/etc/sysctl.conf配置。

使用身份驗證伺服器。

總結

本文主要向大家概述了一些基礎的有關Linux系統命令和術語,並深入探討了Linux安全方面的問題以及利用與防禦技術。希望透過本文的學習,能讓你對Linux有一個更加深入的瞭解。

相關參考文獻

1.高階基礎設施滲透測試 – Packt Publishing:Chiheb chebbi

2.Linux使用者和組:

3.使用Crontab在Linux上建立排程任務: https://kvz.io/blog/2007/07/29/schedule-tasks-on-linux-using-crontab/

4.LinEnum: 


本文轉載自:FreeBuf.COM ,原文由 FB小編 secist 編譯

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31510736/viewspace-2168820/,如需轉載,請註明出處,否則將追究法律責任。

相關文章