千万别惹牛人!小哥被盗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 { 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?

原文发布于微信公众号 - 区块链大本营(blockchain_camp)

原文发表时间:2018-06-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏网站漏洞修补

网站漏洞修补针对区块链网站安全分析

目前移动互联网中,区块链的网站越来越多,在区块链安全上,很多都存在着网站漏洞,区块链的充值以及提现,会员账号的存储性XSS窃取漏洞,账号安全,等等关于这些区块链...

1064
来自专栏FreeBuf

XMR恶意挖矿案例简析

数字货币因其技术去中性化和经济价值等属性,逐渐成为大众关注的焦点,同时通过恶意挖矿获取数字货币是黑灰色产业获取收益的重要途径。本文简析通过蜜罐获取的XMR恶意挖...

4792
来自专栏丑胖侠

以太坊客户端Ethereum Wallet与Geth区别简介

最近有不少朋友在搭建交易平台,在咨询和技术交流的过程中发现很多朋友不太清楚Ethereum Wallet和Geth区别。甚至有朋友使用Geth的API接口来调用...

5475
来自专栏区块链领域

以太坊潜伏多年令全球黑客为之疯狂的“偷渡”漏洞引发偷币狂潮

世界上有一群人,互联网对于他们来说就是提款机。 是的,过去是,现在更是,因为电子货币的出现,他们提款的速度变得更疯狂。 在2017年,我们的蜜罐监测到一起针对以...

3709
来自专栏圆方圆学院精选

【刘杰良】使用RPC接口新建EOS账户 - 实战

最近在研究 EOS 的 RPC API,但是由于官方API文档的不够详尽,新建账号(new account)这一个操作就折腾了一个多星期。皇天不负有心人,终于...

2505
来自专栏极客编程

如何用Python和Flask框架开发以太坊智能合约

将数据存储在数据库中是任何软件应用程序不可或缺的一部分。无论如何控制该数据库都有一个该数据的主控。区块链技术将数据存储到区块链网络内的区块中。因此,只要某个节点...

1633
来自专栏区块链源码分析

比特币源码分析之一:总览

本文主要讲解比特币源码,下一篇文章会介绍比特币交易是如何通过非对称加密机制来完成安全交易的,欢迎大家互动留下问题和希望讲解的题目。

91917
来自专栏极客编程

开发基于以太坊智能合约的DApp

最近要找个H5的前端写个简单的DApp,聊过几个H5的工程师,都被跟以太坊交互的部分吓住了。虽然网上有N多的教程,但是对于H5工程师来说,还是有些困难。分析其原...

1952
来自专栏申龙斌的程序人生

同时给200多人发送比特币,程序员是这样做到的

在币圈中,使用自己的钱包给他人发币时,就跟平常的微信、支付宝扫码付款类似,输入BTC地址和金额,再输入支付密码,不管对方是否在地球的另一端,不需要任何银行的中介...

1692
来自专栏区块链大本营

动手编写一个以太坊智能合约

31212

扫码关注云+社区

领取腾讯云代金券