# Honeypot部署 ssh篇 此實驗以部署偽裝網路服務ssh,誘捕並記錄駭客對於ssh進行攻擊的過程。透過開源專案[cowrie](https://cowrie.readthedocs.io/en/latest/index.html)進行部署,偽裝與紀錄被攻擊的過程。 ## 部署Cowrie 部署過程可參考官方說明手冊,這邊有做更詳細的說明,可使用的系統有Ubuntu, Raspberry Pi OS, Cent OS,這裡主要使用Raspberry Pi OS。 1. 安裝套件 `sudo apt install git python3 python3-dev libssl-dev libffi-dev build-essential libpython3-dev python3-minimal authbind virtualenv` 2. 更改主機端ssh服務的預設port 22,此port會被偽裝的服務會佔用,必須更改為22或2222以外的port。 `sudo vi /etc/ssh/sshd_config` 3. 更改防火牆外部連線至內部的相對應port 將外部22對內連接port為2222。 `sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222` 將外部23對內連接port為2223。 `sudo iptables -t nat -A PREROUTING -p tcp --dport 23 -j REDIRECT --to-port 2223` 4. 新增使用者,以管理cowrie運行,這裡以新增使用者cowrie為例。 `sudo adduser --disabled-password cowrie` 5. 登入已新增的使用者 `sudo su cowrie` 6. 從git下載cowrie專案 `git clone http://github.com/cowrie/cowrie ~/` 7. 進入cowrie專案中新增python3虛擬環境 `virtualenv --python=python3 ~/cowrie/cowrie-env` 8. 啟用python3虛擬環境 `source ~/cowrie/cowrie-env/bin/activate` 9. 安裝必要python套件 `pip install -r requirements.txt` 10. 複製設定檔 `cp ~/cowrie/etc/cowrie.cfg.dist ~/cowrie/etc/cowrie.cfg` 11. 複製使用者登入資料庫 `cp ~/cowrie/etc/userdb.example ~/cowrie/etc/userdb.txt` 12. 預防出現預期外的權限錯誤,登出帳號cowrie,並登入可使用sudo權限的帳號,給予cowrie使用者cowrie家目錄底下所有檔案的權限 `sudo chown -R cowrie /home/cowrie/` ## 設定Cowrie 1. 設定檔路徑 cowrie/etc/cowrie.cfg 2. 相關參數 a. hostname: 更改被登入後被查詢到的機器名稱。 b. log_path: 儲存log的位置,建議儲存在執行cowrie的使用者有權限的目錄下。 c. download_path: 透過scp所複製到的檔案,這裡預設為變數,但實際路徑無法確定,建議更改到熟悉的路徑。 d. [output_jsonlog]: 將log轉換成json格式,在紀錄過程中將格式正規劃,以便事後的分析。 3. 其餘設定基本上可維持預設值,若有其餘用途可再另行設定。 ## 專案架構 * etc/cowrie.cfg - Cowrie's configuration file. Default values can be found in etc/cowrie.cfg.dist. * share/cowrie/fs.pickle - fake filesystem * etc/userdb.txt - credentials to access the honeypot * honeyfs/ - file contents for the fake filesystem - feel free to copy a real system here or use bin/fsctl * honeyfs/etc/issue.net - pre-login banner * honeyfs/etc/motd - post-login banner * var/log/cowrie/cowrie.json - transaction output in JSON format * var/log/cowrie/cowrie.log - log/debug output * var/lib/cowrie/tty/ - session logs, replayable with the bin/playlog utility. * var/lib/cowrie/downloads/ - files transferred from the attacker to the honeypot are stored here * share/cowrie/txtcmds/ - file contents for simple fake commands * bin/createfs - used to create the fake filesystem * bin/playlog - utility to replay session logs ## 更改登入使用者帳號密碼 1. 設定檔路徑 cowrie/etc/userdb.txt 2. 設定格式: `"使用者名稱":x:"使用者密碼"` 3. 設定檔中有預設的帳號密碼,若有其他需求可自行調整。 ## 啟用cowrie 1. cowrie必須以非root非sudo權限的使用者運行,因此登入使用者cowrie並啟用cowrie 2. 所需的python套件已安裝在cowrie-env資料夾中的虛擬環境中,必須先啟用python虛擬環境,才能運行cowrie 3. 啟用指令: `cowrie@raspberry (cowrie-env)$ ~/cowrie/bin/cowrie start` Ps: cowrie@raspberry為使用者名稱@主機hostname,(cowrie-env)為python虛擬環境名稱 4. 確認是否成功執行 * 查看日誌是否正常寫檔,若檔案不存在即為正常運行,若日誌時間與運行時間無法對應,也可判定執行未成功。 `tail -f ~/cowrie/var/log/cowrie.log` * 使用ps指令查看cowrie程序是否運作中,透過grep進行過濾,若列表中有兩條關於cowrie相關的程序,可判定為運作中(其中一條為查詢中的程序) `ps -aux |grep cowrie` * 查看防火牆的port是否正在監聽中(使用這指令時,務必切換回可執行sudo權限的帳號,才可查看防火牆中所有port資訊) `sudo netstat -antpl |grep cowrie` * 透過其他部電腦,對已部署cowrie的電腦進行ssh連線,若可以正常連線,為正常完成部署 5. 常見問題: * 若有任何運行失敗,或其他異常狀況,第一時間請查閱運行log檔,log會紀錄具體服務停止問題 * 沒有權限運行: 請將整個cowrie資料夾給予運行使用者權限 * twsited未尋找到: 請確認是否有正常運行Python虛擬環境 * port被佔用中: 請確認iptable指令是否在具有sudo權限的使用者下進行設定 * cowrie已正在運行,無法啟用: 透過kill指令強制停止服務 ## 使用supervisor自動啟用 supervisor套件可動啟用,監視,紀錄運行過程,若服務出現意外狀況而終止,也可查看紀錄檔。 1. 安裝supervisor套件 `sudo apt install supervisor` 2. 設定檔路徑 `/etc/supervisor.conf.d/cowrie.conf` 3. 檔定檔: [program:cowrie] command=/home/cowrie/cowrie/bin/cowrie start directory=/home/cowrie/cowrie/ autostart=true autorestart=true redirect_stderr=true user=cowrie 4. 更新supervisor列表 `sudo supervisorctl update` 5. 查看運行狀況 `sudo supervisorctl status all` 6. 相關參數: start start all restart restart all reload status all stop stop all 7. 使用supervisor啟用問題: 不知為何使用supervisor自動啟用,在Cowire服務安裝在cowrie所屬的home資料夾中,查看supervisor狀態時,會顯示在starting,在事實上cowrie確實有在運作,且自行登入cowrie服務也無異常狀態,但如果將安裝路徑更改為opt資料夾下,並給予cowrie權限,即不會出現該問題。 ## 測試 1. 透過其他台主機進行ssh登入 ssh指令:`ssh username@ip` 以使用者為root,且ip為192.168.0.224為例 Linux: `ssh root@192.168.0.224` Mac: `ssh root@192.168.0.224` Windows: a. 可直接使用Windows的命令提示字元直接連線 b. 透過安裝ssh工具,例如Putty進行連線 2. 登入後可嘗試下達指令,查看服務給予登入者的回饋 ## 模擬ssh攻擊 等待更新 ## 日誌檢視工具 在github上目前有cowrie-logviewer,此工具可檢視日誌中的內容,並整理成表格,也有一些簡略的圖表,可看查看日誌中的資訊。 1. 安裝 a. 從github上下載 `git clone https://github.com/mindphluxnet/cowrie-logviewer.git` b. 新增python虛擬環境 `python -m virtualenv --python=python3 cowrie-logviewer/env` c. 啟用虛擬環境 `source cowrie-logviewer/env/bin/activate` d. 安裝需要套件 `pip install -r cowrie-logviewer/requirements.txt` e. 安裝GeoIP2 在github上逐一下載檔案,並打開壓縮檔,將壓縮檔中的mmdb檔複製到解壓縮路徑 網址:https://github.com/pwnlandia/geolite2 解壓縮路徑: `cowrie-logviewer/maxmind/` f. 修改執行檔 `vim cowrie-logviewer.py` 修改行數: 第21行:log_paht的路徑,參數須為路徑,非日誌檔 第22行:dl_path的路徑,參數為scp下載檔案的路徑 第24行:運行網站時所佔用的port,此預設為5000,若有其他規劃,可更改此參數 2. 運行 a. python虛擬環境必須啟用 b. 下達命令 `./cowrie-logviewer.py` 3. 瀏覽: 打開瀏覽器,輸入部署服務的主機位置,並附加port及可檢視 4. 注意事項: 此工具在登入網頁時,沒有任何認證方法與保護措施,只適合檢視,不適合長時間部署,且此網站本身也有需多漏洞,只建議作為實驗用途。 5. 預覽畫面 a. 主畫面![](https://i.imgur.com/KKEuMhQ.png) b. 嘗試過的ip位置![](https://i.imgur.com/l8LsIcq.png) c. 嘗試登入過的帳號密碼![](https://i.imgur.com/IIYhwFJ.png)