iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Security

資安這條路:系統化學習藍隊技術系列 第 26

Day26:藍隊提升技術力:數位鑑識 (8)─針對 Linux 數位鑑識尋找有用資訊

  • 分享至 

  • xImage
  •  

Linux 數位鑑識:情境、流程與工具

為什麼要針對 Linux 做數位鑑識

Linux 系統廣泛應用於伺服器和企業環境中,在發生資安事件時,數位鑑識需要先收集、保存、分析數位證據,以調查事件原因、追蹤攻擊者、評估損失和採取補救措施。

不管是 Windows 還是 Linux 進行數位鑑識的情境都是類似,取決於企業的伺服器、端點是什麼作業系統。

  • 案例
    • 某公司的 Linux 伺服器被發現存在異常流量。透過對系統日誌和網路連接進行分析,發現了一個隱藏的後門程式,導致了資料外洩
    • 發現其 Linux 伺服器被入侵,透過對系統日誌和檔案系統進行分析,發現了攻擊者利用了一個未修補的漏洞進行入侵,並嘗試進入內法存取其他台機器的內部資料。

Linux 相關的重要檔案與分析方法

在進行 Linux 數位鑑識時,與 Windows 不同的是 Linux 多半為指令介面,因此以下常見的檔案以路徑為主,並且不同的 Linux 系統(Ubuntu、RedHat 系列、CentOS 等),路徑不一定都相同,因此還是會針對自己的作業系統類型去尋找對應的路徑。

1. 系統日誌

Linux 系統日誌包含了大量有關系統事件、錯誤和使用者活動的資訊。

主要日誌檔案位置

  • /var/log/syslog/var/log/messages: 一般系統日誌
  • /var/log/auth.log/var/log/secure: 認證相關日誌
  • /var/log/kern.log: 核心日誌

分析方法

使用 grepawk, 和 sed 等工具來搜尋和分析日誌檔案。

  • 針對 ssh 搜尋失敗的登入日誌
    • 使用 grep 直接尋找
    grep "Failed password" /var/log/auth.log
    
    • 使用 journalctl 查看系統日誌:
    journalctl -u ssh
    

舉例:不正確的密碼日至分析

image

grep "incorrect password attempt" /var/log/auth.log
  1. 指令解釋
    • grep "incorrect password attempt" /var/log/auth.log
    • 這個指令在 /var/log/auth.log 檔案中
    • 搜尋包含 "incorrect password attempt" 字串
  2. 輸出解析:
    Oct 8 14:07:56 user sudo: user : 1 incorrect password attempt ; TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/apt-get install websocat
    • 日期和時間:Oct 8 14:07:56
    • 主機名:user
    • 事件來源:sudo
    • 使用者名稱:user
    • 事件描述:1 incorrect password attempt(1次錯誤密碼嘗試)
    • TTY:pts/0(這是虛擬終端會話)
    • PWD:/home/user(目前工作目錄)
    • USER:root(嘗試切換到的使用者)
    • COMMAND:/usr/bin/apt-get install websocat(嘗試執行的指令)
  3. 分析日誌
    • 代表使用者 "user" 嘗試使用 sudo 指令以 root 權限
    • 執行 apt-get install websocat,但輸入了錯誤的密碼。
    • 猜測:合法使用者的簡單錯誤,也可能是未授權使用者嘗試取得更高權限
    • 注意:使用者嘗試安裝 "websocat" 網路工具,可能需要進一步調查其用途,或是否滿足企業白名單工具
  4. 後續行動
    • 監控是否有更多失敗的登入嘗試,特別是來自同一使用者或針對同一指令的嘗試
    • 確認 "user" 是否有權限使用 sudo 和安裝新軟體
    • 如果這是異常行為,可能需要與該使用者討論以確認是否為其本人操作
    • 考慮審查 "websocat" 工具的安裝需求和潛在風險

2. 檔案系統分析

檔案系統中包含了大量有關使用者活動和系統變更的資訊。

