流浪汉默认不安全?

时间:2013-02-05 19:48:01

标签: security vagrant

编辑2 :TL; DR: 2013年答案是肯定的,但此漏洞已修复

按照vagrantup.com上的入门说明,我似乎最终得到了一个在端口2222上接受SSH连接的虚拟机,这样任何人都可以获得对我的VM的root访问权限并使用默认值读取我的主机工作目录凭证(用户名=密码= vagrant或vagrant_insecure_private_key)。

这是真的吗?如果是,为什么它不被视为一个巨大的安全漏洞?如果我将敏感数据复制到VM怎么办?

编辑:对于那些认为互联网上的任何人能够阅读您的资源并在您的VM上执行任意代码的人并不是那么糟糕的人,我建议您阅读本节中的“突破”部分博文http://blog.ontoillogical.com/blog/2012/10/31/breaking-in-and-out-of-vagrant/

简而言之:“按预期”运行Vagrant也可以让任何人闯入您的主机/开发机器(例如,使用恶意git post-commit挂钩)。

6 个答案:

答案 0 :(得分:96)

简短回答是

<强>为什么吗

在构建Vagrant基本框(手动或使用像Veewee这样的工具进行自动化)时,构建器会遵循定义以下内容的vagrant base boxes specifications

  1. 用户rootvagrant使用 vagrant 作为密码
  2. 用户vagrant的公钥认证(无密码)。
  3. Vagrant项目为SSH公钥身份验证提供了一个不安全的key pair,以便vagrant ssh可以正常工作。

    因为每个人都可以访问私钥,所以任何人都可以使用私钥登录您的虚拟机(假设他们知道您的主机IP,端口默认为2222,作为转发规则。)

    不安全的OOTB。但是,您可以从~vagrant/.ssh/authorized_keys中删除可信密钥并添加您自己的密码vagrantroot,然后将其视为相对安全。

    <强>更新

    自Vagrant 1.2.3起,默认SSH转发端口绑定到127.0.0.1,因此只允许本地连接[GH-1785]。

    重要更新

    由于Vagrant 1.7.0(PR #4707)Vagrant将使用第一个vagrant up上随机生成的密钥对替换默认的不安全ssh密钥对。

    请参阅CHANGELOG:使用默认的不安全密钥对,Vagrant会自动将其替换为第一个vagrant up上随机生成的密钥对。 GH-2608

答案 1 :(得分:10)

我已经把这个问题作为流浪汉的github存储库上的问题提出来了。开发人员表示,他们将解决转发端口外部可用的问题。但是,开发人员不接受有关从VM中破坏主机环境的问题。我认为他们是危险的错误。

https://github.com/mitchellh/vagrant/issues/1785

突破vm比链接的博客帖子更容易。您不必依赖git钩子来破坏主机,只需将任意ruby代码放入Vagrant文​​件中。

如果可以的话,我会在VM沙箱中运行vagrant。因为我做不到,所以我用防火墙做了。

最好有配置规则来添加安全的ssh密钥,并删除不安全的密钥和默认密码。

答案 2 :(得分:9)

我编写了这个简单的内联shell配置程序,用我的id_rsa.pub替换authorized_keys。配置完成后,不能使用insecure_private_key进行身份验证。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

# ...

  config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'" # avoids 'stdin: is not a tty' error.

  config.ssh.private_key_path = ["#{ENV['HOME']}/.ssh/id_rsa","#{ENV['HOME']}/.vagrant.d/insecure_private_key"]

  config.vm.provision "shell", inline: <<-SCRIPT
    printf "%s\n" "#{File.read("#{ENV['HOME']}/.ssh/id_rsa.pub")}" > /home/vagrant/.ssh/authorized_keys
    chown -R vagrant:vagrant /home/vagrant/.ssh
  SCRIPT

end

答案 3 :(得分:7)

从Vagrant 1.2.3开始,默认是绑定到localhost而不是公共接口,避免了外部连接问题。

答案 4 :(得分:1)

只是想补充说有一个Vagrant插件可以解决这个问题:vagrant-rekey-ssh。它会更改VM的默认密码,并删除不安全的SSH密钥。

答案 5 :(得分:0)

我想解释为什么Vagrant不一定像你想象的那样不安全。

我首先要说的是,我相信你们大多数人都已经知道,由于这些盒子的共享方式,有必要保持对Vagrant盒子的开放访问。出于这个原因,我认为主要的安全问题是在下载框后不会更改默认凭据。以桥接模式运行此类计算机将允许网络上的某人使用默认凭据进行ssh。

在我看来,这些盒子背后的想法是任何人都可以下载它,并在它拥有后保护它。我的vagrant安装使用随机生成的新ssh密钥替换默认密钥。我不确定是否使用插件,但我很想知道无密码的sudo和默认密码是否也存在安全风险。