虚拟 SSH 服务器?

虚拟 SSH 服务器?

我正在寻找一个虚拟的 SSH 服务器,它会简单地拒绝任何登录,即使他们使用真实系统帐户的凭据。当我搜索时,我发现了蜜罐,但我不希望黑客意识到他们正在玩游戏。我希望他们认为他们找到了实际的服务器,尽管“真正的”SSH 服务器将在另一个端口上运行。

你能指点我一些可以完成这个任务的软件吗?

更好的方法是集成fail2ban,这样他们真的认为他们正在访问实际的服务器!

编辑:我正在运行 Debian Linux,如果这有什么区别的话。

答案1

使用 /etc/ssh/sshd_config :

# Fake std port, blocked:
Port 22
# non-std port for real service:
Port 222    
[....]

Match LocalPort 22
      DenyUsers *

您将在通常的日志文件中找到尝试/拒绝,并且可以继续使用诸如fail2ban之类的工具。

答案2

任何 ssh 服务器都可以执行此操作,但需要仔细配置以永远不允许登录。使用 OpenSSH 或任何可以为日志扫描软件发出正确日志消息的方法。然而,这会使主机的设置变得复杂;例如,一天中第 26 小时工作的系统管理员可能会将假冒的服务器与真实的服务器混淆,从而锁定合法用户,或者可能错误配置假冒的服务器以允许真正的身份验证。文档(更多工作!)可能有助于限制此类问题。

聪明的攻击者最终会在不同的端口上找到 SSH,假设该端口直接暴露在 Internet 上,因此这种方法可能对他们来说不是很好,特别是如果他们从其他来源获取了真实的登录凭据。太多的机器人在所有端口猜测密码并不会在意;对于那些显示 SSH 登录横幅然后超时或其他情况的简单脚本可能就足够了,但是您会因为简单地阻止 TCP/22 并在真正的 SSH 服务器运行的端口上移动而浪费更多的 CPU 和一些网络带宽(再次假设它是直接可用的,而不是在 VPN 或其他层后面)。简单的服务器最好没有任何安全漏洞,并且可能不应该浪费太多的CPU,也不应该消耗太多的套接字。它可能看起来像

#!/usr/bin/env expect
# fakesshd - present a banner and not much else (we hope)

set listenport 2222
set message SSH-2.0-OpenSSH_9.0
set close_milliseconds 9999

# if on OpenBSD, https://github.com/thrig/tcl-pledge
#package require pledge
#pledge {dns inet stdio} NULL

proc banner {socket clientaddr clientport} {
    global close_milliseconds message
    puts $socket $message
    flush $socket
    after $close_milliseconds close $socket
}

socket -server banner $listenport
vwait the_heat_death_of_the_universe

然而,普通用户或监控系统可能会连接到错误的 SSH 端口,然后可能将其 IP 地址纳入黑名单或 IP 信誉系统。这恐怕不是一个好的结果。过度劳累的系统管理员还可能连接到错误的端口,然后除了他们确实需要处理的其他事情之外,还浪费时间尝试调试失败的原因。

因此,愚蠢的机器人并不关心(只是将它们关闭?),聪明的攻击者会找到真正的端口(您需要做更多的工作来移动端口,或者将其放在 VPN 后面),或者不会关心他们是否找到了一些端口。安全中的另一个漏洞(“嗨,我是 IT 部门的鲍勃,你能告诉我你的 SSH 配置吗?我们正在进行审核”),并且该设置使系统管理员甚至用户的生活变得更加困难。这里没有看到太多的优点。

相关内容