信息安全-2.0

这是第二篇,中间几天因为一些事情打算了写作的计划。稳定持续的产出文字,真的是挺难做到。

今天讲一些我亲身经历的事情。

去年的时候我加入到现在的公司,负责公司的产品规划和开发。乍听起来十分高大上,年纪轻轻就已经开始负责规划和开发了。实际情况则是,创业公司缺钱,所以找了我这一个名义上的产品经理,主要的开发都是通过外包团队实现。

公司有一个产品是给通过微信商户支付的接口给微信用户发放现金红包,商户支付后台是有一个恶意防刷机制,具体的防刷判定规则没有公开,只是分了多个安全等级。事后证明,这个防刷机制主要是针对批量从某个IP访问会有效。

然后就是我司产品管理后台,也有一个防刷机制,通过限制单个微信用户领取的次数和数额大小达到限制的目的。后来出现过原定某个城市用户访问的链接被分享到其他城市的用户,为了限制这一点,我们又加入了GPS限定功能。这个产品是以单个活动为基本单位做限制(这一点有伏笔)。

大概是去年十月份的时候,有一次我在照例查询各平台数据时,发现微信商户平台的余额急剧下降。导出那两周的流水记录,统计之后发现95%的支出都来自上述提到的给用户发现金红包的产品。切换到产品后台,想着查看是哪个活动支出最多,这个时候就会发现原来产品之前太过于考虑用户端的体验,而忽略了管理端的体验。产品后台没有直观的管理界面显示每个活动的支出数据,我只能每个活动打开导出用户记录,统计计算,为此后续我在管理页面加上了每个活动的余额显示功能。

最终发现,支出最大的地方是专门给公司业务同事单独创建的「测试活动」,因为考虑到是测试,所以我们把对用户领取次数限制取消掉了。然后通过查询记录,发现有多个疑似机器人的账号在访问这个链接,毕竟访问的时间间隔太短了,而且很有规律。

发现了恶意刷取的用户之后,出现了很囧的事情,那就是我们没有黑名单功能。我们之前只能通过单个活动的全局限制,对所有人进行限制。当时没考虑会有机器人账号恶意刷取,为此我们临时增加了黑名单功能,从两个维度来封禁:

  • OpenID:

​每个微信用户对每个公众号都会有一个唯一的OpenID作为公众号对用户的身份识别。这也是微信为了保护微信用户的微信ID不被直接获取,避免被骚扰。因为OpenID是唯一识别码,我们自然就选择OpenID为黑名单的识别依据。

  • IP地址:

​单有OpenID还不够,因为黑产行业里很容易获取到微信账号,攻击者一旦发现自动刷钱的微信号无法访问了,他只需要更换一个新的微信号就可以继续这个操作。考虑到这一点,我增加了IP地址黑名单,毕竟对于攻击者而言,更换IP地址的成本要比更换微信账号高不少。

以上是发现问题之后的临时的解决办法,再之后我就开始寻找问题的根源。

这个「测试活动」是专门给内部同事创建的,网站本身的根目录有robot.txt,搜索引擎是不会抓取这些活动链接,也就是说不能从百度搜索到这个「测试活动」。甚至有一瞬间,我怀疑是有内鬼把「测试活动」链接给到了外面的攻击者。毕竟这种利用漏洞攫取利益的事情,在很多安全措施不到位的公司很常见。在那个时候,刚好因为一个事情,同事把活动链接截图给我,我为了访问这个地址,不得不手动输入活动链接。也就是在输入地址的时候,我意识到这里面存在着一个让人啼笑皆非的安全漏洞,那就是我们每个活动都有一个ID,链接地址的格式就类似于

http://www.abc.com/xxx/01.php

活动ID是自然数,而且还是连续的。所以攻击者是偶然间访问到其中某个活动的页面,通过分析链接地址的规律,无论是手动还是撰写脚本自动跑一遍,他就可以把所有的活动都访问一遍,其中就包含了我们的「测试活动」。而因为「测试活动」没有限制访问次数,所以他就可以无限制的领取现金。

发现了这个ID的漏洞之后,我跟外包团队紧急联系,然后修改了ID的生成规则,不再是以自然数的形式出现,而是改为十六位的十六进制编号作为ID,且这个ID是基于时间点生成的,所以不会出现连续的数字。

修改之后,我们把之前所有的活动全部关闭,以新的ID规则重新创建一遍。果然之后就没有出现类似的情况。

这件事,让我想起了之前学习一些linux指令时,书中提到的案例,某唱歌App曾经对用户的ID是连续的数字,使用curl可以抓取这些连续数字对应的用户头像图片。当然,我测试的时候,该app已经将用户的数字ID进行了加密,所以无法直接下载到用户的头像。

事后,我再复盘这个事情,跟外包团队的技术负责人沟通之后,了解到市面上很多团队都是直接使用来路不明的第三方代码,修改其中的一部分就拿出来使用。殊不知,这种来路不明的第三方代码中可能有很简单的漏洞,比如说我上述提到的漏洞,我刚才还测试了几家也是使用类似第三方代码的公司的链接,他们做的时间比我久,但还是用赤裸裸的数字ID。

2015年下半年的时候,XCodeGhost事件就是典型的使用来路不明的软件,结果连网易这样的老牌公司都有不少员工中招。

所以,考虑系统安全性的时候,要多留点心眼,没事儿做一个攻击者,试着从各个地方发掘问题。再就是,千万别用来路不明的第三方软件包。


今天因为一些思绪的波动,导致想得太多而无法按时入眠,索性就更一篇推送再睡。

发表评论

电子邮件地址不会被公开。 必填项已用*标注