Windows和Linux应急响应以及IP封堵

发布于:2025-08-11 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

1、Windows入侵排查思路

1.1 检查系统账号安全

1.2 检查异常端口、进程

1.3 检查启动项、计划任务、服务

1.4 检查系统相关信息

1.5 自动化查杀

1.6 日志分析

系统日志分析

Web 访问日志

2、Linux 入侵排查思路

2.1 账号安全

2.1.1、基本使用

2.1.2、入侵排查

2.2 历史命令

2.2.1基本使用

2.2.2入侵排查

2.3 检查异常端口

2.4 检查异常进程

2.5 检查开机启动项

2.5.1基础使用

2.5.2入侵排查

2.6 检查定时任务

2.6.1基本使用

2.6.2入侵排查

2.7 检查服务

2.7.1服务自启动

2.7.2入侵排查

2.8 检查异常文件

2.9 检查系统日志

2.9.1基础使用

2.9.2日志分析

3、封堵IP

3.1基本使用:iptables封堵 IP

3.2自动封堵IP(deny.sh)

3.2.1deny.sh脚本要求:实现自动封堵IP,失败三次后自动使用iptables封堵爆破IP

3.2.2示例运行结果

3.2.3使用crontab来定时执行上述脚本


1、Windows入侵排查思路

1.1 检查系统账号安全

  • 查看服务器是否有弱口令,远程管理端口是否对公网开放。

  • 查看服务器是否存在可疑账号、新增账号。

  • 查看服务器是否存在隐藏账号、克隆账号。

  • 结合日志,查看管理员登录时间、用户名是否存在异常。

1.2 检查异常端口、进程

  • 检查端口连接情况,是否有远程连接、可疑连接。
  • 检查是否有可疑进程。
  • 检查小技巧:看端口对应的 PID:`netstat -ano | findstr "port"`;查看进程对应的 PID:任务管理器 -- 查看 -- 选择列 -- PID 或者 `tasklist  | findstr "PID"`;查看进程对应的程序位置(任务管理器 -- 选择对应进程 -- 右键打开文件位置,运行输入wmic,cmd 界面输入process );tasklist /svc   进程 -- PID -- 服务;查看Windows服务所对应的端口(%systemroot%/system32/drivers/etc/services(一般 %systemroot% 就是 C:\Windows 路径))。

1.3 检查启动项、计划任务、服务

  • 检查服务器是否有异常的启动项。
  • 检查计划任务。
  • 服务自启动。

1.4 检查系统相关信息

  • 查看系统版本以及补丁信息。
  • 查找可疑目录及文件。
  • 发现并得到 WebShell、远控木马的创建时间。

1.5 自动化查杀

  • 病毒查杀

         检查方法:下载安全软件,更新最新病毒库,进行全盘扫描。

  • webshell查杀

         检查方法:选择具体站点路径进行webshell查杀,建议使用两款 WebShell 查杀工具同时查杀,可相互补充规则库的不足。

1.6 日志分析

系统日志分析

  • 前提:开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。
  • Win+R 打开运行,输入 "eventvwr.msc",回车运行,打开"事件查看器"。
  • 导出应用程序日志、安全日志、系统日志,利用 [Log Parser](https://www.microsoft.com/en-us/download/details.aspx?id=24659) 进行分析。

Web 访问日志

  • 找到中间件的web日志,打包到本地方便进行分析。
  • 推荐工具:Windows 下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。Linux 下,使用 Shell 命令组合查询分析。

2、Linux 入侵排查思路

2.1 账号安全

2.1.1、基本使用

  • 用户信息文件 /etc/passwd
  • 影子文件 /etc/shadow
  • who     查看当前登录用户(tty 本地登陆  pts 远程登录)
  • w       查看系统信息,想知道某一时刻用户的行为
  • uptime  查看登陆多久、多少用户,负载状态

2.1.2、入侵排查

(1)查询特权用户特权用户(uid 为0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd

(2)查询可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow

(3)除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 目录一并删除

2.2 历史命令

2.2.1基本使用

通过 .bash_history 文件查看帐号执行过的系统命令

1、root 用户的历史命令
histroy
2、打开 /home 各帐号目录下的 .bash_history,查看普通帐号执行的历史命令。
为历史的命令增加登录的 IP 地址、执行命令时间等信息:
1)保存1万条命令
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
2)在/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 ##########
3)source /etc/profile 让配置生效
生成效果: 1  2018-07-10 19:45:39 192.168.204.1 root source /etc/profile
3、历史操作命令的清除:history -c
但此命令并不会清除保存在文件中的记录,因此需要手动删除 .bash_profile 文件中的记录。

