GSS資安電子報 0221 期【洞察 Shell 命令中的歷史紀錄識別惡意行為】

訂閱電子報
2024年四月08日(一) PM 05:00
翻譯及整理:叡揚資訊 資訊安全事業處
  

  在網路安全專家可以使用的無數技術和工具中,有一種微妙但強大的方法常常被忽略:分析 shell 歷史記錄以偵測惡意行為者。

  Shell 作為 Unix 和 Linux 系統的核心,可作為基本的命令列介面,可作為使用者通往作業系統的網關。它允許使用者執行各種命令,從基本的檔案操作到複雜的程式執行和系統管理。CLI 可能是類 Unix 系統的虛擬機器互動的最常用方式,這意味著虛擬機器上的大多數操作都可以透過 CLI 執行。

  在這些類 Unix 的系統中,shell 命令的廣泛實用性對於系統管理至關重要,但也使它們容易受到利用。這些命令最初是為合法目的而設計的,但可以重新用於各種惡意活動,包括攻擊、資料外洩和未經授權的系統控制。因此,CLI 成為偵測和調查系統內未經授權的活動的重要工具。

  在本部落格中,我們將討論各種 shell 指令,闡明可能表示未經授權的存取或惡意意圖的模式和異常情況。這不僅是要了解執行了哪些命令;還要了解執行的命令。這是關於辨別他們所講述的故事。

  

常見的可疑 Bash 指令

  讓我們深入研究常見的 Bash 命令,這些命令雖然是 Unix/Linux 環境中的標準命令,但可能會發出可疑或惡意活動的信號。識別這些命令對於識別潛在的安全漏洞至關重要,因為攻擊者經常將它們用於未經授權的系統存取、資料操縱和其他邪惡目的。

1. 偵測可疑命令

  偵測可疑命令是揭示幫助攻擊者進行攻擊的資訊的任何命令,例如攻擊者的位置、存取的使用者權限、潛在的漏洞等等。例如,攻擊者可能會搜尋系統版本、具有 sudo 權限的使用者、密碼內容、cron 作業、目前使用者的設定檔或經典的「whoami」。在雲端環境中,可疑的偵察命令可能包括存取元資料服務(例如 AWS 中的 169.254.169.254)或憑證檔案。與其他類型的可疑命令一樣,識別常常會有誤報,因為所使用的命令可能非常常見。

偵察命令範例:

  • whoami
  • uname
  • find
  • grep
  • 讀取敏感文件(passwd、sudoers、shadow)
  • cron -l
  • get-caller-identity
  • describe-instances
  • ls(s3 和常規)

2. 權限升級指令

  這些指令與提升使用者的權限有關,範圍從 sudo 和 chmod 等基本權限到操作 passwd 或 shadow 文件,以及在雲端環境中更新憑證或分配角色。攻擊者經常提升權限以獲得強大的立足點並訪問盡可能多的系統。

權限提升指令範例:

  • chmod
  • sudo
  • setfacl
  • 寫入相關文件(sudoers、passwd、shadow)
  • aws iam add-user-to-group
  • aws iam attach-user-policy

3. 資料竊取

  通常,滲透系統的攻擊者的目的是收集數據,無論是敏感的個人資訊(ID 號碼、信用卡詳細資料)、商業機密、憑證或金鑰。這些可能會進一步損害其他資產或維持對目前系統的控制。例如,使用 CLI,攻擊者可以掃描特定的檔案名稱或類型,或直接存取包含所需資訊的檔案。他們可以使用 find 和 ls 等命令來搜尋這些檔案。

可能的資料竊取命令範例:

  • grep/find/cp 用於敏感檔案名,例如密碼、憑證、秘密、Token、個人資訊等

4. 可疑的網路

  攻擊者通常準備了傳播病毒、勒索軟體等的工具,或者他們可能想要維持遠端命令伺服器連線。他們使用可被偵測到的 CLI 指令執行這些操作。操作可能涉及使用 curl 或 wget 等命令下載文件,或使用 netcat 與 C&C 伺服器進行 shell 通信,甚至建立代理。監控有效負載下載或下載檔案的執行也至關重要。

