应急响应总结与心得分享
作者:巧克力威化饼 编辑:白帽子社区运营团队
"白帽子社区在线CTF靶场BMZCTF,欢迎各位在这里练习、学习,BMZCTF全身心为网络安全赛手提供优质学习环境,链接(http://www.bmzclub.cn/)
"
点击链接参与白帽子社区赠书活动(5月29日上午12:00结束):https://mp.weixin.qq.com/s/D5vc4Mxn3NBF-_Uq56YlyA
那么问题又来了,应急前我们应该干嘛呢?应急时我们应该干嘛呢?应急后我们应该干嘛呢?
首先,我们应该有一个好的整体思路。
信息收集:收集到发生安全事件的资产设备,整理时间线,是否存在恶意文件样本,是什么操作系统等。
判断事件类型:判断是否为安全事件,是web入侵,还是系统入侵,还是网络攻击。
深入排查:通过分析日志、启动项、系统用户、进程、恶意文件等找寻入侵来源。
清除处置:杀掉恶意进程、文件,配合运维人员打好补丁
输出文档:分析整体流程,产出报告。
https://github.com/mrknow001/Mind_Map/blob/main/%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94/%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94%E6%80%BB%E7%BB%93%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE.png
在了解事件的基础情况后,使用一些好的排查工具能让我们快速定位到突破口,节省大量的时间。正所谓工欲善其事,必先利其器,下述推荐一些常用的排查工具。
网络分析排查工具
当我们需要查看传输的数据包时,可能会经常用到下述这些网络排查工具
Wireshark
一款常用的网络分析排查工具,可用来分析网络攻击等事件。如下图,wireshark看出来主机正在遭受arp攻击。
Tcpview
微软内置工具集,网络连接查看工具,体积小,效果比较直观。
Tcpdump
如果系统是linux的话,推荐使用tcpdump,比较轻量,也更方便。
常用命令:
https://www.jianshu.com/p/d9162722f189
进程分析排查工具
有时候有些进程无法直接通过简单的命令查询到,这个时候我们可以借助下述工具对恶意进程进行分析和排查。
PChunter
ProcessHacker
启动项分析工具
一般是为了方便定位病毒启动项,常用的工具为AutoRuns(win上使用)。
AutoRuns
其它类型的工具
像有些特定的病毒,需要专杀工具去查杀和修复正常文件;再或者我们能Everything工具搜索关键字等;再或者用D盾或者河马查杀后门等。
综合查询工具
按照常规查询方向一个一个排查可能需要大量的时间,这个时候有个自动化脚本就显得尤为重要了,这里推荐两个好的的综合查询工具。
GScan
这款工具Checklist比较全面,检测速度相对来说也比较快。
dfirtriage
一款用于基于Windows的事件响应的数字取证工具,该工具将在执行时自动运行各种命令。所获取的数据将驻留在执行目录的根目录中。DFIRTriage可以从USB驱动器运行,也可以在目标上的远程外壳中执行。仅支持Windows。
工具集分享
网上有一些大佬将资源整合了,这里附上下载链接地址,请确保安全情况下使用。
tips:请确保安全情况下使用
https://github.com/theLSA/hack-er-tools
https://www.52pojie.cn/thread-1315923-1-1.html
在某些情况下,我们需要手动分析和排查,这个时候就需要掌握一些应急的命令和技巧,下述分别以linux和windows来阐述。
Windows
排查系统账号
查看服务器是否新增用户,是否存在弱口令,是否开了redis、远程桌面、ssh是否开启等。
测试方法:
可以通过咨询客户,或者通过命令行查询,再或者通过简单的扫描得到
查看服务器是否存在可疑账号、隐藏账户、新增账号
Win+R -> lusrmgr.msc
或通过注册表查看(记得赋予对SAM键的权限)
Win+R -> regedit.exe
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
如下图可以看出目标服务器被添加了隐藏账户test$
日志分析与排查
系统日志分析
Win+R>eventvwr.msc
导出Windows的安全日志,利用LogParser进行分析,或者通过手动分析。
Windows常见的日志事件ID
附:Vista/Win7/Win8/Win10/Server2008/Server2012及之后的版本
说明
1102 清理审计日志
4624 账号成功登录
4625 账号登录失败
4768 Kerberos身份验证(TGT请求)
4769 Kerberos服务票证请求
4776 NTLM身份验证
4672 授予特殊权限
4720 创建用户
4726 删除用户
4728 将成员添加到启用安全的全局组中
4729 将成员从安全的全局组中移除
4732 将成员添加到启用安全的本地组中
4733 将成员从启用安全的本地组中移除
4756 将成员添加到启用安全的通用组中
4757 将成员从启用安全的通用组中移除
4719 系统审计策略修改
LogParser常用命令
https://www.jianshu.com/p/0f3ec2fb57a4
例:查看事件258的记录
Web日志分析
先找到中间件的web日志,打包到本地进行分析
检查异常进程、端口
攻击者如果入侵主机后一般会上传恶意文件,这个时候一般会有外联情况,所以我们需要查看主机是否存在异常进程、端口
netstat -ano
tasklist | find"PID"
如果找寻到恶意进程,可以使用以下命令获取系统进程详细信息
简单使用:
cmd >wmic process
复杂一点:
1.txt :
caption:进程名
commandline:进程名、进程执行参数、程序执行路径
creationDate:进程启动时间(格式为:年月日时分秒)
executablepath:程序执行路径
handle:进程pid
handleCount:该进程的父pid
像有些比较难找出的恶意进程,可以尝试用上述工具集里的工具进行针对性的排查。
检查系统相关信息
通过检查系统版本和判断补丁信息,再回忆近期是否有什么重大型漏洞,或者是去提权辅助界面看看是否存在可利用的信息。
cmd > systeminfo
查看用户目录及文件,如果攻击者新建账号的话会生成一个用户目录,同时可以根据文件的事件排序,看看是否有可疑的文件夹
Win+R >cmd >%UserProfile%\Recent
检查计划任务、启动项、服务、环境变量
检查主机是否存在计划任务
Cmd > schtasks或at
检查主机是否存在异常启动项
Win+R >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
检查主机是否存在异常服务
Win+R >services.msc
检查主机环境变量是否存在异常
使用set命令将环境变量导出检查
恶意文件及病毒查杀
恶意病毒查杀:建议下载安全软件,对系统进行全盘扫描并查杀。
恶意文件查杀:像如果是webshell这种,可以使用D盾,河马等查杀工具进行查杀。
防火墙及杀毒软件排查
检查操作系统防火墙是否存在异常
windows操作防火墙配置着允许/拒绝通行的入站/出站规则,可根据防火墙配置判断该主机在同网段内的可攻击面积。
netsh firewall show state //查看防火墙此时状态
netsh advfirewall firewall show rulename=all dir=in //入站规则
netsh advfirewall firewallshow rule name=all dir=out //出站规则
检查杀软是否检测出异常
如果目标主机安装了杀软,攻击者在入侵主机时杀软难免会记录到部分痕迹,这个时候我们可以对杀软日志记录进行分析。
Linux
如果是linux系统应急的话,可能需要掌握一些常见的排查命令
Uptime:查看当前系统时间,存在用户,负载等信息
Stat:会显示文件UID,文件名,文件属性,文件访问时间等
Lsof:列出来当前系统打开文件
Find:目录文件列出来,也可以查找文件
md5sum:该命令用于生成和校验文件的md5值
Ps:列举常用进程
Netstat:查看网络连接及开放端口号
Top:经常用来监控linux的系统状况
更多命令参数请查看下述链接:
https://www.hackjie.com/1402.html
在了解这些命令之后,才只是我们正式排查的开始,接下来我们可以按照下述方式进行排查。
排查系统账号
通过以下命令查看系统用户
/etc/passwd //该文件用于用户登录时校验 用户的口令
/etc/shadow //存放相应的用户密码,又称为影子文件
/etc/group //记录组ID和组名的对应文件
查询特权用户:cat /etc/passwd | awk-F":" '$3==0{print $1}'
查询可以远程登录的账号:cat /etc/shadow |awk'/\$1|\$6/{print $1}'
查询具有sudo权限账号:more /etc/sudoers | grep -v "^#\|^$" | grep"ALL=(ALL)"
查看历史记录
一般是如下两个命令
history //记录执行过的命令
.bash_history //记录执行过的命令
二者区别
history显示内存和~/.bash_history中的所有内容;内存中的内容并没有立刻写入~/.bash_history,只有当当前shell关闭时才会将内存内容写入shell。
检查异常进程、端口
netstat -antlp //查看端口命令,a是查看所有
ps -aux //查看进程命令
检查开机启动项、定时任务、服务、异常文件
查看启动项常用方式
more /etc/rc.local
/etc/rc.d/rc[0-6].d
ls -l /etc/rc.d/rc3.d
查看服务常用方式
chkconfig -list //列出chkconfig所知道的所有的服务的情况
查看定时任务
/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/*
查看异常文件
可以查看临时目录下的文件,也可以查看. .. 等前缀 或关键字的异常文件
查看系统环境变量
Linux的系统级环境变量位于/etc/目录中,用户级环境变量位于~/目录中。
常看到的两个目录:
/etc/profile
/home/用户/.bash.profile
env:该命令显示所有的环境变量
set:该命令显示所有本地定义的Shell变量
tips:alias也可以实现隐藏指定程序的内容回显,应值得注意
日志分析与排查
Linux下的日志记录一般都在/var/log文件下,以下收集了一些常用的筛选方式
原文链接:https://mp.weixin.qq.com/s/bYVebbDIL18odT0ShA6s7Q
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:09localhost sudo: good : TTY=pts/4 ;PWD=/home/good ; USER=root
防火墙及杀毒软件排查
检查操作系统防火墙是否存在异常
linux操作防火墙配置着允许/拒绝通行的入站/出站规则,可根据防火墙配置判断该主机在同网段内的可攻击面积。
不同的linux版本可能命令会不一样,这里以centos为例
Centos 6.x版本iptables:
service iptables status //查看防火墙状态
service iptables start //开启防火墙
Centos 7版本 firewall:
开放特定端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
查看防火墙状态:
firewall-cmd --state
重启防火墙:
systemctl restart firewalld
查看端口列表:
firewall-cmd --zone=public --list-ports
二者的配置一般在/etc/sysconfig/iptables 或 /etc/firewalld/zones/pulic.xml下
检查杀软是否检测出异常
如果目标主机安装了杀软,攻击者在入侵主机时杀软难免会记录到部分痕迹,这个时候我们可以对杀软日志记录进行分析。
报告模板
相信通过上述方式排查后,或多或少会有些收获吧,这个时候我们需要输出报告文档,这里收集了网上的一些简单文档,总体格式都差不多,后续可以自行添加和删除。
https://www.uedbox.com/post/9816/
最后,望各位师傅项目接的多,漏洞一挖一个准,最好没有应急突发情况,文章写的不好,望多多担待,不喜勿喷,DD怕疼。
参考文章链接:
https://www.freebuf.com/articles/terminal/192859.html
https://mp.weixin.qq.com/s/bYVebbDIL18odT0ShA6s7Q