文档详情

浏览器是如何存储密码的?.pdf

发布:2017-05-22约4.98千字共9页下载文档
文本预览下载声明
浏览器是如何存储密码的 ? 一、引言 我曾经介绍过名为dumpmo n的推特机器人 ,它监控着众多“ 码网站”的账户转储、配置文件和其他 信息。自那以后 ,我一直留意着监测到的信息。接下来会有关于dumpmo n的一系列文章 ,而本文则 关注浏览器是如何存储密码的。 这里提到dumpmo n ,是因为我偶然发现一些 码 ,比如这篇 ,应该是感染在计算机上的恶意软件 的日志。我便想 :我总是认为最好不要让浏览器直接存储密码 ,但是原因呢?恶意软件从感染的计 算机中获得密码会有多轻松呢?因为从一处获得所有想要的资料有点困难 ,所以我决定在此文 出 结果以及一些从各个浏览器的密码管理器中提取密码的简单代码。 本文所述是在w indows 8系统上分析下述浏览器。 二、Chro me浏览器 获得密码难易程度 :简单 我们从Chro me浏览器开始。令人失望的是 ,chro me浏览器是最容易被提取密码的。加密后的密钥 存储于%A PPDATA %\..\Local\Google\Chro me\ ser Dat a\Def ault\Login Dat a”下的一个SQ Lit e数 据库中。但是是如何获转存并加密的呢?我从 《谷歌Chro me浏览器是如何存储密码的》这篇文章中 获得了Chro me存储密码的诸多信息 ,而这篇文章是4年前写得。虽然从那篇文章以后Chro me做了 些改变 ,但是我将按照同样的方式 ,利用Chro mium源码的一些片段向你展示密码是如何转储的。 存储加密密码 当用户访问网站时 ,Chro me会首先判断此次登陆是否是一次成功的登录 ,判断代码片段 : 如果成功登录 ,并且使用的是一套新的证书 ,这个证书是浏览器之前没有生成过的 ,Chro me就会 生成一个提示条 ,询问用户是否需要记住密码 : 在此为节省篇幅 ,我省略了创建提示条的代码。当点击“保存密码”时 ,就会调用Chro me密码管理 器的“保存”函数来响应操作 : 简单吧。如果是一次新的会话登录 ,就以如下代码执行保存 : 再次为控制篇幅 ,裁剪了一些内容(例如一个对证书是否属于google的网站的操作审查等等)。在这 函数被调用之后 ,执行A ddLoginImpl()函数的任务被调用。这是用来使界面快速响应的 : 该函数会调用登陆数据库对象的A ddLogin()函数 ,以检查其操作是否成功。下面就是A ddLogin()(我 保证 ,我们马上就要看到密码是如何存储的了) : 这里有些有趣的东西。我们利用用户密码生成一个字符串密钥。这段代码已经减掉了 , 但是”sql:St at ement ”行下面 ,执行了一个SQ L查询语句 ,实现了在登录数据文件中存储加密数据。 该Encrypt edSt ring函数仅仅是在一个加密对象上简单调用了Encrypt St ring16函数(就是下面这个) : 最终 ,我们看到密码是调用W indows A PI函数Crypt Prot ect Dat a来加密的。这意味着 ,只有用加密 时使用的登陆证书 ,密码才能被恢复。而这根本不是问题 ,恶意软件通常就是在用户登陆环境下执 行的。 密码破译 在讨论如何破译上面存储的密码之前 ,让我们首先使用Sqlit e浏览器来查看一下登陆文件中的数据 : 我们的目的是从这个数据库中抽取出act io n_url,username_value和passwo rd_value(是二进制数据 ,所以SQ Lit e浏览器不能显示)。而破解密码 ,只需要调用W indows A PI中的Crypt nprot ect Dat a 函数。幸运地是 ,Pyt ho n为调用W indows A PI准备了一个完美的叫做pyw in32的库。 先看一下我们使用的Po C : 运行上述代码 ,可以看到已经成功了! 虽然找到密码是如何存储的有点费事(也可以使用其他的动态方法 ,但是分析代码会更透彻) ,但是 解密密码则几乎没费什么力气。唯一被保护起来的就是密码的部分 ,还仅仅保护当前用户。 2/4 三、IE浏览器 获得密码难易程度 :简单/一般/困难(依版本而定) 本质上来讲 ,直到IE10之前 ,IE浏览器的密码管理与Chro me使用的是相同的技术 ,但有一些有趣 的改变。为了全面的展示 ,我们先简单讨论一下IE7—— IE9的密码存储 ,然后再讨论在IE10中的 变革。 IE7-9浏览器 在IE的早期版本中 ,根据密码类型的不同 ,会被存储于两个不同的地方 : 注册表(基于表单的验证)
显示全部
相似文档