查找 ssh 连接的所有者并生成进程

查找 ssh 连接的所有者并生成进程

我管理的这台服务器会定期(每分钟几次)尝试通过 tcp 端口 22 连接另一台机器。(ssh)

我的问题:我如何才能找到产生此连接的过程?

我已经检查了什么:

  • 以太网接口上的 tcpdump 捕获 + 馈送到 wireshark => 结果并不那么有趣,除了它似乎是一个标准加密的 SSH 连接,流的重组并没有给我有用的信息,因为它(当然)是加密的。

  • lsof 脚本:我将 lsof 已知的所有文件访问转储到一个文件中,每次运行间隔 1 秒,共约 60 次。我可以在日志文件中看到连接设置,但在它周围,我没有发现任何有用的信息:

    ...
    ssh        8478     root    3u     IPv4             945966                 TCP servername:randomport->destinationserver:ssh (ESTABLISHED)
    ...
    

它看起来属于 root 用户。重复了几次该过程,但没有识别出任何有趣的东西。

  • netstat 显示:(netstat -ntap)

    tcp        0      0 servername:randomport  destinationserver:22   TIME_WAIT   -
    tcp        0      0 servername:randomport  destinationserver:22   TIME_WAIT   -
    

当我记录足够多的迭代次数时,我发现它每分钟下降到一次 time_wait cnx 然后又回到 2 次。

  • crontabs:

对于启动某些 ssh cnx 的任何用户,均找不到 crontab,/etc/cron* 文件和目录中没有任何关于 ssh 的信息

  • 启动 auditd

添加了此规则:

    auditctl -a exit,always -F arch=b64 -S connect -k MYCONNECT

除了它看起来确实像具有相同源和目标 IP 等的 ssh 连接之外,什么也没学到。

  • 目标服务器不在我的控制之下,但管理它的人向我展示了一个日志,它看起来像一个 ssh cnx,它无法通过公钥身份验证,目标机器上根本没有放置任何密钥。这个目标服务器是一个类似于 Linux 的存储设备(但实际上不是)。

我不知道这个是从哪里来的。

如果我找不到这些无用连接的来源,我至少可以使用 iptables 来阻止它们,但这当然不是那么好。

谢谢任何提示。

答案1

我很想使用 auditd 来(简要地)收集有关任务创建的信息,看看我是否可以从中恢复过来

auditctl -D
auditctl -a task,always 

然后仔细查看结果

ausearch -i -sc execve

此外 lsof 还提供了 PID,因此你可以尝试

ps -p <PID> -o ppid=

答案2

可以尝试的一件事是将包装器脚本放在标准 ssh 二进制文件周围,并让该包装器脚本记录 ID 和时间。这只是我脑海中的想法,所以可能需要一些工作。

mv /usr/bin/ssh /usr/bin/ssh.real 

代替

在 /usr/bin/ssh 中

使用这个脚本:

#!/usr/bin/perl
use Sys::Syslog;                        # all except setlogsock()
use Sys::Syslog qw(:standard :macros);  # standard functions & macros
openlog('ssh', "ndelay,pid", "auth");   # or whatever is appropriate other than auth
syslog('info',"started by $ENV{'USER'}"); 
exec '/usr/bin/ssh.real',  @ARGV;

相关内容