重要檔案和目錄

  • /etc/passwd/etc/shadow: 使用者帳號資訊與密碼雜湊
  • /home 目錄: 使用者個人檔案
  • /tmp/var/tmp: 臨時檔案,可能包含重要的取證資訊

分析方法

使用 find 指令搜尋最近修改的檔案:

find /home -type f -mtime -7 -ls

使用 stat 指令查看檔案的詳細時間戳:

stat /path/to/file

實作:分析家目錄修改過的檔案

image

  • 指令解釋
    • find /home -type f -mtime -7 -ls
    • 這個指令在 /home 目錄中搜尋最近7天內被修改過的檔案
    • 並以詳細列表形式顯示結果
  • 輸出分析:
    1. 圖片檔案
      • /home/user/20240827_153222.jpg
      • /home/user/20241008_183506.jpg
      • 這是最近被存取或修改的照片檔案。檔名似乎包含日期資訊
    2. 檔案系統映像檔
      • /home/user/filesystem_images/ 目錄下有多個檔案系統映像檔
        • ntfs_sample.img
        • ext4_sample.img
        • fat32_sample.img
        • fat16_sample.img
      • 這可能是用於測試或分析的檔案系統範例
    3. Bash 歷史紀錄:
      • /home/user/.bash_history
      • 這個檔案記錄了使用者最近執行的指令
    4. 證據檔案:
      • /home/user/evidence.txt
      • 一個名為 "evidence.txt" 的小型文字檔,可能包含重要資訊
    5. 網路工具:
      • /home/user/websocat.x86_64-unknown-linux-musl
      • 這似乎是一個名為 "websocat" 的執行檔,可能是網路相關的工具
    6. 系統檔案
      • /home/user/.motd_shown
      • 這是一個空檔案,可能與系統登入訊息有關。
  • 分析對應
    1. 時間線分析:這些檔案的修改時間可以幫助建立使用者活動的時間線
    2. 使用者行為:可以了解使用者最近的活動,如拍攝或處理照片、使用特定工具等
    3. 潛在證據:特別注意 "evidence.txt" 檔案,它可能包含與調查相關的重要資訊
    4. 系統使用:檔案系統映像檔的存在表明使用者可能進行了某些系統等級的操作或測試
    5. 工具使用:websocat 工具的存在可能需要進一步調查其用途和來源
  • 後續建議
    1. 檢查 "evidence.txt" 的內容
    2. 分析 .bash_history 檔案以了解最近執行的指令
    3. 確認 websocat 工具的來源和用途
    4. 調查檔案系統映像檔的用途和內容
    5. 檢視照片檔案,確認其內容和重要性

3. 使用者 Shell 歷史記錄

Shell 歷史記錄可以提供使用者執行過的指令資訊。

歷史記錄檔案位置

  • ~/.bash_history: Bash shell 歷史記錄
  • ~/.zsh_history: Zsh shell 歷史記錄

分析方法

查看特定使用者的指令歷史:

cat /home/<username>/.bash_history

搜尋特定指令:

string /home/<username>/.bash_history | grep "ssh"

實作

strings ~/.bash_history | grep "sudo"

image

