Linux下如何发现系统被入侵的十种方法
etc/shadow文件是Unix和Linux操作系统中的一个关键文件,它存储了用户账号的密码 Hash、密码过期信息以及其他与密码安全相关的数据。默认情况下,"last" 使用的是 /var/log/wtmp 或类似的文件,具体取决于操作系统。随着Linux内核的发展,一些新的接口和信息被移到了/sys文件系统中,/sys提供了更结构化和层次化的访问方式,特别是对于设备和模块的信息。每个正在运行
以下指令适用于ubuntu和debian系统,其他系统是否适用,暂时没有试过,有感兴趣的小伙伴可以自行试一下。
1、检查系统日志
显示最近登录系统的用户列表以及他们的登录时间、IP地址等信息(last命令是查看系统登陆日志,比如系统被reboot或登录情况)
last
"last" 命令还支持多种选项,以自定义输出和过滤结果。
-n 或 --number:指定要显示的登录记录的数量。例如,last -n 10 将只显示最近的10条登录记录。
-f 或 --file:指定替代的 utmp 文件。utmp 文件是系统用来记录用户登录和注销信息的日志文件。默认情况下,"last" 使用的是 /var/log/wtmp 或类似的文件,具体取决于操作系统。
-i 或 --ip:显示IP地址而不是主机名。这对于网络管理特别有用,因为解析主机名可能会消耗时间或无法解析。
-x 或 --failed:显示失败的登录尝试。这可以帮助检测潜在的安全威胁,比如暴力破解攻击。
username:指定一个用户名,只显示该用户的登录记录
2、检查系统用户
查看是否有异常的系统用户
cat /etc/passwd
查看是否产生了新用户,UID和GID为0的用户
UID(用户ID) : 这是一个唯一的整数,用于标识系统中的每个用户。在Linux系统中,UID为0通常表示root用户,其拥有最高的管理权限。普通用户的UID通常从1000或更高开始,以避免与系统用户(如bin, daemon等)的UID冲突。
GID(组ID) : 这也是一个唯一的整数,用于标识用户所属的主要组。每个用户都可以属于一个或多个组,但主要组在/etc/passwd文件中指定。当用户创建新文件时,这些文件将继承用户的主组作为其默认组 ownership。
通过这些ID,系统可以管理文件和目录的权限,确定哪些用户可以访问哪些资源,以及执行其他安全管理任务。
grep "0" /etc/passwd

查看passwd的修改时间,判断是否在不知的情况下添加用户
ls -l /etc/passwd
查看是否存在特权用户,如果只显示root,则代表没有其他特权用户。
awk -F: '$3==0 {print $1}' /etc/passwd
查看shadow文件,是否存在空口令帐户
/etc/shadow文件是Unix和Linux操作系统中的一个关键文件,它存储了用户账号的密码 Hash、密码过期信息以及其他与密码安全相关的数据。这个文件对于系统安全至关重要,因为未经授权访问或修改此文件可能会导致严重的安全漏洞。
在 /etc/shadow 文件中,第二列($2)存放的是用户的加密密码。这一列的内容可以有多种形式,包括加密的哈希值、空字段以及特殊字符如 * 和 !,它们各自具有不同的含义。
空字段
含义:如果第二列是空的(即两个冒号连续,如 ::),表示该用户没有设置密码。
影响:这样的用户可以无需密码即可登录,存在严重的安全风险。通常,系统会禁止这种情况,或者至少发出警告。
星号 *
含义:如果第二列包含 *(如 *:),表示该用户的密码被锁定,用户无法通过密码验证登录。
影响:这种设置通常用于禁止用户使用密码登录,可能是因为安全原因或者用户账户被暂时冻结。
感叹号 !
含义:如果第二列包含 !(如 !:),表示该用户的密码无效,用户无法通过密码验证登录。
影响:与 * 类似,这也是一种禁止用户使用密码登录的方法,可能用于强制用户重置密码或在账户被禁用时使用。
其他特殊字符
除了 * 和 ! 之外,其他特殊字符也可能出现在第二列中,具体含义可能因系统配置而异。例如:
!! :有时表示密码过期,需要用户更改密码。
!! :在某些系统上,可能与 ! 含义相同,表示密码无效。
以下指令用于查看shadow文件中是否存在空口令:
awk -F: 'length($2)==0 {print $1}' /etc/shadow
3、检查异常进程
使用ps -ef命令查看进程
ps -ef

