产品思考:如何做好产品的安全防范工作
女友是做外贸的,公司用的 CRM 系统是业内的一家新兴公司的 Saas 产品。上个月,她一同事的账号被盗,盗号的人给客户发了一封诈骗邮件。结果,客户把 3 万多美金的货款打到骗子那里了,钱反正是没追回来。
类似的事情不是第一次发生,之前她们的一客户还收到过钓鱼邮件,同样是客户把货款打到骗子那里。骗子只不过用的是个老掉牙的方法,用一个跟她们公司邮箱相仿的地址给客户发了银行帐户信息。客户没仔细看,以为是公司的邮箱,结果就中招了。
像上面的事情,最后的结局是两败俱伤:客户被骗了钱,不信任公司,公司也因此丢了客户。被骗以后,老板又没办法,你做外贸,总不能不用邮箱吧。同行之间一交流发现,大家都有碰到。好吧,次数多了,就习惯了。反应给软件提供方,他们也不重视,销售说是你自己没有注意安全,泄露了密码。一听,挺在理,没办法,拧着大腿还是得认倒霉。
听到上面的事,第一感觉就是可惜:一方面是公司客户的损失,另一方面是客户的流失。早期创过业,明白这对公司的影响。作为产品人,是可以采取一些技术手段,提高产品安全,减少此类事情的发生。虽然这些努力难以被后验量化,但是有价值的。如果等到事发之后再弥补,那时候就是一个大坑了。
信息安全本应是产品最基本的要求,在产品初期就该开始注意,尤其是企业产品,关系到客户的利益得失。很多的初创公司往往因为忙于产品初期的完善,对此不够重视。
金融公司里有严格风控系统,时刻监控用户的操作行为。初创公司不像大公司有足够资源来做这些事情,但至少可以做安全防护模块,并将其独立出来,还可以服务多个产品。设计的核心就是判断的客户的行为是否异常,然后给出相应的预警提示。可以从哪些方面下手呢?
我的构思是:类似风控系统,建立一个模型,针对用户的每一步操作行为行为进行动态打分。每一步操作的打分都不是孤立的,具有连贯性,都会基于历史的操作来进行判定。一旦触发了相应的阀值,系统就采取相应的保护机制。像这样,设定一个风险指数,从 0 到 1。系统对每一次账号的完整过程(从登录到活跃)进行评估,达到相应级别,系统采取相应的保护措施,比如,
账号登录
用户风险指数基于的行为轨迹来判定,有两个阶段:账号登录和账号操作。针对不同阶段,权衡不同因子,最终得出一个打分。下面是我的思路:
登录是安全保护的第一道防线,这个阶段就可以拦截大量的异常操作。
登录失败次数。记录账号短时间内登录失败的次数,防止别人通过大量的测试来获取你的密码,这也是最基本的保护。比如,有的密码输入错误次数达到 3 次以上后,就会加验证码。有的输入密码错误次数达到阀值后,限制一时间内才能的再试。
IP地址。一般用做判断登录地点是否为常在城市。另一方面用做辅助信息来做一些异常判断,做进一步限制。比如发现在某个IP存在频繁的指令行为,可以限制该IP的上账号活动。
使用设备。辅助信息,识别异常操作信号。
登录时间。记录用户的活跃情况,画出用户的工作时间分布图,帮助识别异常操作。比如用户一般都是工作时间登录,突然某一天出现凌晨 2:00 登录的现象,用户在些之前并没有登录连续活跃的记录,这时候就有一定的可疑性。
登录及活跃地点。辅助信息,识别用户的异常行为,可画出用户活动范围图,减少对异常情况的误判。现在有第三方IP地址库的公司,提供定位服务。所以即使是用PC,在不借助GPS和基站定位的情况下,也能精确地定位到你在某一栋楼里。
上面所列的判别因子都是相互影响,彼此之间会影响,需要权衡不同的因子,排除干扰,最后做出评定。
之前出差去过几次柳州,每次去柳州用百度云盘时,都会收到邮件,异常登录提醒。虽说是异地,但我一直用的是自己的手机,第一次提示还能理解,次数多了对用户就是干扰。
小试牛刀,假想一个场景:
小A 是做外贸的,很少出差。突然有一天,系统后台收到他的账号在长沙登录的请求,而在前一分钟,他的活跃地址还是在深圳。如果是你来设计安全规则,你会不会怀疑账号被盗,要求进行二级验证吗?
真实的情况可能是,小A 的公司在长沙有一办事处,他的一同事B 正好在那里出差。当时需要小A 来协助查找一信息,小A 正好要出去,就直接把账号密码给了同事B。同事B 登录用的是自己的电脑,小A 3天前在这台电脑上登录过。
账号操作
虽然登录阶段已有预防,但成功登录也并不意味账号是处于安全状态的。在条件成熟的情况下,即使有验证,骗子也能突破第一道防线。
给你发个引诱短信,你被骗点了链接,尝试登录,结果就泄露了帐号和密码。更糟的是,你还下载安装了病毒软件。当你手机接到验证码时,木马直接把验证码通过网络或短信转发到骗子那里。
账号通过之后,想要判定账号异常情况难度就大一些,但这不意味着就没有可努力的空间了。可以从一些短时间内可疑行为,结合网络的环境来评估。
可疑行为。以外贸软件为例,比如说:
大量的下载,导出文件。
大量的转发邮件。
大量的发送邮件。
其它敏感操作,如:
发送带有付款账号的邮件。
发送之后立即删除等
每个账号的安全评估也不是孤立的。不仅要留意独立账户的安全,还要关注不同账号之间关联判断。
举一个例子:
一伙诈骗团队发现某一产品的漏洞,破解多家企业用户的账号密码,借助非法手段通过了二级验证。但后台系统识别出来这种异常,同一IP上的出现多家企业账户登录,操作时间是在可疑的凌晨时段,三家企业分别在 3 个不同城市,但操作地点却在同一个地方,使用的设备也是从来没有用过的。系统可以直接对其IP进行封锁。在一定时间段时限制使用该IP访问产品。
脑洞时间
有安全防护,就会有误判,设计的时候不光要考虑安全,还要考虑好怎么尽可能减少误判的可能,以免给用户增加不必要的麻烦。这个设计过程实际上就是在建模,
通过规则的建立来模拟出用户的操作习惯。
判断账号的操作行为是否符合规则。
然后做出相应保护策略。
要想设计出稳定可靠又优雅的安全模块,需要持续不断地完善和优化上面的规则。但每个用户的习惯又都会不一样,如果这些优化工作都需要人来做,就要背后做规则的人去不停地学习用户习惯的判断,这个工作量是十分庞大的,而这恰巧是人工智能所擅长的事情。
兴许,未来有一家利用人工智能专注于安全,基本用户操作行为进行分析的公司。那些做产品的公司愿意的话,只要把用户的所有操作行为开放给上面第三方公司,第三方公司就能对用户的操作进行动态安全评估,得到反馈的公司根据结果再做出相应的保护策略。
所以有条件的话,不妨现在做一些埋点工作,把用户关键的操作行为都记录下来。
作者:lei,公众号:monster_talks。