一直知道有黑客的存在,一直知道有“黑产”的存在,但没想到过有一天我如此近距离的接触黑客以及所谓的黑产。
事情的经过大概是这样的,昨天晚上10点登录系统突然收到告警短信,告警信息表明,目前有异常大流量请求,由于时间比较晚,花了点时间才联系到核心的研发人员,登录系统查看了下,发现确实有接近平时200倍的异常登录请求,初步看了下请求的IP来源都是比较分散的,特征是在不断的尝试用户名、密码登录,并且已经破解了我们的图形验证码,综合上面的信息,我们初步判断这应该是一次典型的黑客撞库行为。
何为撞库?
所谓撞库行为,就是黑客在别的地方,一般是安全程度不高的网站被入侵,拿到了这个网站所有用户的用户名,密码信息。然后拿这些用户名、密码在其他网站进行登录尝试,因为有不少人是存在一个普遍行为,即在不同的网站用的是同一个用户名,密码。
这样A网站如果被入侵,泄露了用户的个人信息,黑客可以拿这些用户名、密码到B网站去登录,如果同一个用户既注册了A网站又注册了B网站,这样黑客就可以用A网站得到的信息登录B网站,从而进入用户在B网站的账号。
以为解决掉了
发现了这个行为后,我们先想的是如何禁止黑客的暴力登录,这样不仅存在撞库风险,由于请求量比较大还会影响普通正常用的体验。研发抓了日志,经过分析,基本可以确定黑客是通过工具进行批量进行登录。黑客的请求,来源IP比较分散,每次都尝试不同的用户名和密码,想简单的采用封IP的方案是不行了,最后发现所有的异常请求里面,有一个http header是有相同的特征,拉上运维人员一起商量,最后决定在nginx这里对这类的请求进行拦截。整个流程花费了大概1个半小时,最后nginx策略生效后确实有效的把异常流量给封住了,那会也快晚上12点了,又观察了一会,发现对方没有新的动作,以为这件事就这样结束了。
噩梦才真正开始
第二天上午接到用户投诉,说我们的网站泄露了用户的隐私,有人打电话给用户,冒充网站的客服人员,对用户进行欺诈。
经过跟几个被诈骗的客户了解,基本搞清楚了黑客的诈骗手段。
首选黑客登录用户的账号,看了下用户最新的订单信息,然后打电话给用户,冒充网站的客服人员,说这个客户买的某个商品质量有问题,网站要进行召回,请进行退货处理。退货地址的详细地址在用户的个人地址里面。黑客特意修改了用户的个人收货地址,并在里面藏了一个钓鱼网站的连接,诱导用户点击这个钓鱼网站。这个钓鱼网站完全模仿支付宝登录界面,除了域名不一样,其他一模一样,有些用户没注意,就在这个界面输入了自己的支付宝账号信息,黑客通过这个办法拿到了用户的支付宝账号,然后自己登录用户的支付宝账号,下面就不说了,大家懂的。。。
对于这种欺诈行为,有一定的迷惑性,因为对方可以清晰的报出用户买的东西以及订单号、下单时间、收货地址,有些警觉性比较低的用户就真的会相信这是网站“官方”的行为,然后按照引导去操作,最后支付宝账号信息被盗取。
一上午的时间,客服陆续接到近10起类似投诉,其中有一个用户支付宝被盗了2万块,要求我们进行补偿。这个时候我们才意识到问题的严重性,首选我们不知道黑客具体拿到了多少我们网站的用户信息,然后还不知道即将有多少用户因此受骗。。。
魔高一尺道高一丈
我们紧急先找了下昨晚攻击时间段的请求日志,尝试发现哪些用户被黑客撞库成功了,由于我们没有记录详细的登录日志,所以单从日志上看不出来这个信息,最后只能把攻击的那个时间段内所有成功登录过的用户信息全部拉出来,悲观的认为这些都是被黑客攻击的账号,然后批量给这些用户发短信进行提醒,为了防止黑客还能登录这些账号进行欺诈,我们立刻把这些账号的密码置空,要求用户立即修改密码。我们以为这样黑客就没办法再登录这些账号进行欺诈了,结果又被现实狠狠的打脸,因为还陆续有客服反馈有用户来投诉,这就让我们很不理解,为什么黑客都不能登录了,还能看到用户的信息进行诈骗呢?难道黑客把这些信息存下来拉?我们立刻又去翻日志,最后发现,黑客在撞库成功后,立刻就把用户的订单信息,个人信息全部用脚本查询了一遍,并且把这些信息存了下来。这时候才发现,黑客在攻击我们之前,已经对我们网站的接口进行了细致的分析,制定了一套相对完整的攻击方案。
黑客都比你努力
经过这次攻击,发现黑客还是很用心的做了很多准备工作。
1.首选分析我们的接口信息。
2.写撞库的工具,成功登录后,立刻将用户的关键信息落地。
3.选择在深夜进行攻击,我们发现异常到找到相关的人,到制定响应方案时间比较长,可以尽量争取攻击的时间。
4.针对我们的网站,执行针对我们网站用户的诈骗方案。
现在看下来,整个流程事先都是准备好的,而我们的响应方案确实漏洞百出。
吃一堑长一智
这次攻击也暴漏了系统很多的问题,总结几点。
1.没有任何安全防护措施,对于这种典型的异常流量响应很被动。现在市面上有很多成熟的waf,可以自动识别这种恶意工具,从而将恶意流量进行有效清洗。
2.协议没有加密,让别人很容易拿到协议的内容,进行模拟。
3.图形验证码没有难度,很容易被破解,需要增加级别更好的验证方式。语音验证或者滑动验证。
4.没有基本的风控模型,比如用户正常是在上海登录,突然在新疆登录了一次,这个时候应该有异常的标记或者告警。