注意UID为root或0的用户。
察看该进程所打开的端口和文件
lsof -p pid #命令查看端口的文件
安装lsof
apt install lsof
检查隐藏进程
/proc是一个虚拟文件系统,它提供了一种接口,使得用户和应用程序可以访问内核的数据结构和运行时信息。/proc目录中的内容是由内核动态生成的,不占用实际的磁盘空间。
进程信息:每个正在运行的进程在/proc下都有一个以其PID(进程标识符)命名的子目录,例如 /proc/1234。在这个目录中,可以找到该进程的各种信息,如内存映射、打开的文件、环境变量等。
系统信息:/proc目录还包含许多提供系统级信息的文件,如:
/proc/cpuinfo:显示CPU的信息。
/proc/meminfo:显示内存使用情况。
/proc/version:显示内核版本和编译选项。
/proc/partitions:显示已识别的磁盘分区。
设备信息:通过/proc/devices可以查看系统上已注册的设备驱动程序。
文件系统信息:/proc/mounts列出了当前挂载的所有文件系统。
网络信息:虽然网络信息主要通过/sys和/net目录提供,但某些网络相关的参数和统计信息也可以在 /proc/net 下找到。
ps -ef | awk '{print }' | sort -n | uniq >proc1
ls /proc |sort -n | uniq >proc2
diff proc1 proc2
diff proc1 proc2 是一个命令行工具 ,用于比较两个文件之间的差异。具体来说:proc1 和 proc2 指的是要进行比较的两个文件名或文件描述符。
例如:diff file1 file2
随着Linux内核的发展,一些新的接口和信息被移到了/sys文件系统中,/sys提供了更结构化和层次化的访问方式,特别是对于设备和模块的信息。然而, /proc仍然广泛用于获取进程和系统级别的信息。
4、检查异常系统文件
find / -uid 0 -perm -4000 -print
find / -size +10000k -print
find / -name "…" -print
find / -name ".." -print
find / -name "." -print
find / -name " " -print
5、检查系统文件完整性
安装debsums
apt update
apt install debsums
生成系统文件校验
debsums -c
如何处理不匹配的
apt-get install --reinstall package_name
6、检查ubuntu包的完整性
1)使用dpkg命令
sudo dpkg --verify <package_name>
这个命令会检查指定包的所有文件,并报告任何不匹配的地方。例如:
sudo dpkg --verify vim
检查所有包
sudo dpkg --verify
2)使用 AIDE 进行完整性监控
#安装aide
sudo apt-get install aide
#初始化aide数据库
sudo aide --init
#check
sudo aide --check
7、检查网络
ip link | grep PROMISC(正常网卡不该在promisc模式,可能存在sniffer)
lsof -i
netstat -nap(察看不正常打开的TCP/UDP端口)
arp -a
sudo ip link set dev eth0 promisc off # 禁用eth0的混杂模式
sudo ip link set dev eth1 promisc off # 禁用eth1的混杂模式
8、检查系统计划任务
crontab -u root -l
cat /etc/crontab
ls /etc/cron.*
9、检查系统后门
cat /etc/crontab
ls /var/spool/cron/
cat /etc/rc.d/rc.local
ls /etc/rc.d
ls /etc/rc3.d
10、杀毒软件
详细安装方法请参考:介绍几个Linux下的杀毒软件-CSDN博客
1)检查rootkit
rkhunter -c #执行安全扫描
安装:
apt install rkhunter
2)安装chkrootkit
chkrootkit -q
安装:
apt install chkrootkit
3) 安装clamav
apt install clamav
升级病毒库
freshclam
检查硬盘
clamscan -r /
更多推荐



所有评论(0)