我是这种东西的新手,想排除中间人攻击。
我正在我的 LAN 中通过 SSH 从 Windows 10 PC 连接到 Raspberry Pi 4,我收到了这条消息。我是系统管理员,所以没有人可以检查。
我发现了很多关于如何解决这个问题的帖子,但我想知道在修复之前我应该怎么做才能真正排除(或确认)攻击。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:0xgFiU5j9W2WgyurDOgORf+qeFQoHf0YE6G92KnrduY.
Please contact your system administrator.
Add correct host key in C:\\Users\\JamesAlesi/.ssh/known_hosts to get rid of this message.
Offending RSA key in C:\\Users\\JamesAlesi/.ssh/known_hosts:2
ECDSA host key for 192.168.1.123 has changed and you have requested strict checking.
Host key verification failed.
通常,您采用的方法始终相同:您通过攻击者不可能操纵的通道验证密钥的指纹。
例如,在我以前的大学里,你可以去计算中心前台拿一张传单,上面有所有重要密钥和证书的指纹列表。如果是你认识的朋友的服务器,你可以打电话给他们,让他们给你读指纹。如果它是托管的托管服务器,一些更注重安全的托管服务提供商可能会提供将指纹邮寄给您。
要点是:如果您有理由相信您的网络连接受到威胁,然后尝试在不使用网络的情况下获取指纹。
对于您的 Raspberry Pi,有几个非常简单的选项:
/etc/ssh/ssh_host_ecdsa_key
。这回答了有关如何验证主机密钥的更具体的问题。现在到你更一般的问题:
为了在您的 LAN 上实施中间人攻击,攻击者需要对您的 LAN 基础设施进行物理访问。因此,如果您想排除中间人攻击,您可以直接追踪您的电缆并寻找“中间人”,即您不认识的设备。尽管要小心:此类设备可能很小且隐藏得很好。
您还可以在您的门锁或您家的其他入口点(窗户等)上寻找闯入的迹象
现在,您可以进行合理性分析:更有可能的是,有人闯入您的家并在您的 LAN 中安装了一个设备,而您却没有注意到,只是为了看看您在用 Raspberry Pi 做什么?还是更有可能之前将 192.168.1.123 分配给不同的设备(或者您更新或重新安装或重新配置您的 Pi)并且旧密钥仍缓存在您的 PC 上?
但是,如果我们谈论的是 WiFi,那么 MitM 攻击不需要物理访问。因此,更有可能有人能够在您不注意的情况下发起此类攻击。然而,问题仍然存在:攻击者想要嗅探你和你的 Pi 之间的连接是什么?
同样,如果您 LAN 上的任何设备也连接到不同的网络(WiFi、邻域网络、Internet),则该设备可能会通过该网络受到危害,从而使攻击者可以访问您的 LAN。
正如上面评论中提到的,被入侵的 Raspberry Pi 是有价值的东西,但任何有能力的攻击者都会知道以不更改主机密钥的方式破坏它。
当您第一次连接到任何主机时,SSH 会保存其标识信息。如果将来此标识发生更改,则会显示此消息。
例如,在重新安装目标系统、将其替换为与您用于连接的 IP/主机名相同的另一个系统或重新生成系统的服务器 SSH 密钥之后,可能会发生这种情况。如果这听起来像您最近所做的事情,那就是原因。
也可能是有人拦截了您的连接(并实际发送了他们的身份证明),但在 LAN 中这不太可能。
从您通常使用的机器登录 Raspberry Pi。注意关键。确认指纹正确。
如果您从未设置任何从任何位置登录 Raspberry Pi 的安全方式,那么您就没有这种方式。下次,在设置机器时这样做。例如,在设置操作系统时,从控制台拍摄密钥指纹的照片。
您的本地网络上是否有其他设备已通过 ssh 连接到,例如其他 Pi:s 或某些常规 *nix 计算机?
如果您使用 DHCP,则分配给一个设备的 IP 地址(有时间限制,以 DHCP“租用”的形式)可能会在稍后重新用于另一台设备。如果您已通过 ssh 连接到一台设备,则 ssh 会记住该 IP 地址的主机密钥。当一个新设备获得相同的 IP 地址并且您尝试使用 ssh 连接时,您会收到上述错误。
许多 DHCP 服务器尝试根据请求 IP 地址的设备的 MAC(以太网硬件地址)分配“准永久”地址,但这并不完美 - 例如,如果 DHCP 可用范围内的每个 IP 地址都已使用有些必须重复使用。或者,如果路由器/家庭服务器/您用于 DHCP 的任何设备被重置或更换。
你没有被黑客入侵。
为什么会有人想要在个人局域网上“中间人”访问 Raspberry Pi?
有人“中间人”通过 Raspberry Pi 在 LAN 内攻击您的可能性微乎其微。如果他们以某种方式破坏了您的 LAN,并且您拥有一台不错的 Windows 机器,他们这样做有什么好处?
任何人做“中间人”的主要原因是为了捕获数据——比如凭证等——然后疯狂地使用它们。他们获得了 Raspberry Pi 的一些凭据,这会导致什么?除非您的 Raspberry Pi 以某种方式进行金融交易等,但我对此表示怀疑。
更有可能的情况是您在 Raspberry Pi 上重新安装了操作系统,这会更改识别签名并最终出现您正在处理的情况。因为这通常是发生这种识别不匹配的原因;有些东西改变了身份。
在非 Raspberry Pi 世界中,如果您将系统磁盘从一台机器交换到另一台机器(例如在硬件升级等中),这种情况可能会发生,甚至在虚拟机上发生这种情况的频率更高,并且在安装/吹走系统非常容易的情况下.
至于以某种方式给你一些你可以自己确认的方法列表,老实说,我概述的常识评估是不可能的。
大多数情况下,尤其是在处理 Raspberry Pi 等相对短暂的设备时,此消息是良性的;也许您插入了不同的 SD 卡,或者重新安装了操作系统,或者将相同的 IP 分配给了不同的设备,或者可能导致新主机指纹的十几种操作中的任何一种。但是,我建议您不要满足于“大部分时间”主机指纹,因为它们很容易验证。
正如其他人已经正确指出的那样,您需要通过受信任的渠道验证主机密钥指纹。换句话说,不要只是通过 SSH 连接到树莓派并运行以下命令,因为这很容易受到您试图排除的相同(潜在)MitM 攻击。在这种情况下,我建议您使用 Pi 的 HDMI 连接、串行或其他受信任的连接来验证主机指纹。
现在,要实际验证指纹,您需要 Raspberry Pi 上的外壳。键入
ssh-keygen -l
(小写字母 'L')并按[Enter]。这将提示您输入密钥的文件名。您想要的密钥应该在/etc/ssh
(它建议的默认路径不包含系统的主机密钥;在此处忽略这些)。查找 ECDSA 密钥,因为这是您的 SSH 客户端报告连接的内容。无论您使用公钥(.pub
扩展名)还是私钥(无扩展名),您都会得到相同的结果,但除非您以 root 身份登录,否则您将只能读取公钥。ssh-keygen -l
然后输入正确的私钥文件名将输出该密钥的指纹。它应该看起来像这样:(该文件名对于您的 Raspberry Pi 可能正确,也可能不正确。请先检查
ls -l /etc/ssh
。)然后,您将仔细比较系统输出的指纹与您
ssh
之前获得的指纹。如果它们匹配,则验证连接,您可以~/.ssh/known_hosts
相应地安全地更新您的本地。如果它们不匹配,那么就会发生一些奇怪的事情,需要进一步调查。您需要使用 100% 受信任的渠道来接收此信息。
最好的方法是直接登录系统 - 即:插入键盘和显示器,或在适当的情况下使用串行控制台。
登录后,运行以下命令之一:
或者:
这将:
ssh-keyscan
- 连接到本地系统的 SSH 服务器,并请求主机密钥127.0.0.1
远程主机……尽管远程执行此操作需要绝对信任远程是它所说的那个人,并且您和远程之间的一切都是可以信任的。127.0.0.1
将通过环回接口路由连接,并将直接与本地系统通信。iptables
(忽略重新路由流量的潜在规则)localhost
实际上可能会将您重定向到另一个主机( using/etc/hosts
),因此请避免使用它。ssh-keygen
-l
-在提供的文件 ( ) 中显示密钥的指纹 (-f ${file}
)ssh-keyscan 127.0.0.1
(ie: option 1) 实际上会连接到正在运行的守护进程,并像任何其他客户端一样查询密钥然后,一旦您有了指纹,请仔细将它们与您尝试连接的远程系统提供的密钥进行比较(即:
SHA256:0xgFiU5j9W2WgyurDOgORf+qeFQoHf0YE6G92KnrduY
在您的示例中)。如果指纹不匹配,那么您已经确认攻击正在进行中,并且您没有与您认为的系统对话。
如果指纹匹配,那就太好了!使用 解决问题
ssh-keygen -R ${hostname}
,然后继续。笔记:
iptables
...更改或重定向如果您怀疑系统受到损害,那么检查那里可能是个好主意。如果没有 100% 可信的通信渠道,就不可能做到这一点。在您的情况下,您可以登录到 Pi,并直接检索密钥。在其他情况下,您可能需要“听从同事的话”……要小心您信任的地方。
在小型本地网络上,您很可能正在与您认为的系统交谈。
如果远程 IP 地址在您的子网中,并且您的网络中没有任何其他未知或可疑设备,则很难构建 MITM 攻击。为了进一步确定,请尝试移除所有其他设备,甚至在您的计算机和远程计算机之间创建点对点链接(尽管在这种情况下寻址和 DHCP 可能会出现问题)。
如果您怀疑您的路由器不可信,请记住它可以向您的系统通告路由和名称(DNS / mDNS / WINS),您的系统通常只会隐式信任。如果互联网可以排除在等式之外,那么除非内部促进,否则无法发挥这种路由/重定向技巧。
...“信任计算”是一个非常大的话题,我们可以将您发送到这里的途径很多...我鼓励您提问/阅读/玩/等等...这是最好的学习方式.
正如在其他答案中已经讨论过的那样……您在这里发现自己最有可能的情况是:
ssh
的另一台主机,最近提供给您的 Raspberry Pi通常,人们会接受第一次连接时显示的指纹,并在未来对此感到满意。
在特别敏感的系统上,您需要在第一次连接时确认指纹完全正确。
如果指纹发生变化,则主机的某些内容发生了变化——例如冒名顶替者或重新安装。
该消息基本上意味着您正在以特定 ip/地址连接到另一台计算机,然后是之前。
为什么除了 MITM 还会发生这种情况?可能是电脑重装了。可能您在 IP 上放置了另一台计算机并完全期待该消息。
在完全通过 LAN 路由连接的情况下,实际攻击而非良性原因的可能性非常低。