记一次排查阿里云 git 帐号异常登陆
问题描述
公司最近的阿里云 ECS 最近经常爆出服务器安全登陆问题:
异常登录-ECS在非常用地登录
……
登录时间:2019-07-15 21:17:20
登录账号:git
登录类型:SSH
登录源IP:14.28.45.14
……
必要条件
只有一个硬性条件是需要的,那就是 ssh 服务是日志级别调高,能够记录到必要的信息:
LogLevel DEBUG
之后在 /var/log/secure 文件里会产生一些 ssh 日志。
自从运维被辞退后,公司因为之前的安全和混乱问题,想重新迁移内部搭建的 gitlab,而我在负责搭建和迁移的在过程中,为了调试开启的 debug level,结果阴差阳错反倒得以排查问题……
着手解决
针对阿里云的警告,我们已经有了 IP 和时间,根据时间,我们可以在 ssh 的日志文件看到大致如下的信息:
Jul 15 20:40:58 xxx sshd[25982]: Received disconnect from xxx.xxx.xxx.xxx port xxxxx:xx: disconnected by user
Jul 15 20:40:58 xxx sshd[25982]: Disconnected from xxx.xxx.xxx.xxx port xxxxx
Jul 15 21:04:48 xxx sshd[28946]: Accepted publickey for git from xxx.xxx.xxx.xxx port xxxxx ssh2: RSA SHA256:WXdCxxxxxxxxxxxxxxxxxxxxxxxxx
这里我们可以看到 ssh 的公钥 sha256,该值可以通过如下产生:
ssh-keygen -E sha256 -lf $public_key_path
这里有个断定:假如该值不是我们 gitlab 认识的用户公钥生成的,那一定是被入侵了。
每次在 gitlab 添加公钥,都会在 git 的账户下追加的,格式如下:
command=”/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-94”,no-port-forwarding,no-X11-forwarding,no-agent-for warding,no-pty ssh-rsa AAAAB3xxxxxxxxxxxxxxxxxxxxxxxxx
所以我们只要在 git 用户下执行命令:
cat ~/.ssh/authorized_keys | grep ^comm| awk '{print $3" "$4}' | while read i; do echo "$i" > /tmp/key && ssh-keygen -E sha256 -lf /tmp/key | grep "WXdCxxxxxxx" ; done; rm /tmp/key
有输出,则说明是 gitlab 上面某个用户的公钥了,很大程度就是没问题的。
如果要确定是某个用户,只要找到该公钥里在 gitlab 里面的 id,如上面 key-94,就可以在 gitlab 找到是谁的了。
兜兜转转了一圈,找到对应 key 的同事询问,才知道他一直是开着外地全局代理拉代码……