Gluon: 在正常操作期间更新节点位置

创建于 2014-02-13  ·  14评论  ·  资料来源: freifunk-gluon/gluon

昨天,我一直在与其他 freifunkers 谈论 Gluon 的新功能。 我得出的结论是,无法远程更新节点的位置是一个大问题。 这主要是由于设置节点的实际工作流程与我们预期的不同。

工作流程不匹配

我们预期的工作流程如下所示:

  1. 用户想要设置一个新节点,
  2. 准确地考虑将它放在哪里并检索该位置的 WGS84 坐标,
  3. 安装固件,
  4. 访问配置模式,
  5. 设置位置,
  6. 在所述位置的地方,
  7. 向社区提交公钥。

然而,更常见的工作流程似乎是:

  1. 用户想要设置一个新节点,
  2. 安装固件,
  3. 访问配置模式,
  4. 提交公钥,
  5. 考虑把它放在哪里,
  6. 将节点放置在所需位置。

本质上,用户在进入 configmode 时不知道节点将位于何处,并在此时强迫她检索它是一种负担。 将节点移动到新位置时,这也是一个问题。

建议的解决方案

我们将添加一个简单的代码字[1],用户可以在配置模式中设置。 此代码字将允许更改状态页面上的节点位置。 它不会是 root 密码,也不会允许登录。它只是用于验证节点经度和纬度变化的共享秘密。

它不允许更改位置是否共享。 这将防止攻击者使隐藏节点可见。 如果用户希望更改其节点的可见性,她必须再次通过 configmode。

它不允许更改主机名。 如果由攻击者完成,我认为更改节点主机名可能有害。 同样,需要 configmode。

它不允许更改码字本身。 因此,攻击者在获得代码字的知识后将无法将节点锁定到某个位置。 再次,configmode 强制执行。

如果未设置码字,则根本无法更改位置。 在这种情况下,用户将不得不再次访问 configmode 以更新位置。 就像现在一样。 对于“重要”节点,我们应该鼓励这样做。

在我看来,这三个属性将防止攻击者严重损害节点,从而使我们能够鼓励用户的所有节点重复使用代码字。 嗅探网格中的流量的攻击者可以获得比代码字更有价值的信息,如果他想弄乱地图,直接注入或操纵 alfred 包。 实际上,代码字方法将(可能只是一点点)比我们当前的 wiki 方法(任何人都可以编辑)更安全。 尽管如此,我不喜欢通过网格以明文形式发送代码字,但我也不希望将其限制为下一个节点地址(屋顶上的某些节点可能无法通过下一个节点访问,或者可能有太多节点靠近在一起所以用户无法选择所需的节点),我认为我们应该在以后的 Gluon 版本中解决这个问题。

感谢阅读,感谢 Linus 和我就这个问题与之交谈的其他所有人的意见! 请在评论中让我知道您对此有何看法。

(我有没有提到状态页面可以显示地图,以便用户可以在不了解 WGS84 的情况下放置她的节点?)

enhancement question

最有用的评论

另一种选择可能是使用 SSH 反向隧道访问特殊的配置页面。 这将要求用户在配置模式期间提供她的 SSH 公钥。

所有14条评论

好在你在括号中提到了最后一点,因为它说服了我。 ;-P

@TX 和我就将配置部分放在 IRC 上的状态页面中进行了大量讨论,我仍然很不舒服使状态页面可读写和基于脚本(因为,你知道,它打开了安全漏洞的可能性)。 而且我仍然在“密码字”中看到最大的问题:人们会在那里盲目输入他们常用的密码,无论多么大、粗、粗和闪烁警告都不要这样做。 而且码字的设置真的应该到专家模式了,我想。

如果实现了这一点,也许可以使用 HTTP Digest 实现身份验证? 这样,攻击者将不得不使用 MITM 而不是简单的嗅探。

是的,我同意工作流程问题。 我认为这是一个足够亲吻的解决方案。 但是用户仍然需要弄清楚节点的IP地址才能访问该接口。 所以我建议我们应该在路由器向导的最后一页显示可能的 http ipv6 链接。

但需要担心的是,实现此功能会引发其他抱怨,即功能 X 应该可以以类似的方式访问。 我的观点是,我们不应该向用户扔石头,而且安装技术的用户应该意识到并能够管理它。 特别是如果它是室外屋顶安装。

压缩:实施它,但准备好你的论点。

HTTP 摘要

我很想使用基于摘要的身份验证。 不幸的是,uhttpd 不支持它。

安全问题/代码注入

我确定我们可以很好地处理它。我没有听说过 luci 有任何代码注入问题,所以可能只有几个。我们也可以运行模糊器来测试它。

代码字/用户密码

