应急响应思路
应急响应简单来说要干的其实就是看内外网日志,然后有异常就断网,封ip,清除权限,有的时候(其实是大部分时候)断网才是应急响应的最有效措施,尤其是半夜不影响业务的情况
应急响应基本思路
事件发生后(态势感知等设备发觉攻击成功)->紧急处置封堵(直接找倒叙关键点)->封ip+下线机器(断网)+清除权限->还原攻击链+修漏洞->旁站复测隐患排查+写报告
准备-检测-抑制-根除-恢复-书写报告
- 准备工作,收集信息:收集告警信息、客户反馈信息、设备主机信息等。
- 检测,判断类型:安全事件类型的判断(钓鱼邮件,webshell,爆破,中毒等)
- 抑制,控制范围,隔离失陷设备
- 根除,分析研判,将收集的信息分析
- 恢复,处置事件类型(进程、文件、邮件、启动项,注册表等)
- 输出报告
windows
初步排查
1.系统账号排查(通过本地用户组去可疑账号、隐藏账号,有的话就删除掉)
2.事件管理器检测登陆日志,用微软的Log parser导出后分析
3.可疑端口,建立的链接,排查他对应的进程,用微软的msinfo32查看进程的路径和签名是否可疑。
后门排查
权限维持:一个进程杀掉了,过段时间重新派生
系统排查
- 检查系统账号安全
- 检查异常端口、进程
- 检查启动项、计划任务、服务
- 日志分析
日志分析
- 搜索关键字,如:union,select等
- 分析状态码
1xx information
200 successful
300 redirection
4xx client error
5xx server error
查找可疑文件,webshell
分析文件修改日期
系统日志分析
思路:
- 定位被入侵的主机并且立即对该主机进行断网隔离
- 确定攻击类型
- 确定被入侵的时间范围
- 定位恶意文件和入侵痕迹
- 溯源入侵来源
- 清理恶意文件/修复漏洞
- 事件复盘
常见命令
1.检测补丁情况:看看有没有打了最新的补丁,看看是不是用漏洞搞进来的
systeminfo | uname -a
2.日志分析:定位入侵路线,是系统配置出了问题(ssh 弱口令,域管理员hash 泄漏)还是WEB 服务出了问题(传马,WEB 漏洞利用)
eventvwr | /var/log , .bash_history
access.log mysql_log.log
3.账户信息:先看看是不是帐户有弱口令,再看看用户的登录时间,也观察一下有没有给留后门账户
quser | who last
4.进程分析:定位一下看看有没有运行恶意进程
procxp , pchunter | ps -aux , chkrootkit , rkhunter
还可用火绒剑、TCPview
、Process monitor
等进程监测工具排查
5.文件分析:找找Shell 和后门,看看这个是什么样的Shell
lchangedfiles | find / -ctime -1 -print
6.系统分析:计划任务,自启动服务等
shell:startup
直接跳转到自启动文件夹:
Windows系统应急响应中常用的指令
查看用户账号和组 lusrmgr
打开lusrmgr.msc,查看是否有新增/可疑的账号
敏感事件id:
4624 登录成功
4625 登录失败
4634 注销成功
4647 用户启动的注销
4672 使用超级用户/管理员用户进行登录
4720 创建用户
4697 7045 PsExec
查看自启动项 msconfig
查看进程服务 taskmgr
wmic process where name='进程名' list full 4 查看进程详细信息
taskkill /T /F /PID 强制关闭进程
wmic process | finderstr “xxxx.exe” 获取进程的全路径
查看计划任务 schtasks
查看用户会话 query user
查看端口和网络连接 netstat -ano
查看本地共享 net share
查看注册表 regedit
查看日志 eventvwr
Windows入侵排查
检查系统账号安全
- 查看服务器是否有弱口令,远程管理端口3389,22等端口是否对公网开放(检查方法:问服务器管理员,简单直接,要么简单扫描测试一下也可以)
- 使用D盾或者其他小工具和注册表查看查看服务器是否存在可疑账号、新增账号、隐藏账号(Win+R->lusrmgr.msc)(
regedit
进入注册表,找到路径HEKY_LOCAL_MACHINE\SAM\SAM\Domains\Account\User
,排查可疑账户)
- 结合日志,查看管理员登录时间、用户名是否存在异常
linux
Linux应急排查
1.和windows应急思路相同,登录账号检测
2.后门排查(检测定时任务、开机启动项、异常端口(比如建立的可疑连接),进程排查)
update留意系统运行到现在登录多久、多少用户。
1.影子账户,/etc/shadow因为/etc/passwd任何用户都可以访问,密码信息就分离到shadow,shadow文件只有root权限才能访问,如果说,stat命令发现,shodow文件权限变化了,这检测就有问题。
Ssh公钥,linux的机子22端口基本都是开的,如果写公钥进去,就是明显的后门
Linux入侵排查思路
1账号安全,2历史命令,3检查异常端口,4检查异常进程,
5检查开机启动项,6检查定时任务,7检查服务,8检查异常文件,9检查系统日志
常见命令
Linux 常用命令:
history (cat /root/.bash_history) 查看执行过的命令,排查和溯源
/etc/passwd 分析用户
awk -F: ‘{if($3==0)print $1}’ /etc/passwd 查看UID 为0 的帐号
cat /etc/passwd | grep -E “/bin/bash$” 查看可以登录的帐号
crontab /etc/cron* 查看计划任务
rc.local /etc/init.d chkconfig 查看Linux 自启动程序
last 查看最近用户登录信息
lastb 查看最近用户登录错误信息
$PATH 系统路径环境变量
strings 提取字符串
Linux系统应急响应中常用的指令
查看进程
top 根据CPU占用率枚举进程
查看对应进程详情,可以查看进程的详情,以及对应的文件:
ls -l /proc/$PID/exe
file /proc/$PID/exe
可以使用ps 命令对疑似恶意程序的进程进行查看
ps aux #显示所有进程,包括没有终端的进程
ps ef #显示所有进程以及完整格式
ps aux --sort -pcpu #静态查看进程,根据cpu使用情况排行,从高到低
ps aux --sort -pmem #静态查看进程,根据内存使用情况排行,从高到低
ps -p PID -o lstart #查看进程的启动时间
kill -9 pid #强制杀死进程
lsof -p pid 查询守护进程
pstree -aphn 树状显示进程
-a 显示该进程命令行参数
-p 显示pid
-n 按照pid排序
-h 高亮当前进程以及父进程
查看网络连接
netstat -antlp
-a 显示所有连接和端口
-n 以数字形式显示ip和port
-t 显示tcp
-l 显示监听的服务
-p 显示建立连接的进程名以及pid
ss –antpr
-a 显示所有连接和端口
-n 不解析服务的名称
-t 显示tcp sockets
-l 显示监听的端口
-p 显示监听端口的进程
-r 把ip解析为域名
查看异常文件
ls -alth
-a 显示所有文件
-l 显示文件权限,属组属主,大小,日期
- t 按照时间顺序排序
-h 高亮
find / -ctime -2 查找72小时内新增的文件
查看用户
last 查询最近登录的用户记录
lastlog 查询所有用户最后一次登录的时间
last lastb 登陆失败的用户记录
usermod -L 用户名 禁用用户
userdel -r 用户名 删除用户
查看启动项
systemctl list-unit-files | grep enable 查看启动项
查看计划任务
crontab -l 查看计划任务
crontab -e 编辑计划任务
crontab -r 删除计划任务
crontab -u 查看某用户计划任务
cat /etc/anacrontab 查看anacron异步定时任务
查看历史命令
history 查询主机历史命令
列出所有的服务
service --status-all
chkconfig --list
crontab命令
-u# 指定用户,可省略
-l #列出对应的计划任务
-r #删除目前的时程表
-e #执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
配置文件
/var/spool/cron/ #记录了每个用户的计划任务,已用户名命名
/etc/crontab #系统级配置文件
/etc/cron.d/ #该文件夹下一般是系统级别的用来管理其他定时任务的crontab文件
/etc/cron.daily/* #存放可执行脚本
/etc/cron.hourly/* #存放可执行脚本
/etc/cron.monthly/* #存放可执行脚本
/etc/cron.weekly/* #存放可执行脚本
/etc/anacrontab #开机之后检查该执行的是否执行了,将没有进行的
crontab任务执行一遍
/var/spool/anacron/*
日志记录位置
/var/log/cron
小技巧
more /etc/cron.daily/* #查看目录下所有文件
Linux入侵排查
查询特权用户:awk -F: ‘$3==0{print $1}’ /etc/passwd
查询可以远程登录的账号:awk ‘/\$1|\$6/{print $1}’ /etc/shadow
查询具有sudo权限的账号:more /etc/sudoers | grep -v “^#\|^$” grep “ALL=(ALL)”
历史命令
命令:history
入侵排查:cat .bash_history >>history.txt
检查异常端口
netstat -antlp
检查异常进程
ps aux
检查开机启动项
more /etc/rc.local
/etc/rc.d/rc[0-6].d
ls -l /etc/rc.d/rc3.d/
检查定时任务
检查以下目录下是否有可疑文件
/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/*
检查服务
chkconfig
修改/etc/re.d/rc.local文件,加入/etc/init.d/httpd start
使用nesysv命令管理自启动
检查异常文件
查看敏感目录,如tmp目录下的文件,同时注意隐藏文件夹,以”..”为名的文件夹具有隐藏属性
检查系统日志
日志默认存放位置:/var/log
日志分析技巧
1、定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
定位有哪些IP在爆破:
grep"Failedpassword"/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
已经被上传webshell如何应急
被拿shell了如何处理(排查、清除、关站、看看可有即使修复的可能,没有可能就关站)
系统如果已经被植入后门,说明攻击者已经攻击成功,而且拿到权限,这时候日志信息可能提供不了帮助,首先要去考虑系统的账户是否安全,,又没口令爆破成功的痕迹,排查账号的密码是否已经不安全.
(Linux)的话看计划任务,没有定时反弹shell,还有就是进程是不是可疑在通信.发现可疑问题,就要样本分析.
(windows)的话就看启动项和进程.
如果是web入侵,看日志web服务是不是安全?还原攻击的流程
挖矿木马与勒索病毒
挖矿木马处置
1)及时隔离主机
部分带有蠕虫功能的挖矿木马在取得本机的控制权后,会以本机为跳板机,对同一局域网内的其他主机进行已知漏洞的扫描和进一步利用,所以发现挖矿现象后, 在不影响业务的前提下应该及时隔离受感染主机,然后进行下一步分析,
2)阻断与矿池通讯
iptables -A INPUT -s xmr.crypto-pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP 3)清除定时任务大部分挖矿进程会在受感染主机中写入定时任务完成程序的驻留,当安全人员只清除挖矿木马时,定时任务会再次从服务器下载挖矿进程或直接执行挖矿脚本, 导致挖矿进程清除失败。
4)清除启动项
有的挖矿进程为了实现长期驻留,会向系统中添加启动项来确保系统重启后挖矿进程还能重新启动。所以在清除时还应该关注启动项中的内容,如果有可疑的启动项,也应该进行排查,确认是挖矿进程后,对其进行清除,
5)清除公钥文件
在用户家目录的.ssh目录下放置authoruzed_keys文件,从而免密登录该机器也是一种常见的保持服务器控制权的手段,在排查过程中应该查看该文件中是否有可疑公钥信息,有的话直接删除,避免攻击者再次免密登录该主机.
6)kill挖矿进程
对于单进程挖矿程序,直接结束挖矿进程即可。但是对于大多数的挖矿进程,如果挖矿进程有守护进程,应先杀死守护进程再杀死挖矿进程,避免清除不彻底. 在实际的清除工作中’应找到本机上运行的挖矿脚本,根据脚本的执行流程确定木马的驻留方式,并按照顺序进行清除,避免清除不彻底.
勒索病毒
勒索病毒样本载体的主要行为:
1、调用加密算法库;
2、通过脚本文件进行Http请求;
3、通过脚本文件下载文件;
4、读取远程服务器文件;
5、通过wscript执行文件;
6、收集计算机信息;
7、遍历文件。
处置
(1)物理,网络隔离染毒机器;
(2)对于内网其他未中毒电脑,排查系统安全隐患:
a)系统和软件是否存在漏洞
b)是否开启了共享及风险服务或端口,如135、137、139、445、3389
c)只允许办公电脑,访问专门的文件服务器。使用FTP,替代文件夹共享。
d)检查机器ipc空连接及默认共享是否开启
e)检查是否使用了统一登录密码或者弱密码
(3)尽量不要点击office宏运行提示,避免来自office组件的病毒感染;
(4)尽量不要双击打开.js、.vbs等后缀名文件;
(5)事后处理
在无法直接获得安全专业人员支持的情况下,可考虑如下措施:
1.通过管家勒索病毒搜索引擎搜索,获取病毒相关信息。
若支持解密,可直接点击下载工具对文件进行解密
2.勒索软件本身算法存在缺陷,内存中可找到密钥;
3.攻击者服务器比较脆弱,通过攻陷服务器,获取解密密钥;
4.备份恢复
5.重装系统
误报和攻击日志分析
恶意文件处理
首先看它的来源和去向,然后可以下载但不运行,放入微步沙箱中,看是否有后门,若有后门,就用 IDA 反汇编得到恶意攻击者的有用信息,再进一步描绘出攻击者画像进行溯源
防火墙报警如何确定是不是误判
一般情况下,真实攻击不可能只持续一次,它一定是长时间、周期性、多 IP 的进行攻击先去查看设备的完整流量日志等信息。在护网过程中如果确实存在异常流量应当及时进行上报,确认是误报后做好事件记录
怎么确定xss攻击是不是误报
xss攻击有相应的关键字和语句的,比如出现onerror,onload等关键字,然后出现了document. Cookie类似这些关键字,基本可以确定是xss注入,看下日志文件,如果一开始频繁的利用单双引号闭合,或者利用alert进行测试,基本也能确定,而合法的语句没有这些
内存马排查
如果我们通过检测工具或者其他手段发现了一些内存webshell的痕迹,需要有一个排查的思路来进行跟踪分析,也是根据各类型的原理,列出一个排查思路。
如果是jsp注入,日志中排查可疑jsp的访问请求。
如果是代码执行漏洞,排查中间件的error.log,查看是否有可疑的报错,判断注入时间和方法
根据业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。
如果是servlet或者spring的controller类型,根据上报的webshell的url查找日志(日志可能被关闭,不一定有),根据url最早访问时间确定被注入时间。
如果是filter或者listener类型,可能会有较多的404但是带有参数的请求,或者大量请求不同url但带有相同的参数,或者页面并不存在但返回200