Ssh

虛擬 SSH 伺服器?

  • August 22, 2022

我正在尋找一個虛擬 SSH 伺服器,它只會拒絕任何登錄,即使他們使用真實係統帳戶的憑據。當我搜尋時,我正在尋找honeypot,但我不希望黑客意識到他們正在玩遊戲。我希望他們認為他們找到了實際的伺服器,儘管“真正的”SSH 伺服器將在另一個埠上執行。

你能指點我一些可以做到這一點的軟體嗎?

更好的是集成fail2ban的方法,這樣他們真的認為他們正在訪問實際的伺服器!

編輯:我正在執行 Debian Linux,如果這有什麼不同的話。

使用 /etc/ssh/sshd_config 與:

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

Match LocalPort 22
     DenyUsers *

您將在通常的日誌文件中找到嘗試/拒絕,並且可以繼續使用諸如 fail2ban 之類的工具。

任何 ssh 伺服器都可以做到這一點,但需要仔細配置才能永遠不允許登錄。使用 OpenSSH 或任何會為日誌掃描軟體發出正確日誌消息的工具。然而,這會使主機的設置複雜化;例如,一天 26 小時工作的系統管理員可能會混淆假貨和真貨,並鎖定合法使用者,或者可能錯誤地配置假伺服器以允許真正的身份驗證。文件(更多工作!)可能有助於限制此類問題。

聰明的攻擊者最終會在不同的埠上找到 SSH,假設它直接暴露在網際網路上,所以這種方法可能對他們不是很好,特別是如果他們從其他來源獲得了真實的登錄憑據。太多的機器人在所有埠猜測密碼都不會關心;對於那些顯示 SSH 登錄橫幅然後超時的簡單腳本,或者某些東西可能就足夠了,但是你會浪費更多的 CPU 和一些網路頻寬,而不是簡單地阻止 TCP/22 並在真正的 SSH 伺服器執行的埠周圍移動(再次,假設它是直接可用的,而不是在 VPN 或其他層之後)。簡單的伺服器最好不要有任何安全漏洞,也不要浪費太多的CPU,也不要消耗太多的socket。它可能看起來像

#!/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 後面),或者他們不會在乎他們是否找到了一些您的安全性中的另一個漏洞(“嗨,這是 Bob 的 IT,您能告訴我您的 SSH 配置嗎,我們正在進行審計”),並且設置使系統管理員的生活變得更加困難,也可能使使用者更加困難。如果有任何優點,這裡看不到太多。

引用自:https://unix.stackexchange.com/questions/714473