应急响应
It has been 368 days since the last update, the content of the article may be outdated.
一、应急响应
1.1 什么是应急响应
应急响应,指的是在应对突发事件或危机情况时采取的及时有效措施,以控制和减轻事件带来的影响,保障安全。
在检测到网络安全事件(如黑客攻击、数据泄露、系统入侵等)后,组织采取的一系列预定义的行动和程序,以最小化损失和影响,恢复正常运营,并防止未来的安全威胁。
1.2 PDCERF模型
- 准备阶段
准备阶段以预防为主。主要工作涉及识别机构、企业的风险,建立安全政策,建立协作体系和应急制度。按照安全政策配置安全设备和软件,为应急响应与恢复准备主机。依照网络安全措施,进行一些准备工作,例如,扫描、风险分析、打补丁等。如有条件且得到许可,可建立监控设施,建立数据汇总分析体系,制定能够实现应急响应目标的策略和规程,建立信息沟通渠道,建立能够集合起来处理突发事件的体系。
一般现象
- 业务服务功能失效
- 业务内容被明显篡改
- 系统文件丢失
- 系统崩溃、卡顿、资源不足
- 检测阶段
检测阶段主要检测事件是已经发生的还是正在进行中的,以及事件产生的原因。确定事件性质和影响的严重程度,以及预计采用什么样的专用资源来修复。选择检测工具,分析异常现象,提高系统或网络行为的监控级别,估计安全事件的范围。通过汇总,查看是否发生了全网的大规模事件,从而确定应急等级及其对应的应急方案。
- 遏制阶段
抑制阶段的主要任务是限制攻击/破坏波及的范围,同时也是在降低潜在的损失。所有的抑制活动都是建立在能正确检测事件的基础上的,抑制活动必须结合检测阶段发现的安全事件的现象、性质、范围等属性,制定并实施正确的抑制策略。
抑制策略
- 从网络上断开主机或断开部分网络
- 封禁攻击来源IP
- 修改所有的防火墙和路由器的过滤规则
- 封锁或删除被攻击的登录账号
- 关闭受攻击的系统或其他相关系统的部分服务
- 完全关闭所有系统
- 根除阶段
根除阶段的主要任务是通过事件分析找出根源并彻底根除,以避免攻击者再次使用相同的手段攻击系统,引发安全事件。并加强宣传,公布危害性和解决办法,呼吁用户解决终端问题。加强监测工作,发现和清理行业与重点部门问题。 - 恢复阶段
恢复阶段的主要任务是把被破坏的信息彻底还原到正常运作状态。确定使系统恢复正常的需求内容和时间表,从可信的备份介质中恢复用户数据,打开系统和应用服务,恢复系统网络连接,验证恢复系统,观察其他的扫描,探测可能表示入侵者再次侵袭的信号。一般来说,要想成功地恢复被破坏的系统,需要干净的备份系统,编制并维护系统恢复的操作手册,而且在系统重装后需要对系统进行全面的安全加固。 - 总结阶段
总结阶段的主要任务是回顾并整合应急响应过程的相关信息,进行事后分析总结和修订安全计划、政策、程序,并进行训练,以防止入侵的再次发生。基于入侵的严重性和影响,确定是否进行新的风险分析,给系统和网络资产制作一个新的目录清单。这一阶段的工作对于准备阶段工作的开展起到重要的支持作用。
工作内容
- 形成事件处理的最终报告
- 总结响应过程
- 评估应急响应人员相互沟通在事件处理上存在的缺陷
二、windows
2.1 系统层面
2.1.1 特殊目录
plaintext
1 | %windwos% C:\WINDOWS |
2.1.2 快捷命令
plaintext
1 | regeidt 注册表 |
2.1.3 常用命令
plaintext
1 | net user 查看用户信息 |
2.1.4 系统日志
plaintext
1 | 日志路径:%SystemRoot%\System32\Winevt\Logs\System.evtx |
2.1.5 启动项
plaintext
1 | net statistics workstation 查看系统开机时间 |
2.1.6 用户
plaintext
1 | 方法1: |
2.1.7 网络连接和进程
plaintext
1 | 网卡信息 |
2.2 网站层面
2.2.1 Web日志
找到中间件的web⽇志,打包到本地⽅便进⾏分析。
利用关键字搜索或者工具筛查
2.2.2 webshell查杀
D盾_Web查杀:http://www.d99net.net/index.asp
河⻢ WebShell 查杀:http://www.shellpub.com
2.3 入侵排查
2.3.1 账号安全
检查系统账号安全
- 弱口令、端口开发情况
- 查看系统用户账号(lusrmgr.msc)
- D盾查杀注册表(是否有克隆账号)
- 日志审查(eventvwr.msc->事件查看器->windows日志->安全导出->使用Log Parser进行分析)
2.3.2 端口进程
检查异常端口、进程
- 用 netstat -ano 命令查看目前的网络连接,定位可疑的 ESTABLISHED
- 进行进程定位 tasklist | findstr “PID”
- msinfo32->软件环境->正在运行的任务->再使用Process Explorer进行排查
2.3.3 启动项、计划任务、服务
检查启动项、计划任务、服务自启动
- 排查启动项
- 排查注册表启动项(注册表路径如下)plaintext
1
2
3HKEY_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)
- services.msc 查看是否有可疑自启动服务
2.3.4 Web 访问⽇志
- 找到中间件的web⽇志,打包到本地⽅便进⾏分析。
- 推荐⼯具:Windows 下,推荐⽤ EmEditor 进⾏⽇志分析,⽀持⼤⽂本,搜索效率还不错。Linux 下,使⽤ Shell 命令组合查询分析。
- 工具推荐
部署linux上web访问
fulleventlogview工具分析
2.4 工具
2.4.1 木马病毒
2.4.2 木马查杀
2.4.3 威胁情报
2.4.4 在线查杀
三、Linux
3.1 系统层面
3.1.1 特殊目录
plaintext
1 | /etc/passwd 用户信息文件 |
3.1.2 常用命令
plaintext
1 | ls -al 查看目录文件信息 |
3.1.3 系统日志位置
plaintext
1 | /var/log/messages 系统重要信息 |
3.1.4 用户相关
plaintext
1 | grep "useradd" /var/log/secure 查看是否有添加用户操作 |
/etc/passwd
存放用户信息
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell/etc/shadow
存放用户密码
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段- 加密方式
1 代表 MD5
2y、2a代表Blowfish
5 代表 SHA-256
6 代表 SHA-512
3.1.5 系统日志
- ubuntuplaintext
1
2
3
4
5
6
7
8
9
10
11是否被爆破
cat /var/log/auth.log | grep "Failed password for root"
记录登陆的用户
cat /var/log/auth.log | grep "Accept"
计算登录失败的用户名及次数
cat /var/log/auth.log | grep "Failed password" | perl -e 'while($_=<>){ /for(.*?)from/; print "$1\n";}'|sort|uniq -c|sort -nr
统计爆破者ip及次数
cat /var/log/auth.log | grep "Failed password for" | grep "root" | grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}' |sort|uniq -c|sort -nr - centosplaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14定位有多少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
登录成功的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.2 网站层面
3.2.1 Web日志
- 日志位置plaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21--------------------------------------------------------
Apache服务器的访问日志位于
/var/log/apache2/access.log(在Debian/Ubuntu系统中)
或/var/log/httpd/access_log(在RHEL/CentOS系统中)
========================================================
配置文件位置
/etc/apache2/sites-available/000-default.conf(Debian/Ubuntu)
或/etc/httpd/conf/httpd.conf(RHEL/CentOS)中查找CustomLog指令
--------------------------------------------------------
Nginx的访问日志位于/var/log/nginx/access.log
========================================================
配置文件位置
/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default中查找access_log指令
--------------------------------------------------------
Lighttpd的访问日志位于/var/log/lighttpd/access.log
========================================================
配置文件位置
/etc/lighttpd/lighttpd.conf
或/etc/lighttpd/lighttpd.conf.d/accesslog.conf中查找accesslog指令。
-------------------------------------------------------- - 技巧plaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37列出当天访问次数最多的IP命令
cut -d- -f 1 log_file | uniq -c | sort -rn | head -20
查看当天有多少个IP访问
awk '{print $1}' log_file|sort|uniq|wc -l
查看某⼀个⻚⾯被访问的次数
grep "/index.php" log_file | wc -l
查看每⼀个IP访问了多少个⻚⾯
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
将每个IP访问的⻚⾯数进⾏从⼩到⼤排序
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
查看某⼀个IP访问了哪些⻚⾯
grep ^111.111.111.111 log_file| awk '{print $1,$7}'
去掉搜索引擎统计当天的⻚⾯
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l
查看2018年6⽉21⽇14时这⼀个⼩时内有多少IP访问
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc
-l
========================================================
统计爬虫
grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | awk '{ print $1 }' |
sort | uniq
统计浏览器
cat /www/logs/access.2019-02-23.log | grep -v -E
'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | sort | uniq -c | sort -r -n | head -
n 100
统计ip
grep '23/May/2019' /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.'
'{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10
统计网段
cat /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print
$1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 200
统计域名
cat /www/logs/access.2019-02-23.log |awk '{print $2}'|sort|uniq -c|sort -rn|more
请求状态码
cat /www/logs/access.2019-02-23.log |awk '{print $9}'|sort|uniq -c|sort -rn|more
URL 统计
cat /www/logs/access.2019-02-23.log |awk '{print $7}'|sort|uniq -c|sort -rn|more
3.2.2 Webshell查杀
- D盾
- 河马
- 牧云
- 牧云下载地址
- PHP Malware Finderplaintext
1
2
3
4
5
6
7自动化
--------------------------------------------------------------
https://github.com/grayddq/GScan
https://github.com/al0ne/LinuxCheck
https://github.com/ppabc/security_check
https://github.com/T0xst/linux
https://github.com/P4ck/Emergency
- 恶意函数plaintext
1
2
3PHP:eval(、system(、assert(
JSP:getRunTime(、 FileOutputStream(
ASP:eval(、execute(、 ExecuteGlobal( - 脚本bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
echo "-------------------------机器名-------------------------"
hostname
echo "-------------------------查看用户信息-------------------------"
cat /etc/passwd |grep -v nologin |grep -v /bin/false
echo "-------------------------查看登录信息-------------------------"
w
echo "-------------------------查看正在连接的IP-------------------------"
netstat -antlp |grep ESTABLISHED
echo "-------------------------查看对外监听的端口-------------------------"
netstat -antlp |grep LISTEN | grep -v 127.0.0.1
echo "-------------------------查看历史登录信息-------------------------"
last -F -n 10
echo "-------------------------查看安全日志中登录成功信息-------------------------"
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
echo "-------------------------查看历史命令,查找外联-------------------------"
history | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
echo "-------------------------查看计划任务-------------------------"
crontab -l
echo "-------------------------查找隐藏文件-------------------------"
find / ! -path "/proc/*" ! -path "/usr/*" ! -path "/var/*" ! -path "/sys/*" -name ".*" -print
echo "-------------------------其他·提示-------------------------"
echo "查看用户进程:lsof -u hack"
echo "查看端口占用:lsof -i:8888"
echo "查看公钥信息:~/.ssh/id_dsa.pub"
echo "查看进程:ps -aux"
3.3 勒索
- 分析平台
3.4 入侵排查
3.4.1 账号安全
plaintext
1 | ⽤户信息⽂件 /etc/passwd |
3.4.2 历史命令
history
.bash_history文件
进⼊⽤户⽬录下,导出历史命令。
cat .bash_history >> history.txt
3.4.3 端口信息
netstat -antlp | more
查看下 pid 所对应的进程⽂件路径,
运⾏ ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID为对应的pid号)
3.4.4 进程信息
ps -aux | grep pid
ps -elf | grep pid
3.4.5 开机启动项
bash
1 | 查看运⾏级别命令 runlevel |
3.4.6 检查定时任务
bash
1 | 利⽤ crontab 创建计划任务 |
3.4.7 检查服务
plaintext
1 | 服务⾃启动 |
3.4.8 检查异常⽂件
plaintext
1 | 1、查看敏感⽬录,如/tmp⽬录下的⽂件,同时注意隐藏⽂件夹,以".."为名的⽂件夹具有隐藏属性 |
3.4.9 检查系统⽇志
plaintext
1 | ⽇志默认存放位置:/var/log/ |
- 日志路径
/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授权,甚⾄添加⽤户和修改⽤户密码都会记录在这个⽇志⽂件中
3.4.10 日志分析的技巧
plaintext
1 | 1、定位有多少IP在爆破主机的root帐号: |
3.5 工具
3.5.1 木马查杀
plaintext
1 | 1.chkrootkit |
3.5.2 病毒查杀
plaintext
1 | 1. Clamav |
3.5.3 webshell查杀
3.5.4 RPM check 检查
plaintext
1 | 系统完整性可以通过rpm⾃带的-Va来校验检查所有的rpm软件包,查看哪些命令是否被替换了: |
3.5.5 Linux安全检查脚本
plaintext
1 | https://github.com/grayddq/GScan |
参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 willsafeのBlog!