01
—
查看系统完整性
centos:
rpm -Va:检验系统中所有使用rpm安装的软件包相关的完整性
debian:
dpkg -Va:检验系统中所有使用dpkg安装的软件包相关的完整性
状态位说明:
S 表示文件长度发生了变化
M 表示文件的访问权限或文件类型发生了变化
5 表示MD5校验和发生了变化
D 表示设备节点的属性发生了变化
L 表示文件的符号链接发生了变化
U 表示文件/子目录/ 设备节点的owner 发生了变化
G 表示文件/子目录/ 设备节点的group 发生了变化
T 表示文件最后一次的修改时间是发生了变化
02
—
计划任务
Linux下计划任务相关文件如下:
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.monthly/*
/etc/cron.weekly/*
/var/spool/cron/*
若相关文件发生变化,则应当使用 cat 命令去查看对应的配置项,根据内容来判断是否包含恶意程序的启动项。
03
—
启动项/服务
Linux下的开机启动项文件如下:
/etc/init.d/*
/etc/rc.local
/etc/rc0.d/*
/etc/rc1.d/*
/etc/rc2.d/*
/etc/rc3.d/*
/etc/rc4.d/*
/etc/rc5.d/*
/etc/rc6.d/*
/etc/init/rc.d/
在CentOS 7上利用systemctl添加自定义系统服务,服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,还是存在系统服务里吧,即:/usr/lib/systemd/system目录下。
04
—
进程
ps -aux --sort=start_time:将进程以执行时间排序
ps -auxf :将进程以树形排列,可以清晰的看到进程父进程
top命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,默认根据cpu 使用率来排序,如下图,其中占用 cpu 量由大到小排序,有些恶意 程序,如 ddos 程序,miner 挖矿机程序等较为占用系统 cpu 资源,可以用 top 命令迅速查 找出来。
/proc/目录
/proc目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。
上面列出的是/proc目录中一些进程相关的目录,每个目录中是进程本身相关信息的文件。下面是一个PID为4456的进程mysql的相关文件,其中有些文件是每个进程都会具有的,以下对这些常见文件做出说明。
[root@luoshuang ~]#ls -altr /proc/4456/
total 0
dr-xr-xr-x 251 rootroot 0 Aug 9 22:46 ..
dr-xr-xr-x 9 root root 0 Aug 10 01:37 .
-r--r--r-- 1 root root 0 Aug 10 01:37 status
-r--r--r-- 1 root root 0 Aug 10 01:37 cmdline
-r--r--r-- 1 root root 0 Aug 10 03:13 stat
dr-x------ 2 root root 0 Aug 10 03:13 fd
-r--r--r-- 1 root root 0 Aug 10 03:13 statm
-r--r--r-- 1 root root 0 Aug 10 03:15 wchan
-rw-r--r-- 1 root root 0 Aug 10 03:15 uid_map
-r--r--r-- 1 root root 0 Aug 10 03:15 timers
dr-xr-xr-x 3 root root 0 Aug 10 03:15 task
-r--r--r-- 1 root root 0 Aug 10 03:15 syscall
-r--r--r-- 1 root root 0 Aug 10 03:15 stack
-r--r--r-- 1 root root 0 Aug 10 03:15 smaps
-rw-r--r-- 1 root root 0 Aug 10 03:15 setgroups
-r--r--r-- 1 root root 0 Aug 10 03:15 sessionid
-r--r--r-- 1 root root 0 Aug 10 03:15 schedstat
-rw-r--r-- 1 root root 0 Aug 10 03:15 sched
lrwxrwxrwx 1 root root 0 Aug 10 03:15 root -> /
-rw-r--r-- 1 root root 0 Aug 10 03:15 projid_map
-r--r--r-- 1 root root 0 Aug 10 03:15 personality
-r-------- 1 root root 0 Aug 10 03:15 patch_state
-r--r--r-- 1 root root 0 Aug 10 03:15 pagemap
-rw-r--r-- 1 root root 0 Aug 10 03:15 oom_score_adj
-r--r--r-- 1 root root 0 Aug 10 03:15 oom_score
-rw-r--r-- 1 root root 0 Aug 10 03:15 oom_adj
-r--r--r-- 1 root root 0 Aug 10 03:15 numa_maps
dr-x--x--x 2 root root 0 Aug 10 03:15 ns
dr-xr-xr-x 6 root root 0 Aug 10 03:15 net
-r-------- 1 root root 0 Aug 10 03:15 mountstats
-r--r--r-- 1 root root 0 Aug 10 03:15 mounts
-r--r--r-- 1 root root 0 Aug 10 03:15 mountinfo
-rw------- 1 root root 0 Aug 10 03:15 mem
-r--r--r-- 1 root root 0 Aug 10 03:15 maps
dr-x------ 2 root root 0 Aug 10 03:15 map_files
-rw-r--r-- 1 root root 0 Aug 10 03:15 loginuid
-r--r--r-- 1 root root 0 Aug 10 03:15 limits
-r-------- 1 root root 0 Aug 10 03:15 io
-rw-r--r-- 1 root root 0 Aug 10 03:15 gid_map
dr-x------ 2 root root 0 Aug 10 03:15 fdinfo
lrwxrwxrwx 1 root root 0 Aug 10 03:15 exe ->/usr/bin/mysql
-r-------- 1 root root 0 Aug 10 03:15 environ
lrwxrwxrwx 1 root root 0 Aug 10 03:15 cwd -> /root
-r--r--r-- 1 root root 0 Aug 10 03:15 cpuset
-rw-r--r-- 1 root root 0 Aug 10 03:15 coredump_filter
-rw-r--r-- 1 root root 0 Aug 10 03:15 comm
--w------- 1 root root 0 Aug 10 03:15 clear_refs
-r--r--r-- 1 root root 0 Aug 10 03:15 cgroup
-r-------- 1 root root 0 Aug 10 03:15 auxv
-rw-r--r-- 1 root root 0 Aug 10 03:15 autogroup
dr-xr-xr-x 2 root root 0 Aug 10 03:15 attr
cmdline —启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息;
cwd — 指向当前进程运行目录的一个符号链接;
environ —当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示;
exe — 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝;
fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接
limits — 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取;(2.6.24以后的内核版本支持此功能);
maps — 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表;
mem — 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取;
root — 指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录;
stat — 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用;
statm — 当前进程占用内存的状态信息,通常以“页面”(page)表示;
status — 与stat所提供信息类似,但可读性较好;
task — 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;(内核2.6版本以后支持此功能)
恶意进程判断依据:
1.进程名以随机数字组成
2.进程名称为空
3.进程名称与正常名称稍微不同,如.sshd 进程,普通进程为 sshd 进程
05
—
网络连接
netstat 命令用来打印 Linux 中网络系统的状态信息,可让你得知整个 Linux 系统的网 络情况。
netstat -lnp:使用该命令可以查看系统中所有开放的端口,包括 tcp 端口和 udp 端口。
ss 命令用于显示 socket 状态. 他可以显示PACKET sockets,TCP sockets, UDPsockets,DCCPsockets,RAWsockets,Unixdomainsockets 等等统计. 它比其他工具展示等多 tcp 和 state 信息. 它是一个非常实用、快速、有效的跟踪 IP 连接和 sockets 的新工具。
ss-lntp:查看网络连接
06
—
查找木马相关文件
find 命令:可以用于 webshell 的排查,也可用于木马相关文件排查,find 命令用来在 指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该 命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的 子目录和文件全部进行显示。
查找隐藏文件或隐藏文件夹:
[root@luoshuang]#find / -name "\.*"
查找被修改的时间大于一天小于30 天内的文件,可以指定到攻击发生的时间段:
[root@luoshuang]#find / -mtime +1 -mtime -30
查找除wordpress 目录外的名称符合*.php 正则的文件,并且大小小于 2k,修改时间在5 天内,这个可用于查找 webshell
[root@test html]# find./ -path "./wordpress" -a -prune-o -name "*.php" -typef-size -2k -mtime -5;
07
—
动态链接库
动态链接库是以.so 为后缀的相关文件 以及/etc/ld.so.preload 配置文件 LD_PRELOAD 环境变量,因为恶意动态链接库一般都有隐藏/etc/ld.so.preload 文件的功能,我们使用普通的 ls,cat 等命令无法读取对应配置文件的内容,此时我们可以使用静态编译的 ls 命令,cat 命令 (推荐使用busybox 自带命令)来绕过预加载的恶意动态链接库,如果没有 ls 命令 cat 命令, 有时候将ls 命令和 cat 命令改成其他任意字符也可以绕过恶意动态链接库的隐藏,主要得看恶意动态链接库具体实现方式。
budybox下载地址:https://busybox.net/downloads/binaries/1.30.0-i686/busybox
07
—
用户
Linux下用户相关文件为/etc/passwd
查看当前系统可以登录的用户
[root@luoshuang ~]#cat /etc/passwd | grep -v "/sbin/nologin" | grep -v"/bin/false"
查看当前系统uid为0的用户
[root@luoshuang ~]#awk -F: '{ if($3 == 0) print $1 }' /etc/passwd
08
—
历史命令
系统所输入的命令历史记录:
(1)history查看bash历史记录
(2).bash_history文件
history显示内存和~/.bash_history中的所有内容;内存中的内容并没有立刻写入~/.bash_history,只有当当前shell关闭时才会将内存内容写入shell。
清除history记录
注:清除history之后,.bash_history里仍会有历史记录