lastpass怎么用指纹解锁(手机lastpass使用教程)

时间:2021-11-07 19:44:27 投诉/举报

写在前面的话

首先我要声明的是,我这篇文章中所要描述的内容并没有涉及到LastPass的漏洞,而且整个过程也与漏洞利用无关。在这篇文章中,我准备告诉大家如何在信息取证的过程中尽可能地从内存中提取出我们所需要的数据,而且在某些情况下,我们还得要求这些数据必须是明文形式的有效数据。

最近,我正在阅读《内存取证的艺术》这本书[购买地址],如果你对数据取证这一方面感兴趣的话,那么这本书是我强烈推荐的。在本书的部分章节中,作者对如何从浏览器中提取出用户密码进行了讨论。当你使用标准的登录方式来登录某个网站时,你所输入的用户名和密码将会以POST请求的形式发送至远程Web服务器。而需要注意的是,此时你的用户名和密码均是以明文的形式发送的。在此,我并不打算讨论关于SSL的内容,其实在SSL内部,这些数据仍然是明文形式的。

接下来,本书的作者继续讲述了如何定位这些POST请求,并尝试将这些请求数据提取出来。如果你刚好“逮到”了一个刚刚完成登录操作的浏览器,那么这种方法对你来说可能会非常有用。但如果用户使用了一个session(会话)来进行登录的话,那么你可能就无计可施了。

在我阅读本书的过程中,我无意中看了一眼我的浏览器,我发现我的LastPass插件图标上显示了一个数字1。这也就意味着LastPass已经帮我把当前这个域名的登录凭证保存下来了。

正常情况下,如果我访问了某个网站的登录页面,而我又开启了浏览器的“自动填写表单”功能,那么LastPass就会自动将该域名的凭证数据填写至登录表单中,然后浏览器将会通过POST请求来发送这些凭证数据。当然了,前提是我已经将该域名的凭证保存在LastPass中了。

但是我现在想要弄清楚的是,LastPass中存储的凭证数据到底是何时被解密的。是当页面中出现了表单域的时候呢,还是当域名被加载完成的时候?于是我准备搭建一个测试环境,让我们来看一看真相到底是什么!

环境搭建

我想要在内存中完成所有的操作,所以我必须找到一种简单的、可重复进行的方法来实现在内存中搜索数据。

最简单的方法就是当我每次对浏览器进行了修改操作之后,立刻进行一次内存转储(mem dump)。在虚拟机的帮助下,我只需要在每次修改之后创建一个快照(snapshot)就可以了。这样一来,每次修改之后我都能够得到一份内存数据的拷贝,然后就可以进行数据对比了。

接下来,我要安装几个目前最为常用的浏览器,例如Chrome、IE、或者火狐。然后配置好Lastpass插件(全部采用默认配置),并且使用该插件来生成并存储不同长度的密码,所有的密码都只包含字母与数字。除此之外,我还将所有的这些密码全部拷贝到了一份文档内,并将其保存在主机中。

完成这些操作之后,我退出了所有的账号,清除了浏览器的历史记录和临时文件,并且重启了设备。

实验方法

环境的搭建算是比较简单的了,但是实验过程可能会稍微有点复杂。实验的操作步骤大致如下:

1. 打开浏览器

2. 登录LastPass插件

3. 登录网站

4. 检查内存中是否出现了明文密码

5. 完成修改操作(关闭网页标签、恢复网页标签、注销)

6. 不断重复这些操作

实验一

首先,我打开了第一个网站—Facebook,然后登录了一个临时的Facebook账号。当我登录成功之后,我又访问了好几个其他的Facebook页面。这一系列操作完成之后,我并没有关闭这些网页标签,而是直接创建了一个快照。

第一次, 我打算搜索一些比较简单的东西,命令如下:

1
grep -a 03rRJaYNMuoXG7hs Win7x64-MemTesting-Snapshot3.vmem | strings > ~/Desktop/fb.txt

