Ubuntu明文存储用户wifi密码

  • 2017-09-19
  • 83
  • 2

听说Ubuntu桌面版会明文存储用户输入的wifi密码。

来做个实验,先随便连几个wifi,随便输个密码,如下图所示:

wifi列表

然后进入存储用户wifi密码的目录:

  cd /etc/NetworkManager/system-connections

查看密码,如下图所示:

wifi密码

每一个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配置

去掉这个选项前的钩,再输入密码,然后去查看该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”的文件,结果只找到了一个,就是上面那个。又查了一些资料,也没有找到,只好暂时搁置这一问题。

评论

  • starrychou回复

    大兄弟有没有兴趣一起研究一下GnomeKeyring,这个加密过的Wi-Fi密码应该就是保存在这里

    • Werner回复

      好啊,研究研究GnomeKeyring。
      Wi-Fi 密码原来是用 GnomeKeyring 保存的,长见识了。