牛人被盜22元后,整出了這篇以太坊錢包安全攻略,駭客看完得哭了...

買賣虛擬貨幣

安全,安全,安全!

對於區塊鏈動輒幾十萬行的程式碼量,安全漏洞時不時就冒出來。敏銳的駭客們,虎視眈眈地盯著漏洞的閘門,一旦看見開閘,便以迅雷不及掩耳的速度展開偷襲。

對於使用者來說,最大的風險莫過於錢包被盜,使用者如何才能安全地享受加密貨幣帶來的便利?國外專欄作家samparsky在朋友以太坊錢包被盜,損失了0.012236個以太幣(價值約人民幣22元,對,你沒看錯,就是22元)後,痛定思痛,為我們帶來了這篇誠意滿滿的以太坊錢包安全教程。一秒都別等,趕緊用起來。

作者 | samparsky

譯者 | Guoxi

從某種意義上來說,保護計算機系統是一場智力的較量:攻擊者識圖找到並利用漏洞,而系統設計者會想方設法關閉漏洞。— Gosser

前車之鑑

近期我一個朋友的以太坊錢包節點遭到了駭客入侵,駭客透過一個開放的RPC (Remote Procedure Call,遠端過程呼叫)埠命令轉走了他儲存在以太坊錢包中的以太幣,下圖是在區塊鏈上留下的記錄。

朋友賬戶的流水

下圖顯示出了駭客賬戶的近幾筆交易流水。


駭客賬戶的流水

與比特幣客戶端不同,預設情況下,大多數以太坊客戶端的遠端過程呼叫並不受密碼保護。

儘管如此,仍有很多種方法可以用來保護以太坊錢包節點的遠端過程呼叫。其中一些方法包括:

  1. 為賬戶選擇一個安全性高的強密碼。

  2. 使用Nginx伺服器作為反向代理和HTTP基本認證機制。

  3. 使用UFW設定防火牆。

安裝以太坊錢包客戶端

以太坊有兩個主要的錢包客戶端Parity和Geth。兩者功能類似,安裝任何一個錢包客戶端都可以讓你加入到以太坊網路中。

你可以按照以下任一篇文章進行安裝:

  • 安裝Geth

    (https://github.com/ethereum/go-ethereum/wiki/Installing-Geth)

  • 設定奇偶校驗

    (https://wiki.parity.io/Setup)

配置你的以太坊節點

永遠不要這樣做!!!

在錢包節點Geth上啟用遠端過程呼叫訪問時,千萬不要允許帶有解鎖賬戶功能的遠端過程呼叫的外部訪問。例如:

$ geth — rpc — rpcaddr 0.0.0.0 — rpcport 8545 — rpcapi “db, eth, net, web3, personal” — ipcapi “admin,eth,debug,personal,web3” — unlock <addrs>

左滑可檢視未顯示程式碼(下同)

透過以上程式碼,原則上你允許了自己以太坊賬戶的外部訪問,此時攻擊者可以輕鬆地將你儲存在錢包中的以太坊轉出,因為你的帳戶已經被解鎖。

不只是我朋友,好多人以太坊錢包被盜都是由於這個漏洞。

後事之師:如何保護你的以太坊錢包

 1.為賬戶選擇一個安全性高的隨機密碼

在使用Parity或Geth建立以太坊賬戶時選擇一個安全性高的隨機密碼,不知道怎樣生成?可以參考以下網站:

  • https://passwordsgenerator.net/

  • https://lastpass.com/generatepassword.php

  • https://www.random.org/passwords/

2.使用Nginx反向代理伺服器和HTTP基本認證機制

安裝Nginx

你需要安裝並配置Nginx伺服器,具體方法請參考Nginx教程

設定HTTP基本認證證書

在這一步中,你需要給執行該錢包節點的使用者建立一個密碼。

該密碼和關聯的使用者名稱將被儲存在你指定的檔案中,其中密碼將被加密,儲存的檔名你可以任意指定。

$ sudo htpasswd -c /etc/nginx/.htpasswd nginx

你可以檢查新建立檔案的內容以檢視使用者名稱和經雜湊計算加密的密碼。

$ cat /etc/nginx/.htpasswd

更新Nginx配置

現在我們已經建立了HTTP基本認證證書,下一步我們要更新Nginx配置以檢視它。

sudo nano /etc/nginx/sites-available/default

更新檔案,在其中加入這些內容:

server {

listen80;
listen [::]:80;

# ADDED THESE TWO LINES FOR AUTHENTICATION
auth_basic “Protected Ethereum client”;
auth_basic_user_file /path/to/passwords; 
server_name example.com;
location / {
proxy_pass http://localhost:8545/;
proxy_set_header Host $host;

 }
}

測試

要應用更改,需要重新載入Nginx。

$ sudo service nginx reload

現在你可以透過這個地址進行遠端過程呼叫:

http://<USERNAME>:<PASSWORD>@mydomain.com

改進

為了增強安全性,你可以從letsencrypt網站上安裝免費的SSL(Secure Sockets Layer,安全套接層)證書,具體方法請參考SSL教程

3.使用UFW設定防火牆

UFW也叫Uncomplicated Firewall,是iptables的介面,旨在簡化配置防火牆的過程。

安裝UFW

$ sudo apt-get install ufw

設定預設策略

$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing

允許特定的以太坊網路埠

我們需要啟用特定埠,連線到以太坊網路中,以便我們的錢包節點能夠與以太坊區塊鏈進行通訊和同步。

以太坊網路使用的埠為30303。

$ sudo ufw allow 30303

啟用遠端過程呼叫埠

為了安全性,我們僅允許從我們信任的節點連線到我們的以太坊客戶端,以太坊的預設遠端過程呼叫埠是8545。

$ sudo ufw allow from <IP addr> to any port 8545

舉個例子,如果我們信任的外部節點伺服器的IP地址是192.168.16.1,那麼命令應該是這樣:

$ sudo ufw allow from192.148.16.1 to any port 8545

如果你使用了與8545不同的遠端過程呼叫埠,那麼在命令中也要相應地替換掉。

啟用UFW

啟用UFW命令:

$ sudo ufw enable

允許其他連線

你可以根據需要啟用其他埠進行連線。

HTTP-80埠

使用此命令可以允許HTTP連線,HTTP連線是未加密的Web伺服器使用的連線。

$ sudo ufw allow http

你的防火牆現在應該設定為允許連線到以太坊遠端過程呼叫埠和網路埠。一定要確保你的伺服器允許了任何必要的連線,同時限制任何不必要的連線,這樣的你伺服器才能正常地、安全地工作。

加密貨幣價格的瘋漲自然也會也引起了駭客的注意,在你享受去中心化帶來的便利時,也要千萬注意安全性問題啊,因為去中心化這把雙刃劍使得你錢包被盜後完全沒有任何商量的餘地,你的錢就成了駭客持有的資產,沒有一個權威機構來幫你挽回損失。

動起手來,按照教程從源頭做起,讓你的加密貨幣無懈可擊,OK?

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;