前言
近期,本人的博客网站被黑客盯上了,网站所有数据全部被加密,并扬言要我支付比特币。鄙人的博客网站,仅作个人总结分享之用,没有知名度,也没有任何商业用途,被黑客关注到,略感惊讶。仔细思考一下,大型网站安全等级较高,攻击成功率较低,黑客同学只能看看我们这些小站了。
本文来源于我的博客网站:http://51think.net
情景再现
9月9日,阳光清晨,访问自己的博客网站www.51think.net时发现打不开。当时怀疑几点:
1、域名解析是不是出问题了,毕竟是没有备案的网站。经查,域名解析正常。
2、购买的VPS是不是过期了。经查,没有过期,且能ping通,说明没有被墙。
3、tomcat服务是不是挂了。经查,tomcat仍然运行,但是报了错误。
重点在于tomcat日志报错,the table 't_contents' does not exist。难道mysql服务被关了?先重启一把service mysqld restart,发现错误依旧。这时,仿佛有一种不祥的预感,不会数据表被删了吧?!使用navicat赶紧查看一下,发现表都还在,不过不再是当年的表了。如下图:
什么情况,表的数量增加了一倍,且表名都带有奇怪的后缀。以t_contents为例,变成了两张表,t_contents_encrypt和t_contents_warning。打开t_contents_encrypt一看,世界观崩塌,所有的字段值全部变成了二进制的blob:
意味着本博客网站的数据全部被篡改了,而且都是加密数据。打开t_contents_warning表,里面只有一行数据:
message字段里的内容如下:
Your `t_contents` table has been encrypted. For decription you need to pay 0.060000 bitcoin to the address 1GAkBavcFKkRbc4tBHD6LwQiTfNrJatxnZ
After payment you should go to the http://bp7hhvchre5ifqd6.onion/order/1GAkBavcFKkRbc4tBHD6LwQiTfNrJatxnZ using tor client and get your unique secret key.
After receiving the key, you must execute mysql request: UPDATE t_contents SET field = AES_DECRYPT(field, 'YOUR-SECRET-KEY');
If you want, you can check how this works on this table. Field "secretProof" is encrypted with a simple key, execute the request:
UPDATE t_contents_WARNING SET secretProof = AES_DECRYPT(secretProof, 'keyForProof');
Attention. This key does not work for your master data. Do not use it, otherwise you may permanently damage the data. To get the key you need, contact us.Field `tableStruct` contains the original names and type of your table. The key for decoding is the same as key for prof: keyForProof
这段英文的大致意思是:你的表已经被加密了,你需要支付0.06比特币才能解密。支付完成之后到某网址拿到解密的秘钥,然后执行数据库脚本进行解密。黑客同学还人性化的给了范例,证明使用秘钥是可以解密加密数据的。
终于明白,黑客这是为了图财,要不是家庭困难,估计他们也不会这么做。上网百度了一下比特币的价格,1比特币差不多1万美金,0.06比特币差不多4000元人民币。本人的建站成本才几百元,这下一次性勒索4000大洋,实在是高估本人经济实力。即使真的把钱打过去,未必能够换来数据的准确性,因为黑客不会对你的数据负责任的。
数据恢复
比特币这么贵且黑客又不靠谱,买比特币肯定不谈了。看着一堆被加密的数据和瘫痪的网站,内心难免有点失落。数据全部是用AES加密,即使暴力破解,也够我计算好几年,解密几乎不可能实现。还好本人曾经备份过一部分的数据在本地,并且在segmentfault网站上也发表过同样的博客,通过还原加拷贝,网站的数据终于恢复了,有惊无险。
安全防范
本人的博客网站暴露在外网之中, 安全防范等级不高,很容易被黑客遍历扫描到。建议大家采取以下措施:
1、使用更复杂的数据库密码,最好是数字、字母、特殊符号混合,增加暴力破解难度。
2、mysql屏蔽外网访问权限:
找到 /etc/mysql/my.cnf文件,设置为只允许本机访问 bind-address=127.0.0.1
3、修改user权限:
找到mysql库中的user表,删除针对%或者陌生host的授权。
数据备份
为了安全起见,建议周期性备份mysql数据。
1、创建可执行脚本文件backupdb.sh
2、修改文件内容为:
#!/bin/sh
db_user="root"
db_passwd="123456"
db_name="dbname"
name="$(date +"%Y%m%d%H%M%S")"
/usr/bin/mysqldump -u$db_user -p$db_passwd $db_name >>/opt/backup/mysql/$name.sql
3、添加定时任务
crontab -e
输入00 01 * /opt/backup/backupdb.sh 保存。此表达式表示每天凌晨1点进行数据备份。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。