在資訊安全領域,建置一個安全且隔離的測試實驗室至關重要。本文將探討如何利用虛擬化和容器化技術,開發一個高效的滲透測試實驗室。從傳統的虛擬機器,到輕量級的 Docker 容器,再到 Live USB 和雲端系統,我們將分析各種技術的優缺點,並提供實務操作。對於虛擬機器,我們將介紹 VirtualBox、VMware 和 Hyper-V 等常用工具,並說明如何在這些平台上執行 Kali Linux。針對 Docker,我們將探討如何在 Linux 主機上組態容器網路,以及如何利用 Docker 隔離舊版應用程式、執行特定工具和快速佈署漏洞應用程式。此外,我們也將介紹 Live USB 的使用,特別是在硬體資源有限的情況下,如何利用 Live USB 進行測試。最後,我們將探討雲端系統的應用,以及如何利用雲端平台快速搭建測試環境。除了環境建置,我們也將探討如何自訂化命令列環境,提升測試效率,例如使用 alias、增強歷史記錄功能和安裝補完工具。同時,我們將介紹一些常用的漏洞測試平台,例如 Metasploitable 2、GOAD、OWASP Juice Shop 和 Mutillidae II,幫助測試人員提升實戰能力。
情境架構圖示
graph TD;
A[主機系統] --> B[虛擬機器 VirtualBox];
A --> C[VMware Workstation Player];
A --> D[Microsoft Hyper-V];
A --> E[Docker Container];
B --> F[Kali Linux];
C --> F;
D --> F;
E --> G[不同 OS 的容器];
次段落標題:此圖示解說
此圖示展示了不同型別虛擬化解決方案及其佈署情境。主機系統可以透過多種方式設定實驗室環境:Oracle VirtualBox、VMware Workstation Player 或 Microsoft Hyper-V 作為虛擬機器超管軟體;或者使用 Docker Container 來執行輕量級且高效率地環境。在這些情境中,Kali Linux 是被推薦作為測試平台使用;而 Docker Container 則提供了一種靈活且高效率地執行不同作業系統容器的方法。
小段落標題:邏輯與設計考量
玄貓之所以推薦上述方式來設定實驗室環境是因為這些工具均提供了隔離性和靈活性,特別是對於測試人員來說可以避免汙染日常使用的系統環境。同時這些工具也支援快速還原和替換測試環境功能。
小段落標題:未來趨勢預測
隨著技術發展及需求增加,虛擬化技術和容器技術將會逐步融合並在更多情境下得到應用。無伺服器架構及雲端運算也將會是未來發展方向之一,雲原生技術將會成為新趨勢,DevSecOps 文化也將深刻影響安全評估及開發流程。
小段落標題:實務應用評估
玄貓強烈建議每位測試人員都應該熟悉並掌握上述技術工具及其應用場景,提升工作效率、保證工作環境安全、降低技術風險。
使用 Linux 主機進行容器網路組態
在 Linux 主機上,可以直接將容器連線到主機的網路,並根據需要開啟和關閉埠,只要在命令列中包含特定引數即可。這樣可以動態地在主機的網路介面上開啟伺服器監聽埠,而無需停止和重新啟動容器。此外,還可以將容器連線到 USB 或序列埠,以與硬體裝置進行介面。玄貓有時會使用這個選項來執行一些舊的 Python2 滲透測試應用程式,這些應用程式需要與 USB 或序列裝置進行介面,以進行無線頻率和硬體駭客攻擊。
然而,當使用 Docker Desktop 時,網路埠連線是透過 NAT 進行的,因此如果需要開啟或關閉額外的埠,則必須停止並重新啟動容器。此外,使用 Docker Desktop 無法將容器連線到硬體裝置。這在組態了應用程式及其依賴項後,可能會導致非常惱人的情況,因為當你毀掉容器並啟動新例項以便開啟另一個 TCP 埠來進行反向監聽或伺服器應用程式時,你可能會失去工作成果。
總結來說,玄貓更喜歡在 Linux 主機上使用 Docker。以下是玄貓針對滲透測試所列出的三種特定使用案例:
- 隔離舊 Python 2 應用程式:Docker 提供了一種簡單的方式來隔離舊 Python 2 應用程式,避免依賴地獄。所有 Python 2 和 3 的版本都有官方 Docker 容器。
- 執行非包管理器可用的應用程式:玄貓利用 Docker 建立和執行那些無法透過包管理器獲得的應用程式。例如某個駭客工具可透過 Kali 軟體儲存函式庫取得,但在 Ubuntu 中不可用。玄貓可以建立一個精簡的 Kali 容器來執行該應用程式,並透過修改
~/.bashrc檔案中的別名來將長 Docker 啟動命令縮短為終端機中輸入的一個詞。這比起要執行一個單一應用程式時使用一個沉重的虛擬機器更快、更輕量。 - 快速佈署漏洞應用程式:當玄貓想要練習攻擊或建立對於最近釋出的漏洞 Web 應用程式的攻擊工具時,通常可以找到一個 Docker 容器來立即啟動該漏洞應用程式而無需花費寶貴的時間來安裝和組態它。
Docker 容器對於這些特定情況非常適合。然而,相比之下虛擬機器更受青睞。接下來我們探討使用 Live USB 作為虛擬機器和容器的替代方案。
Live USB:硬體資源不足時的選擇
Live USB 是一種將作業系統映像寫入 USB 傳輸盤的方式使其可啟動。當電腦沒有足夠的硬體資源來執行虛擬機器時,Live USB 是個不錯的選擇。可以使用影像軟體將 Linux ISO 傳輸盤燒錄到 USB 上並啟動 Linux 作業系統。完成工作後,只需重新啟動電腦並移除 USB 驅動器即可還原到已安裝的作業系統。某些 Linux 發行版本允許在 USB 驅動器上建立持久儲存區域,因此在重新啟動時不會丟失更改。
執行 Linux 發行版本從 Live USB 的一般步驟
- 下載 ISO 映像檔案。常見於滲透測試者使用的 Linux 發行版本包括 Kali、Parrot 安全作業系統和 BlackArch。
- 建立 Live USB 驅動器。常見工具包括 Rufus、balenaEtcher 和 Linux 的
dd命令。 - 組態持久儲存(可選)。通常需要在 USB 驅動器上建立一個分割槽並組態引導載入程式以識別和使用該分割槽。
以下是一些關於 Live USB 的注意事項:
- 效能問題:USB 儲存通常比直接從 SSD 執行慢得多。如果要使用 Live USB,請確保使用 USB 3.0 或 3.1 標準以獲得最佳效能。
- 安全性考量:從官方來源下載 ISO 映像檔案並驗證檢查碼後再信任它。
- 持久儲存加密:如果計劃將其用於生產環境中,則應該確保持久儲存加密以防止未經授權的人員暴露驅動器上的敏感資料。
雲端系統:靈活且便捷
許多雲平台提供免費層級以存取具有足夠資源以適閤中等工作負載之 Linux 作業系統。提供免費層級之雲端服務供應商包括 Google Cloud Platform(GCP)、Microsoft Azure 和 Amazon EC2。不過免費層級可能不提供足夠 RAM 用於生產環境及不適合執行 Kali Linux 映像。
Kali Linux 提供了在 AWS、Digital Ocean、Linode 和 Azure 上執行之檔案及市場映像(https://www.kali.org/docs/cloud/)。玄貓有一些客戶曾經在雲端為雲安全評估組態 Kali Linux 或透過 VPN 與內部網路基礎架構連線以便內部網路滲透測試之情形。如果客戶內部網路已經透過 VPN 與雲端服務供應商連線了,則對於他們來說相當簡單地啟動 Kali 映像並在防火牆規則中允許來自我 IP 地址之 SSH 請求。
漏洞實驗室目標:提升實戰能力
隨著後面章節中滲透測試方法論之學習進度增加時,擁有可執行命令和開發 Bash 指令碼時之漏洞目標能夠成為極大幫助。有許多出色資源提供漏洞目標來供您在實驗室內練習。
下列案例說明
案例一:隔離舊 Python 應用
# 指令範例:docker run --rm -it python:2.7
import requests
def fetch_data(url):
response = requests.get(url)
return response.text
# 模擬舊 Python 應用與 USB 或序列裝置進行互動
def interact_with_device():
# 在這裡新增與硬體裝置互動的邏輯
print("與裝置互動中...")
內容解密:
以上範例展示瞭如何在 Docker 中執行舊 Python 應用(Python 2.7),這對於避免依賴地獄非常有幫助。首先我們提取官方 Python 2.7 的 Docker 映像並執行它。
fetch_data 函式展示瞭如何使用 requests 函式庫從給定 URL 下載資料。
interact_with_device 函式則是模擬與硬體裝置互動的邏輯。
案例二:建立薄 Kali 容器
# 指令範例:docker run --rm -it kali-linux/kali-rolling
apt-get update
apt-get install -y tool-name
內容解密:
在這個範例中我們展示瞭如何建立一個薄 Kali 容器來執行特定駭客工具。首先更新包列表然後安裝所需工具。 這樣做比起需要安裝整個 Kali Linux 發行版本更加輕量且快速。
案例三:快速佈署漏洞 Web 應用
# 指令範例:docker run --rm -it vulnerable-app
內容解密:
這個範例展示瞭如何快速佈署一個已知漏洞的 Web 應用程式。只要提取相應的 Docker 映像並執行它即可立即開始滲透測試。 這樣省去了繁瑣的安裝和組態過程。
案例四:Live USB 的組態
# 指令範例:dd if=linux.iso of=/dev/sdX bs=4M status=progress && sync
內容解密:
以上指令展示瞭如何使用 dd 命令將 Linux ISO 語言燒錄到 USB 上。
if=linux.iso 指定原始檔為 linux.iso ,而 of=/dev/sdX 則是目標磁碟裝置位址(請替換 sdX 為實際磁碟符號)。
最後兩條指令分別表示設定傳輸區塊大小以及同步緩衝區以確保資料正確寫入磁碟。
案例五:雲端系統之 SSH 請求
# 指令範例:ssh user@cloud-server-ip
內容解密:
以上指令展示瞭如何透過 SSH 請求連線到雲端伺服器。
user@cloud-server-ip 是 SSH 請求格式其中 user 是帳號名稱而 cloud-server-ip 則是雲端服務伺服器 IP 地址。
此指令可以讓我們透過遠端連線方式快速管理雲端上的虛擬機器或容器化環境。
案例六:持久儲存加密
# 指令範例:cryptsetup luksFormat /dev/sdX && cryptsetup luksOpen /dev/sdX encrypted-drive
內容解密:
以上指令展示瞭如何對 Live USB 的持久儲存分割槽進行加密。
首先我們要使用 cryptsetup luksFormat 命令對分割槽進行格式化然後再利用 cryptsetup luksOpen 命令開啟已經加密好的分割槽並在登入後產生一個裝載點稱為 encrypted-drive
如此便完成了 Live USB 的持久儲存加密設定及保護敏感資料安全性之操作流程。
開發實戰化測試環境:深度探討測試實驗室架設與自訂化技巧
實驗室架設與常見工具介紹
測試實驗室是每位資安專業人士的必備工具,這些實驗室提供了安全的環境,讓我們能夠探索各種攻擊技術並提升自己的技能。以下是幾個常見且受歡迎的測試實驗室環境:
Metasploitable 2
Metasploitable 2 是由 Rapid7 提供的一個易受攻擊的虛擬機器,旨在展示 Metasploit Framework 的強大功能。它也是初學者提升測試方法論和學習 Bash 的絕佳練習場地。這個專案對於執行虛擬機器的資源需求不高,並且包含了該機器漏洞的詳細檔案,方便使用者進行學習和測試。
Game of Active Directory (GOAD)
GOAD 是一個針對 Active Directory 環境進行測試的專案,為測試人員提供了一個準備好的、易受攻擊的 Active Directory 環境。使用者可以在這個環境中練習常見的攻擊技術,並且不需要擔心會對真實環境造成任何損害。GOAD 使用免費的 Microsoft Windows 授權,並且這些授權在 180 天內都處於啟用狀態。
MayFly 是 GOAD 的建立者,其網站上有豐富的文章,介紹如何在不同的虛擬機器超級管理程式上設定 GOAD,以及如何使用常見的測試工具來攻擊 Active Directory。此外,MayFly 還發布了一個詳細的心智圖,這是一份非常有價值的資源,幫助使用者在測試過程中避免遺漏任何可能性。
OWASP Juice Shop
OWASP Juice Shop 是一款現代化且多樣化的不安全網頁應用程式,適用於安全培訓、意識演示、CTF 比賽以及作為安全工具的測試物件。它包含了 OWASP Top Ten 中所有的漏洞,並且還有許多其他在實際應用中常見的安全問題。
OWASP Mutillidae II
OWASP Mutillidae II 是一款免費且開源的不安全網頁應用程式,專為網頁安全培訓而設計。它內嵌了大量的提示、教程和影片教學,使得初學者也能輕鬆上手。Mutillidae II 是一款傳統型的網頁應用程式,與 Juice Shop 的現代 JavaScript 框架有所不同。Juice Shop 雖然有一些第三方可供參考,但 Mutillidae II 提供了更多內嵌式教學內容。
組態你的駭客命令列
如果你正在使用 Kali Linux 或 macOS 作為你的測試平台,那麼你可能會注意到它們預設使用的是 Zsh 命令列而非 Bash。雖然 Zsh 有更多功能(如更好的標籤補全和主題支援),但 Bash 在廣泛性和穩定性方面都更勝一籌。
首先,確認你目前正在使用哪種 Shell:
echo $SHELL
幾乎所有在本文中的程式碼都能在 Bash 和 Zsh 中正常執行。
如果你希望將 Zsh 切換回 Bash,可以執行以下命令:
chsh -s /bin/bash
然後重新登入以看到變更生效。
Bash 的組態檔案通常位於使用者主目錄下 /home/username 中。由於這些組態檔名稱以點號開始(即隱藏檔案),因此常被稱為「點檔案」。以下是一些重要的 Bash 組態檔案:
~/.bash_profile:這個檔案會在啟動互動登入時執行,用來初始化使用者環境。例如:透過 SSH 連線進入系統時會觸發這個檔案。~/.bashrc:這個檔案會在每次啟動新的 Bash Shell 時執行,通常用來設定環境變數和別名。~/.bash_logout:這個檔案會在使用者離開 Shell 時執行。
自訂化你的命令列環境
要自訂化你的命令列環境以適應你的需求和風格,可以編輯 ~/.bashrc 或 ~/.bash_profile 檔案。例如,可以在這些檔案中設定別名、自定義提示符或新增其他功能來提升工作效率。
以下是一些常見且有用的自訂化範例:
增強命令列提示符
要增加命令列提示符中的顏色和資訊,可以修改 PS1 變數:
PS1='\u@\h:\w\$ '
這樣設定後,提示符會顯示當前使用者名稱、主機名和工作目錄。
增加別名
別名可以幫助你縮短常用命令:
alias ll='ls -la'
alias gs='git status'
增強歷史記錄功能
要保留更多歷史記錄並增加搜尋功能:
HISTSIZE=10000
HISTFILESIZE=20000
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
安裝補完工具
要增強自動補完功能(如路徑或命令補全),可以安裝 bash-completion 工具:
sudo apt-get install bash-completion
source /etc/bash_completion
## 深度分析:實戰中的實驗室應用
透過以上組態與工具介紹後,我們來探討如何將這些實驗室應用於實戰中的測試活動中。
應用 Metasploitable 2 做為初學者練習場
Metasploitable 2 提供了豐富且多樣化的漏洞型別及其對應解決方案。初學者可以透過攻擊 Metasploitable 2 機器來熟悉 Metasploit Framework 的各種模組和功能。
以下是攻擊 Metasploitable 2 的簡單步驟:
- 啟動 Metasploitable 2 虛擬機器。
- 在本地終端中啟動 Metasploit:
msfconsole - 搜尋對應漏洞模組:
search vsftpd - 組態並執行攻擊:
use exploit/unix/ftp/vsftpd_234_backdoor set RHOSTS <Metasploitable IP> exploit
應用 GOAD 提升 Active Directory 測試能力
Active Directory 測試需要更專業和細緻的知識體系。GOAD 提供了一個模擬企業內部網路環境中的 Active Directory 基礎設施。
利用 GOAD 測試時建議先熟悉其內部結構與已知漏洞:
- 啟動 GOAD 虛擬機器。
- 透過 PowerShell 或其他工具連線到域控制器進行第一步偵察。
- 探索網路服務、賦予許可權以及物理機器間互聯等細節。
- 執行各種列舉操作(如 LDAP 查詢、DNS 查詢等)以獲得更多資訊。
- 探索已知漏洞並尋找可能入侵點。
應用 OWASP Juice Shop 與 Mutillidae II 提升 Web 應用測試技巧
OWASP Juice Shop 和 OWASP Mutillidae II 提供了豐富且現代化及傳統化 Web 漏洞模型:
-
OWASP Juice Shop:其現代框架和豐富資料函式庫使得它成為深入理解現代 Web 漏洞之選。
docker run -p 3000:3000 bkimminich/juice-shop指向瀏覽器 http://localhost:3000/
-
OWASP Mutillidae II:適合那些希望在傳統 Web 架構中練習漏洞檢測與修補技巧的人群。
git clone https://github.com/webpwnized/mutillidae.git mutillidae-master/ cd mutillidae-master/ docker-compose up -d指向瀏覽器 http://localhost/
透過這些工具與方法論之調整與策略思考分析提供了更高層次之應用場景與即時反饋分析機制來彌補流程中的漏洞存在及問題。
## 自訂化 Shell 與 Bash 高效工作流程
除了實驗室設定外,「自訂化」也是提升工作效率的一大關鍵所在。 自訂化 Shell 與 Bash 組態不僅提升了操作便利性也使得系統之管理及維運日益簡單高效從而建立起快速反饋及即時迭代之工作流程。