环景:

Ubuntu16.04

问题描述:

如何发现隐藏的ssh登录行为

解决方案:

一、测试

1.正常的登录服务器

输入 w 命令显示

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/13   192.168.1.21    16:16    1.00s  0.05s  0.01s w

输入 last 命令显示

root     pts/13       192.168.1.21    Mon Feb  7 16:16   still logged in

2.ssh隐藏登录w和last看不见记录

ssh -lroot 192.168.1.111 /bin/bash

root@192.168.1.111’s password:

输入密码登入成功

ls

clearIndexdata.log
core
sensors
swappiness~
swappinesz~

3.输入 w 命令显示

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/13   192.168.1.21    16:16    1.00s  0.05s  0.01s w


4.输入 last 命令显示

root     pts/13       192.168.1.21    Mon Feb  7 16:16   still logged in


5.为什么用ssh -lroot 192.168.1.111 /bin/bash

w和last都没有记录

w命令显示信息来源于utmp,last 来源于wtmp,并不是所有程序登录的时候都会调用utmp 和wtmp 日志记录接口,只有交互式会话,才会调用utmp 和 wtmp的日志记录接口,比如 通过tty 或者pts或者图形界面登录的都会调用utmp 和wtmp 日志记录接口,我们在使用w 和last 命令的时候就会发现登录信息

6.ssh -lroot 192.168.1.111 /bin/bash 为什么不属于交互式会话

ssh -lroot 192.168.1.111 /bin/bash 其实就相当于登录之后直接调用bash这个名,此时系统没有为其分配tty,不算一个完整交互式会话,只不过bash 接受输入,然后有输出,让我们误以为是交互式会话,其实不然,你可以将/bin/bash 替换成//bin/ls 试一下,就是简单执行以下就退出了

7.还有一种看起来更像是交互式会话的,但实际却不是的一种登录技巧,这种方式也会将登录行为隐藏于w和last 命令

ssh -T root 192.168.1.111 /bin/bash -i

-T 表示不分配伪终端 (正常的会话,在分配伪终端之后才会调用utmp和wtmp的日志接口)

/bin/bash -i 表示在登录之后 调用bash命令

-i 表示是交互式shell

二、如何发现隐匿的ssh登录行为

如果是隐藏的ssh正在进行连接,可以通过lsof 或者 netstat 或者ps 命令发现

1.通过lsof发觉异常ssh登录

 lsof -i:22 | grep EST
sshd    26627         root    3u  IPv4 114971667      0t0  TCP 192.168.1.111:22->192.168.1.21:64035 (ESTABLISHED)
sshd     1788         root    3u  IPv4 114723410      0t0  TCP 192.168.1.111:22->192.168.1.23:50812 (ESTABLISHED)

两条已建立的连接,一条是通过pts/0正常登录的,一条就是隐藏于w和last的ssh登录

2.通过ps命令发现异常ssh登录

ps -ef | grep ssh
root     26627  1777  0 17:08 ?        00:00:00 sshd: root@notty

这里有个notty的 sshd 进程,说明就是通过上面隐藏于w和last命令的ssh登录行为

3.如果是历史ssh 隐藏登录行为,如何找出历史登录行为呢

通过分析/var/log/auth.log 日志(有的系统是/var/log/secure)

cat /var/log/auth.log
Feb  7 17:08:28 GR-TR sshd[26627]: Accepted password for root from 192.168.1.23 port 62035 ssh2
Feb  7 17:17:19 GR-TR sshd[26627]: Disconnected from 192.168.1.23 port 62035

从 Accepted password for root from 192.168.1.21 一行看出ssh的登录时间

从Disconnected from 192.168.1.21 一行看出ssh的退出时间

从auth.log中的分析和 last 对不上,那么这些对不上的登录行为有可能就是隐藏方式登录