分享

Linux 入侵排查

 zZ华 2023-07-16 发布于广东

图片

01

文件排查

1.1 敏感目录文件

查看敏感目录文件,如 tmp目录、可执行程序目录/usr/bin ,/usr/sbin等

ls 用来显示目录列表 -a 显示所有档案及目录 -l 以长格式显示目录下的内容列表 -t 用文件和目录的更改时间排序 如:查看tmp 目录下的文件 ls -alt /tmp

1.2 查看某个(可疑)文件是否被修改过

针对可以文件可以使用stat 进行创建修改时间、访问时间的详细查看,若修改时间距离时间日期接近,有线性关联,说明可以被篡改。

[root@beret-81 bin]# stat su  File: 'su’  Size: 32128         Blocks: 64         IO Block: 4096   regular fileDevice: fd01h/64769d    Inode: 274174      Links: 1Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2019-12-03 01:46:28.000000000 +0800Modify: 2019-12-03 01:46:28.000000000 +0800Change: 2020-02-13 08:53:18.721097527 +0800

1.3 查看历史命令记录文件

查看~/.bash_history 命令执行记录文件,主要分析是否有账户执行过恶意操作系统。每个用户都有历史记录文件,如果发现哪个用户执行过恶意文件,那么我们就可以锁定这个线索,进一步排查。

直接查看:cat /root/.bash_history | more进入用户目录下:cat .bash_history >> history.txt

1.4 查看用户信息文件

查看/etc/passwd 用户信息文件,查找有没有攻击者创建的用户,或者存在异常的用户。主要查看第3、4列的用户标识号和组标识号,和倒数一二列的用户主目录和命令解析程序。然后结合history 文件的排查方法进行排查。

cat /etc/passwd

1.5 查看新增文件

使用find命令,在指定目录文件下查找新增文件

-type b/d/c/p/l/f 分别是指块设备、目录、字符设备、管道、符号链接、普通文件-mtime -n +n 按文件更改时间来查找文件,-n 指n天以内,+n 指n天前-atime -n +n 按文件访问时间来查找文件,-n 指n天以内,+n 指n天前-ctime -n +n 按文件创建时间来查找文件,-n 指n天以内,+n 指n天前
例子:find -type f -mtime -3 #最近3天修改过的文件find -type f -ctime -3 #最近3天创建的文件

1.6 查看特殊权限的文件

查找777的权限的文件

find / *.jsp -perm 777find / -perm 777 | more

1.7 查看隐藏、木马等文件

查看隐藏文件(以“.” 开头的具有隐藏属性的文件)

[root@beret-81 html]# ls -ar | grep '^\.'.test.php...

查找根目录下所有.jsp后缀文件

find / -name *.jsp

查看根目录下后缀为.jsp .jspx文件,并从大到小排列

grep -nr -v '404' ./ | grep -E '\.jsp | \.jspx' | more

02

进程排查

netstat 用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机端口的网络连接情况。 用netstat 网络连接命令,分析可疑端口、可疑IP、可疑PID及程序进程

选项参数: -a 显示所有连线中的Socket -n 直接使用IP地址,而不通过域名服务器 -t 显示TCP 传输协议的连线状况 -u 显示UDP 传输协议的连线状况 -v 显示指令执行过程 -p 显示正在使用Socket 的程序识别码和程序名称 -s 显示网络工作信息统计表

2.1 检查异常端口

使用netstat 网络连接命令,分析可疑端口、IP、PID

netstat -antlp|more
查看下pid所对应的进程文件路径,运行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)

查看某个端口是哪个进程打开的

lsof -i:8080

2.2 检查异常进程

使用ps命令,分析进程。根据netstat 定位出pid ,使用ps命令,分析进程

ps aux | grep pid ps -aux --sort -pcpu | less 根据cpu使用率进行排序
-a 代表all,同时加上x参数会显示没有控制终端的进程-aux 显示所有包含其他使用者的行程-C 显示某个进行的信息-axjf 以树状结构显示进程-e 显示所有进程。和-A相同-f 额外全格式-t ttylist by tty 显示终端ID在ttylist 列表中的进程

查看某个用户启动了什么进程

lsof -u root

查看隐藏进程

ps -ef | awk '{print $2}' | sort -n | uniq >1ls /proc | sort -n | uniq >2diff 1 2

查看进程cpu占比(动态任务,可实时查看最高cpu占有率) top 命令是Linux系统常用的性能分析工具,能够实时显示系统中进程的资料占用状况,类似于Windows的任务管理器。

top

03

系统信息排查

3.1 账号安全

基本使用:

1、用户信息文件/etc/passwdroot:x:0:0:root:/root:/bin/bashaccount:password:UID:GID:GECOS:directory:shell用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell注意:无密码只允许本机登陆,远程不允许登陆
2、影子文件/etc/shadowroot:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
who 查看当前登录用户(tty本地登陆 pts远程登录)w 查看系统信息,想知道某一时刻用户的行为uptime 查看登陆多久、多少用户,负载