顯示了使用者最近使用 sudo 執行的指令
分析這些指令

  1. 軟體安裝
    • Python 相關
      sudo apt install python3.10-venv
      sudo apt install python3-venv
      sudo apt install python3-pip
      
    • 資安工具
      sudo apt install sqlmap
      
    • 多媒體工具
      sudo apt install ffmpeg
      
    • 檔案系統工具
      sudo apt install dosfstools ntfs-3g e2fsprogs
      
    • metadata 分析工具
      sudo apt-get install exiftool
      
    • 網路工具
      sudo apt-get install websocat
      
  2. 系統更新
    sudo apt update
    
  3. 檔案系統操作
    • 建立掛載點
      sudo mkdir /mnt/fat16
      sudo mkdir /mnt/fat32
      sudo mkdir /mnt/ntfs
      sudo mkdir /mnt/ext4
      
    • 掛載檔案系統映像
      sudo mount -o loop fat16_sample.img /mnt/fat16
      sudo mount -o loop fat32_sample.img /mnt/fat32/
      sudo mount -o loop ntfs_sample.img /mnt/ntfs/
      sudo mount -o loop ext4_sample.img /mnt/ext4/
      
    • 在掛載的檔案系統中建立和寫入檔案
      sudo touch /mnt/fat16/example1.txt
      sudo echo "This is a FAT16 file system" | sudo tee /mnt/fat16/example1.txt
      
      (對 FAT32、NTFS 和 EXT4 也有類似操作)
    • 卸載檔案系統
      sudo umount /mnt/fat16
      sudo umount /mnt/fat32
      sudo umount /mnt/ntfs
      sudo umount /mnt/ext4
      
  • 分析
    1. 使用者行為
      • 使用者似乎在進行與不同檔案系統相關的實驗或學習。
      • 安裝了多個與資安和網路相關的工具(sqlmap、websocat)
    2. 技術能力
      • 使用者顯示出對系統管理和檔案系統操作的了解
      • 安裝的工具表明可能在進行安全測試或網路分析
    3. 潛在關注點
      • sqlmap 是一個資料庫滲透測試工具,其使用可能需要進一步調查
      • websocat 的重複安裝嘗試可能表示遇到了問題或特別需要這個工具
    4. 檔案系統實驗
      • 使用者建立和操作了多種檔案系統的映像檔,這可能是出於學習、測試或取證目的
    5. 資安考量
      • 雖然這些活動看起來像是學習或實驗性質
      • 但使用 sudo 執行這麼多指令可能存在安全風險
  • 建議後續行動
    1. 確認這些活動是否得到授權,特別是安裝和使用如 sqlmap 這樣的滲透測試工具
    2. 檢查 websocat 的用途和安裝狀態,了解為何有多次安裝嘗試
    3. 審查與檔案系統映像相關的實驗,確保沒有處理敏感或機密資料
    4. 考慮實施更嚴格的 sudo 權限控制,以加強系統安全性
    5. 與使用者討論這些活動的目的,確保符合組織的安全政策

4. 網路連接資訊

網路連接資訊可以幫助識別可疑的網路活動。

重要指令

  • netstatss: 顯示網路連接狀態
  • lsof: 列出打開的檔案和網路連接

分析方法

  • 查看目前網路連接
ss -tuln
  • 查看正在監聽的端口
netstat -tlpn

實作

image

ss -tuln
  • 指令解釋
    • ss -tuln
    • 用於顯示目前系統網路狀態的指令
    • t: 顯示 TCP 連線
    • u: 顯示 UDP 連線
    • l: 只顯示正在監聽的通訊埠
    • n: 以數字格式顯示位址和連接埠,而不是主機名和服務名稱
  • 輸出分析
    1. UDP 連線
      • 127.0.0.53%lo:53 (本地 DNS 解析服務)
      • 127.0.0.1:323 和 [::1]:323 (時間同步服務,可能是 NTP)
    2. TCP 連線
      • 127.0.0.53%lo:53 (本地 DNS 解析服務)
  • 重要觀察
    1. 本地 DNS 服務
      • 系統正在執行本地 DNS 解析服務,監聽在 127.0.0.53 的 53 連接埠上。
      • 這通常是由 systemd-resolved 服務提供的
    2. 時間同步服務
      • 系統有一個服務在監聽 323 連接埠
      • 很可能是 NTP(網路時間協定)服務
      • 這表示系統正在進行時間同步
    3. 限制的網路曝露
      • 目前沒有對外開放的服務
      • 所有監聽的服務都綁定在回環介面(localhost)上
      • 這表示系統目前的網路安全設定相對保守
    4. IPv6 支援
      • 系統支援 IPv6,如 [::1]:323 所示
  • 資安考量
    1. 最小化攻擊面
      • 目前的設定顯示系統只有必要的服務在執行
      • 這有助於減少潛在的攻擊面
    2. 本地服務限制
      • 所有服務都限制在本地介面上
      • 這加強系統安全性
    3. 無遠端存取服務
      • 沒有遠端 SSH 或其他管理服務正在監聽
      • 這可能表示系統不是用作遠端伺服器
  • 建議後續行動
    1. 定期監控:建立定期執行 ss -tuln 的機制,以監控網路狀態的變化
    2. 資安稽核:確認目前的網路設定是否符合組織的安全政策
    3. 檔案記錄:記錄目前的網路狀態,作為未來比對的基準
    4. 服務確認:確認這些執行中的服務是否都是必要的,特別是 NTP 服務
    5. 防火牆設定:檢查並確認防火牆設定與目前的網路狀態一致
    6. IPv6 設定審查:檢視並確認 IPv6 的設定是否符合組織的網路政策

