用户及用户文件检查
(1)passwd文件
文件权限
/etc/passwd默认权限为644,其最小权限为444,首先应对该文件权限进行检查,以确认配置是否正确:
ls -l /etc/passwd
用户检查
查看passwd文件内容:cat /etc/passwd
查看是否存在可疑帐号。
passwd文件中,每行用户信息以冒号间隔,其中第三段为用户UID,检查除root用户外是否存在其他用户的UID为0,也可执行命令:
awk -F : '$3==0{print}' /etc/passwd(若UID=0,则打印本行信息)
(2)shadow文件
shadow默认权限为600,最小权限为400,检查权限配置是否正确:
ls -l etc/shadow
(3)历史命令记录
Bash日志存储于用户目录的.bash_history文件中,存储条目数量与shell变量$HISTSIZE有关。
查看.bash_history文件或使用history命令
(1)messages日志
Solaris的messages日志位置为 /var/adm/messages
RedHat的messages日志位置为 /var/log/messages
messages中记录有运行信息和认证信息,对于追查恶意用户的登录行为有很大帮助,例如,下面即为一条su日志:
Mar 22 11:11:34 abc PAM_pwdb[999]:authentication failure;cross(uid=500)->root for su service |
(2)cron日志
Solaris的cron日志默认记录在 /var/cron/log 中
RedHat的cron日志默认记录在 /var/log/cron 中
(3)secure日志
Linux的ssh登录日志会存储于/var/log/secure中,若日志中出现连续大量的登录错误信息,则可能意味着远程主机在尝试破解ssh登录口令。
(4)last日志
last命令用于查看最近的用户登录情况,last命令读取wtmp内容。
在Linux还中还存在lastlog命令,用于查看系统内所有帐户最后一次登录信息,该命令读取/var/log/lastlog内容,如下图:
网络连接检查
(1)当前登录用户
执行w命令可以确定当前哪些用户已登录系统。
输出信息中个列含义:
1、USER字段显示当前登录系统的用户名
2、TTY字段显示分配给用户会话的终端。ttyX表示在控制台登录,pts/X和ttypX表示网络连接
3、FROM字段显示远程登录主机的IP地址
4、LOGIN@字段显示登录用户的本地起始时间
5、IDLE字段显示最近一个进程运行开始算起的时间长度
6、JCPU字段显示在该控制台或网络连接的全部进程所用的时间
7、PCPU字段显示WHAT栏中当前进程所使用的处理器时间
8、WHAT字段显示用户正在运行的进程
(2)端口开放情况
使用netstat -anp(Solaris使用netstat -an)命令查看当前开放的端口。
使用lsof -i(仅限Linux)显示进程和端口对应关系。可以使用该工具列举所有运行进程及其所打开的文件描述符,其中包括常规文件,库文件,目录,UNIX流,套接字等。
进程与服务分析
(1)进程信息
使用top命令查看进程状态、CPU和内存占用等信息。
使用命令ps -aux 查看进程
注:1)命令“ps -aux | grep 关键字 | wc -l”可辅助统计分析;
- 命令ps的输出中的一个最重要的字段是START字段,该字段显示了进程的开始时间。这对于查出攻击发生时间非常有帮助。有时可以仅仅通过执行时间来识别可疑进程。
(2)服务信息
使用命令“chkconfig --list <服务名>”查看所有服务的状态。
使用命令“chkconfig --level <init级别> <服务名> on|off|reset”设置服务在个init级别下开机是否启动。
使用命令“who -r”查看当前init级别。
使用命令“service <服务名> start|stop|restart”启动、关闭和重启服务。
注:各服务的启动脚本存放在/etc/init.d/和/etc/xinetd.d目录下,对于没有或无法使用chkconfig命令的系统,可通过创建或删除到/etc/rc*.d目录下的软链接,手工实现管理服务开机是否启动。
启动项分析
Unix/Linux的启动顺序为:加载BIOS->读取MBR->加载引导程序->加载Linux内核->执行init程序->运行登录程序->执行用户运行环境脚本
在执行init程序时,首先寻找的文件是/etc/inittab,该文件定义了系统的运行级0-6;接着会加载/etc/rc0.d~rc6.d目录下的文件;紧接着会加载/etc/init.d和/etc/xinetd.d目录下的文件;最后会加载用户自定义的启动脚本,文件为/etc/rc.local。实际上,/etc/rc.d/init.d和/etc/xinetd.d目录,以及/etc/rc.d/rc.local文件是通过软链接到/etc/rc*.d目录下执行加载的,而/etc/inittab是启动配置文件,因此重点关注/etc/rc0.d~rc6.d目录下的文件。
一般操作指南:
检查/etc/rc0.d~rc6.d目录下的所有"S"打头的脚本文件,将那些不必要启动的服务的脚本文件放入另一个文件内,如:
# cd /etc/rc2.d
# mkdir disable
# mv service-name disable
重启动确认这些变动生效,检查/var/log/messages日志文件,或用ps检查是否还有无关进程启动。
注:执行用户运行环境脚本顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。
/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取(即每次新开一个终端,都会执行bashrc)。
~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件。另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
~/.bash_profile: 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
(1)文件完整性检查
rpm
在RedHat Linux等以rpm作为包管理工具的系统中,使用rpm命令可搜索自rpm包安装后发生了变化的程序:
rpm –Va 列举全部软件包的变化情况
rpm –V package 列举某个程序包的变化情况
验证结果如下图所示:
S:表示对应文件的大小(Size);
M:表示对于文件的mode;
5:表示对应文件的MD5;
D:表示文件的major和minor号;
L:表示文件的符号连接内容;
U:表示文件的owner;
G:表示文件的group;
T:表示文件的修改时间;
c:只有文件是一个配置文件时才会有此标志
(2)文件修改、创建和访问时间检查
使用find命令搜索所有最近一周内修改过的文件,并确认是否为正常文件。
find使用如下:
-amin n 查找n分钟以前被访问过的所有文件。
-atime n 查找n天以前被访问过的所有文件。
-cmin n 查找n分钟以前文件状态被修改过的所有文件。
-ctime n 查找n天以前文件状态被修改过的所有文件。
-mmin n 查找n分钟以前文件内容被修改过的所有文件。
-mtime n 查找n天以前文件内容被修改过的所有文件。
ps:find / -amin -60查找60分钟内被访问过的根目录下的所有文件,-n指n天以内,+n指n天以前。