入侵排查

1、查询特权用户特权用户(uid 为0)[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd2、查询可以远程登录的帐号信息[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限[root@localhost ~]# more /etc/sudoers | grep -v '^#\|^$' | grep 'ALL=(ALL)'4、禁用或删除多余及可疑的帐号usermod -L user    禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头userdel user       删除user用户userdel -r user    将删除user用户,并且将/home目录下的user目录一并删除

3.2 查看系统用户登录信息

utmp 文件中保存的是当前正在系统中的用户信息wtmp 文件中保存的是登录过本系统的用户信息/var/log/wtmp 文件结构和 /var/run/utmp 文件结构一样,都是应用/usr/include/bits/utmp.h 中的strut utmp

使用lastlog 命令,查看系统中所有用户最近一次登录信息

[root@test profile.d]# lastlogUsername         Port     From             Latestroot             pts/1    213.85.70.71    Wed Mar 28 14:39:14 +0800 2020bin                                        **Never logged in**daemon                                     **Never logged in**adm                                        **Never logged in**

使用lastb 命令,用于显示用户错误的登录列表

[root@test ~]# lastb | moredbuser ssh:notty 106.13.112.221 Wed Mar 28 18:17 - 18:17 (00:00) dbuser ssh:notty 106.13.112.221 Wed Mar 28 18:17 - 18:17 (00:00) root ssh:notty 142.93.179.2 Wed Mar 28 18:17 - 18:17 (00:00) polaris ssh:notty 188.165.56.214 Wed Mar 28 18:17 - 18:17 (00:00)

使用last 命令,显示用户最近登录信息(数据源为/var/log/wtmp, /var/log/btmp)

[root@test ~]# last | moreroot     pts/1        213.85.70.71    Wed Mar 28 14:39   still logged in   root     pts/0        213.85.70.71    Wed Mar 28 09:01 - 15:45  (06:44)    root     pts/0        213.85.70.71    Tue Mar 27 14:37 - 20:02  (05:24)

3.3 查看开机启动项

查看rc.local 文件(/etc/init.d/rc.local /etc/rc.local) /etc/init.d 是 /etc/rc.d/init.d 的软链接

系统运行级别示意图:运行级别 含义 0 关机 1 单用户模式,可以想象为windows的安全模式,主要用于系统修复 2 不完全的命令行模式,不含NFS服务 3 完全的命令行模式,就是标准字符界面 4 系统保留 5 图形模式 6 重启动

查看运行级别命令 runlevel

系统默认允许级别

vi /etc/inittabid=3:initdefault 系统开机后直接进入哪个运行级别

开机启动配置文件/etc/rc.local/etc/rc.d/rc[0~6].d

入侵排查:

查看rc.local 文件(/etc/init.d/rc.local /etc/rc.local )ls -alt /etc/init.dmore /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/

[root@test ~]# ls -alt /etc/init.dlrwxrwxrwx. 1 root root 11 Aug 8 2018 /etc/init.d -> rc.d/init.d

3.4 查看定时任务

查找以下目录中是否存在恶意脚本

/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/* 查看目录下所有文件

通过crontab -l 查看当前的任务计划,是否有后门木马程序启动相关信息

crontab -u <-l,-r,-e> -u,指定一个用户 -l 列出某个用户的任务计划 -r 删除某个用户的任务 -e 编辑某个用户的任务(编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件) 例: crontab -u root -l  crontab -u xxx  -l

3.5 检查服务

chkconfig 是管理系统服务的命令行工具,对开机启动的可疑程序进行更改:设置service 启动信息:chkconfig name on/off/reset设置service 运行级别chkconfig --level levels

入侵排查:

1、查询已安装的服务:

RPM包安装的服务

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

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

源码包安装的服务

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

3.6 查看配置shell 配置文件

查看shell 的配置文件 .bashrc 和 .bash_profile 等文件是否有恶意的alias问题

使用命令查看shell 配置文件cat .bashrccat .bash_profile

/etc/profile 该文件为系统的每个用户设置环境配置信息/etc/profile.d 目录的配置文件中收集shell的设置/etc/bashrc 为每一个运行bash shell 的用户执行此文件,当bash shell 被打开时,该文件被读取.bash_profile 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次,默认情况下,它设置一些环境变量,执行用户的.bashrc 文件.bashrc 该文件包含专用于你的bash shell 的bash 信息,当登录时以及每次打开新的shell时,该文件被读取.bash_logout 当每次退出系统(退出bash shell),执行该文件

3.7 系统路径分析

系统路径分析,查看有无敏感可疑信息

[root@test ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

3.8 指定信息检索

strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。

分析sshd 文件,是否包括IP信息strings /usr/bin/.sshd | grep '[1-9]{1,3}.[1-9].{1,3}.'

查看ssh 相关目录有无可疑的公钥存在Redis(6379) 未授权恶意入侵,即可直接通过redis 到目标主机导入公钥目录:/etc/ssh ./.ssh/

04

日志排查

日志默认存放位置:/var/log/
日志配置位置:/etc/rsyslog.conf

4.1 常用日志文件

日志文件             说明/var/log/cron         记录了系统定时任务相关的日志/var/log/mailog     记录邮件信息/var/log/auth.log   包含系统授权信息,包括用户登录和使用的权限机制等/var/log/userlog    记录所有等级用户信息的日志/var/log/vsftpd.log 记录Linux ftp 日志/var/log/message     记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件/var/log/btmp       记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看/var/log/lastlog     记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看/var/log/wtmp         永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看/var/run/utmp         记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询/var/log/secure     记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录/var/log/faillog    记录系统登录不成功的账户信息,一般会被黑客删除。

4.2 Linux 日志分析

1、查看登录信息
查看用户最近登录信息last -f /var/log/wtmp
查看当前登录系统和用户信息,可用who命令显示当中的内容last -f /var/run/utmp
查看用户最后登录的信息lastlog
查看登录失败的日志lastbstrings /var/log/btmp
2、定位有多少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
3、登录成功的IP有哪些:
grep 'Accepted ' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
登录成功的日期、用户名、IP:grep 'Accepted ' /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

4、增加一个用户kali日志:Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali, shell=/bin/bashJul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali#grep 'useradd' /var/log/secure
5、删除用户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
6、su切换用户:Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)
sudo授权执行:sudo -lJul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

Apache 日志分析

Apache 默认自动生成两个日志文件,访问日志access_log 和 error_log

1、查询访问量前十的IP地址:   cat access_log | cut -f 1 -d ' ' | sort | uniq -c | sort -k 1 -n -r | head -10
2、查询访问量前十的URL: cat access_log | cut -f 7 -d ' ' | sort | uniq -c | sort -k 1 -n -r | head -10
3、统计访问量前十QPS的时间点: cat access_log | cut -f 4 -d ' ' | sort | uniq -c | sort -k 1 -n -r | head -10

05

后门排查

5.1 Rootkit查杀

chkrootkit

网址:http://www.chkrootkit.org安装使用:wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gztar zxvf chkrootkit.tar.gzcd chkrootkit-0.53make sense#编译完成没有报错的话执行检查./chkrootkit

rkhunter

网址:http://rkhunter.

安装使用:wget https://udomain.dl./project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gztar -zxvf rkhunter-1.4.6.tar.gzcd rkhunter-1.4.6./installer.sh --installrkhunter -c

5.2 病毒查杀

Clamav

网址:http://www./download.html

安装使用:#安装yum install -y clamav#更新病毒库freshclam#扫描方法clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.logclamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.logclamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log#扫描并杀毒clamscan -r --remove /usr/bin/bsd-portclamscan -r --remove /usr/bin/clamscan -r --remove /usr/local/zabbix/sbin#查看日志发现cat /root/usrclamav.log |grep FOUND

5.3 webshell 查杀

手工排查webshell

webshell的排查可以通过文件、流量、日志三种方式进行分析,基于文件的命名特征和内容特征相对操作性较高,在入侵后应急过程中频率也比较高。根据webshell 特征进行命令查找find /var/www/html/ -type f -name '*.php' | xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\)\$\_\POST\[eval\(str_rot13|.chr\(|\'\_R|file_put_contents\(\.\*\$_|base64_decode'find /var/www/html/ -type f -name '*.php' | xargs grep 'eval' | more

河马webshell查杀

网址:https://www.

安装使用:wget http://dl./hm/latest/hm-linux-amd64.tgz?version=1.8.2tar xvf hm-linux.tgz#查看帮助./hm -h#查看版本./hm version#扫描后门./hm scan 你的web目录,扫描完成之后结果会保存为result.csv文件,使用记事本或者excel打开查看./hm deepscan 你的web目录,扫描时开启深度解码 #升级./hm update

5.4 RPM check检查

系统完整性可以通过rpm自带的-Va来校验检查所有的rpm软件包,查看哪些命令是否被替换了:rpm -Va > rpm.log

如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与RPM数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。

验证内容中的8个信息的具体内容如下:

S 文件大小是否改变 M 文件的类型或文件的权限(rwx)是否被改变 5 文件MD5校验是否改变(可以看成文件内容是否改变) D 设备中,从代码是否改变 L 文件路径是否改变 U 文件的属主(所有者)是否改变 G 文件的属组是否改变 T 文件的修改时间是否改变

如果命令被替换了,如果还原回来:

文件提取还原案例:rpm  -qf /bin/ls  查询ls命令属于哪个软件包mv  /bin/ls /tmp  先把ls转移到tmp目录下,造成ls命令丢失的假象rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取rpm包中ls命令到当前目录的/bin/ls下cp /root/bin/ls  /bin/ 把ls命令复制到/bin/目录 修复文件丢失

5.5 linux 安全检查脚本

https://github.com/grayddq/GScanhttps://github.com/cisp/LinuxEmergencyhttps://github.com/ppabc/security_checkhttps://github.com/T0xst/linux
图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多