叶水勇,张 弛,聂立莎,王菊红,叶 云,宋浩杰,王文林
(国网黄山供电公司,安徽 黄山 245000)
随着移动通信技术的发展和各种智能终端的普及应用,移动信息化正逐步改变企业的运营方式[1-2]。在移动作业领域,公司积极运用移动互联技术,借鉴互联网思维,广泛开展“互联网+”业务创新和管理创新,面向各专业,基于移动互联应用支撑平台、安全接入平台、安全交互平台、电力无线虚拟专网,在运检、基建、物资、营销等多个专业开展移动应用建设,极大地提升了电网生产经营和管理效率。
智能电网中存在大量移动/无线应用需求,在提高使用者便利性的同时,也引入了巨大的安全风险,这对移动终端和移动应用服务安全提出了重要挑战,其核心问题是既要保证移动终端可信,同时还必须保证移动应用可控[3-4]。
在使用移动终端的过程中发现应用系统会生成android_marketing.txt文件。此文件中以明文方式记录了用户登录信息以及客户信息。信息包括用户名和密码。其中移动作业如图1所示,应用系统文件如图2所示。
图1 移动作业图
文件显示的logon信息
logon#! #[{\"USER_NO\":\"GUKJ7933\",\"PASSWORD":"gkj12345"}]
图2 应用系统文件图
用户名为GUKJ7933
密码为gkj12345
一个应用系统在存储用户数据的时候,绝对不应当直接存储用户的密码明文,而是应该将密码加密(比如进行散列计算之后)存储。同理,如果一个应用系统是需要用户登录才能看到其中的数据的,那么该应用系统也应当使用散列算法来保存用户密码。由上可知GUKJ7933的登陆密码是gkj12345,而很多用户的习惯特点是,会使用同一套密码,所以当拿到密码后就可以去尝试登陆一些其他系统应用[5]。
通过使用发现手势密码没有对错误的登陆次数进行限制,可以进行反复猜测登陆密码[6-7]。这种密码的破解很简单,对于居心不良的人来说,就可以无限次输入,随意破解密码了。所以处于安全性考虑,杜绝一切可能破解的因素,还是有必要加入次数限制。例如限制用户在3次错误后多长时间内不准输入,多长时间内错误次数超过10次锁定账号,需管理员在管理后台进行解锁。EMM手势密码如图3所示。
图3 EMM手势密码图
出于手势密码的便捷性很多用户会倾向于选择最弱等级的密码外,还有不少用户喜欢用字母的样式来作为自己的手势密码[8]。如下面这张图揭示的案例,C、O、N、S、M、L 这些字母样式都成了用户的手势密码。常用字母手势密码如图4所示。
图4 常用字母手势密码图
通过对淘宝密码保存技术进行分析发现,手机淘宝是通过本地DES加密,再把密码保存到本地文件里的。
借鉴淘宝的加密技术并在此上基础上再次强化加密方法。
应用系统因为要实现自动登陆功能,所以必然要保存一些凭据,所以比较复杂[9]。应用系统登陆要实现的功能:密码不会明文存储,并且不能反编绎解密;在服务器端可以控制App端的登陆有效性,防止攻击者拿到数据之后,可以长久地登陆;用户如果密码没有泄露,不用修改密码就可以保证安全性;可以区分不同类型的客户端安全性;比如Android用户受到攻击,只会让Android用户的登陆失效,IOS用户不受影响。
2.1.1 应用系统首次登陆流程
用户输入密码,应用系统把这些信息用RSA公钥加密:(用户名,密码,时间,mac,随机数),并发送到服务器。服务器用RSA私钥解密,判断时间(可以动态调整1~7 d),如果不在时间范围之内,则登陆失败。如果在时间范围之内,再调用coreservice判断用户名和密码。这里判断时间,主要是防止攻击者截取到加密串后,可以长久地利用这个加密串来登陆。如果服务器判断用户成功登陆,则用AES加密:(随机salt,用户名,客户端类型,时间),以(用户名+Android/IOS)为key,存到缓存里。再把加密结果返回给客户端。客户端保存服务器返回的加密串[10]。
2.1.2 应用系统自动登陆的流程
应用系统发送保存的加密串到服务器,(加密串,用户名,mac,随机数)→RSA公钥加密。服务器用RSA私钥解密,再用AES解密加密串,判断用户名是否一致。如果一致,再以(用户名+Android/IOS)为key到缓存里查询。如果判断缓存中的salt值和客户端发送过来的一致,则用户登陆成功。否则登陆失败。不用AES加密,用RSA公钥加密也是可以的。AES速度比RSA要快,RSA只能存储有限的数据[11]。系统应用登陆流程如图5所示。
2.2.1 设计思路
用户输入用户名密码后,第一步判断密码或者用户是否为空,为空则重新输入不进入第二步。判断输入次数是否大于5次,如果大于5,再判断当前时间和最后一次输入错误时间差是否大于300 s,若是的话,输入错误次数重置为0,进入第三步。当前时间和最后一次输入错误时间差小于300 s,返回登陆页面。当前时间和最后一次输入错误时间差不大于300 s,进入第三步。判断用户名密码正确性,正确,错误次数重置0,跳转到登陆成功页面。错误,进入第四步。通过当前时间和系统之前历次输入错误时间比对,通过时间差是否大于300 s,判断这次输入错误的次数,从而中心设定输入错误次数及错误时间[12]。
2.2.2 举例
假设已经输入错误5次,输入错误时间如下:
第一次输入错误时间 12:00:03
图5 系统应用登陆流程图
第二次输入错误时间 12:01:25
第三次输入错误时间 12:02:02
第四次输入错误时间 12:04:21
第五次输入错误时间 12:08:04
第五次的时间 12:08:04和第四次时间 12:04:21比对,时差在300 s之内。第五次时间12:08:04和第三次比对12:02:02,时差在300 s之外。这样300 s内的输入错误次数是两次,分别是第五次和第四次。登陆保护流程如图6所示。
图6 登陆保护流程图
针对移动终端日常使用发现的问题,通过对移动应用安全防护技术的探究,实现了对本地数据加密:用RSA算法,并加密来保存用户密码;单纯的hash或者对称加密算法都不靠谱;服务器用salt+hash算法来保存用户的密码;用salt+RSA算法来加密用户登陆的凭证。这样服务器可以灵活控制风险,控制用户登陆凭据的有效期,即使用户数据泄露,也不需要修改密码。
实现对登陆进行保护:通过限制一定时间内登陆错误次数限制系统的设计与实现,有效地避免通过暴力破解的方法来破解密码的问题,提高用户的信息安全性。