2.2.2入侵排查

进入用户目录下,导出历史命令。
cat .bash_history >> history.txt

2.3 检查异常端口

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

netstat -antlp | more

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

2.4 检查异常进程

使用 ps 命令,分析进程

使用 ps 命令,分析进程

2.5 检查开机启动项

2.5.1基础使用

系统运行级别示意图:

查看运行级别命令 `runlevel`

2.5.2入侵排查

启动项文件:

more /etc/rc.local
/etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d/

2.6 检查定时任务

2.6.1基本使用

crontab -l   列出某个用户cron服务的详细内容

Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root

crontab -r   删除每个用户cront任务(谨慎:删除所有的计划任务)

crontab -e   使用编辑器编辑当前的crontab文件 

如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件

2.6.2入侵排查

重点关注以下目录中是否存在恶意脚本:

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

2.7 检查服务

2.7.1服务自启动

第一种修改方法:

chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig –level  2345 httpd on  开启自启动
chkconfig httpd on (默认level是2345)

第二种修改方法:

修改 /etc/re.d/rc.local 文件

加入 /etc/init.d/httpd start

第三种修改方法:

使用 ntsysv 命令管理自启动,可以管理独立服务和 xinetd 服务。

2.7.2入侵排查

查询已安装的服务:

RPM 包安装的服务

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

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

源码包安装的服务

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

2.8 检查异常文件

  • 查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性
  • 得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?

​                 可以使用find命令来查找,如  find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件

  • 针对可疑文件可以使用 stat 进行创建修改时间。

2.9 检查系统日志

2.9.1基础使用

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

2.9.2日志分析

1、定位有多少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
 
2、登录成功的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}' 

3、增加一个用户kali日志:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure 

4、删除用户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

5、su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

sudo授权执行:
sudo -l
Jul 10 00:43:09 localhost sudo:    good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

3、封堵IP

3.1基本使用:iptables封堵 IP

sudo iptables -A INPUT -s 192.168.1.100 -j DROP    -------封堵单个IP

sudo iptables -A INPUT -s 192.168.1.0/24 -j DROP   -------封堵IP段

sudo iptables -L -n     -------查看当前规则

sudo iptables -D INPUT -s 192.168.1.100 -j DROP    -------解除封禁

3.2自动封堵IP(deny.sh)

3.2.1deny.sh脚本要求:实现自动封堵IP,失败三次后自动使用iptables封堵爆破IP

#需求:
#封堵在一分钟内爆破次数超过100次的IP

#!/bin/bash
# 日志文件路径
logfile=/usr/local/nginx/logs
last_minutes=1 
# 开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)
start_time=`date -d"$last_minutes minutes ago" +"%d/%m/%Y:%H:%M:%S"`
echo $start_time
# 结束时间现在
stop_time=`date +"%d/%m/%Y:%H:%M:%S"`
echo $stop_time
cur_date="`date +%d/%m/%Y`"
echo $cur_date
# 过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径
tac $logfile/access.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,2);if(t>=st && t<=et){print $1}}' |sort | uniq -c | sort -nr > $logfile/log_ip_top10
#ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
# 出现横杠使用sed去掉第一行
#sed -i '1d' $logfile/log_ip_top10    
# 单位时间[1分钟]内单ip访问次数超过200次的ip记录入black.txt
ip=`cat $logfile/log_ip_top10 | awk '{if($1 > 100)print $2}'`
for line in $ip
do
echo $line >> $logfile/getip.txt
echo $line
iptables -I INPUT -p tcp  -m multiport --dport 80,443 -s $line -j DROP
done

注意事项

  1. 脚本中使用了for循环来处理多个超过访问限制的IP。
  2. 清空access.log的操作是可选的,根据实际情况决定是否执行。
  3. 确保脚本具有执行权限,可以使用chmod +x deny.sh来赋予权限。

3.2.2示例运行结果

假设access.log中有多个IP超过了访问限制,运行脚本后,getip.txt文件可能包含以下内容:

deny 192.168.1.1;
deny 192.168.1.2;

3.2.3使用crontab来定时执行上述脚本

编辑crontab

crontab -e

在crontab文件中添加一行,每分钟执行一次:

* * * * * /usr/local/nginx/logs/deny.sh

注意:确保脚本路径正确,且脚本具有执行权限。

重启crond服务,使配置生效

systemctl restart crond.service

网站公告

今日签到

点亮在社区的每一天
去签到