浅谈应急响应

前言

我们在应急响应过程中可能会发现攻击者的各种痕迹,包括文件、配置等

在这些痕迹中需要留意以下信息:时间、文件、IP地址,这几项信息有助于我们还原出攻击者的攻击路径和恶意行为

在发现攻击者痕迹时,应该优先关注以上几点信息。如发现文件,可以记录文件时间、位置如果是可执行文件则使用沙箱分析是否有恶意文件,外连地址是多少,如果是恶意脚本则分析脚本内容是否涉及其它文件或者ip地址

本篇并不能覆盖全部应急的内容和细节,日志入口即化,应急浅谈一下

image

关于样本

直接丢沙箱,或者用测试机跑一下检测外联(结合情报平台进行判断,还可以跑一下4位url看看是否有cs特征,还可以看看tls指纹

Cobalt Strike Win10 至 Kali的TLS指纹如下

JA3=72a589da586844d7f0818ce684948eea 或 a0e9f5d64349fb13191bc781f81f42e1

且 JA3S=b742b407517bac9536a77a7b0fee28e9

还可以简单逆向,当然有一些比较有性价比低操作,比如看导入表

如果导入表不收敛,看到了申请内存,修改内存属性以及开线程等敏感api,那就高度可疑了

Windows系统应急响应

钓鱼类

钓鱼一般发生在windows系统上(运维被钓还是比较罕见)

钓鱼事件首先要防的就是客户

客户的话不能全信,就像你不能相信开发的那句“我们的系统非常安全"

工具u盘自己带,信息尽可能自己查,第一时间让客户发通知避免事态扩大

使用LastActivityView查看最近运行的文件,包含文件时间以及文件名字与路径等信息

image

查找异常用户

攻击者在成功入侵主机之后,可以创建隐藏用户以达到长期控制目标系统的目的,因此在应急响应时,需要对系统内的账户进行排查。在Windows系统下有多种查看账户的方式,在这里推荐使用注册表或者工具的方式进行查看(其它方式可能查看的信息不完整,攻击者可以通过克隆账户等方式进行隐藏)

HKEY_LOCAL_MACHINE -> SAM -> SAM -> Domains -> Account -> Users -> Names

image

如果无法打开对应的目录,那就需要设置SAM的权限

image

image

image

image

image

C:\Users

C:\Documents and Settings

image

image

为什么要用注册表或者工具查杀?

因为攻击者可以在克隆账号后导出注册表对应项,删除用户,随后重新导入注册表,以此进行隐藏。这样操作可以克隆一个管理员账户,且在控制面板和命令行无法查看到对应信息。

如下图

工具和注册表可以排查:

image

计算机管理和命令行无法发现异常:

image

排查端口

排查端口:netstat -ano

查看建立连接的端口:netstat -ano|findstr ESTABLISH

需要注意的是,如果服务器已经断网隔离,那么它是无法与外部建立连接的,也就无法使用第二条命令查看建立的连接

可以通过bat脚本定时输出端口情况,判断是否出现异常

@echo off
:loop
netstat -ano >> netstat.txt
echo ------- >> netstat.txt
timeout /t 1 > null
goto loop

image

启动项

攻击者在成功入侵主机之后,可以配置启动项以达到长期控制目标系统的目的,因此在应急响应时,需要对系统启动项进行排查

image

image

image

image

HKEY_LOCAL_MACHINE -> Microsoft -> Windows -> CurrentVersion -> run

Runonce项也要检查

image

如果发现可疑启动项,可以去定位相关文件的创建时间,也可以通过沙箱对文件进行分析

计划任务

  • 图形化查看

通过计划任务程序进行排查

cmd下运行taskschd.msc或者开始 -> 管理工具 -> 计划任务程序

image

  • 命令行查看

AT命令&schtasks命令

image

image

AT和schtasks都是查看系统计划任务的命令,但是适应的版本不同

老版本系统使用at命令,版本>=WinServer12使用schtasks命令

  • powershell下Get-ScheduledTask

image

若排查到可疑计划任务,则可以对其内容进行分析。如果是定时执行某个可执行文件,那么就使用沙箱对该可执行文件进行分析,如果是脚本,可以使用文本打开,观察内容是否涉及到可疑ip和文件

服务项

cmd下执行services.msc查看服务项

攻击者可以通过创建服务的方式进行权限维持,我们优先检查 “自动” 的服务项

image

对于可疑服务项,右键查看属性,找到可执行文件路径,可以进一步对文件进行排查分析

image

排查文件

  • 查看回收站、浏览器下载、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

  • 通过属性查看文件相关时间

image

此处仅供参考,攻击者也可以利用工具,对文件时间进行修改

排查进程

  • 任务管理器

打开任务管理器,进程 -> 查看 ->选择列,选中PID、命令行、映像路径名等列,方便进行排查

image

image

  • procexp

使用procexp,选中对应进程也能寻找与其相关的文件信息以及占用的资源(如CPU)

image

  • 查看签名

D盾/火绒剑查签名,对签名异常的进程及其对应文件进行分析

image

排查系统日志

通过事件查看器查看日志

image

事件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

image

image

使用D盾查杀webshell,也可以通过时间对web文件进行排序,筛选出时间异常的文件进行人工分析

image

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
    排查日志中是否有使用该自定义函数

例如:

image

image


MSSQL数据库排查

爆破排查

登录到SQL Server Management Studio

管理 -> SQL Server 日志

image

image

筛选出登录日志,排查是否有爆破

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是服务器名称


相信国家相信党,黑客没有好下场
请遵守相关法律法规,文中技术仅用于有授权的安全测试,禁止用于非法活动!
本文章仅面向拥有合法授权的渗透测试安全人员及进行常规操作的网络运维人员。
在操作的过程中,您应确保自己的所有行为符合当地法律法规,且不得进行违反中国人民共和国相关法律的活动。
作者不承担用户擅自使用相关技术从事任何违法活动所产生的任何责任。


posted @   aixve  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示