网络安全应急响应----3、Linux入侵排查

文章目录

  • 一、系统排查
    • 1、系统信息
    • 2、用户信息
    • 3、启动项
    • 4、任务计划
    • 5、历史命令
  • 二、进程、端口排查
  • 三、服务排查
  • 四、文件痕迹排查
  • 五、日志分析
  • 六、内存分析
  • 七、流量分析


网络安全应急响应----3、Linux入侵排查_第1张图片

一、系统排查

1、系统信息

查看CPU相关信息
	# lscpu   

操作系统信息
	# uname -a   
	# cat /proc/version

在这里插入图片描述

查看已载入系统的模块信息
	# lsmod

2、用户信息

//查看系统所有用户信息
1、# cat /etc/passwd
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
无密码用户只允许本机登陆,不允许登陆远程
2、# cat /etc/shadow
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警	告天数:密码过期之后的宽限天数:账号失效时间:保留
3、查看系统可登录用户
	# cat /ect/passwd | grep "/bin/bash"
1、查看UID=0的账号,root用户UID=0,若存在其他UID为0账户,需要特别关注
	# awk -F: '{if($3==0) print $1}' /etc/passwd
2、查看系统可登录账号
	# cat /etc/passwd | grep '/bin/bash'
3、查询可以远程登录的账号信息
	# awk '/\$1|\$6/{print $1}' /etc/shadow
4、查看用户错误登录信息
	# lastb
5、查看所有用户最后的登录信息
	# lastlog
6、查看用户最近登录信息,其中wtmp为登录成功信息、btmp为登录失败信息、utmp为当前登录信息
	# last
7、查看当前用户登录系统情况(tty本地登陆、pts远程登录)
	# who
8、查看空口令账户
	# awk  -F: 'length($2)==0 {print $1}' /etc/shadow
9、查看登陆多久、多少用户,负载
	# uptime
10、查看系统信息、某一时刻用户的行为
	# w  
11、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
	# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
12、禁用或删除多余及可疑的帐号
	# usermod -L user    禁用user帐号,帐号无法登录,/etc/shadow第二栏为!开头
    # userdel user       删除user用户
    # userdel -r user    将删除user用户,并且将/home目录下的user目录一并删除

3、启动项

攻击者在攻击成功后往往会设置开机自启动,以实现持久化控制。
在Linux系统中,系统启动内核挂载根文件系统,然后启动并运行一个init程序,init进程的任务就是运行开机启动的程序,init是非内核进程中第一个被启动运行的,因此它的PID的值总是1,init读取其配置文件来进行初始化工作。

Linux系统为不同的场合分配不同的开机启动程序,又称为“运行级别”(run level) ,如下表所示:

运行级别 说明
运行级别0 系统停机状态,系统默认运行级别不能为0,否则将不能正常启动
运行级别1 单用户工作状态,root 权限,用于系统维护,禁止远程登录
运行级别2 多用户状态(没有NFS )
运行级别3 完全的多用户状态(有NFS),登录后进入控制台命令行模式
运行级别4 系统未使用,保留
运行级别5 X11控制台,登录后进入GUI模式
运行级别6 系统正常关闭并重启,默认运行级别不能为6,否则将不能正常启动

7个运行级别分别对应7个目录,对应/etc/rc[0-6].d下的7个文件夹(rc0.d--->rc6.d),每个目录下有对应的启动文件,具体文件路径都是在/etc/rc.d/init.d/目录中。
其中,文件名:字母S[K]+两位数字+程序名”的形式。字母S表示Start,启动;字母K表示Kill,关闭。
在这里插入图片描述
旧版本的linux下/etc/rc.d/目录下还有init.d目录和rc.local文件;新版本linux是在/etc目录下查看。
init.d目录通常用于存放一些脚本, 包括linux系统中以rpm包安装时设定的一些服务的启动脚本,类似于Windows系统中的注册表;
网络安全应急响应----3、Linux入侵排查_第2张图片