5. Process 進程資訊

分析系統 Process 進程可以幫助識別可疑的活動或惡意軟體。

重要指令

  • ps: 顯示 Process 進程狀態
  • tophtop: 及時顯示系統資源使用情況

分析方法

查看所有執行中的Process 進程

ps aux

查找特定Process 進程

ps aux | grep "suspect_process"

實作分析

ps aux

image

顯示了系統目前所有執行中的程式。

  • 分析
    1. 系統程式
      • PID 1 是 /sbin/init
        • 這是系統的第一個程式,負責啟動其他服務
      • 有多個系統關鍵程式在執行,如 systemd-journald、systemd-udevd、systemd-resolved 等
        • 這些都是正常的系統服務
    2. Snap 相關程式
      • 多個 snapfuse 程式正在執行
        • 這與 Ubuntu 的 Snap 套件系統有關,用於掛載 Snap 應用程式
      • 有一個 snapd 程式(PID 183)在執行
        • 這是 Snap 套件管理系統的主要程式
    3. 網路相關
      • networkd-dispatcher 在執行
        • 負責處理網路事件
      • systemd-resolved 正在執行
        • 提供 DNS 解析服務
    4. 日誌和系統監控
      • rsyslogd 在執行
        • 這是系統日誌服務
      • unattended-upgrade-shutdown 程式
        • 系統有自動更新機制在運作
    5. 使用者程式
      • 有幾個 bash 在執行
        • 表示有使用者登入並開啟了終端機
      • systemd --user
        • 表示每個登入使用者都有自己的 systemd 實例在執行
    6. 桌面安裝程式
      • ubuntu-desktop-installer 相關的程式在執行
        • 可能表示系統正在進行或剛完成桌面環境的安裝
    7. 雲端初始化
      • cloud-init 程式在執行
        • 這通常用於雲端環境中的系統初始化設定
    8. 資源使用
      • 大多數程式的 CPU 和記憶體使用率都很低
      • 只有少數程式(如 PID 1 和 443)有較高 CPU 使用率
  • 安全考量
    1. 沒有明顯的可疑程式
    2. 系統服務看起來都是標準的 Ubuntu 程式
    3. Snap 的廣泛使用可能需要額外關注,確保所有 Snap 套件都是最新且安全的
  • 建議後續行動
    1. 檢查 ubuntu-desktop-installer 的狀態,確認安裝過程是否完成
    2. 審查正在執行的 Snap 套件,確保它們都是必要的
    3. 檢查 cloud-init 的設定,確保它符合您的系統環境需求
    4. 考慮設定定期的系統程式審查機制,以識別任何異常情況
    5. 檢查 unattended-upgrades 的設定,確保自動更新政策符合組織的安全要求

6. 自動啟動項目

檢查自動啟動項目可以幫助發現持久性的惡意軟體。

重要位置

  • /etc/init.d/
  • /etc/rc*.d/
  • /etc/crontab
  • 使用者的 crontab 檔案

分析方法

  • 查看系統級的 cron 工作
cat /etc/crontab
  • 查看特定使用者的 cron 工作
crontab -u username -l

實作分析

cat /etc/crontab

image

