摘要: 继Oracle、MongoDB等常用数据库之后,MySQL又成为比特币勒索猎杀目标。成百上千个MySQL数据库被劫持,删除存储数据,要求支付比特币的赎金。 此番针对MySQL的比特币勒索,是直接针对MySQL的。但并非MySQL本身存在安全问题,而是安全意识薄...
继Oracle、MongoDB等常用数据库之后,MySQL又成为比特币勒索猎杀目标。成百上千个MySQL数据库被劫持,删除存储数据,要求支付比特币的赎金。
此番针对MySQL的比特币勒索,是直接针对MySQL的。但并非MySQL本身存在安全问题,而是安全意识薄弱惹的祸。简单点说,再安全的防盗门,如果没有关上,任由它开着,有小偷进入偷窃,这可就怨不得防盗门不安全。
安全意识薄弱的问题?梳理MySQL的比特币勒索事件,就一目了然了。
早在今年二月分,最早的一批黑客,通过属于荷兰的网站托管公司Worldstream,发起攻击。攻击者使用最普通的黑客技术,在公网上扫描MySQL的默认端口3306。一旦发现在用的3306端口,就使用暴力破解的方式,取得MySQL管理用户root的密码。
得到root密码后,黑客会挪移掉数据,或将数据加密,甚至有些无良黑客,直接删除数据。并创建PLEASE_READ用户和WARNING表,并在其中插入这样的信息:
Send 0.2 BTC to this address and contact this email with your ip or db_name of your server to recover your database! Your DB is Backed up to our servers!
(这段话的意思是,“拿出0.2比特币,然后将IP、数据库名发送到此email,我们将恢复你的数据。你的数据被备份在我们这儿。)
可以在日志中看到完整的插入语句:
0.2比特币,两毛钱比特币,很多人可能没有概念。截止发稿日,一比特币可以兑换8100多RMB。也就是说,0.2比特币,至少折合1600RMB之上!
这是黑客收款的网站:
另有国外安全研究人员Victor Gevers呼吁:“不要支付,千万不要支付,因为那些数据很可能黑客压根就没有给你备份。”
也就是说,有可能就算你支付了1600多块钱(0.2比特币),最后也得不到你的数据。
再从功击手段来看,黑客的手段就是简单的端口扫描,然后暴力破解,在技术控眼中,可以说是毫无“美”感。既没利用什么系统漏洞,更没有高级点的“缓冲区溢出”,纯粹就是利用密码简单、不重视安全等问题,进行赤裸裸的打劫。
就像电影《天下无贼》中黎叔的台词:“一点技术含量都没有”。
在“简单”的技术背后,有个值得深思的问题。不得不说,比黑客更危险的是,是安全意识的薄弱。
那么,在这次的MySQL比特币勒索事件,暴漏了哪些MySQL的安全意识问题呢?
总结一下:
1、使用弱密码。
只包含纯数字、或纯字母的密码,就是弱密码。而对于更弱的生日、电话号码,或是“123456”型密码,暴力破解难度之低,简直就是“敞开大门迎黑客”。
正确的“强”密码,应该包括大、小写字母、数字、符号,而且密码长度要长,要长,要长。(重要的事情说三遍)
暴力破解的时候,密码每增加一种符号,增加了N多的计算量。每长一个字节,又增加了N多的计算量。复杂的密码将大大延长破解的时长,有可能还没有暴力破解成功,你已经发觉,从而最终避免被勒索。
但如果密码太强、太长,数据库又太多,谁能记的住那么多超长、又复杂的密码呢?这个时候就需要“密码管理软件”,安利一波,比如:KeePass:
它将你各种各样的密码保存到你个人电脑的数据库中,并使用专门的方法加密。当然,进入KeePass也需要密码,不过,你只需要记着进入keePass的一个密码即可。
KeePass还可以自己生成密码,绝对是复杂度很高、很难暴力破解的密码。生成后自动保存在KeePass中,方便我们以后使用。建议密码都使用KeePass生成,增加暴力破解难度。
但问题也来了,所有密码都保存到KeePass中固然省事,但万一KeePass被“黑”了呢?这点你大可放心,KeePass就像本地个人电脑中的一个记事本,只要你不将远端数据库的连接信息放到KeePass中,就算有人获取了KeePass中所有密码,并不知道这些密码的用处也无济于事。
2、默认端口
另一个安全意识薄弱的问题,是使用默认端口:3306。
端口扫描软件可以瞬间发现N多打开了某一端口的主机。如果你的MySQL还是默认的3306端口,黑客软件就会自动上门,暴力破解。
使用3306端口,加弱密码,等于你已经将数据库开放给了黑客。
3、MySQL的root用户
注意是MySQL的root用户(不是操作系统的root)。这个用户是默认情况下MySQL最高权限的管理用户,它是黑客攻击的首要目标,暴力破解root的密码,取得MySQL的控制权,然后转移或加密MySQL表数据,留下勒索信息。
为了提高安全性,通常建议修改root为任意自定义用户名,使黑客失去攻击目标。这个操作是很简单的,只需update mysql.user表的user列即可。
4、架构问题
如果上述三点问题,你的MySQL都有,但只要数据库不暴露在公网中,安全问题也没那么严重。但如果数据库直接暴露在公网中,就需要特别注意前三点注意事项了。
什么是“数据库暴露在公网中呢”?比如,下图这样的架构,数据库就是在大后方的:
公网中的IP,不能直接访问到数据库,只有公司内部的应用服务器,可以“接触”(就是连接)到数据库。而公网客户端可以接触到的,只是应用层的应用服务器。从公网中不能直接连接数据库,IP不通。黑客想要直接攻击数据库,“门”都没有。只能通过SQL注入方式。
如果是如下图的架构:
黑客可以在公网上直接连接MySQL,这为他们发起暴力破解提供可能。
当然,也不是说数据库不能直接暴露在公网中,只要在操作系统级设置得当的安全防护,数据库也可以直接在公网中。只是不建议这么做,特别是在没有特别强的OS级安全人员情况下,更加不建议。
总结来说,这次遭遇比特币勒索的MySQL,是直接暴露在公网中且防护较弱,使用默认的3306端口,root用户没有改名,而且密码又弱。这些都为黑客提供了可乘之机。
黑客也没有使用什么高精尖的技术,就是全面撒网,在公网上寻找安全意识溥弱的数据库。上述安全建议,除了root用户的改名外,都是所有数据库通用的。当然,即便最大程度上避免了上述的安全问题,仍然可能遭遇安全问题,比如SQL注入(这就需要在权限控制等更多方面进向控制),但是,提高安全意识、做好安全防护,可以隔绝掉大部分的攻击。
至此,勒索软件系列文章正式完结啦~
从勒索软件的定义、分类、传播、危害、趋势开篇
简述比特币的前世今生
再以数据库为切入点,以Oracle、mangodb、mysql为例
揭秘勒索软件攻击数据库的背后原因
五篇文章,但愿有益于你~