您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用Apache mod_rewrite模擬實現CIA Hive流量分發”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用Apache mod_rewrite模擬實現CIA Hive流量分發”吧!
本文的復現場景源于2017年11月維基解密Vault 8文件曝光的CIA網絡武器庫之CIA Hive[1]工具。CIA Hive工具的主要功能是輔助CIA其他惡意軟件隱蔽控制、運行。
CIA Hive的整體結構可以分為四層,如圖 1 所示。
圖 1
具體關于CIA Hive各層對應詳細解析請參考[2],本次復現場景聚焦模擬實現并驗證隱藏服務器(Blot)的流量分發功能——Blot Server根據不同來源把請求分發到事先設定好的不同服務器。即當Blot Server收到訪問請求時,Blot Server會基于對客戶端證書驗證結果進行流量分發。若SSL驗證該訪問非法,Blot會將流量分發給cover server,返回一個正常的網頁。若Blot 接收到帶有有效證書的流量(只有受控主機會發送帶有有效證書的流量)則將此流量轉發給Honeycomb,從而實現隱蔽通信和控制。
本文主要從技術角度出發,嘗試使用Apache的mod_rewrite模塊實現其流量分發功能,完成與CIA Hive的Blot Server相同的功能。
2.1.1什么是mod_rewrite?
mod_rewrite是apache的一個模塊,安裝apache環境默認安裝此模塊,但通常默認不啟用,需要手動啟用。該模塊是基于一定規則實時重寫URL請求的引擎。此模塊可以操作URL的所有部分,在服務器級(httpd.conf)和目錄級(.htaccess)的配置都有效。
2.1.2 mod_rewrite實現流量分發思路
通過手動啟用rewrite模塊,進入apache配置文件apache2.conf,開啟.htaccess的目錄級配置,打開AllowOverride,最后在.htaccess文件中配置規則來實現流量分發。具體配置規則及配置技巧可參考https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond和 https://bluescreenofjeff.com/tags。
2.2.1 數字證書
數字證書是一種網絡身份證明文件,同時還包含有公鑰。證書的真偽需要一個驗證方式,而驗證方需要認同這種驗證方式,以完成證書的頒發過程。一個https的站點需要和一個證書綁定,客戶端通過維護一個“根受信任機構列表”完成站點的可信識別過程,而客戶端是否信任這個站點的證書取決于客戶端程序是否導入了證書頒發者的根證書。目前,X.509證書是一種通用的證書格式,符合ITU-T X.509國際標準。
2.2.2X.509證書
通用證書格式X.509主要包含三個文件:key,csr,crt。各文件描述如下:
key文件——服務器上的私鑰文件,用于對發送給客戶端數據的加密,以及對從客戶端接收到數據的解密。
csr文件——證書簽名請求文件,用于提交給證書頒發機構(CA)對證書簽名。
crt文件——由證書頒發機構(CA)簽名后的證書,或者是開發者自簽名的證書、包含證書持有人的信息、持有人的公鑰、以及簽署者的簽名等信息。
注:本文以復現實驗為主,將采用HTTPS雙向認證。其中,雙向認證和單向認證原理類似,區別在于除了客戶端需要認證服務端以外,增加了服務端對客戶端的認證。服務端在驗證客戶端證書后,根據其驗證結果可以提供不同的服務(如:驗證合法后才轉到特定服務鏈接)。具體可參考https://blog.csdn.net/duanbokan/article/details/50847612
最小化環境需求:win7虛擬機 * 1(客戶端驗證,測試),ubuntu虛擬機 * 1(模擬Blot Server)
注:為避免報錯,建議在root賬戶下進行實驗。
3.1.1 在ubuntu 16.04上安裝apache2和openssl
apt-getinstallapache2 apt-getinstallopenssl
3.1.2 啟用Apache SSL模塊
a2enmodssl
3.1.3 啟用Apache mod_rewrite模塊
a2enmodrewrite
3.1.4 自簽名證書生成
證書使用openssl生成,具體生成過程請參考偽造HTTPS證書[3]和合天在線實現-HTTPS證書偽造[4]。最終本次實驗使用https雙向認證,即需要生成用于服務端和客戶端驗證的證書文件和對應的兩對公私鑰文件。
3.2 Apache下配置https雙向認證步驟
3.2.1證書準備(均在ubuntu環境下使用openssl產生)
以下為快速生成步驟及命令,詳細講解請參考[3],[4]。
(1) 服務端認證所需證書
生成2048位的RSA密鑰 .key 文件
openssl genrsa -out ciahive.com.key
生成證書簽名請求 .csr 文件
openssl req -new -key ciahive.com.key -out ciahive.com.csr
注:需要根據提示依次填入配置信息,Common Name項需要和域名項對應(即ciahive.com)。
生成自簽名證書 .crt 文件
openssl x509 -req -days 36500 -in ciahive.com.csr -signkey ciahive.com.key -out ciahive.com.crt
(2) 客戶端認證所需證書
步驟與(1)中步驟類似,以下為快捷命令:
openssl req -new -SHA256 -newkey rsa:2048 -nodes -keyout client.key -out client.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=11/OU=22/CN=client" openssl x509 -req -days 365 -in client.csr -signkey client.key -out client.crt openssl pkcs12 -export -cacerts -inkey client.key -in client.crt -out client.p12
(3) 最終備用證書列表如圖2:
圖 2
3.2.2配置HTTPS雙向認證
(1) 確認開啟Apache SSL模塊。
a2enmod ssl
(2) 編輯SSL配置文件
vim /etc/apache2/sites-enabled/default-ssl.conf
在打開的文件編輯頁面指定(服務器認證)的私鑰文件和簽名證書的路徑。
SSLEngine on
SSLCertificateFile /XX/XX/XX/ciahive.com.crt
SSLcertificateKeyFile
/xx/xx/xx/ciahive.com.key
開啟客戶端認證,并指定用于客戶端證書的路徑
SSLCACertificateFile /xx/xx/xx/client.crt
SSLVerifyClient require
SSLVerifyDepth 10
(3) 啟用Apache默認的SSL虛擬主機
a2ensite default-ssl
(4) 重啟Apache服務
service apache2 restart
(5) 客戶端配置
1)、修改客戶端的Hosts文件
由于實驗域名ciahive.com并未實際注冊,因此需要通過本地hosts文件(windows系統下的hosts文件路徑為:C:\Windows\System32\Drivers\etc\hosts)進行解析。在hosts文件中(修改需要管理員權限)加入Apache服務器的ip及對應的域名ciahive.com。如圖3.
圖 3
2)、客戶端安裝服務器的自簽名證書ciahive.com.crt為受信任的根證書頒發機構,安裝結果如圖4。
圖 4
3)、向客戶端添加特定證書client.p12文件,用于服務器驗證客戶端。安裝結果如圖5。
圖 5
3.2.3測試https雙向認證配置
通過訪問https://ciahive.com來測試https雙向認證配置是否成功。以下為簡易驗證方法。
(1) 通過未配置ciahive.com.crt證書的客戶端1訪問https://ciahive.com,應該是不安全連接被攔截。如圖6。
圖 6
(2) 若客戶端只安裝了證書ciahive.com.crt,缺少client.p12證書的客戶端訪問會直接連接失敗,結果如圖7。
圖 7
(3) 使用已完成兩個證書安裝的客戶端2訪問https://ciahive.com,會首先提示進行客戶端證書選擇,如圖 8。
圖 8
(4) 確認使用client.p12作為客戶端證書后,與https://ciahive.com建立安全鏈接。成功頁面如圖 9。
圖 9
(5) 訪問https://ciahive.com出現如圖 9的安全連接頁面后,表示https雙向認證配置成功。
3.3.1配置Apache啟用mod_rewrite
(1) 開啟Apache mod_rewrite模塊
a2enmod rewrite
(2) 編輯/etc/apache2/apache2.conf文件,開啟支持 .htaccess文件——用于編輯轉發規則。定位到如下位置:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
將AllowOverride None更改為AllowOverride All。
(3) 創建并編輯 .htaccess文件,文件保存路徑為:/var/www/html/。編寫測試規則。
1)、測試規則示例——將1.html重定向到2.html
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule 1.html 2.html
</IfModule>
2)、建立1.html空文件,在2.html里寫入內容:
<html>
<body>
Test is successful!
</body>
</html>
(4) 重啟apache服務,測試網頁https://ciahive.com/1.html,若返回頁面為“Test is successful!”則測試通過。
3.3.2編輯規則,實現流量分發功能
具體的配置規則可以按需編輯,關于 .htaccess 編寫相關詳細技巧請參考[5]和[6]。
注:本次實驗環境受限,僅僅使用兩臺虛擬主機進行實驗,特編寫以下規則對CIA Hive的轉發思想進行最簡單的模擬。
具體的.htaccess模擬轉發規則如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} ^/0.html
#訪問0.html轉換為強制https訪問,且需要對客戶端進行認證。
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
#由于以配置https雙認證,則只有被感染主機才擁有合法證書。
#認證通過后進行重定向到payload地址(可以本地或其他遠程主機),即類比CIA Hive中的Honey Server
RewriteRule 0.html https://ciahive.com/.payload/remotepayload/payload1.html [L]
</IfModule>
3.3.3實際測試
(1) 模擬的正常主機(無證書)
1)、訪問其他頁面(除ciahive.com/0.html外所有ciahive.com及各目錄文件)均正常。參照圖10。
圖 10
2)、訪問ciahive.com/0.html時被強制使用https訪問,由于未獲得合法證書將提示連接失敗。參照圖11。
圖 11
(2)、被感染主機(已被安裝ciahive.com.crt和client.p12兩個證書)
1)、訪問其他頁面同正常主機。
2)、訪問ciahive.com/0.html時被強制使用https訪問。將提示選擇客戶端證書確認(實際攻擊場景可以設計為默認,即不彈窗提示)后連接被重定向到https://ciahive.com/.payload/remotepayload/payload1.html頁面(模擬Honey Server)。參照圖12 。
圖 12
(1) 深入理解X.509證書鏈和HTTPS雙向認證原理。
(2) Apache及re_write模塊參數正確配置。
(3) 理解CIA Hive流量轉發過程,尤其是隱蔽服務器的功能。
(4) .htaccess中轉發規則的實現。
(1) 本次復現實驗對于理解CIA Hive框架有很大幫助時,同時在Apache+openssl環境搭建及其過程中遇到的各種問題,當問題逐一被解決就形成了對整個流程的清晰認識。
(2) 需要特別注意 X.509證書鏈及其基本原理。同時實驗中采用的HTTPS的雙向認證在公共站點基本不會開啟,因此攻擊者如果采用此類少數人關注的技術點實現攻擊目的是很難被發現的。
(3) 本次復現只在基礎學習理解上進行了最簡單的功能實現,在.htaccess文件的轉發規則的設計和整各實驗設計上都還有很大的提升空間。
感謝各位的閱讀,以上就是“怎么用Apache mod_rewrite模擬實現CIA Hive流量分發”的內容了,經過本文的學習后,相信大家對怎么用Apache mod_rewrite模擬實現CIA Hive流量分發這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。