安全,安全,安全!
对于区块链动辄几十万行的代码量,安全漏洞时不时就冒出来。敏锐的黑客们,虎视眈眈地盯着漏洞的闸门,一旦看见开闸,便以迅雷不及掩耳的速度展开偷袭。
对于用户来说,最大的风险莫过于钱包被盗,用户如何才能安全地享受加密货币带来的便利?国外专栏作家samparsky在朋友以太坊钱包被盗,损失了0.012236个以太币(价值约人民币22元,对,你没看错,就是22元)后,痛定思痛,为我们带来了这篇诚意满满的以太坊钱包安全教程。一秒都别等,赶紧用起来。
作者 | samparsky
译者 | Guoxi
从某种意义上来说,保护计算机系统是一场智力的较量:攻击者识图找到并利用漏洞,而系统设计者会想方设法关闭漏洞。— Gosser 前车之鉴
近期我一个朋友的以太坊钱包节点遭到了黑客入侵,黑客通过一个开放的RPC (Remote Procedure Call,远程过程调用)端口命令转走了他存储在以太坊钱包中的以太币,下图是在区块链上留下的记录。
朋友账户的流水
下图显示出了黑客账户的近几笔交易流水。
黑客账户的流水
与比特币客户端不同,默认情况下,大多数以太坊客户端的远程过程调用并不受密码保护。
尽管如此,仍有很多种方法可以用来保护以太坊钱包节点的远程过程调用。其中一些方法包括:
以太坊有两个主要的钱包客户端Parity和Geth。两者功能类似,安装任何一个钱包客户端都可以让你加入到以太坊网络中。
你可以按照以下任一篇文章进行安装:
永远不要这样做!!!
在钱包节点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创建以太坊账户时选择一个安全性高的随机密码,不知道怎样生成?可以参考以下网站:
你需要安装并配置Nginx服务器,具体方法请参考Nginx教程。
在这一步中,你需要给运行该钱包节点的用户创建一个密码。
该密码和关联的用户名将被存储在你指定的文件中,其中密码将被加密,存储的文件名你可以任意指定。
$ sudo htpasswd -c /etc/nginx/.htpasswd nginx
你可以检查新创建文件的内容以查看用户名和经哈希计算加密的密码。
$ cat /etc/nginx/.htpasswd
现在我们已经创建了HTTP基本认证证书,下一步我们要更新Nginx配置以查看它。
sudo nano /etc/nginx/sites-available/default
更新文件,在其中加入这些内容:
要应用更改,需要重新加载Nginx。
$ sudo service nginx reload
现在你可以通过这个地址进行远程过程调用:
http://<USERNAME>:<PASSWORD>@mydomain.com
为了增强安全性,你可以从letsencrypt网站上安装免费的SSL(Secure Sockets Layer,安全套接层)证书,具体方法请参考SSL教程。
UFW也叫Uncomplicated Firewall,是iptables的接口,旨在简化配置防火墙的过程。
$ 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 from 192.148.16.1 to any port 8545
如果你使用了与8545不同的远程过程调用端口,那么在命令中也要相应地替换掉。
启用UFW命令:
$ sudo ufw enable
你可以根据需要启用其他端口进行连接。
使用此命令可以允许HTTP连接,HTTP连接是未加密的Web服务器使用的连接。
$ sudo ufw allow http
你的防火墙现在应该设置为允许连接到以太坊远程过程调用端口和网络端口。一定要确保你的服务器允许了任何必要的连接,同时限制任何不必要的连接,这样的你服务器才能正常地、安全地工作。
加密货币价格的疯涨自然也会也引起了黑客的注意,在你享受去中心化带来的便利时,也要千万注意安全性问题啊,因为去中心化这把双刃剑使得你钱包被盗后完全没有任何商量的余地,你的钱就成了黑客持有的资产,没有一个权威机构来帮你挽回损失。
动起手来,按照教程从源头做起,让你的加密货币无懈可击,OK?