我当时正在看米哈尔·赫鲁·艾克( Michal Hrušeck)关于开源路由器的S版(S 介绍性 )。在演讲中,他展示了他们提供的“蜜罐即服务”(Honeypot as Service)服务,以及它如何让你看到攻击者尝试过的密码。
他们怎么做到的?是否可以在您的linux服务器上记录密码尝试?
发布于 2019-08-29 13:34:45
让我们以sshd为例:
建立到SSH守护进程的连接后,客户端将向服务器发送密码。修改后的sshd可执行文件可以很容易地包含在机器上记录密码的步骤。
在一个具体的示例中,便携的源代码显示,所有密码身份验证的处理都是在auth-passwd.c中完成的,特别是在函数int auth_password(struct ssh *ssh, const char *password)中。
如您所见,函数接收密码作为字符指针。没有什么可以阻止我修改函数,使其如下所示:
/*
* Tries to authenticate the user using password. Returns true if
* authentication succeeds.
*/
int auth_password(struct ssh *ssh, const char *password)
{
// Log the password in the default log file
logit("New login attempt with password: %s", password);
Authctxt *authctxt = ssh->authctxt;
struct passwd *pw = authctxt->pw;
int result, ok = authctxt->valid;
#if defined(USE_SHADOW) && defined(HAS_SHADOW_EXPIRE)
static int expire_checked = 0;
#endif
...发布于 2019-08-29 13:40:30
我认为您的困惑之处在于您想知道如何“在Linux上”记录密码。然而,这并不是关于Linux的(尽管有问题的系统可能运行Linux的一个变体)。
需要记住的是,SSH只是一个协议。要允许SSH连接到服务器,需要一个实际的应用程序。有许多应用程序实现了SSH服务器,所有这些应用程序的行为都会有所不同,即使它们向最终用户提供相同的通用界面。例如,比较一下openSSH (可能是Linux中使用的最常见的ssh服务器)和dropbearSSH (随机选择)。这里我的观点是,当您打开ssh连接时,连接的不是"Linux“。相反,是一些正在实现SSH协议的操作系统上运行的应用程序。
由于登录用户的密码是必需的,SSH服务器当然知道它是什么。这与Facebook第一次登录时可以访问您的密码并没有什么不同,即使它没有保存密码(嗯,他们不应该这样做……)。由于SSH是一种标准协议,任何应用程序都可以在机器上的端口上打开套接字服务器,侦听传入的SSH连接,并根据需要响应。正常的SSH应用程序(如openSSH)将拒绝登录密码以保护用户安全,但这是openSSH开发人员做出的一种选择,这不是SSH服务器的一般要求。
这就引出了我们手头的问题,那就是蜜罐。蜜罐是一种特殊的安全措施,在这里,你操作一项虚假的服务,看起来像一个漂亮而多汁的目标,可能会引起黑客/扫描仪的兴趣。在部署它们时,普通用户不会找到它们,也不会与它们交互。
由于所讨论的人正在操作一台有意吸引黑客和扫描器的服务器,所以它没有运行您典型的SSH服务器。相反,它运行的是一种完全不同的服务器,它接受传入的连接,协商正常的登录过程,记录攻击者的信息(包括密码),然后断开攻击者的连接,或者将它们转储到不授予实际访问权限的假外壳中。
由于“蜜罐即服务”正在运行自己的SSH服务器,他们可以很容易地让它记录用户的密码,因为SSH协议无论如何都必须将用户的密码发送到服务器。
https://security.stackexchange.com/questions/216198
复制相似问题