我们可以使 configmode 上的输入字段成为普通字段(即没有星号),我们绝对应该添加简短但简洁的安全风险解释,并再次阻止用户设置代码字。

如果他们仍然输入他们的标准密码,我们无能为力,无论如何他们都会遇到麻烦。

链接到节点

这确实是一个没有解决的问题。 我可以想象在代码字输入字段的正下方显示节点的 IPv6 地址,例如:“将此 [链接] 加入书签以在节点运行后更改其坐标。”

其他类似的功能请求

我故意将范围缩小到非常狭窄,因为我知道其他问题。 我仍然想实现的更大目标是摆脱 configmode 并在正常操作期间通过网格远程完成所有操作。 但是,为了确保安全,我们还有很多问题需要解决。

如果有人请求类似的功能,我们应该将他引导到这个问题或一个 wiki 页面总结它。 在任何一种情况下,我们都应该要求他写一篇关于所需功能的综合问题,解决这里提到的所有安全问题以及他与其他开发人员的讨论。 如果他成功了,他可能确实有一个有效的观点。

一次性码字

我只是有另一个想法,但我不想在这里讨论它,因为它可能会过多地扰乱工作流程。 在我目前的解决方案被接受或拒绝后,我们肯定会讨论它。

码字可以一次性使用。 例如,第一个更改坐标(在状态页面上)并输入正确代码字的人成功。 之后,它被锁定并且必须在配置模式中设置另一个代码字。

这可以是可选的,但我担心它可能会使 configmode 再次变得复杂(2 个复选框,3 个输入字段来设置坐标)。

HTTP 摘要不应该也可以在 uhttpd 后面的脚本中实现吗? 毕竟,这只是标题和其他东西......

我绝对反对在第一次胶子发布时实施这个。 我们拒绝让状态页面变得更好,这是一个相对不重要的变化,所以我认为我们不应该在第一轮中抛出这一堆问题。

它没有标记里程碑,所以它绝对不是 2014.1 的亮点,但是如果我们同意建造它,它可能会进入 2014.1。

你是对的。 HTTP 摘要可以仅使用标头来实现。

回到基于密码的身份验证对我来说似乎是一个巨大的飞跃。

我以为我们已经找到了地图问题的解决方案? 几乎所有用户在设置节点时都处于 WLAN 中,因此我们只需从 Internet 加载地图即可。 我们只需要为没有的情况提供一个好的回退(输入字段)。

而且我没有看到用户在某处安装节点时必须返回配置模式的问题。

另一种选择可能是使用 SSH 反向隧道访问特殊的配置页面。 这将要求用户在配置模式期间提供她的 SSH 公钥。

当节点首先连接到 freifunk 网络(通过网状网络或 vpn)时,为什么不通过http://node.ffhh访问一个特殊的配置页面。 如果owner没有访问config模式,freifunk将无法工作。 也许将重置按钮作为某种身份验证(“在 30 秒内按下此 html 按钮和重置按钮以允许配置节点”)。

我正在考虑将其视为某种即插即用设置,并在首次启动时自动注册节点。 与 freifunk 网络(mesh 或 vpn)的自动连接将允许显示地图等。

如果节点已经在某个远程位置,我认为不可能进行某些硬件交互。 同样对于设备,例如 ubnt 设备,访问硬件按钮有点困难。
我们应该考虑基于 ssh 的配置接口,而不是一些直接的 http 接口。
然后可以通过第三方 https 安全接口访问。
实现 ssh 配置接口需要用户具有特殊的配置 shell,
这不应允许任何其他交互。

现在有什么解决办法吗? 有人已经在本地实现了这样的东西吗?

hexa 提出了使用基于时间的 OTP(即 RFC 6238)进行身份验证的想法。 我有点喜欢这种方法。 为此,将向用户显示用于设置 OTP“客户端”(即智能手机)的二维码(+字符串)。 用户必须能够重置令牌(或完全禁用该功能)。

这远不是使用状态页面(使用任何身份验证模式)轻松设置地理的方便想法..但是如果你有 ssh 连接并且你不害怕终端 - 这里有一些有用的 minisripts,如lat lon alt location geoguess https:/ /github.com/viisauksena/gluon-banner/tree/master/files/usr/bin/您可以默认添加到您的节点或固件

什么大提示

在继续之前,请务必记下地理坐标

在全新安装后第一次调用配置模式时只会显示一次?

@blocktrron @mweinelt @rotanid我们可以关闭这个吗?

NeoRaider 说

而且我没有看到用户在某处安装节点时必须返回配置模式的问题。

我认为这是真的...回到配置模式是可行的。 这里不需要过于复杂的解决方案,而且这在 5 年内没有实施。 所以这可能永远不会完成......

此页面是否有帮助?
0 / 5 - 0 等级