Linux应急响应之入侵排查

账户安全

1、用户信息文件 /etc/passwd

# 格式:account:password:UID:GID:GECOS:directory:shell
# 用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的 shell
root:x:0:0:root:/root:/bin/bash
Bash
# 查看可登录用户:
cat /etc/passwd | grep /bin/bash
# 查看UID=0的用户
awk -F: '3==0{print1}' /etc/passwd
# 查看sudo权限的用户
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
Bash

注意:无密码只允许本机登陆,远程不允许登陆,原则上作基线安全禁止一切空密码用户。

2、影子文件 /etc/shadow

# 用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
root:6oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::

3、查看当前登录用户及登录时长

who     # 查看当前登录系统的所有用户(tty 本地登陆  pts 远程登录)
w       # 显示已经登录系统的所用用户,以及正在执行的指令
uptime  # 查看登陆多久、多少用户,负载状态

4、排查用户登录信息

查看最近登录成功的用户及信息

# 显示logged in表示用户还在登录
# pts表示从SSH远程登录
# tty表示从控制台登录,就是在服务器旁边登录
last

查看最近登录失败的用户及信息

# ssh表示从SSH远程登录
# tty表示从控制台登录
sudo lastb

lastlog 显示所有用户最近一次登录信息

命令排查黑客什么时间登录的有的黑客登录时,会将/var/log/wtmp文件删除或者清空,这样就无法使用last命令获得有用的信息了。

在黑客入侵之前,必须使用 chattr +a 对 /var/log/wtmp 文件进行锁定,避免被黑客删除。

5、sudo用户列表 /etc/sudoers

# 查询特权用户特权用户(uid 为0):
awk -F: '3==0{print1}' /etc/passwd
# 查询可以远程登录的帐号信息:
awk '/\1|\$6/{print1}' /etc/shadow
# 除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限:
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

# 禁用或删除多余及可疑的帐号
usermod -L user    # 禁用帐号,帐号无法登录,/etc/shadow 第二栏为 ! 开头
userdel user       # 删除 user 用户
userdel -r user    # 将删除 user 用户,并且将 /home 目录下的 user 目录一并删除

通过.bash_history文件查看帐号执行过的系统命令,打开 /home 各帐号目录下的 .bash_history,查看普通帐号执行的历史命令。

6、检查端口连接情况

查看 pid 所对应的进程文件路径

# PID 为对应的 pid 号
ls -l /proc/PID/exe 或 file /proc/$PID/exe

分析进程

# 根据pid号查看进程
lsof -p 6555
# 通过服务名查看该进程打开的文件
lsof -c sshd
# 通过端口号查看进程:
lsof -i :22

查看进程的启动时间点

ps -p 6555 -o lstart

根据pid强行停止进程

kill -9 6555

注意: 如果找不到任何可疑文件,文件可能被删除,这个可疑的进程已经保存到内存中,是个内存进程。这时需要查找PID 然后kill掉。

7、检查开机启动项

runlevel 查看运行级别

开机启动配置文件


/etc/rc.local
/etc/rc.d/rc[0~6].d

启动Linux系统时,会运行一些脚本来配置环境——rc脚本。在内核初始化并加载了所有模块之后,内核将启动一个守护进程叫做init或init.d。这个守护进程开始运行/etc/init.d/rc中的一些脚本。这些脚本包括一些命令,用于启动运行Linux系统所需的服务。

8、计划任务排查

需要注意的几处利用cron的路径

crontab -l  # 列出当前用户的计时器设置
crontab -r  # 删除当前用户的cron任务
  • /etc/crontab 只允许root用户修改;
  • /var/spool/cron/ 存放着每个用户的crontab任务,每个任务以创建者的名字命名;
  • /etc/cron.d/ 将文件写到该目录下,格式和 /etc/crontab相同;

入侵排查

重点关注以下目录中是否存在恶意脚本:

  • /var/spool/cron/*
  • /etc/crontab
  • /etc/cron.d/*
  • /etc/cron.daily/*
  • /etc/cron.hourly/*
  • /etc/cron.monthly/*
  • /etc/cron.weekly/
  • /etc/anacrontab
  • /var/spool/anacron/*

查询已安装的服务:
RPM 包安装的服务:

chkconfig  --list  查看服务自启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务

系统在3与5级别下的启动项 
中文环境
chkconfig --list | grep "3:启用\|5:启用"

英文环境
chkconfig --list | grep "3:on\|5:on"

源码包安装的服务:

查看服务安装位置 ,一般是在/user/local/,搜索/etc/rc.d/init.d/ 查看是否存在。

按照CPU使用率从高到低排序:

ps -ef --sort -pcpu

按照内存使用率从高到低排序:

ps -ef --sort -pmem

1、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性;
2、得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件;
可以使用find命令来查找,如find /opt -iname “*” -atime 1 -type f 找出 /opt 下一天前访问过的文件。
3、针对可疑文件可以使用 stat 进行创建修改时间;

系统日志检查

/var/log/ 日志默认存放位置,secure、history必看

查看日志配置情况:more /etc/rsyslog.conf

日志分析技巧:

1、定位有多少IP在爆破主机的root帐号:    
grep "Failed password for root" /var/log/secure | awk '{print 11}' | sort | uniq -c | sort -nr | more

定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while(_=<>){ /for(.*?) from/; print "1\n";}'|uniq -c|sort -nr

2、登录成功的IP有哪些:   
grep "Accepted " /var/log/secure | awk '{print11}' | sort | uniq -c | sort -nr | more

登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print 1,2,3,9,$11}' 

3、增加一个用户kali日志:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure 

4、删除用户kali日志:
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
# grep "userdel" /var/log/secure

5、su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

sudo授权执行:
sudo -l
Jul 10 00:43:09 localhost sudo:    good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

webshell查杀:
河马 WebShell 查杀:http://www.shellpub.com

Linux安全检查脚本:
https://github.com/grayddq/GScan
https://github.com/ppabc/security_check
https://github.com/T0xst/linux

上一篇
下一篇