Ubuntu明文存储用户wifi密码
听说Ubuntu桌面版会明文存储用户输入的wifi密码。
来做个实验,先随便连几个wifi,随便输个密码,如下图所示:
然后进入存储用户wifi密码的目录:
cd /etc/NetworkManager/system-connections
查看密码,如下图所示:
每一个wifi对应着一个以wifi名命名的独立文件,文件中“psk=”后边便是该wifi的密码,明文存储。可见,Ubuntu桌面版确实明文存储用户输入的wifi密码。
一个完整的wifi文件内容如下所示:
[connection]
id=猎豹免费WiFi700
uuid=a588ff36-3b01-44d0-b3fb-05d1a3cf9606
type=802-11-wireless
[802-11-wireless]
ssid=231;140;142;232;177;185;229;133;141;232;180;185;87;105;70;105;55;48;48;
mode=infrastructure
mac-address=00:71:CC:98:60:FF
security=802-11-wireless-security
[802-11-wireless-security]
key-mgmt=wpa-psk
auth-alg=open
psk=p@ssW0rd
[ipv4]
method=auto
[ipv6]
method=auto
所有信息都是以文本文件明文存储的,除了用户密码外,还保存着wifi名、MAC地址、SSID等信息。
虽然读取该文件需要root权限,但这依旧很不安全,因为这些数据没有任何加密就保存在磁盘上,攻击者有很多方法绕过操作系统的权限控制,读取文件内容。
由于wifi密码要拿去做登录验证,所以存储密码的Hash值显然是不行的。但Ubuntu为何要将一个用户输入的wifi密码保存到/etc目录中而不是用户自己的主目录呢?在Ubuntu中,用户目录是可选加密的,若用户选择了加密自己的主目录,则将密码保存在用户主目录中会更安全。/etc目录不属于某个用户所有,是系统目录。将wifi密码保存在系统目录中,便有各个用户共享的含义。确实是这样,在ubuntu的网络配置中,默认勾选了“All users may connect to this network”(Edit Connections…->选择一个wifi->Edit…->General),如下图所示:
去掉这个选项前的钩,再输入密码,然后去查看该wifi对应的文件,发现其中没有保存明文密码,并出现了
permissions=user:werner:;
以表明该wifi是哪个用户连接的。完整的wifi文件如下所示:
[connection]
id=AJack
uuid=686ada98-1f4d-4bc2-9286-cd9c13fdb323
type=802-11-wireless
permissions=user:werner:;
[802-11-wireless]
ssid=AJack
mode=infrastructure
mac-address=00:71:CC:98:60:FF
security=802-11-wireless-security
[802-11-wireless-security]
key-mgmt=wpa-psk
wep-key-flags=1
psk-flags=1
leap-password-flags=1
[ipv4]
method=auto
[ipv6]
method=auto
在这种情况下,wifi密码又保存在哪里?我在整个磁盘范围内搜索名为“AJack”的文件,结果只找到了一个,就是上面那个。又查了一些资料,也没有找到,只好暂时搁置这一问题。
大兄弟有没有兴趣一起研究一下GnomeKeyring,这个加密过的Wi-Fi密码应该就是保存在这里
好啊,研究研究GnomeKeyring。
Wi-Fi 密码原来是用 GnomeKeyring 保存的,长见识了。