rc.local文件会在用户登录之前读取,在每次系统启动时都会执行一次,也就是说,如果有任何需要在系统启动时运行的工作,那么只需写入/etc/rc.d/rc.local配置文件即可。
注意:新版linux系统已经没有rc.local文件了,(点击访问)激活rc.local service方法。

进行应急响应处置时应重点关注以下目录文件(依系统而定) :
1、查看运行级别:
	# runlevel
2、配置运行级别
	# vi  /etc/inittab
	# id=5:initdefault  系统开机后直接进入哪个运行级别
3、查看启动项文件:
	# more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/
4、查看init.d下的所有文件信息
	# ls -alt /etc/init.d
5、查看init.d下的rc.local文件内容
	# cat /etc/init.d/rc.local
6、rc.local为开机启动配置文件,查看rc.local文件内容
	# cd /etc/rc.local
	# cd /etc/rc.d/rc[0~6].d

4、任务计划

默认编写的crontab文件会保存在 (/var/spool/cron/用户名)
查看当前任务计划
	# crontab -l
查看用户任务计划
	# crontab -u username -l(username为用户名)
查看/etc目录下的任务计划(一般Linux下任务计划以cron开头,可利用通配符*进行查看)
	# ls /etc/cron*
删除每个用户cront任务(删除所有的计划任务)
	# crontab -r 
使用编辑器编辑当前用户下的crontab文件
	# crontab -e 