“-a”参数可以让grep命令把我的导出的内存文件当作文本文件来处理,而且在我们将输出的数据写入至文本文件之前,还要对字符串进行一些简单的处理。

我们所获取到的输出数据的确包含一些有价值的信息,具体如下图所示:

当我获取到这些数据之后,首先抓住我眼球的就是下面这两段数据:

这是一个JSON对象,其中包含有用户密码、网站域名、时间戳、以及其他的一些数据。从表面上看,这些数据似乎与浏览器自动填写表单域所使用的数据有关。

1
{"reqinfo":{"from":"fillfield_A","index":28,"time":1475875701411,"uniqid":85097549},"docid":0,"sharedsite":0,"automaticallyFill":1,"is_launch":false,"manualfill":false,"name":"pass","value":"O3rRJaYNMuoXG7hs","type":"password","checked":false,"otherfield":false,"doconfirm":1,"allowforce":0,"from_iframe":0,"humanize":false,"v2humanize":false,"delayquants":0,"force_fillbest":false,"originator":"FILL_F4","cmd":"fillfield","clearfilledfieldsonlogoff":0,"dontfillautocompleteoff":0,"realurl":"https://www.facebook.com/","aid":"607245038900433242","tabid":2,"custom_js":"","domains":"facebook.com,facebook.com,messenger.com","formname":"","topurl":"https://www.facebook.com/","urlprefix":"chrome-extension://hdokiejnpimakedhajhdlcegeplioahd/","lplanguage":""}

接下来的这部分数据我也看不出有什么端倪。

1
passO3rRJaYNMuoXG7hspassword

实验二

在第二个实验中,我访问了好几个不同的网站,并且均登录了相应的账号,然后在重启系统前注销了所有的账号。除此之外,我还要确保浏览器没有保存任何的数据,所以我必须要清除浏览器中所有的历史记录、cookie信息、以及表单内容等数据。

你可以在下面这张截图中看到,所有的网页标签都已经加载完毕了,而且除了QNAP网站之外,其他的网站均已登录了相应的账号。我进入到QNAP的主页,然后你就可以看到,LastPass插件将会提醒我它检测到了一个匹配成功的用户凭证,但是我现在却并没有加载任何包含表单域的网页,所以现在并没有任何需要进行“自动填写”的东西。此时我需要创建一个快照。

接下来,我在刚刚创建的快照中使用了与之前相同的grep命令,并且在内存中对所有刚刚访问过的网站进行了一次搜索。结果证明,我刚刚所有登录过的网站在内存中使用的都是相同的数据结构。具体数据如下所示:

1
{"reqinfo":{"from":"fillfield_A","index":157,"time":1475878291419,"uniqid":65765520},"docid":0,"sharedsite":0,"automaticallyFill":1,"is_launch":false,"manualfill":false,"name":"ca414a13646af9ceb5293a5eeded1704","value":"5DAhhkOvZDTC0MYA14","type":"password","checked":false,"otherfield":false,"doconfirm":1,"allowforce":0,"from_iframe":0,"humanize":false,"v2humanize":false,"delayquants":0,"force_fillbest":false,"originator":"FILL_F4","cmd":"fillfield","clearfilledfieldsonlogoff":0,"dontfillautocompleteoff":0,"realurl":"http://androidforums.com/login/login/register","aid":"5988558277865511241","tabid":14,"custom_js":"","domains":"androidforums.com","formname":"","topurl":"http://androidforums.com/","urlprefix":"chrome-extension://hdokiejnpimakedhajhdlcegeplioahd/","lplanguage":""}

除此之外,我还注意到了一些其他的数据结构。

