- 我們想架設一個 SSH 密罐,監控誰會 ssh 攻擊我們的系統,但觀察網上大多使用網頁形式呈現密罐資訊,其未有即時性通知功能,因此本專案選用 Telegram bot 作為監控平台,以便我們能夠即時收到攻擊通知,並即時監控攻擊者在蜜罐中的攻擊手段和方法。
- 除了即時性外,還有幾點好處:
- 一、 telegram 可以跨多平台 / 裝置運行。
- 二、下達特定指令,telegram bot 回傳當前分析蜜罐資訊,並以圖表或文字呈現。
- 三、輕鬆實現保密性,可以僅允許授權的帳號使用
- 硬體
- 電腦(筆電) * 1
- OS 安裝 ubuntu 22.04
- 行動裝置(手機) * 1
- 下載 telegram app,並註冊帳號
- 電腦(筆電) * 1
- Cowrie
- Cowrie is a medium to high interaction SSH and Telnet honeypot designed to log brute force attacks and the shell interaction performed by the attacker.
- Github 專案 : https://github.com/cowrie/cowrie
- Fail2Ban
- Fail2Ban scans log files and bans IP addresses conducting too many failed login attempts.
- Github 專案 : https://github.com/fail2ban/fail2ban
- mySQL
- An open-source relational database management system.
- Telegram
- A cross-platform instant messaging software, and its client is free and open-source software.
-
- 呈現被 blocked IP address
- 當攻擊者嘗試 ssh 登入三次失敗後,會被 Fail2ban 封鎖一段時間,並且 Fail2Ban 會將 ban IP 傳送至 telegram bot 輸出通知我們。
- 防範暴力破解,避免產生過多 telegram 通知訊息
- 攻擊通知
- 攻擊者嘗試 ssh 登入,會進入密罐,所有攻擊者輸入的 password 會被即時轉傳到 telegram bot (對應是哪一個攻擊者 ip 輸入的用戶名/密碼)
- 即時監控
- 當今天攻擊者成功 ssh 登入,會進入密罐事先設定好的假作業系統環境,攻擊者在裡頭輸入的指令與 wget 下載的檔案,都會被即時紀錄並轉傳到 telegram bot
- 訊息會對應是哪一個攻擊者 ip 輸入的指令
- 顯示分析報告
- 透過向 telegram bot 發送命令,統計 ssh 登入蜜罐所用的 username / password 或 常見的攻擊者 IP,並繪製成圖表,視覺化呈現在 telegram 上,作為我們參考的依據。
- 呈現被 blocked IP address
systemctl restart ssh
systemctl status ssh
- 安裝需要的軟體、依賴項
sudo apt-get install git python3-virtualenv libssl-dev libffi-dev build-essential libpython3-dev python3-minimal authbind virtualenv
- 建立使用者帳號
adduser cowrie
- 切換使用者
sudo su cowrie
- 下載 cowrie
git clone http://github.com/cowrie/cowrie
- 進入 cowrie 資料夾,建立 python 的虛擬環境
cd cowrie/
virtualenv --python=python3 cowrie-env
- 啟動虛擬環境
source cowrie-env/bin/activate
- 重新啟動
/home/cowrie/cowrie/bin/cowrie restart
- 在這裡使用 python 虛擬環境,主要是為了將 OS 本機 python 環境與我們將為 cowrie 安裝的依賴項隔離開來。
- 升級 pip
pip install --upgrade pip
- 安裝 Cowrie 所需的依賴項
pip install --upgrade -r requirements.txt
- 新增一個預設範例設定檔,方便再裏頭修改設定
預設讀取的設定檔是
cowrie.cfg.dist
- 直接複製一份
cp etc/cowrie.cfg.dist etc/cowrie.cfg
之後將讀取的設定檔是
cowrie.cfg
- 直接複製一份
- 將從 22 port 進來的連線分別導向 2222 port
exit
- 先回到主機環境
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
- 查看目前 iptables nat 表裡面的 PREROUTING chain
iptables -t nat -n -L PREROUTING
- 永久保存 iptables
sudo apt-get install iptables-persistent
- 以下操作都是使用 cowrie 身份在該啟用的虛擬環境中執行
- 設定 假的 SSH、telnet 可使用的帳號密碼
sudo apt install fail2ban
git clone https://github.com/CMSecurity/cowrie-fail2ban.git
- 將 cowrie-fail2ban 專案中將
filter.d/cowrie.conf
複製到/etc/fail2ban/filter.d/cowrie.conf
- 將 cowrie-fail2ban 專案中將
jail.d/cowrie.conf
複製到/etc/fail2ban/jail.d/cowrie.conf
- 記得將兩服務重啟
sudo service fail2ban restart
/home/cowrie/cowrie/bin/cowrie restart
- 自動啟用 fail2ban
sudo systemctl enable fail2ban
- 找到 @BotFather
- 輸入
/newbot
建立一個機器人 - 輸入機器人名稱、輸入使用者名稱(以 bot 結尾)
- 我們的機器人名稱 :
Cowrie-log-analyzer-bot
- 我們的使用者名稱 :
CowrieHoneypot_Bot
- 我們的機器人名稱 :
- 得到 Telegram bot 的連結、token
token 記得妥善保管,以免其他人透過這組 token 操控你的機器人
git clone https://github.com/deividgdt/fail2ban_telegram_notifications
- 加入 action 設定在
/etc/fail2ban/jail.d/cowrie.conf
action=iptables[name=COWRIE,port=2222,protocol=tcp]
telegram
- Download the file
telegram.conf
and move it to/etc/fail2ban/action.d/
- Download the file
send_telegram_notif.sh
move it to/etc/fail2ban/scripts/
- Modify the file
/etc/fail2ban/scripts/send_telegram_notif.sh
and add your Token and your Chat ID:
telegramBotToken=YOUR_BOT_TOKEN
telegramChatID=YOUR_CHAT_ID
- 取得 ChatID 方法
- 增加執行權限:
chmod +x /etc/fail2ban/scripts/send_telegram_notif.sh
- 重啟服務:
systemctl restart fail2ban
- 確認切換
cowrie
使用者,並且 python 虛擬環境啟動後 - 編輯
etc/cowrie.cfg
,找到[output_telegram]
,注意bot_token
跟chat_id
不要改名稱,後面接的值改成自己 Bot 的值
[output_telegram]
enabled = true
bot_token = <填入自己 bot token>
chat_id = <填入自己 bot chatID>
cd /home/cowrie
git clone https://github.com/wyping314/Honeypot-Monitoring-Bot.git
- 將我們專案的
other/
資料夾下的 telegram.py 複製到src/cowrie/output/telegram.py
sudo cp /home/cowrie/cowrie/Honeypot-Monitoring-Bot/other/telegram.py /home/cowrie/cowrie/src/cowrie/output/telegram.py
- 安裝 mysql
$ sudo apt-get install mysql-server
$ service mysql status
$ sudo netstat -tap | grep mysql
$ sudo mysqladmin -u root password 'lsa123'
$ sudo mysql -u root -p 'lsa123'
- 在
mysql>
指令中輸入以下指令
$ CREATE DATABASE cowrie;
$ CREATE USER 'cowrie'@'localhost' IDENTIFIED BY 'cowrie';
$ GRANT ALL PRIVILEGES ON cowrie.* TO 'cowrie'@'localhost';
$ exit
- cowrie 虛擬環境需安裝 mysql-connector-python
$ sudo su - cowrie
$ source cowrie/cowrie-env/bin/activate
$ pip3 install mysql-connector-python
- 在 python 虛擬環境,載入 docs/sql/ 目錄中提供的資料庫模板
$ cd ~/cowrie/docs/sql/
$ mysql -u cowrie -p
$ USE cowrie;
$ source mysql.sql;
$ exit
$ cd ~/cowrie/etc
$ vim cowrie.cfg
- 找到
[output_mysql]
關鍵字
[output_mysql]
enabled = true
host = localhost
database = cowrie
username = cowrie
password = PASSWORD HERE (cowrie)
port = 3306
debug = false
- 重啟 cowrie
/home/cowrie/cowrie/bin/cowrie start
- 檢查
~/cowrie/var/log/cowrie/cowrie.log
的末尾以確保 MySQL 輸出引擎已成功加載
- 此專案的架構
Honeypot_Monitoring_Bot/
|
|________ requirements.txt
|________ telegram_notify.py
|________ text_output.py
|________ graph_output.py
|________ line_chart_output.py
|
|________ img/
| |____ (存放輸出的圖片)
|
|________ other/
| |____ telegram.py
|
|________ README.md
- 安裝此專案需要的依賴項
pip install -r requirements.txt
- 檢查 mysql 連線設定
- 修改
text_output.py
、graph_output.py
- 修改
- 檢查 telegram bot 連線設定
- 修改
telegram_notify.py
token 名稱
- 修改
- 啟動
telegram_notify.py
python3 telegram_notify.py
- 當完成上述 impletation process 後,之後只要確認以下事項:
- Cowrie Honeypot 是否啟動
- 啟動服務:
/home/cowrie/cowrie/bin/cowrie start
- 確認狀態:
/home/cowrie/cowrie/bin/cowrie status
- 啟動服務:
- Fail2Ban 是否啟動
- 啟動服務:
service fail2ban start
- 確認狀態:
service fail2ban status
- 啟動服務:
- MySQL 是否啟動
- 啟動服務:
service mysql start
- 確認狀態:
service mysql status
- 啟動服務:
- 確認
telegram_notify.py
是否運行
- Cowrie Honeypot 是否啟動
- 如果上述皆有運行,就可以測試自己的 telegram bot
- 接收 fail2ban 所 ban / uban ip address
- 即時地接收成功登入的攻擊者,所下的所有指令(需對應攻擊者 ip)
- 使用者傳送
ip_analysis
,bot 回傳前十大頻繁 ssh 登入該蜜罐的 ip address 長條圖 - 使用者傳送
/username_analysis
,bot 會回傳該蜜罐被 ssh 登入時,前十大頻繁輸入的 username 長條圖 - 使用者傳送
/password_analysis
,bot 會回傳該蜜罐被 ssh 登入時,前十大頻繁輸入的 password 長條圖 - 使用者傳送
/user_passwd_analysis
, bot 回傳前十大頻繁 ssh 登入該蜜罐的 username / passeord 組合長條圖 - 使用者傳送
send_result
,bot 回傳一段文字的統計數據 - 使用者傳送
conn_line_chart
,近期(十天)連線次數折線圖
- 刪除與連線 IP 相關的密鑰
ssh-keygen -R <要連線的 ip>
- Ex.
ssh-keygen -R 10.107.38.92
- 建立 MySQL,python 圖表視覺化輸出 :
王念祖
- telegram bot 架設、撰寫 python 程式與 telegram 互動 :
王詠平
- 其他部份 :
王念祖
、王詠平
- 建立與設定 Cowrie、Fail2Ban
- 撰寫文件、製作簡報
- 題材發想 :
陳柏瑋
(@PengLaiRenOu) - 電腦提供 :
吳梓睿
(@wzray07)