Gmail 密码泄露分析

0x00 事件回放

上周的苹果 iCloud 艳照门事件让众人“高潮”了一回,紧接着这周 Gmail 密码泄露事件又一次把大家推上新的“高潮”。

9月11日,一份名为“google_5000000.7z”的压缩文件被泄露在一家俄罗斯比特币论坛上,文件包含了五百万的gmail用户的账号和密码。发布者称,60%的账号和密码都是可用的,因此接近300万 Gmail 账号存在风险。

有黑客分析后发现,将近一半的账号和密码是正确的,另外有些账号因为“可疑的登录”已经被Google停用,这说明,在此之前这些 Gmail 账号已经不安全。

为了你的 Gmail 账户安全,最好的方法就是开启 两步验证 ,同时在你的设备中下载 Google Authentication。

0x01 数据分析

泄露当天,最先放出来的裤子里面仅仅包含500万个邮箱,这对于我们来说毫无用处。到了中午,终于有大牛放出了带密码的完整裤子。到目前为止,我知道的网上目前有3个版本的裤子,真假性就只能靠自己辨别了。这里放出我下载的裤子:

链接: http://pan.baidu.com/s/1o6LpjgI 密码: i4iw

拿到一个裤子后,一般都会做两个事情:

  • 把内容整理后导入自己的社工库
  • 取出密码部分做成爆破字典

PS. 由于我一直以来都只是收集裤子,从来没有整理过,所以第一点就无视吧 (╯‵□′)╯︵┻━┻

下面来写一下做字典的过程。

这个Gmail.txt里面有4929090条数据,格式如下:

邮箱:密码

粗略一看,发现密码部分其实有不少脏数据,比如说:

742da66d1b70bdf2e4e38321b4872b68 /* md5 或 sha1 */
<br/><b><fontcolor=darkred> /* html 标签 */
&<} /* 无意义的符号串 */

所以我们需要在取出数据的同时把脏数据消灭掉。大致的方法是:

  1. :分割每一行
  2. 对后半部分进行判断,只保留6~16位的字符串

下面用 python 实现:

def getPasswd(filename) :
    passwd = [] #存放密码
    for line in open("Gmail.txt", "r") :
        p = line.split(":")[1]
        if 5 < len(p) < 17 :
            passwd.append(p.replace("\r", "").replace("\n", "").replace("\t", "").replace(" ", ""))
    return passwd

拿到相对干净的密码后,我们需要对密码去重。用 python 有两种方法解决:

  • 定义一个空list,判断当前字符串是否已存在,不存在则把该字符串存入 list 中。
  • 定义一个空dict,判断当前字符串是否已存在 key 中,存在则对应 value 加1,不存在则令当前字符串的对应 value 为1。

从性能上看,当数据达到10W级别的时候,list的执行时间会明显变长,而且会越来越慢;而dict完全没有这个问题。所以我们采用字典方式进行去重:

def analysis(passwd) :
    pw_dict = {}
    for pw in passwd :
        if pw not in pw_dict :
            pw_dict[pw] = 1
        else :
            pw_dict[pw] += 1
    return pw_dict

我们拿到pw_dict,里面的key就是去重后的密码,而每一个密码对应的value就是密码出现的次数。这里体现了用dict的另外一个好处,就是可以导出密码 TOP1000,或者 TOP100 等。这里需要借助一下sorted函数倒序输出key序列,代码如下:

def exportDict(pw_dict, num=0) :
    count = num > 0 and num or len(pw_dict)
    tmp = 0
    f = open("result.txt", "w")
    for pw in sorted(pw_dict.items(), key=lambda d:d[1], reverse=True) :
        f.write(pw[0] + "\n")
        tmp += 1
        if tmp >= count :
            break
    f.close()

0x02 总结

数据分析到上面基本就结束了。种种迹象表明,这是一起撞库事件,而不是 Gmail 的账号信息泄露。首先,对于弱密码,只要你登录 Gmail,它肯定会提示你修改密码,而且不改而不让用。所以说,这里大部分弱密码对应的邮箱应该有好长一段时间没有使用了。另外,如果是直接拖 Gmail 的数据库,会产生这么多脏数据吗,显然是不现实的。最后,Google 官方也否认此事是由于 Gmail 安全漏洞导致的,称并未发现 Gmail 系统被入侵的证据。所以大家还是放心使用 Gmail 吧~

附上 top100 的密码及出现次数:

123456          48003
password        11593
123456789       11162
12345           8106
qwerty          5925
12345678        5253
111111          3524
abc123          3016
123123          2990
1234567         2915
1234567890      2708
1234            1986
iloveyou        1984
password1       1855
000000          1745
27653           1722
zaq12wsx        1539
tinkle          1534
qwerty123       1515
monkey          1459
target123       1419
dragon          1398
1q2w3e4r        1385
asdfghjkl       1348
654321          1347
123qwe          1329
123321          1329
friendster      1284
letmein         1256
princess        1248
1qaz2wsx        1200
sunshine        1164
passw0rd        1147
trustno1        1109
qwertyuiop      1105
master          1058
tester1         1050
666666          1045
superman        1032
taishan2011     1009
computer        1005
aaaaa           1003
fuckyou         989
shadow          986
qazwsx          978
zxcvbnm         954
samsung         950
abcd1234        943
aaaaaa          921
echizen18       919
welcome         907
121212          892
qazwsx123       885
pokemon         884
987654321       851
bismillah       840
hello123        839
1q2w3e          837
112233          831
qwe123          830
daniel          819
asdfgh          807
90801           804
asdfasdf        802
1234qwer        790
soccer          787
cheese          783
killer          779
whatever        778
michael         777
baseball        770
12345678s       750
asdasd          746
123456aa        744
friends         735
159753          732
football        726
liverpool       712
pakistan        701
123654          697
matrix          697
purple          697
asdf1234        696
charlie         687
123abc          685
polska          683
starwars        681
q1w2e3r4        679
freedom         675
krishna         670
jordan          665
lol123          658
google          658
hello           643
hannah          639
secret          636
7777777         632
spiderman       631
deepfrequency   630
wholefoo        629
« 返回