27

牛人被盗22元后,整出了这篇以太坊钱包安全攻略,黑客看完得哭了...

 5 years ago
source link: https://www.tuoluocaijing.cn/article/detail-2097.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

安全,安全,安全!

对于区块链动辄几十万行的代码量,安全漏洞时不时就冒出来。敏锐的黑客们,虎视眈眈地盯着漏洞的闸门,一旦看见开闸,便以迅雷不及掩耳的速度展开偷袭。

对于用户来说,最大的风险莫过于钱包被盗,用户如何才能安全地享受加密货币带来的便利?国外专栏作家samparsky在朋友钱包被盗,损失了0.012236个以太币(价值约人民币22元,对,你没看错,就是22元)后,痛定思痛,为我们带来了这篇诚意满满的以太坊钱包安全教程。一秒都别等,赶紧用起来。

作者 | samparsky

译者 | Guoxi

从某种意义上来说,保护计算机系统是一场智力的较量:攻击者识图找到并利用漏洞,而系统设计者会想方设法关闭漏洞。— Gosser

前车之鉴

近期我一个朋友的以太坊钱包节点遭到了黑客入侵,黑客通过一个开放的RPC (Remote Procedure Call,远程过程调用)端口命令转走了他存储在以太坊钱包中的以太币,下图是在区块链上留下的记录。

FZ3MryN.jpg!web

朋友账户的流水

下图显示出了黑客账户的近几笔交易流水。

EVNveuI.jpg!web

黑客账户的流水

与客户端不同,默认情况下,大多数以太坊客户端的远程过程调用并不受密码保护。  

尽管如此,仍有很多种方法可以用来保护以太坊钱包节点的远程过程调用。其中一些方法包括:  

  1. 为账户选择一个安全性高的强密码。

  2. 使用Nginx服务器作为反向代理和TP基本认证机制。

  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 {

listen 80;
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 from 192.148.16.1 to any port 8545

如果你使用了与8545不同的远程过程调用端口,那么在命令中也要相应地替换掉。

启用UFW

启用UFW命令:

$ sudo ufw enable

允许其他连接

你可以根据需要启用其他端口进行连接。

HTTP-80端口

使用此命令可以允许HTTP连接,HTTP连接是未加密的Web服务器使用的连接。

$ sudo ufw allow http

你的防火墙现在应该设置为允许连接到以太坊远程过程调用端口和网络端口。一定要确保你的服务器允许了任何必要的连接,同时限制任何不必要的连接,这样的你服务器才能正常地、安全地工作。

加密货币价格的疯涨自然也会也引起了黑客的注意,在你享受去中心化带来的便利时,也要千万注意安全性问题啊,因为去中心化这把双刃剑使得你钱包被盗后完全没有任何商量的余地,你的钱就成了黑客持有的资产,没有一个权威机构来帮你挽回损失。

动起手来,按照教程从源头做起,让你的加密货币无懈可击,OK?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK