对看过的、学习的Windows、Linux系统入侵排查进行记录归纳。如果以后工作遇到类似情况,可以翻出来对照进行简易排查。
一、入侵事件系统排查总体思路
二、Windows系统入侵排查
(一)系统账号排查
在CMD中使用net user查看系统账号信息。
C:\Windows\System32>net user
\\XXXXXXX 的用户帐户
-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
XXXXXXX WDAGUtilityAccount
命令成功完成。
在CMD中使用net user XXX查看指定系统账号详细信息,注意guest账号。
C:\Windows\System32>net user guest
用户名 Guest
全名
注释 供来宾访问计算机或访问域的内置帐户
用户的注释
国家/地区代码 000 (系统默认值)
帐户启用 No
帐户到期 从不
上次设置密码 2023/12/6 10:33:23
密码到期 从不
密码可更改 2023/12/6 10:33:23
需要密码 No
用户可以更改密码 No
允许的工作站 All
登录脚本
用户配置文件
主目录
上次登录 从不
可允许的登录小时数 All
本地组成员 *Guests
全局组成员 *None
命令成功完成。
系统账号名字以$结尾的是隐藏账号,隐藏账号使用net user不能看到。
在运行里输入lusrmgr.msc,通过本地用户和组查看隐藏账号。或通过注册表里查看隐藏账号。
删除账号命令。
C:\Windows\System32>net user XXX$ /del
(二)进程端口排查
在CMD中使用netstat进行端口排查,netstat指令如下:
NETSTAT [-a] [-b] [-e] [-f] [-i] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval]
-a 显示所有连接和侦听端口。
-b 显示在创建每个连接或侦听端口时涉及的
可执行文件。在某些情况下,已知可执行文件托管
多个独立的组件,此时会
显示创建连接或侦听端口时
涉及的组件序列。在此情况下,可执行文件的
名称位于底部 [] 中,它调用的组件位于顶部,
直至达到 TCP/IP。注意,此选项
可能很耗时,并且可能因为你没有足够的
权限而失败。
-e 显示以太网统计信息。此选项可以与 -s 选项
结合使用。
-f 显示外部地址的完全限定
域名(FQDN)。
-i 显示 TCP 连接在当前状态所花费的时间。
-n 以数字形式显示地址和端口号。
-o 显示拥有的与每个连接关联的进程 ID。
-p proto 显示 proto 指定的协议的连接;proto
可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s
选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:
IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-q 显示所有连接、侦听端口和绑定的
非侦听 TCP 端口。绑定的非侦听端口
不一定与活动连接相关联。
-r 显示路由表。
-s 显示每个协议的统计信息。默认情况下,
显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;
-p 选项可用于指定默认的子网。
-t 显示当前连接卸载状态。
-x 显示 NetworkDirect 连接、侦听器和共享
终结点。
-y 显示所有连接的 TCP 连接模板。
无法与其他选项结合使用。
interval 重新显示选定的统计信息,各个显示间暂停的
间隔秒数。按 CTRL+C 停止重新显示
统计信息。如果省略,则 netstat 将打印当前的
配置信息一次。
对于netstat指令的使用,例如查看443指定端口网络连接。
C:\Windows\System32>netstat -ano | findstr 443
例如过滤TCP连接。
C:\Windows\System32>netstat -ano | findstr TCP
查看发现可疑的ESTABLISHED连接,复制PID,使用tasklist指令查找对应PID的进程名称。
C:\Windows\System32>tasklist | findstr XXXX
在运行里输入msinfo32,点击软件环境、正在运行任务,查看对应PID的进程路径。删除Backdoor 文件,并使用taskkill指令强制关闭对应进程。
C:\Windows\System32>tasklist /F /pid XXXX
(三)启动项排查
在运行里输入regedit打开注册表,查看如下目录中启动项是否有异常,有异常启动项进行删除:\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
(四)计划任务排查
在CMD中输入schtasks.exe,查看计划任务运行情况。
C:\Windows\System32>schtasks.exe
文件夹: \
任务名 下次运行时间 模式
======================================== ====================== ===============
Adobe-Genuine-Software-Integrity-Schedul 2023/12/6 15:32:00 就绪
AdobeGCInvoker-1.0 2023/12/7 7:22:00 就绪
GoogleUpdateTaskMachineCore{6E7627E4-2EF 2023/12/7 11:01:41 正在运行
MicrosoftEdgeUpdateTaskMachineCore 2023/12/6 20:59:10 就绪
MicrosoftEdgeUpdateTaskMachineUA 2023/12/6 12:29:10 就绪
OneDrive Per-Machine Standalone Update T 2023/12/6 15:38:19 就绪
OneDrive Reporting Task-S-1-5-21-2329815 2023/12/6 16:35:26 就绪
User_Feed_Synchronization-{6825EAE9-5D17 2023/12/6 15:34:15 就绪
文件夹: \Lenovo
任务名 下次运行时间 模式
======================================== ====================== ===============
信息: 目前在你的访问级别上不存在任何可用的计划任务。
(五)系统信息排查
在CMD中输入systeminfo查看系统信息。在文件夹路径中输入%userprofile%\recent查看最近打开的文件。
C:\Windows\System32>systeminfo
主机名: XXXXX
OS 名称: Microsoft Windows 11 家庭中文版
OS 版本: 10.0.22621 暂缺 Build 22621
OS 制造商: Microsoft Corporation
OS 配置: 独立工作站
OS 构建类型: Multiprocessor Free
(六)日志排查
日志存放的路径为:C:\Windows\System32\winevt\Logs。
在运行中输入eventvwr.msc打开事件查看器进行日志查看。
三、Linux系统入侵排查
(一)系统账号排查
账号信息存放的文件为/etc/passwd、/etc/shadow。使用who指令查看当前登录用户,使用w指令查看系统信息,使用uptime指令查看账号登录时间。
查询特权账号(UID为0)。
[root@localhost ~] awk -F: '$3==0{print $1}' /etc/passwd
查询可远程登录的帐号。
[root@localhost ~] awk '/\$1|\$6/{print $1}' /etc/shadow
查询账号sudo权限情况。
[root@localhost ~] more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=
(ALL)"
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
删除账号,并且将/home⽬录下的user⽬录⼀并删除。
[root@localhost ~] userdel -r user
禁⽤帐号,帐号⽆法登录。
[root@localhost ~] usermod -L user
(二)查看历史记录
使用histroy指令查看历史执行命令。
在/etc/profile的⽂件尾部添加如下⾏数配置信息,以加固历史显示:
######jiagu history xianshi#########
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"
######### jiagu history xianshi ##########
配置完后记得执行source /etc/profile使之生效。
(三)进程端⼝排查
使用netstat进行端口排查,Linux上的和Windows上的指令参数好像还有小小点不一样。首先通过netstat -antlp | more查看,然后输入ls -l /proc/PID号/exe找出进程文件路径。
[root@localhost ~] netstat -antlp | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 1436/sshd: root@pts
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 937/sshd: /usr/sbin
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 714/systemd-resolve
tcp 0 0 172.23.170.193:49366 100.100.80.14:80 TIME_WAIT -
tcp 0 0 172.23.170.193:56582 100.100.30.26:80 ESTABLISHED 1046/AliYunDun
tcp 0 0 172.23.170.193:43612 100.100.0.42:80 TIME_WAIT -
tcp 0 52 172.23.170.193:22 220.163.43.18:36174 ESTABLISHED 1436/sshd: root@pts
tcp6 0 0 :::3306 :::* LISTEN 1045/mysqld
tcp6 0 0 ::1:6010 :::* LISTEN 1436/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 937/sshd: /usr/sbin
tcp6 0 0 :::33060 :::* LISTEN 1045/mysqld
[root@localhost ~] ls -l /proc/1045/exe
lrwxrwxrwx 1 mysql mysql 0 Dec 6 16:59 /proc/1045/exe -> /usr/sbin/mysqld
使用ps aux | grep PID号进行分析进程。
[root@localhost ~] ps aux | grep 1045
mysql 1045 0.4 22.8 1783624 393820 ? Ssl 16:59 0:06 /usr/sbin/mysqld
root 1736 0.0 0.1 6476 2296 pts/0 S+ 17:25 0:00 grep --color=auto 1045
根据端口号查看进程。
[root@localhost ~] lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 937 root 3u IPv4 21231 0t0 TCP *:ssh (LISTEN)
sshd 937 root 4u IPv6 21233 0t0 TCP *:ssh (LISTEN)
查看进程的启动时间点。
[root@localhost ~] ps -p 1045 -o lstart
STARTED
Wed Dec 6 16:59:52 2023
(四)启动项排查
使用runlevel指令查看运⾏级别,其中运行级别数字含义如下:
运⾏级别 | 含义 |
0 | 关机 |
1 | 单⽤户模式,可以想象为windows的安全模式,主要⽤于系统修复 |
2 | 不完全的命令⾏模式,不含NFS服务 |
3 | 完全的命令⾏模式,就是标准字符界⾯ |
4 | 系统保留 |
5 | 图形模式 |
6 | 重启动 |
插曲:建立开机自启动软链接示例。
ln -s /usr/share/applications/plank.desktop /etc/xdg/autostart/
ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
开机自启动配置文件。
[root@localhost ~] ls -l /etc/rc?.d/
查看定时任务。
[root@localhost ~] crontab -l
no crontab for root
(五)查看文件脚本
查看以下目录中是否存在恶意脚本:
/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/*
/etc/cron.daily/*
找出 /opt 目录中⼀天前访问过的⽂件:
[root@localhost ~] find /opt -iname "*" -atime 1 -type f
(六)日志排查
日志存放目录/var/log/,查看⽇志配置情况:
[root@localhost ~] more /etc/rsyslog.conf
/var/log/目录下的日志有:
[root@localhost ~] ls /var/log/
alternatives.log auth.log.4.gz dmesg faillog lastlog tuned
alternatives.log.1 bootstrap.log dmesg.0 installer mysql ubuntu-advantage.log
apport.log btmp dmesg.1.gz journal private ubuntu-advantage.log.1
apport.log.1 btmp.1 dmesg.2.gz kern.log syslog ubuntu-advantage-timer.log
apt chrony dmesg.3.gz kern.log.1 syslog.1 ubuntu-advantage-timer.log.1
auth.log cloudinit-deploy.log dmesg.4.gz kern.log.2.gz syslog.2.gz unattended-upgrades
auth.log.1 cloud-init.log dpkg.log kern.log.3.gz syslog.3.gz wtmp
auth.log.2.gz cloud-init-output.log dpkg.log.1 kern.log.4.gz syslog.4.gz
auth.log.3.gz dist-upgrade ecs_network_optimization.log landscape sysstat