1
{"cmd":"save","url":"https://www.phpbb.com/community/ucp.php?mode=login","formdata":"logintusernametpeters.lastpass%40gmail.comttexttseennlogintpasswordtSG5P2GRgqYeL4nvzi8C1XnZstpasswordtseennlogintautologinton-0tcheckboxtseennlogintviewonlineton-0tcheckboxtseennlogintredirectt.%2Fucp.php%3Fmode%3Dloginthiddentnotseennlogintsidt32ff2e6ecf53aaac43b88f123ad86b04thiddentnotseennlogintredirecttindex.phpthiddentnotseenn0tactionthttps%3A%2F%2Fwww.phpbb.com%2Fcommunity%2Fucp.php%3Fmode%3Dlogintactionn0tmethodtposttmethodn","current_pw_field_name":"","docnum":0,"timestamp":1475878195546,"username":"peters.lastpass@gmail.com","password":"SG5P2GRgqYeL4nvzi8C1XnZs","tld":"phpbb.com"}

我们可以看到,在上面这段数据中包含有用户名、网站域名、以及用户密码,而且这些数据全部是明文形式的。

此前,虽然QNAP网站已经加载完成了,但是我们既没有填写该网站的任何表单,也没有进行登录操作,所以内存中并没有关于该网站的数据。

接下来,我打算继续在内存中进行搜索,看看能不能找到其他的一些有用数据。在搜索的过程中,我突然发现了一段非常有意思的信息。

这是一段被标记为“LastPassPrivateKey”的数据。当我获取到这些数据之后,我便开始尝试去使用这部分数据来获取主密码。不仅如此,我也想看看是否能够使用这部分数据来解密我们在内存或者硬盘中所发现的文件。

当我在思考如何去利用这个“私钥”的时候,我突然意识到了一件事情—我到现在都还没有尝试在内存中搜索或查找主密码,说不定内存中就包含有主密码呢?

虽然在grep命令的帮助下,我成功地在内存中找到了明文形式的用户名和密码,但是我只在其中的一个快照中找到了这些数据。

我接下来的任务就是不断地打开、关闭、恢复网页标签,在完成了这一系列操作之后,我得出了一个结论:如果网页标签加载完毕,并且成功登录网站的话,大多数情况下我们都可以在内存中找到用户的登录凭证。

但是,在不断地打开或者关闭网页标签之后,我们将很难再在内存中找到完好无缺的数据结构了。虽然这些数据仍然保存在内存中,但是如果你不知道你所要找的数据是什么的话(无论是数据值还是数据结构),你几乎是不可能在内存中找到它们的。

为此,我们就得使用Volatility插件来从内存中提取出这些凭证数据了。这个插件可以使用YARA规则来从内存中自动化提取出我们所需要的数据,有关该插件的内容可以参阅这篇文章[点我阅读]。