需重点关注以下目录中是否存在恶意脚本:
/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/*
查看目录下所有文件
	# more /etc/cron.daily/*  

5、历史命令

查看历史命令
	# histroy
为历史的命令增加登录的IP地址、执行命令时间等信息:
1、保存1万条命令
	# sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

2、在/etc/profile的文件尾部添加如下行数配置信息:
	USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
	if [ "$USER_IP" = "" ]
	then
	USER_IP=`hostname`
	fi
	export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
	shopt -s histappend
	export PROMPT_COMMAND="history -a"

3、source /etc/profile让配置生效

二、进程、端口排查

使用netstat 网络连接命令,分析可疑端口、IP、PID
netstat -antlp|more
查看下pid所对应的进程文件路径,
运行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)
使用ps命令,分析进程
ps aux | grep pid

三、服务排查

服务自启动

第一种修改方法:

chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig –level  2345 httpd on  开启自启动
chkconfig httpd on (默认level是2345)
第二种修改方法:

修改/etc/re.d/rc.local 文件  
加入 /etc/init.d/httpd start
第三种修改方法:

使用ntsysv命令管理自启动,可以管理独立服务和xinetd服务。

入侵排查

1、查询已安装的服务:

RPM包安装的服务

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

系统在3与5级别下的启动项 
中文环境
chkconfig --list | grep "3:启用\|5:启用"
英文环境
chkconfig --list | grep "3:on\|5:on"
源码包安装的服务

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

四、文件痕迹排查

1、查看敏感目录,如/tmp、/usr/bin、/usr/sbin等目录下的文件,有可能作为恶意软件下载目录及相关文件被替换的目录。注意以..为名的文件夹具有隐藏属性。
2、~/.ssh/etc/ssh有时候会作为后门的配置路径,对其路径下进行检查。
3、得到发现WEBSHELL、远控木马的创建时间,可以使用find命令来查找。

查找区块装置文件、目录、字型装置文件、具名贮列、符号连结、普通文件、Socket:
	# find -type b/d/c/p/l/f/s
过去n天内被修改过的文件:
	# find -ctime n	
过去n天内被读取的文件:
	# find -atime n

find /etc -iname "*" -atime 1 -type f 显示 /etc 下一天前访问过的文件。
网络安全应急响应----3、Linux入侵排查_第3张图片

也可以通过webshell命名规则和特征进行排查:
/www/var下是否存在.php文件,发现的php文件中是否存在egrep关键字
	# find /www/var -name "*.php" | xargs egrep

网络安全应急响应----3、Linux入侵排查_第4张图片

4、针对可疑文件可以使用stat命令对文件的创建时间、修改时间、访问时间进行排查

# stat filename

网络安全应急响应----3、Linux入侵排查_第5张图片
5、对特殊文件进行排查

特殊权限文件查找(/tmp目录下权限维777的文件):
	# find /tmp -perm 777 | more
对系统命令进行查找,有时,攻击者可能会替换ls、ps等命令,下命令可查看系统命令更改时间:
	# ls -alt /bin
排查文件大小,防止攻击者注入恶意文件或替换系统文件
	# ls -alh /bin

6、排查SUID程序

SUID为某一个命令设置特殊权限
	# find / -type f -perm -04000 -ls -uid 0 2>/dev/null

7、Linux的后门检测
可以使用第三方查杀工具(如chkrootkit、 rkhunter) 进行查杀。

chkrootkit工具用来监测当前系统是否被安装rootkit。
rootkit:一种后门程序,隐蔽性强。
若出现infected,则说明检测出系统后门;若未出现,则说明未检测出系统后门
	# chkrootkit

网络安全应急响应----3、Linux入侵排查_第6张图片

使用rkhunter可以进行系统命令(Binary) 检测,包括MD5校验、rootkit检测 、本机敏感目录
检测、系统配置检测、服务及套件异常检测、第三方应用版本检测等。
	# rkhunter -c

网络安全应急响应----3、Linux入侵排查_第7张图片


五、日志分析

Linux系统下日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf

日志文件 说明
/var/log/cron 记录了系统定时任务相关的日志
/var/log/cups 记录打印信息的日志
/var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog 记录邮件信息
/var/log/message 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/btmp 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
/var/log/utmp 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询
/var/log/secure 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/spool/mail 邮件相关日志记录文件
1、日志文件中统计独立IP地址个数的命令:
	# awk '{print $1}' dpkg.log|sort|uniq|wc -l 
	# awk '{print $1}'dpkg.log|sort|uniq -c|head -10
2、查找指定时间段日志的命令:
	# sed -n '/2022-3-17 11:20:30/,/2022-3-17 11:21:22/p'  user.log 
	# grep '2022-03-17 11:20:30' kern.log 
3、
定位有多少IP地址在暴力破解主机root账号的命令:
	# cat /var/log/auth.log |awk '/Accepted/{print $(NF- 3)}'Isortluniq -c|awk '{print $2"="$1;}'
	# grep "Failed password for root" /var/log/quth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
定位有哪些IP在爆破:
	# grep "Failed password" /var/log/auth.log |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/auth.log|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
4、查看登录成功的IP地址的命令:
	# cat /var/log/auth.log |awk '/Failed/{print $(NF- -3)}' sort| uniq -c|awk '{print $2"="$1;}' 
查看登录成功的日期、用户名、IP地址的命令:
	# grep "Accepted " /var/log/auth.log | awk '{print $1,$2,$3,$9,$11}' 

六、内存分析

对服务器进行内存的提取,分析其中的隐藏进程。

内存的获取方法:
基于用户模式程序的内存获取; 
基于内核模式程序的内存获取; 
基于系统崩溃转储的内存获取; 
基于操作系统注入的内存获取;
基于系统休眠文件的内存获取;
基于虚拟化快照的内存获取;
基于系统冷启动的内存获取;
基于硬件的内存获取。

七、流量分析

查看相关的地址连接情况: PCHunter、Process Monitor等工具或netstat等)命令。
查看内部流量:使用Wireshark等网络封包分析软件。


注:日志分析、内存分析、流量分析,后面会给出单独的分析教程,并在此文章附上链接地址。

你可能感兴趣的:(应急响应,网络安全应急响应,Linux入侵排查)