/etc/crontab 檔案的內容,它是系統級的 crontab 設定檔

  • 分析
    1. 檔案說明
      • 這是系統範圍的 crontab 檔案
      • 與其他 crontab 不同,編輯此檔案後無需執行 crontab 指令來安裝新版本
      • 這個檔案和 /etc/cron.d 中的檔案都包含使用者名稱欄位,這是其他 crontab 所沒有的
    2. 環境設定
      • SHELL 設定為 /bin/sh
      • PATH 變數被註解掉,預設情況下,較新版本會繼承環境中的 PATH
    3. 工作定義格式說明
      • 檔案中詳細解釋了 crontab 的時間格式:分鐘、小時、日期、月份、星期幾
      • 格式為:分鐘 小時 日期 月份 星期幾 使用者名稱 要執行的指令
    4. 已設定的定期工作
      • 每小時執行

        • 17 * * * * root cd / && run-parts --report /etc/cron.hourly
        • 每小時的第 17 分鐘,執行 /etc/cron.hourly 目錄中的腳本
      • 每日執行

        • 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
        • 每天早上 6:25,如果 anacron 不存在,則執行 /etc/cron.daily 目錄中的腳本
      • 每週執行

        • 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
        • 每週日早上 6:47,如果 anacron 不存在,則執行 /etc/cron.weekly 目錄中的腳本
      • 每月執行

        • 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
        • 每月 1 日早上 6:52,如果 anacron 不存在,則執行 /etc/cron.monthly 目錄中的腳本
  • 安全考量
    1. 所有定期工作都以 root 權限執行,這可能有安全風險
    2. 使用 run-parts 指令執行整個目錄的腳本,需確保這些目錄中只包含可信的腳本
    3. anacron 的存在與否會影響工作的執行,需確保系統設定的一致性
  • 建議後續行動
    1. 檢查 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目錄中的所有腳本,確保它們都是必要且安全的
    2. 考慮是否所有工作都需要 root 權限執行,可能的話降低權限
    3. 確認 anacron 的安裝狀態和設定
    4. 定期審查這個檔案,確保沒有未經授權的變更
    5. 考慮加強對 cron 相關目錄的存取控制

其他重要路徑

  1. /etc/passwd - 儲存使用者帳號資訊
  2. /etc/shadow - 儲存加密的密碼和帳號過期資訊
  3. /var/lib/dpkg/status - 列出所有已安裝的軟體套件(Debian 系統)
  4. /var/log/ 目錄下的各種日誌檔案
    • /var/log/auth.log - 系統認證資訊
    • /var/log/dpkg.log - 套件安裝和移除資訊
    • /var/log/btmp - 失敗的登入嘗試
    • /var/log/cron - cron 工作資訊
    • /var/log/secure - 認證和授權資訊
    • /var/log/faillog - 使用者失敗登入嘗試
    • /var/log/apache2/access.log - Apache 網頁伺服器存取日誌
  5. 使用者的家目錄中的各種檔案和目錄

其他分析方法

  1. 檢查 /etc/passwd/etc/shadow 檔案以識別使用者帳號和權限
  2. 使用 cat 或文字編輯器查看 /var/lib/dpkg/status 檔案來分析已安裝的軟體
  3. 檢查 /var/log/ 目錄下的各種日誌檔案以分析系統活動、登入嘗試和安全事件
  4. 使用 ls -a 命令來顯示隱藏檔案和目錄
  5. 使用 steganography 工具如 steghide 來檢查檔案中是否隱藏了其他檔案
  6. 使用 exiftool 檢查檔案的中繼資料是否包含隱藏資訊

總結

透過分析這些 Linux 系統中的關鍵資料來源,調查人員可以收集有關使用者行為、系統事件和潛在惡意行為的證據。對這些資料來源可以讓學習者全面了解對於在 Linux 作業系統上進如何開始檢查。