可能表示可疑網路的命令範例:

  • netcat
  • nmap
  • http_proxy=
  • i >& /dev/tcp|nc -l*
  • wget
  • curl
  • tftp

5. 清除軌跡

  攻擊者通常會盡力掩蓋自己的軌跡,以避免被防禦工具或調查人員發現。這可能涉及刪除日誌、停用防毒程式或停止日誌記錄。這些操作的命令通常並不常見,因此在我們的系統上偵測到它們是惡意活動的強大指標。

指示踪跡擦除的命令範例:

  • HISTFILESIZE=0
  • HISTSIZE=0
  • >.bash_history/.zsh_history/auth.log
  • service auditd stop
  • history -c
  • systemctl stop auditd

  

範例:使用 Shell 指令滲透系統

  一旦惡意行為者滲透系統(可能是透過暴力破解或竊取憑證),他們的直接目標就是評估自己的位置:我造訪過的使用者是誰,該使用者可以做些什麼?該資產的性質是什麼?

  為了收集這些情報,我們將使用提供有關當前場景的最大資訊的命令:

問題一 : whoami?

現在讓我們看看是否有任何雲端帳戶連線:

好的,所以沒有雲端身份。但這個系統是什麼?

Examples of code and command lines

Examples of code and command lines

嗯,我們有一台 kali 機器。

我們想要嘗試訪問 sudo,因此我們檢查誰擁有 sudo:

Examples of code and command lines

該系統上還有哪些用戶?

Examples of code and command lines

我們有一個名為 kali 的用戶!聽起來很有希望。但我們要怎麼登入呢?

也許我們可以在系統上找到 .pem 檔案。

Examples of code and command lines

好的!讓我們嘗試使用.pem 來連接機器。

Examples of code and command lines

我們進來了!

接下來,我們要確保從現在開始不再使用 histfile 命令記錄我們的任何操作。

Examples of code and command lines

Examples of code and command lines

(HISTFILESIZE 是 .bash_history 檔案中可以儲存多少條指令紀錄。HISTSIZE 是快取指令的數量)

如果攻擊者在攻擊的任何階段使用這些命令(或目的是刪除歷史日誌檔案的其他命令),那麼在不使用複雜的取證工具的情況下幾乎不可能檢測到攻擊。

清除有效:

Examples of code and command lines

有時,我們希望完全清空歷史文件,在某些作業系統中,shell 文件的命名不同。我們可以使用 echo 指令來清空它,如下所示:

Examples of code and command lines

現在,樂趣開始了。

我們的主要目標是安裝加密挖礦程序,所以我們要做的第一件事就是下載指定的工具:

Examples of code and command lines

並運行它:

Examples of code and command lines

為了確保它在 process 停止時能再次運行,我們可以創建一個 cronjob 負責每隔一段時間運行一次挖礦程式。

但是,如果用戶更改了密碼並且我們被踢出並且無法返回怎麼辦?

因此,讓我們添加一個用戶供我們自己將來使用 :

Examples of code and command lines

Examples of code and command lines

最後一件事,確保沒有記錄任何內容:

Examples of code and command lines

就是這樣!

請記住,還有許多其他方法可以使用 shell 命令進行攻擊。這只是一個小例子,展示了 shell 的強大功能以及攻擊者如何利用它來獲取優勢。

  

Shell 歷史分析中的挑戰

  出於安全目的分析 Bash 歷史提出了獨特的挑戰,主要障礙是可能缺乏全面的日誌;熟練的攻擊者經常掩蓋他們的痕跡,刪除或更改歷史文件以消除他們存在的證據。

  此外,即使在 shell 中使用腳本,這些腳本執行的各個命令通常也不會記錄在歷史文件中,很難僅從歷史日誌中重建操作序列。

  最後,很難區分這些命令的惡意使用和合法使用 - 例如,攻擊者可能使用 chmod 來提升最近下載的有效負載的權限並運行它,也可能是 IT 部門的 David 下載了一個 package 並運行它。正在嘗試運行它。

  我們不建議僅依靠 shell 歷史記錄來偵測惡意因素,因為它不是一個徹底的解決方案,而且很容易被更改。透過正確的分析和偵測,我們可以使用 shell 歷史記錄來提醒攻擊者,因為他們犯了錯誤,並留下了線索供我們尋找。

  