我搜索到的数据结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
localadmin@tech-server:~$ vol.py --plugins=/home/localadmin/github/volatility_plugins/lastpass --profile=Win7SP1x86 -f /home/localadmin/Desktop/lastpass-mem.vmem lastpass
Volatility Foundation Volatility Framework 2.5
Searching for LastPass Signatures
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3400)
Found pattern in Process: chrome.exe (3840)
Found pattern in Process: chrome.exe (3840)
Found pattern in Process: chrome.exe (3840)
Found pattern in Process: chrome.exe (3840)
Found pattern in Process: chrome.exe (3912)
Found pattern in Process: chrome.exe (3912)
Found pattern in Process: chrome.exe (3912)
Found pattern in Process: chrome.exe (3912)
Found pattern in Process: chrome.exe (3912)
Found pattern in Process: chrome.exe (3912)
Found pattern in Process: chrome.exe (4092)
Found pattern in Process: chrome.exe (4092)
Found pattern in Process: chrome.exe (4092)
Found pattern in Process: chrome.exe (4092)
Found pattern in Process: chrome.exe (2036)
Found pattern in Process: chrome.exe (2036)
Found pattern in Process: chrome.exe (2036)
Found LastPass Entry for hackforums.net
UserName: peters.lastpass
Pasword: jRvTpQoTHS4OTcl
Found LastPass Entry for facebook.com
UserName: peters.lastpass@gmail.com
Pasword: Unknown
Found LastPass Entry for sainsburys.co.uk
UserName: peters.lastpass@gmail.com
Pasword: mt5JwaPctWFzBj
Found LastPass Entry for leakforums.net
UserName: peterslastpass
Pasword: rmH61HSabrVJ9a2
Found LastPass Entry for facebook.com,facebook.com,messenger.com
UserName: Unknown
Pasword: O3rRJaYNMuoXG7hs
Found Private Key
LastPassPrivateKey<308204BD020100300D06092A864886F70D0101010500048204A7308204A30201000282010100D0D534BEA030F199144DD4B1B0A69D6462BC13CF074B77CDEC0B4C06D3773B39F0D3353D58732D35809E2A45C9A70B94C366DE4E8B591178F5366A4328C96A82A51E8B1573A9546F859EA6C13EB1E08F1F69749598429244B96AFCAE0787CFC4CC19311D80F90679CE4C395FDBF22F9201381E0AEC345C724E1E61CE8EEE0A37EE38B04D5EEA1AB2562D815242E4D6379D23940ACD800921853787F0F1B37F249DE284780CE1D1FFF10FFCE778CD03A442C7A487C47A27D4F11EE98CF5E8B2AA8A7DEE0710B9C2D430CB33EC747E37298E16103493C6DF8A539F4893F30CCFA74D84E5FC40E1ED39316EA038D16748F58AE873704DD61B028940ECB083E7F1790940D4BD2A01C73DBA4AC26A2BB98CE7A2CDF02011102820100624636F04B62539354D955085321324102818100D05799FCC7514DBFC0DEC6E06E2A8715E9E46911DBBFCC59F1569A82930FDBD195A685C1BF13EABB75B46CC8484EB3771E102E76CE3D3756CEF13666C6581861EE23EC11ABB658BA2F815EF2D406FDD85830F6B599443004CEA4B1A79DAAAAEE86755FE354498C770EF3BE2077DD19EE3E7E53A9935FC0D76BD90D3B887F50575FA01A617A43F5D2C44815098207299381229DDA8F91713B7012D8F29A087A3918A2F76A222BA4202E8A0997D63D1EEF02F246DC0A5C0AC869191B9231DCD6D657FB4E6591DDFAF3026522F84E2D1EF2D5C05289EFF9D7E2F2A722374E0204C8FAA326024DF520B97505146AFB1AF7469B862977B1152430911BFA112E76A51C352D7F1B2C39669B4CF102818100FCFCA8B2F2074C1FB357A859AA583651D5DC9EA0446E0B33A7B41D9B7C9955832BEFB4E2151D17DDB851A1F46B16E26ECC6515BCB1C802DD73DA4ACD89083168E2678DE363EF1B45BAA1BA40F845D8396AFC269503F9A4F04D39271F02819A665D47036F0CA3628D78987102818100CEFC910EF956B3590A9A0907F59EB44CD25FF10032DAFE48C359057F75FBA5AF1CC1C6E11E37CF4F825D0E1540B5DA77FF6777FEE55621C1D0EF85D3C12702150D542A90CC8021FA132EF383835DA4358A0781E168897C779F2DA6A834DA20DBFDA4F643738B4DF6BBDD768947D9EC577466E18100D351EC8A77C7582E0A78C5ACA9D86068BB82D721B0841962F959A25A01FA80FFB765DE228798>LastPassPrivateKey
Found Private Key
LastPassPrivateKey<\x00\xb2\x88\x10\x02N;$\x02&\x00\x00\x00>LastPassPrivateKey
localadmin@tech-server:~$

总结

在完成了这一次实验之后,我发现我还有很多工作需要去完成。如果各位对此感兴趣的话,希望大家可以亲自动手尝试一下。大家可以在我的Github中找到实验所需的插件。