本人首先进行了linux的应急响应,windows之后再进行
Linux与Windows应急响应初体验
- 1 linux应急响应
- 1.1 账户:
- 1.1.1 使用`cat /etc/passwd`命令查看passwd文件
- 2.1.2 使用`cat /etc/shadow`命令查找shadow文件,该文件为密码文件的存储项
- 1.2 入侵排查
- 1.2.1 查询特权用户
- 1.2.2 查询sudo
- 1.2.3 通过`.bash_history`查看历史命令:
- 1.2.4 登陆情况
- 1.2.5 开机启动项
- 1.2.6 任务计划
- 1.3 日志分析:
- 1.3.1 查询指令
- 1.3.2 登录成功的IP有哪些:
- 1.3.3、增加一个用户kali日志:
- 1.3.4 删除用户kali日志:
- 1.3.5 su切换用户:
- 1.4 攻击/应急响应初体验
- 1.4.1 准备
- 1.4.2 收集信息
- 1.4.3 应急响应
- 查询登陆成功
- 查询日志中的登陆失败
- 查询爆破使用的字典
- 1.4.4 保护策略
- 2 Windows应急响应
1 linux应急响应
不知为何,本人的登录日志内容在/var/log/auth.log文件中,因此任何牵扯到secure的内容都更换为auth.log
1.1 账户:
1.1.1 使用cat /etc/passwd
命令查看passwd文件
该文件存储了系统中所有用户的基本信息
七个字段每个字段用:
隔开,七个字段分别为:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
重点查/bin/bash(是否用bin/bash,用了就是创建新用户,已经被入侵了。如果用bin/login,就没有被入侵)
2.1.2 使用cat /etc/shadow
命令查找shadow文件,该文件为密码文件的存储项
1.2 入侵排查
1.2.1 查询特权用户
awk -F: '$3==0{print $1}' /etc/passwd
若有其他未知的特权账户则证明被入侵过
1.2.2 查询sudo
牵扯到提权
账户提权:内核漏洞提权(成功率最大,如果失败,用其他方法提权的成功几率无限趋于0),敏感文件提权(运气)
suid提权:(suid是某个二进制文件在执行时自动提升到root权限,执行结束之后回归到正常权限)
tomcat-syl ALL=(root) NOPASSWD:/usr/root/find
tomcat是一个普通用户,不需要密码以root权限去执行find
find exec可以执行命令
创建一个普通用户qq
查看权限:
给find加权:
普通用户qq
使用find命令执行文件
find /usr/bin/passwd -exec whoami \;
使用find命令全局查找,有哪些文件拥有suid权限,如果有能执行命令的情况下需要重点关注。
sudo提权:
sudo允许执行某个命令,但未对命令参数做限制
sudo允许执行某个带参数的具体命令
若其他未知用户有ALL=(ALL:ALL)ALL则被入侵过
任意用户任意东西执行任意
1.2.3 通过.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 文件中的记录。
完成以上配置后使用history
命令查看:
显示执行命令的日期、IP、用户
1.2.4 登陆情况
查看登陆成功信息:
查看错误登录信息:
1.2.5 开机启动项
查看运行级别命令 runlevel
系统默认允许级别
vi /etc/inittabid=3:initdefault #系统开机后直接进入哪个运行级别
开机启动配置文件
/etc/rc.local/etc/rc.d/rc[0~6].d
1.2.6 任务计划
crontab -l 列出某个用户cron服务的详细内容Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/rootcrontab -r 删除每个用户cront任务(谨慎:删除所有的计划任务)crontab -e 使用编辑器编辑当前的crontab文件 如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件
重点关注以下目录中是否存在恶意脚本
/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/* 查看目录下所有文件
1.3 日志分析:
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/mailog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
/var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
1.3.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
1.3.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}'
1.3.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
1.3.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
1.3.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
改为自己的日志目录
1.4 攻击/应急响应初体验
1.4.1 准备
攻击机的ip地址:192.168.244.142
靶机端:192.168.244.141
1.4.2 收集信息
使用nmap命令查看靶机端ssh的端口为22
爆破会使用到密码字典,因此创建两个txt文件,
password.txt
users.txt
我们使用hydra进行暴力破解
[root@server ~]# hydra -L users.txt -P passwrd.txt ssh://192.168.244.141#-L users.txt: 从名为users.txt的文件中读取用户名列表
#-P password.txt: 从名为password.txt的文件中读取密码列表
#ssh://192.168.244.141: 指定攻击的目标为IP地址为192.168.244.141的主机上运行的SSH服务
!!!
我们可以看到爆破出来一个用户和密码
使用爆破的用户名和密码登录到上面
输入yes并输入密码
登陆成功!
1.4.3 应急响应
快速进入靶机中,进入/var/log目录下迅速进行日志查询
查询登陆成功
发现敌机登陆成功!真的很可恶
查询日志中的登陆失败
发现敌机登录失败340次,太可恶了
查询爆破使用的字典
这个攻击者怎么坏成这样,心机如此之重!
1.4.4 保护策略
deny_ssh.sh
在使用deny_ssh.sh
文件生成的iptables
中
分析可得:
这个文件是由 iptables-save
命令生成的防火墙规则配置文件,包含了 Linux 防火墙 (iptables) 的完整规则集。让我为您详细分析其结构和含义:
文件结构概览
文件分为两个主要部分:
- filter 表:负责包过滤(接受/拒绝流量)
- nat 表:负责网络地址转换(NAT)
每部分都包含:
- 默认链策略
- 自定义链
- 具体的防火墙规则
- 结束标记 (
COMMIT
)
一、filter 表分析 (包过滤)
1. 默认链策略
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
INPUT
:接受所有入站流量FORWARD
:丢弃所有转发流量OUTPUT
:接受所有出站流量
2. 自定义链(Docker 相关)
:DOCKER - [0:0]
:DOCKER-BRIDGE - [0:0]
:DOCKER-CT - [0:0]
:DOCKER-FORWARD - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
这些是 Docker 创建的自定义链,用于管理容器网络流量。
3. 主要规则分析
(1) SSH 访问控制
-A INPUT -s 192.168.244.129/32 -p tcp -m tcp --dport 22 -j DROP
- 功能:阻止来自 192.168.244.129 的 SSH 访问
- 细节:
-s 192.168.244.129/32
:源IP地址-p tcp
:TCP协议--dport 22
:目标端口22 (SSH)-j DROP
:丢弃数据包
(2) Docker 网络隔离规则
-A DOCKER ! -i br-00c71e29d5b2 -o br-00c71e29d5b2 -j DROP
-A DOCKER ! -i docker0 -o docker0 -j DROP
- 功能:防止非 Docker 网桥接口的流量进入容器网络
- 细节:
br-00c71e29d5b2
:自定义 Docker 网桥docker0
:默认 Docker 网桥- 规则确保只有来自这些网桥的流量才能进入容器
(3) 连接跟踪
-A DOCKER-CT -o br-00c71e29d5b2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A DOCKER-CT -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- 功能:允许已建立的连接和相关的连接通过
- 细节:
--ctstate RELATED,ESTABLISHED
:匹配已建立或相关的连接状态
(4) Docker 网络隔离策略
-A DOCKER-ISOLATION-STAGE-1 -i br-00c71e29d5b2 ! -o br-00c71e29d5b2 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-00c71e29d5b2 -j DROP
- 功能:实现 Docker 容器间的网络隔离
- 细节:
- 两阶段隔离策略防止不同网桥间的流量互通
- 确保容器只能与同一网络中的容器通信
二、nat 表分析 (网络地址转换)
1. 默认链策略
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
2. 主要规则分析
(1) Docker 端口映射
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
- 功能:将目标地址是本机的流量重定向到 DOCKER 链
- 细节:
- 实现 Docker 容器的端口映射功能
(2) SNAT (源地址转换)
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.18.0.0/16 ! -o br-00c71e29d5b2 -j MASQUERADE
- 功能:为容器提供出站互联网访问
- 细节:
172.17.0.0/16
:默认 Docker 网络172.18.0.0/16
:自定义 Docker 网络 (br-00c71e29d5b2)MASQUERADE
:将容器流量源IP替换为主机IP
(3) Docker 链规则
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i br-00c71e29d5b2 -j RETURN
- 功能:直接返回来自 Docker 网桥的流量
- 细节:
- 不对容器间的流量进行 NAT 处理
关键发现与安全分析
-
容器网络安全:
- Docker 创建了两个网络:
docker0
(172.17.0.0/16) 和br-00c71e29d5b2
(172.18.0.0/16) - 实现了严格的网络隔离策略,防止容器间未经授权的通信
- Docker 创建了两个网络:
-
主机安全:
- 仅有一条明确的访问控制规则:阻止 192.168.244.129 的 SSH 访问
- INPUT 链默认策略为 ACCEPT,存在安全风险
-
Docker 网络配置:
- 使用了标准的 Docker 网络隔离模型
- 为容器提供了出站互联网访问 (MASQUERADE)
-
潜在风险:
- 除 SSH 规则外,没有其他主机级防护
- 所有入站流量默认被接受
- 没有针对常见攻击(如端口扫描、暴力破解)的防护
再次尝试进行ssh暴力破解发现无法访问
2 Windows应急响应
使用windows 10系统,对其进行爆破,实现应急响应