實例探究

  在我們的雲端中蜜罐報告中,我們看到了上面提到的命令的許多範例。

  超過 33 萬次偵察嘗試,使用諸如“ which ls”、“ ifconfig”、“ crontab -l”、“ whoami”、“ uname”、“ cat /proc/cpuinfo”等 grep 特定線路的命令等。

  超過 2300 個可疑網路指令,例如使用 apt、wget、curl 等下載軟體。

  超過 3 萬個與權限提升相關的指令,大部分是 chmod 和等簡單指令 sudo。

  超過 70k 的命令表示嘗試持久化,例如 useradd 將使用者寫入 passwd 檔案 authorized_keys。

  此外,還有許多混淆的命令、建立檔案、使用已知漏洞、搜尋現有礦工、殺死和刪除重要進程和檔案(kill -r %%1、rm -rf .file .z .x、rm .s等)。

  這些結果是有道理的——大多數攻擊者在嘗試提升權限和創建後門之前,首先會嘗試了解他們所在的位置、他們有權訪問的用戶類型(root、簡單用戶等)以及資產面臨哪些漏洞為了他們自己,只有這樣他們才會自己發動攻擊。

  

結論

  在我們透過 Unix 和 Linux 系統中的 shell 歷史記錄來偵測對手的探索中,我們發現了命令列介面的雙重性質:一個用於系統管理和潛在利用的強大工具。我們對各種可疑命令類別(從偵察到權限升級等)的經驗突顯了 CLI 在網路安全中的關鍵作用。

  從我們的蜜罐研究中的案例研究和現實場景中獲得的見解強調了這些策略的普遍性和複雜性。然而,分析 shell 歷史記錄的挑戰,例如不完整的日誌以及區分合法活動和惡意活動的困難,凸顯了全面監控策略的必要性。這項探索證實,雖然 shell 歷史分析是網路安全武器庫中的一個有價值的工具,但它必須成為有效檢測和識別對手的更廣泛、多層方法的一部分。

  只要有可能,基礎設施就應該使用基礎設施即代碼(IaC)。如果使用 IaC,那麼在互動式 shell 中執行手動執行的任何命令都會是異常且易於調查,因為實例很少。這也將允許在錯誤配置通過我們的左移安全性進入生產環境之前進行安全掃描。

  

Orca 平台如何提供協助

  Orca 雲端安全平台會在偵測到可疑 shell 命令時發出通知,並為調查和可能的補救措施提供必要的上下文。Orca 利用專門策劃的評分系統來區分惡意行為和合法行為。分數從 1 到 10 不等,其中 10 表示惡意活動發生的最高確定性等級。Orca 也會儲存數據,以便在實際發生違規情況時作為分析的資料。

讓我們來看看 Orca 警報 –

Orca Security’s Shell Command in Shell History dashboard

Orca 偵測到 shell 歷史記錄中的可疑活動

以及調查結果:哪些命令被認為是可疑的?

Examples of Shell History Suspicous Commands

rca 警報指定它偵測到的命令

查看警報的分數細分也很有趣:

Example of a high-risk alert base score

警報分數考慮的不同數據點的細分

  這裡顯示的命令與我們在上面的範例中使用的命令相同。我們將命令分為三類:取決於我們對命令表明惡意活動的確定程度。因此,一個簡單的 chmod 不會引起我們太多懷疑,但嘗試讀取 sudoers 或查找 .pem 檔案就會引起我們的懷疑。這種類別劃分使我們能夠涵蓋大多數場景,同時將誤報率降至最低。

  每個類別都有自己的權重,用於計算總體警報分數。在類別中偵測到的命令越多,百分比就越高。因此,在我們的範例中,有許多中等確定性命令,這使得百分比達到 100,這意味著該類別的整個權重被添加到最終分數中。

  如果您想了解有關 Orca 平台以及我們如何檢測惡意 shell 命令的更多信息,請與我們的專家安排個性化演示。