小試身手

  1. 在 Linux 數位鑑識中,以下哪個檔案通常不包含使用者登入資訊?
    A) /var/log/auth.log
    B) /var/log/secure
    C) /var/log/messages
    D) /etc/shadow

    答案: C
    解析: /var/log/messages 主要包含一般系統日誌,而不是專門的登入資訊。/var/log/auth.log/var/log/secure 包含認證相關日誌,/etc/shadow 包含加密的使用者密碼。

  2. 使用哪個 Linux 指令可以查看最近修改過的檔案?
    A) ls
    B) find
    C) grep
    D) cat

    答案: B
    解析: find 指令可以根據多種條件搜尋檔案,包括最後修改時間。例如: find /home -type f -mtime -7 可以找出最近 7 天內修改過的檔案。

  3. 在進行 Linux 數位鑑識時,以下哪種情況通常不需要進行深入調查?
    A) 系統日誌中出現大量失敗的登入嘗試
    B) 發現未知的系統服務正在執行
    C) 系統進行例行性軟體更新
    D) 重要系統檔案的修改時間被更改

    答案: C
    解析: 系統例行性軟體更新是正常的維護操作,通常不需要進行深入的數位鑑識調查。其他選項如大量失敗的登入嘗試、未知服務執行和系統檔案被修改都可能代表潛在的安全問題。

  4. 使用哪個 Linux 指令可以查看目前系統中開放的網路端口?
    A) ifconfig
    B) ping
    C) netstat
    D) route

    答案: C
    解析: netstat 指令可以顯示網路連接、路由表、介面統計等網路相關資訊。使用 netstat -tuln 可以列出所有正在監聽的 TCP 和 UDP 端口。

  5. 在分析 Linux 系統的自動啟動項目時,以下哪個位置通常不包含啟動腳本?
    A) /etc/init.d/
    B) /etc/rc*.d/
    C) /etc/crontab
    D) /var/log/

    答案: D
    解析: /var/log/ 目錄主要用於儲存系統日誌,而不是啟動腳本。/etc/init.d//etc/rc*.d/ 和 /etc/crontab 都可能包含系統啟動時執行的腳本或指令。

藍隊閱讀完文章後的後續行動清單

  1. 建立 Linux 數位鑑識工具箱
    • 安裝常用的 Linux 鑑識工具
      • 如 Autopsy, The Sleuth Kit, Volatility 等
    • 確保這些工具保持最新版本
  2. 制定 Linux 數位鑑識流程
    • 根據文章中描述的各種情境,制定相應的 Linux 數位鑑識流程和檢查清單
    • 確保流程包含證據收集、保存、分析和報告撰寫等步驟
  3. 培訓團隊成員
    • 組織 Linux 系統管理和鑑識技術的培訓課程
    • 進行模擬演練,提高團隊的實際操作能力
  4. 建立 Linux 系統基線
    • 在正常運作的 Linux 系統上收集各類型的鑑識資料,建立基準線以便將來比較
  5. 自動化腳本開發
    • 開發自動化 shell 腳本以快速收集和分析 Linux 系統的關鍵鑑識資料
  6. 更新安全政策
    • 根據文章中提到的各種鑑識技術,審查並更新組織的 Linux 系統安全政策,特別是關於日誌保留和系統監控的部分
  7. 建立 Linux 系統日誌集中管理
    • 實施集中式日誌管理系統,如 ELK Stack (Elasticsearch, Logstash, Kibana)
    • 以便更有效地監控和分析多個 Linux 系統的日誌
  8. 定期進行 Linux 系統安全審計
    • 使用工具如 Lynis 定期進行 Linux 系統安全審計
    • 並根據結果進行系統加強
  9. 建立 Linux 入侵檢測系統
    • 在關鍵 Linux 系統上部署入侵檢測系統
    • 如 OSSEC 或 Wazuh,以及時發現可疑活動

上一篇
Day25:藍隊提升技術力:數位鑑識 (7)─針對 Windows 數位鑑識尋找有用資訊
下一篇
Day27:藍隊提升技術力:監控技術 (1)─SIEM 系統:藍隊的關鍵工具
系列文
資安這條路:系統化學習藍隊技術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言