浅谈应急响应
前言
我们在应急响应过程中可能会发现攻击者的各种痕迹,包括文件、配置等
在这些痕迹中需要留意以下信息:时间、文件、IP地址,这几项信息有助于我们还原出攻击者的攻击路径和恶意行为
在发现攻击者痕迹时,应该优先关注以上几点信息。如发现文件,可以记录文件时间、位置如果是可执行文件则使用沙箱分析是否有恶意文件,外连地址是多少,如果是恶意脚本则分析脚本内容是否涉及其它文件或者ip地址
本篇并不能覆盖全部应急的内容和细节,日志入口即化,应急浅谈一下
关于样本
直接丢沙箱,或者用测试机跑一下检测外联(结合情报平台进行判断,还可以跑一下4位url看看是否有cs特征,还可以看看tls指纹
Cobalt Strike Win10 至 Kali的TLS指纹如下
JA3=72a589da586844d7f0818ce684948eea 或 a0e9f5d64349fb13191bc781f81f42e1
且 JA3S=b742b407517bac9536a77a7b0fee28e9
还可以简单逆向,当然有一些比较有性价比低操作,比如看导入表
如果导入表不收敛,看到了申请内存,修改内存属性以及开线程等敏感api,那就高度可疑了
Windows系统应急响应
钓鱼类
钓鱼一般发生在windows系统上(运维被钓还是比较罕见)
钓鱼事件首先要防的就是客户
客户的话不能全信,就像你不能相信开发的那句“我们的系统非常安全"
工具u盘自己带,信息尽可能自己查,第一时间让客户发通知避免事态扩大
使用LastActivityView查看最近运行的文件,包含文件时间以及文件名字与路径等信息
查找异常用户
攻击者在成功入侵主机之后,可以创建隐藏用户以达到长期控制目标系统的目的,因此在应急响应时,需要对系统内的账户进行排查。在Windows系统下有多种查看账户的方式,在这里推荐使用注册表或者工具的方式进行查看(其它方式可能查看的信息不完整,攻击者可以通过克隆账户等方式进行隐藏)
HKEY_LOCAL_MACHINE
-> SAM
-> SAM
-> Domains
-> Account
-> Users
-> Names
如果无法打开对应的目录,那就需要设置SAM的权限
C:\Users
C:\Documents and Settings
为什么要用注册表或者工具查杀?
因为攻击者可以在克隆账号后导出注册表对应项,删除用户,随后重新导入注册表,以此进行隐藏。这样操作可以克隆一个管理员账户,且在控制面板和命令行无法查看到对应信息。
如下图
工具和注册表可以排查:
计算机管理和命令行无法发现异常:
排查端口
排查端口:netstat -ano
查看建立连接的端口:netstat -ano|findstr ESTABLISH
需要注意的是,如果服务器已经断网隔离,那么它是无法与外部建立连接的,也就无法使用第二条命令查看建立的连接
可以通过bat脚本定时输出端口情况,判断是否出现异常
@echo off
:loop
netstat -ano >> netstat.txt
echo ------- >> netstat.txt
timeout /t 1 > null
goto loop
启动项
攻击者在成功入侵主机之后,可以配置启动项以达到长期控制目标系统的目的,因此在应急响应时,需要对系统启动项进行排查
HKEY_LOCAL_MACHINE
-> Microsoft
-> Windows
-> CurrentVersion
-> run
Runonce
项也要检查
如果发现可疑启动项,可以去定位相关文件的创建时间,也可以通过沙箱对文件进行分析
计划任务
- 图形化查看
通过计划任务程序进行排查
cmd下运行taskschd.msc
或者开始
-> 管理工具
-> 计划任务程序
- 命令行查看
AT命令&schtasks命令
AT和schtasks都是查看系统计划任务的命令,但是适应的版本不同
老版本系统使用at命令,版本>=WinServer12使用schtasks命令
- powershell下
Get-ScheduledTask
若排查到可疑计划任务,则可以对其内容进行分析。如果是定时执行某个可执行文件,那么就使用沙箱对该可执行文件进行分析,如果是脚本,可以使用文本打开,观察内容是否涉及到可疑ip和文件
服务项
cmd下执行services.msc
查看服务项
攻击者可以通过创建服务的方式进行权限维持,我们优先检查 “自动” 的服务项
对于可疑服务项,右键查看属性,找到可执行文件路径,可以进一步对文件进行排查分析
排查文件
-
查看回收站、浏览器下载、temp目录
-
分析最近被打开的可疑文件:
%UserProfile%Recent
-
通过创建时间排查文件:
dir /tc /od
-
查找指定时间后创建的文件:
forfiles /m *.exe /d +2023/3/30 /s /p C:\ /c:"cmd /c echo @path @fdate @ftime" 2>null
-
通过属性查看文件相关时间
此处仅供参考,攻击者也可以利用工具,对文件时间进行修改
排查进程
- 任务管理器
打开任务管理器,进程 -> 查看 ->选择列,选中PID、命令行、映像路径名等列,方便进行排查
- procexp
使用procexp,选中对应进程也能寻找与其相关的文件信息以及占用的资源(如CPU)
- 查看签名
D盾/火绒剑查签名,对签名异常的进程及其对应文件进行分析
排查系统日志
通过事件查看器查看日志
事件ID | 事件ID | 描述 |
---|---|---|
528 | 4624 | 登录成功 |
529 | 4625 | 登录失败 |
680 | 4776 | 成功/失败的账户认证 |
624 | 4720 | 创建用户 |
636 | 4732 | 添加用户到启用安全性的本地组中 |
632 | 4728 | 添加用户到启用安全性的全局组中 |
2934 | 7030 | 服务创建错误 |
2944 | 7040 | IPSEC服务启动类型从禁用改为自动启动 |
2949 | 7045 | 服务创建 |
1100 | 事件日志服务关闭 | |
104 | 事件日志清除(system日志中出现104) | |
1102 | 事件日志清除(安全日志中出现1102) |
特权用户登录会在日志留下4624 + 4672两个事件
日志分析辅助工具:Event Log Explorer
日志分析辅助工具:log parser lizard
Linux系统应急响应
历史命令
命令行:cat .bash_history
ps:记得查找不同用户主目录下的历史命令
以下情况不记录:
-
命令前加空格不记录
-
ssh不记录
-
被设置为不记录
账户及登录排查
查看所有用户:cat /etc/passwd
查找特权用户:awk -F: '$3==0 {print $1}' /etc/passwd
所有用户最后一次登录信息:lastlog
所有登录信息:last -awF
当前登录系统的用户信息:w
系统日志排查
定位有多少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
登录成功的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}'
文件排查
SUID文件:find / -perm /4000
GUID文件:find / -perm /2000
SUID/GUID文件:find / -perm /6000
某段时间新增文件:find / -type f -newermt 20230101 ! -newermt 20230201
网络连接排查
命令行:netstat -anltp
如果主机已经隔离,则需要持续使用此命令观察新增的连接
ssh排查
保存远程主机的key,对方可以免密登录(存放在各个用户家目录)
/root/.ssh/authorized_keys
~/.ssh/authorized_keys
登录一台ssh就会记录对方的key,防止劫持
/root/.ssh/known_hosts
开机启动项排查
服务项:systemctl list-unit-files --type=service |grep enabled
自启脚本位置:
/etc/rc.local
/etc/rc.d/
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
~/.profile
~/.bash_logout
chkconfig -list
计划任务排查
文件如下:
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
/etc/cron.daily/*
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
性能排查
命令行:top
进程排查
命令行:ps -ef
命令行:ps -aux
web日志
手动查看
批量过滤关键字如eval:
find /var/www/html/ -type f -name '*.php'|xargs grep 'eval' |more
HttpStatus统 计 :
cat /www/logs/access.2019-02-23.log |awk '{print $9}'|sort|uniq -c|sort -rn|more
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
下载河马
解压:tar xvf hm-linux.tgz
运行河马:hm scan webdir
使用D盾查杀webshell,也可以通过时间对web文件进行排序,筛选出时间异常的文件进行人工分析
MySQL数据库排查
爆破排查
MySQL的登录日志文件位于服务器的日志目录中,其默认位置取决于操作系统。
在Linux上,通常为/var/log/mysql
或/var/log/mysqld.log
在Windows上,通常为C:\ProgramData\MySQL\MySQL Server X.X
命令行的方式查看:mysql -u root -p -e "SELECT * FROM mysql.general_log WHERE command_type = 'Connect'"
webshell写入排查
日志写入
攻击者可以通过修改日志存储位置,然后将一句话木马放入SQL语句中,这样一句话木马就会被当做日志保存到web目录下,从而获得webshell权限
-
首先登录本机的MySQL数据库
-
MySQL下使用排查命令
show variables like "%general_log%"
-
查看日志存储位置是否被更改,也可以去此位置排查webshell
函数写入
攻击者可以通过调用MySQL内置的文件写入函数,将一句话木马写入web命令下,从而获得webshell权限
-
首先登录本机MySQL数据库
-
MySQL下使用排查命令:
show variables like "%secure_file_priv%"
-
若value为空(空白)则无限制,则可以写文件
可以进一步分析查询日志中是否存在攻击信息(是否有调用into outfile、into dumpfile)
udf提权排查
在MySQL中udf是用户自定义函数,通过自定义函数可以实现在MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,攻击者可以利用MySQL的自定义函数功能将MySQL账号转换为SYSTEM权限达到提权的目的。
-
排查
MySQL/lib/plugin
目录是否有可疑dll和so文件 -
linux下mysql默认安装位置
/usr
,Windows下为C:\Program Files\MySQL
-
排查新创建的自定义函数
select * from mysql.func
排查日志中是否有使用该自定义函数
例如:
MSSQL数据库排查
爆破排查
登录到SQL Server Management Studio
管理 -> SQL Server 日志
筛选出登录日志,排查是否有爆破
SQL注入
sqlmap --os-shell
攻击者使用sqlmap的os-shell时,会创建表sqlmapoutput,用来存储xp_cmdshell的结果
按时间顺序排查表:select * from sys.tables order by create_date desc
xp_cmdshell
xp_cmdshell在mssql2005之后的版本中是默认禁止的,查看xp_cmdshell是否被启用。
执行命令:Exec master.dbo.xp_cmdshell 'whoami'
函数写入
攻击者可以通过向web目录写入一句话木马来获得webshell权限
排查日志中是否有调用CreateTextFile和WriteLine等函数写入文件,如果有则需要排查对应文件
补充:
排查日志时的常用命令
查看前10行:head -n 10 /var/xxx.log
查看末尾10行:tail -n 10 /var/xxx.log
可以通过组合达成读取日志中某部分的效果,如:
读取第20-30行:head -n 30 /var/xxx.log|tail -n 10
筛选某些内容:grep "abc"
反向筛选:grep -v "abc"
筛选某个字段:awk -F: '{print $1}'
(其中:为分隔符,默认为空格)
查看行数:wc
按数字排倒序:sort -nr
去重计次:uniq -c
ps:去重只会在相邻行去重,要先排序才能去重
Windows下常见web日志路径
IIS
IIS日志通常存放在%systemroot%\system32\logfiles\W3SVC1\
目录
Apache
Apache日志存放在<Apache安装路径>/apache/logs/
目录,httpd.conf可以配置日志存放位置
Tomcat
Tomcat日志存放在<Tomcat安装路径>/logs
目录,可以在Server.xml中配置日志存放位置
Nginx
access.log日志记录访问日志
WebLogic
WebLogic 8.x版本:WebLogic安装路径\user_projects\domains\
WebLogic 9及以后版本:WebLogic安装路径\user_projects\domains\servers\logs\
Jboss
默认不记录WEB访问日志,可以在server.xml中开启。
默认位置:<Jboss安装路径>/server/default/log/
1、IIS 日志的位置
%SystemDrive%\inetpub\logs\LogFiles
%SystemRoot%\System32\LogFiles\W3SVC1
%SystemDrive%\inetpub\logs\LogFiles\W3SVC1;%SystemDrive%\Windows\System32\LogFiles\HTTPERR
2、Apache 日志的位置
/var/log/httpd/access.log
/var/log/apache/access.log
/var/log/apache2/access.log
/var/log/httpd-access.log
3、Nginx 日志的位置
默认在/usr/local/nginx/logs
目录下,access.log 代表访问日志,error.log 代表错 误日志。若没有在默认路径下,则可以到 nginx.conf 配置文件中查找。
4、Tomcat 日志的位置
默认在 TOMCAT_HOME/logs/
目录下,有 catalina.out、catalina.YYYY-MMDD.log、localhost.YYYY-MM-DD.log、localhost_access_log.YYYY-MM-DD.txt、 host-manager.YYYY-MM-DD.log、manager.YYYY-MM-DD.log 等几类日志。
5、Vsftp 日志的位置
在默认情况下,Vsftp 不单独记录日志,而是统一存放到/var/log/messages
中。 但是可以通过编辑/etc/vsftp/vsftp.conf 配置文件来启用单独的日志。在日志启用 后,可以访问 vsftpd.log 和 xferlog。
6、WebLogic 日志的位置
在默认情况下,WebLogic 有三种日志,分别是 access log、server log 和 domain log
access log 的位置是$MW_HOME\user_projects\domains\Ser-Name\logs\access.log
server log 的位置是$MW_HOME\user_projects\domains\SerName\logs\.log
domain log 的位置是$MW_HOME\user_projects\domains\SerName\logs\.log
SerName是服务器名称
相信国家相信党,黑客没有好下场
请遵守相关法律法规,文中技术仅用于有授权的安全测试,禁止用于非法活动!
本文章仅面向拥有合法授权的渗透测试安全人员及进行常规操作的网络运维人员。
在操作的过程中,您应确保自己的所有行为符合当地法律法规,且不得进行违反中国人民共和国相关法律的活动。
作者不承担用户擅自使用相关技术从事任何违法活动所产生的任何责任。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!