应急响应
一、入侵排查篇
当企业发生黑客入侵、系统崩溃或其他影响业务正常运行的安全事件时,常规的应急响应流程为:
a. 优先恢复业务
b. 进一步查找入侵来源
c. 还原入侵事故过程
d. 撰写应急响应报告,给出解决方案
e. 针对入侵来源进行修复
常见应急响应事件分类:
- Web入侵:网页挂马、主页篡改、webshell
- 系统入侵:病毒木马、勒索软件、远控后门
- 网络攻击:DDOS攻击、DNS劫持、ARP欺骗
1.1. Windows入侵排查
使用环境:Windows Server 2008
1.1.1. 检查系统账号安全
1、查看服务器是否有弱口令,远程管理端口是否对公网开放
检查方法:根据实际情况咨询相关服务器管理员。
2、查看服务器是否存在可疑账号、新增账号
检查方法:打开cmd命令窗口,输入lusrmgr.msc
,检查是否有新增/可疑账号,如在管理员群组Administrators
账号下的新增可疑账户,需要立即删除,如下图:
3、查看服务器是否存在隐藏账号、克隆账号
检查方法:使用D盾_web查杀工具,集成了对隐藏、克隆账号检测的功能
增加隐藏账号:net user /add test$ # 增加隐藏账号命令
4、结合日志,查看管理员登录时间、用户名是否存在异常
检查方法:
a. cmd命令行输入eventvwr.msc
,打开“事件查看器”
Windows应急日志常用的几个事件ID
系统:
1074,通过这个事件ID查看计算机的开机、关机、重启的时间以及原因和注释。
6005,表示计算机日志服务已启动,如果出现了事件ID为6005,则表示这天正常启动了系统。
104,这个时间ID记录所有审计日志清除事件,当有日志被清除时,出现此事件ID。
安全:
4624,这个事件ID表示成功登陆的用户,用来筛选该系统的用户登陆成功情况。
4625,这个事件ID表示登陆失败的用户。
4720,4722,4723,4724,4725,4726,4738,4740,事件ID表示当用户帐号发生创建,删除,改变密码时的事件记录。
4727,4737,4739,4762,事件ID表示当用户组发生添加、删除时或组内添加成员时生成该事件。
b. 导出Windows安全日志,使用微软官方工具Log Parser进行分析,
工具下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=24659
使用示例:
LogParser.exe -i:evt "select top 100 * from Security.evtx" -o:DATAGRID
参数说明:
-i:<输入源格式>
-o:<输出格式>
1.1.2. 检查异常网络连接
1、检查网络连接情况,是否有远程连接、可疑连接
检查方法:
a. 查看网络连接情况,定位可疑的ESTABLISHED
netstat -ano | find "ESTABLISHED"
ESTABLISHED:完成连接并正在进行数据通信的状态。
LISTENING:表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。
CLOSE_WAIT:对方主动关闭连接或者网络异常导致连接中断。
TIME_WAIT:我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。
b. 根据 netstat 命令定位出的 PID 编号,再通过 tasklist 命令进行进程定位
tasklist | findstr "3868"
在任务管理器中进一步定位(服务中不一定能看到端口)
2、查看进程、路径及运行文件
检查方法:
依据进程名称查看是否有可疑进程
tasklist /svc
a. 开始 -- 运行 -- 输入 msinfo32
命令,依次点击 "软件环境 -- 正在运行任务" 就可以查看到进程的详细信息,比如进程路径、进程ID、文件创建日期以及启动时间等。
b. 打开D盾查杀工具,进程查看,关注可以的进程信息
c. 通过微软官方提供的 Process Explorer 等工具进行排查
工具下载地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
d. 查看可以的进程及其自进程
没有签名验证信息的进程
没有描述信息的进程
进程的属主
进程的路径是否合法
CPU或内存资源占用长时间过高的进程(比如挖矿)
常用命令
1)查看端口对应的 PID:netstat -ano | findstr "port"
2)查看进程对应的 PID:任务管理器 -- 查看 -- 选择列 -- PID 或者 tasklist | findstr
"PID"
3)查看进程对应的程序位置:
任务管理器 -- 选择对应进程 -- 右键打开文件位置
运行输入wmic,cmd 界面输入 process
4)tasklist /svc 进程 -- PID -- 服务
5)查看Windows服务所对应的端口:
%systemroot%/system32/drivers/etc/services(一般 %systemroot% 就是 C:\Windows 路
径)
1.1.3. 检查启动项、任务、服务
1、检查服务器是否有异常的启动项
检查方法:
a、登录服务器,单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,确认是否有非业务程序在该目录下。
b、单击开始菜单 >【运行】 > 【启动】,输入 msconfig
,查看是否存在命名异常的启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件。
c、单击【开始】>【运行】,输入 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
检查右侧是否有启动异常的项目,如有请删除,并建议安装杀毒软件进行病毒查杀,清除残留病毒或木马。
d、利用安全软件查看启动项、开机时间管理等。
e、组策略,运行 gpedit.msc
2、检查服务器是否有异常的计划任务
检查方法:
a、在桌面打开【运行】,输入 control 打开控制面板,然后在”系统与安全“中查看计划任务,便可以看到具体的计划任务及相关属性。
b、利用安全软件查看计划任务。
3、检查服务器是否有异常的服务
检查方法:
在桌面打开【运行】,输入 services.msc,查看服务状态和启动类型,检查是否有异常服务。
注:一般通过服务是否有描述判断是否有异常服务
1.2. Linux入侵排查
使用环境:CentOS 7
1.2.1. 账号安全
基本使用
1、用户信息文件 /etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的shell
注意:无密码只允许本机登陆,远程不允许登陆
2、影子文件 /etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft
7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码
过期后的宽限时间:账号失效时间:保留字段
who 查看当前登录用户(tty 本地登陆 pts 远程登录)
w 查看系统信息,想知道某一时刻用户的行为
uptime 查看登陆多久、多少用户,负载状态
入侵排查
1)查询特权用户(uid为0)
awk -F: '$3==0{print $1}' /etc/passwd
2)查询可以远程登录的账号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
3)除root账号外,其他账号是否存在sudo权限,如非管理需要,普通账号应删除sudo权限
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
4)禁用或删除多余及可疑的账号
usermod -L user 禁用账号,账号无法登录,/etc/shadow 第二栏为 ! 开头
userdel user 删除 user 用户
userdel -r user 将删除 user 用户,并且将 /home 目录下的 user 目录一并删除
1.2.2. 历史命令
基本使用
当前账户历史命令
history
清除历史命令,此命令不会清除保存在文件中的记录,因此需要手动删除~/.bash_history 文件中记录
history -c
入侵排查
导出.bash_history历史记录
cat ~/.bash_history > history.txt
1.2.3. 检查异常网络连接
使用 netstat 网络连接命令,分析可疑端口、IP、PID
netstat -antlp
-a 或 --all:显示所有活动的和监听的网络连接,包括TCP和UDP。
-n 或 --numeric:以数字形式显示IP地址和端口号,而不是尝试解析主机名和服务名。
-t 或 --tcp:只显示TCP协议的连接。
-u 或 --udp:只显示UDP协议的连接。
-l 或 --listening:只显示处于监听状态(等待连接)的套接字。
-p 或 --programs:显示与每个连接关联的进程ID(PID)和进程名称。
查看 pid
所对应的进程文件路径:
ls -l /proc/$PID/exe
file /proc/$PID/exe
1.2.4. 检查异常进程
分析进程
ps aux | grep pid
1.2.5. 检查开机启动项
基本使用
运行级别 | 含义 |
---|---|
0 | 关机 |
1 | 单用户模式,可以理解为Windows的安全模式,主要用于系统修复 |
2 | 不完全的命令行模式 |
3 | 完全的命令行模式,标准字符界面 |
4 | 系统保留 |
5 | 图形模式 |
6 | 重启 |
查看运行级别命令
runlevel
开机启动配置文件
/etc/rc.d/rc.local
/etc/rc.d/rc[0~6].d
chkconfig 命令用于检查、设置系统的各种服务
chkconfig --list [name] //服务列表[可根据实际需要,停掉不用服务]
chkconfig --add [name] //服务添加[如缺省,则从缺省的init脚本自动建立]
chkconfig --del [name] //服务删除[并把相关符号连接从/etc/rc[0-6].d删除]
当我们需要设置开机启动的脚本时,只需要将可执行脚本放在 /etc/init.d 目录下,然后在/etc/rc.d/rc*.d 目录下建立软链接即可。
注:这里的 * 代表 0,1,2,3,4,5,6 这七个等级
入侵排查
启动项文件:
/etc/rc.d/rc.local
/etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d/
1.2.6. 检查定时任务
基本使用
利用 crontab
创建计划任务
crontab -l #列出某个用户定时任务的详细内容
#Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如:
/var/spool/cron/root)
crontab -r #删除每个用户cron任务(谨慎:删除所有的计划任务)
crontab -e #使用编辑器编辑当前的crontab文件
#如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件
1.2.7. 检查异常服务
基本使用
服务自启动
- 第一种修改方法
# chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig --level 23453 ssh on
#默认level是2345
chkconfig ssh on
- 第二种修改方法
修改 /etc/rc.d/rc.local 文件
加入 /etc/init.d/httpd start
- 第三种修改方法
systemctl enable httpd.service
入侵排查
查询已安装的服务
- RPM包安装的服务
chkconfig --list #查看服务自启动状态,可以看到所有的RPM包安装的服务
ps -aux | grep crond #查看当前服务
#查看系统3与5级别下的启动项
chkconfig --list | grep "3:on\|5:on" #英文环境
chkconfig --list | grep "3:启用\|5:启用" #中文环境
- 源码包安装的服务
源码包安装的启动管理: /usr/local/
源码包安装的自启动管理:/etc/rc.d/init.d/
1.2.8. 检查异常文件
1、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性。
2、排查Webshell、远控木马的创建时间。
使用find命令找出一定时间范围内创建的文件
find /opt -iname "*" -atime 1 -type f
3、针对可疑文件可以用 stat
查看文件修改时间
1.2.9. 检查系统日志
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
日志文件 | 说明 |
---|---|
/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,而要使用last命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
日志分析技巧
- 定位有多少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}'
1.2.10. 工具查杀
1)Rootkit 查杀
- chkrootkit
使用方法:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
#编译完成没有报错的话执行检查
./chkrootkit
- rkhunter
使用方法:
Wget
https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
tar -zxvf rkhunter-1.4.4.tar.gzcd rkhunter-1.4.4
./installer.sh --instal
rkhunter -c
2)病毒 查杀
Clamav
安装方式:
# 安装
yum install -y epel-release
# 使用阿里云epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-
7.repo
yum clean all
yum makecache
# 安装clamav
yum install -y clamav
# 更新病毒库
freshclam
# 扫描方法
clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
# 扫描并杀毒
clamscan -r --remove /usr/bin/bsd-port
clamscan -r --remove /usr/bin/
clamscan -r --remove /usr/local/zabbix/sbin
# 查看日志发现
cat /root/etcclamav.log | grep FOUND
# 卸载clamav
yum remove clamav*
3)Webshell 查杀
河马 WebShell 查杀:http://www.shellpub.com
1.3. Webshell查杀工具
1.3.1. D盾_Web查杀
阿D出品,使用自行研发不分扩展名的代码分析引擎,能分析更为隐藏的 WebShell 后门行为。
兼容性:只提供 Windows 版本。
工具下载地址:http://www.d99net.net
1.3.2. 河马
专注 WebShell 查杀研究,拥有海量 WebShell 样本和自主查杀技术,采用传统特征+云端大数据双引擎的查杀技术。查杀速度快、精度高、误报低。
兼容性:支持 Windows、Linux,支持在线查杀。
1.3.3. Web Shell Detector
Web Shell Detector 具有 WebShell 签名数据库,可帮助识别高达 99% 的 WebShell。
兼容性:提供 PHP、Python 脚本,可跨平台,在线检测。
官方网站:http://www.shelldetector.com
1.3.4. CloudWalker
一个可执行命令行版本的 Webshell 检测工具。
兼容性:暂时只支持 PHP Webshell 的检测。
在线查杀 demo:https://webshellchop.chaitin.cn/demo/
GitHub 项目地址:https://github.com/chaitin/cloudwalker
1.4. 发掘隐藏webshell后门
面对百万级代码,想要发现隐藏后门,最好的方法就是做完整性校验,通过与原始代码对比,可以发现文件是否被篡改并定为篡改的位置。
1.4.1. MD5校验
下载D盾_Web查杀工具的时候,我们可以留意到下载的压缩包里有一个 exe 可执行文件,拥有自身的md5 值。这个是软件作者在发布软件时,通过 md5 算法计算出该 exe 文件的"特征值"。
下载地址:https://www.d99net.net/down/d_safe_2.1.7.2.zip
文件 MD5:e2ec949fd70c4c921ee38979dda39d11 D_Safe_Manage.exe
Windowds下MD5校验:
certutil -hashfile D_Safe_Manage.exe MD5
Linux下MD5校验:
md5sum D_Safe_Manage.exe
那同理可得,我们可以将所有网站文件计算一次 hash 值保存,当出现应急情况时,重新计算一次 hash值,并与上次保存的 hash 值进行对比,从而输出新创建的、修改过及删除的文件列表。文件 hash 值计算:
import hashlib
import os
def md5sum(file):
m = hashlib.md5()
if os.path.isfile(file):
with open(file, 'rb') as f: # 使用with语句自动关闭文件
for line in f:
m.update(line)
else:
raise ValueError("Provided argument is not a file.") # 抛出异常处理非文件输入
return m.hexdigest() # 返回十六进制哈希值
# 实现根据新的哈希值与旧的哈希值比较找出新增、修改和删除的文件列表,并需要维护一个文件哈希记录数据库
def compare_file_hashes(new_files, old_hashes_db):
new_hashes = {}
modified_files = []
deleted_files = list(old_hashes_db.keys())
for file in new_files:
try:
new_hashes[file] = md5sum(file)
except ValueError:
pass # 文件不是普通文件,忽略
for file, old_hash in old_hashes_db.items():
if file not in new_hashes:
deleted_files.remove(file) # 如果不在新文件列表中,标记为已删除
elif new_hashes[file] != old_hash:
modified_files.append(file) # 如果哈希值不同,标记为已修改
added_files = set(new_files) - set(new_hashes.keys()) - set(old_hashes_db.keys())
return added_files, modified_files, deleted_files
# 示例使用
new_files = ['file1.txt', 'file2.txt', 'file3.txt']
old_hashes_db = {'file1.txt': 'old_hash1', 'file2.txt': 'old_hash2', 'file4.txt': 'old_hash4'}
added, modified, deleted = compare_file_hashes(new_files, old_hashes_db)
print(f"Added files: {added}")
print(f"Modified files: {modified}")
print(f"Deleted files: {deleted}")
这个compare_file_hashes函数接受新文件列表和旧的哈希数据库,然后返回三个列表:新增文件、修改过的文件和删除的文件。请注意,这个例子假设old_hashes_db是一个字典,其中键是文件名,值是旧的MD5哈希值。
1.4.2. diff命令
在 Linux 中,可以使用 diff 命令来比较两个文本文件的差异。
diff -c -a -r 2.php 3.php
注:如果只是想查看两个文件是否不同又不想显示差异之处的话,可以加上 -q 选项。
1.4.3. 文件对比工具
Beyond Compare
Beyond Compare 是一套由 Scooter Software 推出的文件比较工具。主要用途是对比两个文件夹或者
文件,并将差异以颜色标示,比较范围包括目录,文档内容等。
下载地址:http://www.scootersoftware.com/download.php
软件使用示例,通过文件夹比较,找出文件夹中的差异内容:双击 Beyond Compare ,打开软件主页,选择文件夹比较,分别加载两个文件夹,直接比较即可。
WinMerge
WinMerge 是一款运行于 Windows 系统下的文件比较和合并工具,使用它可以非常方便地比较文件夹和文件,以易于理解的可视文本格式显示差异。
下载地址:https://winmerge.org/downloads/
1、文件 -- 打开,选择文件或文件夹,然后点击进行比较。
2、在同一个界面里,通过颜色和文本提示,显示文件夹内容差异。
1.5. 勒索病毒自救指南
1.5.1. 勒索病毒加密原理
原理
公开密钥密码体系要求密钥成对出现,一个用于加密,另一个用于解密,并且不可能从其中一个推导出
加密过程
1、病毒作者首先在自己电脑上生成的 私钥Q 和 公钥Q
2、病毒在目标电脑上随机生成 私钥Z 和 公钥Z
3、将用户电脑上的文件通过 公钥Z 加密
4、将用户电脑上的 私钥Z 通过 公钥Q 加密
5、删除用户电脑上的 私钥Z 、公钥Q、数据
解密过程
支付完赎金之后获得 私钥Q ,通过用户的 加密私钥 解出 私钥Z,通过 私钥Z 解密 用户数据。
1.5.2. 勒索病毒搜索引擎
在勒索病毒搜索引擎输入病毒名、勒索邮箱、被加密后文件的后缀名,或直接上传被加密文件、勒索提示信息,即可快速查找到病毒详情和解密工具。
【360】 勒索病毒搜索引擎,支持检索超过800种常见勒索病毒
【腾讯】 勒索病毒搜索引擎,支持检索超过 1000+ 种常见勒索病毒
官网:https://guanjia.qq.com/pr/ls
** 【启明】** VenusEye勒索病毒搜索引擎,超300种勒索病毒家族
官网:https://lesuo.venuseye.com.cn
【奇安信】勒索病毒搜索引擎
官网:https://lesuobingdu.qianxin.com
【深信服】 勒索病毒搜索引擎
官网:https://edr.sangfor.com.cn/#/information/ransom_search
1.5.3. 勒索软件解密工具集
很多安全公司都提供了免费的勒索病毒解密工具下载,收集和整理相关下载地址,可以帮助我们了解和获取最新的勒索病毒解密工具。
【腾讯哈勃】勒索软件专杀工具
官网:https://habo.qq.com/tool
【金山毒霸】勒索病毒免疫工具
官网:http://www.duba.net/dbt/wannacry.html
【火绒】安全工具下载
官网:http://bbs.huorong.cn/forum-55-1.html
【瑞星】解密工具下载
官网:http://it.rising.com.cn/fanglesuo/index.html
【nomoreransom】勒索软件解密工具集
官网:https://www.nomoreransom.org/zh/index.html
【MalwareHunterTeam】勒索软件解密工具集
官网:https://id-ransomware.malwarehunterteam.com
【卡巴斯基】免费勒索解密器
官网:https://noransom.kaspersky.com
【Avast】免费勒索软件解密工具
官网:https://www.avast.com/zh-cn/ransomware-decryption-tools
【Emsisoft】免费勒索软件解密工具
官网:https://www.emsisoft.com/ransomware-decryption-tools/free-download
【GitHub 项目】勒索病毒解密工具收集汇总
官网:https://github.com/jiansiting/Decryption-Tools
二、日志分析篇
2.1. Windows日志分析
使用环境:Windows Server 2008
2.1.1. Windows事件日志介绍
Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
Windows主要有三类日志记录系统事件:系统日志、应用程序日志和安全日志。
系统日志
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows操作系统预先定义。
默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
应用程序日志
包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录。
默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx
安全日志
记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、账号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全日志是关闭的,可以使用组策略来启动安全日志,或者在注册表中设置审核策略,以便当安全日志满后使系统停止响应。
默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx
系统日志和应用程序日志存储着故障排除信息,对于系统管理员更为有用。安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于安全人员而言,更有帮助。
2.1.2. 审核策略与事件查看器
Windows Server 2008 R2 系统的审核功能在默认状态下并没有启用,建议开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。
PS:默认状态下,也会记录一些简单的日志,日志默认大小20M
设置:开始 → 管理工具 → 本地安全策略 → 本地策略 → 审核策略,本地安全设置。
查看系统日志方法:
1、在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”
2、按 "Window+R",输入 eventvwr.msc
也可以直接进入“事件查看器”
2.1.3. 事件日志分析
对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明:
事件ID | 说明 |
---|---|
4624 | 登录成功 |
4625 | 登陆失败 |
4634 | 注销成功 |
4647 | 用户启动的注销 |
4672 | 超级用户登录 |
4720 | 创建用户 |
案例:暴力破解排查
1. 在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”;
2. 在事件查看器中,单击“安全”,查看安全日志;
3. 在安全日志右侧操作中,点击“筛选当前日志”,输入事件ID进行筛选。
4624 -- 登录成功
4625 -- 登录失败
4634 -- 注销成功
4647 -- 用户启动的注销
4672 -- 使用超级用户(如管理员)进行登录
输入事件ID:4625进行日志筛选,发现事件ID:4625,假如事件数是175904,即代表用户登录失败了175904次,那么这台服务器管理员账号可能遭遇了暴力破解。
2.1.4 日志分析工具
2.1.4.1. Log Parser
Log Parser(是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、ActiveDirectory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。
Log Parser 2.2下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=24659
Log Parser 使用示例:https://mlichtenberg.wordpress.com/2011/02/03/log-parser-rocks-more-than-50-examples
基本查询结构:
Logparser.exe –i:EVT –o:DATAGRID "SELECT * FROM c:\xx.evtx"
使用Log Parser分析日志
1、查询登录成功的事件
登录成功的所有事件
LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\security.evtx where
EventID=4624"
指定登录时间范围的事件:
LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where
TimeGenerated>'2022-11-05 00:00:00' and TimeGenerated<'2022-11-06 00:00:00' and
EventID=4624"
提取登录成功的用户名和IP:
LogParser.exe -i:EVT –o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as
EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as
Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\security.evtx where
EventID=4624"
2、查询登录失败的事件
登录失败的所有事件:
LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\security.evtx where
EventID=4625"
提取登录失败用户名进行聚合统计:
LogParser.exe -i:EVT "SELECT EXTRACT_TOKEN(Message,13,' ') as
EventType,EXTRACT_TOKEN(Message,19,' ') as user,count(EXTRACT_TOKEN(Message,19,'
')) as Times,EXTRACT_TOKEN(Message,39,' ') as Loginip FROM c:\security.evtx where
EventID=4625 GROUP BY Message"
3、系统历史开关机记录
LogParser.exe -i:EVT –o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006"
2.1.4.2. LogParser Lizard
对于GUI环境的Log Parser Lizard,其特点是比较易于使用,甚至不需要记忆繁琐的命令,只需要做好设置,写好基本的SQL语句,就可以直观的得到结果。
下载地址:http://www.lizard-labs.com/log_parser_lizard.aspx
依赖包:Microsoft .NET Framework 4.5,
下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=42642
2.2. Linux日志分析
使用环境:CentOS 7.9
2.2.1. 日志简介
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
日志文件 | 说明 |
---|---|
/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,而要使用last命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
比较重要的几个日志
登录失败记录:/var/log/btmp
最后一次登录:/var/log/lastlog
登录成功记录: /var/log/wtmp
登录日志记录:/var/log/secure
目前登录用户信息:/var/run/utmp
历史命令记录:history
仅清理当前用户的历史命令: history -c
2.2.2. 日志分析技巧
A. 常用的shell命令
Linux下常用的shell命令如:find、grep 、egrep、awk、sed
1、grep显示前后几行信息
grep -C 5 foo filename #显示foo前面的5行,foo后面的5行
grep -A 5 foo filename #显示foo后面的5行
grep -B 5 foo filename #显示foo前面的5行
2、grep 查找含有某字符串的所有文件
grep -rn "hello" * #查找当前目录及子目录下所有文件,查找含有hello的行
-r #递归查找
-n #显示行号
-i #忽略大小写
-R #递归查找
3、显示一个文件的某几行
cat filename | tail -n +1000 | head -n 2000 #显示文件从第1000行开始,显示2000行
4、查找命令
find /etc -name init #查找/etc目录下所有文件,文件名包含init
5、显示/etc/passwd的账户
cat /etc/passwd | awk -F ':' '{print $1}' # -F 指定分割域为:,$1表示第一列,$0表示所有列
cat /etc/passwd | awk -F: '{print $1}'
6、删除历史操作记录
sed -i '153,$d' .bash_history #删除历史操作记录,只保留前153行
B. 日志分析技巧
1、/var/log/secure
# 定位有多少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}'
2、/var/log/yum.log
软件安装升级日志
[root@localhost ~]# more /var/log/yum.log
Jan 18 18:34:37 Installed: 1:telnet-0.17-66.el7.x86_64
2.3. Web日志分析
Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安
全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进
行修复。
我们对如下的一条Apache日志进行简单的分析:
[root@localhost ~]# tail /var/log/httpd/access_log
# 访问日志格式
#
# 该格式用于记录Web服务器的访问情况,包含以下信息:
# - 客户端IP地址:10.0.0.1
# - 时间戳:[03/Feb/2024:12:22:20 +0800]
# - 请求方法和URL:POST /sdk
# - HTTP协议版本:HTTP/1.1
# - 状态码:404
# - 响应大小:201
# - 请求头中User-Agent字段的值:"Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)"
#
# 该日志条目示例表明,一个IP地址为10.0.0.1的客户端在2024年2月3日12点22分20秒,
# 向服务器发送了一个POST请求,请求的URL是/sdk,但服务器返回了404状态码,表示请求的资源未找到。
10.0.0.1 - - [03/Feb/2024:12:22:20 +0800] "POST /sdk HTTP/1.1" 404 201 "-" "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)"
2.3.1. 日志分析技巧
在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程。
1、确定入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击
者,还原攻击过程。
2、攻击者在入侵网站后,通常会留下后门维持权限,以便再次访问,可以找到该文件,并以此为线索来
展开分析。
常用分析工具:
Window下,推荐用 EmEditor/Notepad++ 进行日志分析,支持大文本,搜索效率不错。
Linux下,使用Shell命令组合查询分析。一般结合grep、awk等命令实现常用的日志分析统计技巧。
Apache日志分析技巧:
# 列出当天访问次数最多的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 ^IP log_file| awk '{print $1,$7}'
# 去掉搜索引擎统计当天的页面:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' | sort | uniq | wc -l
# 查看2022年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2022:14 | awk '{print $2}'| sort | uniq | wc -l
2.3.2. 日志分析案例
实例:通过nginx代理转发到某内网服务器,内网服务器某站点目录下被上传了多个图片木马,虽然IIS
下不能解析,但还是想找出谁通过什么路径上传的。
在这里,我们遇到了一个问题:由于设置了代理转发,只记录了代理服务器的IP(即nginx),并没有记
录访问者IP?这时候,如何去识别不同的访问者和攻击源呢?
这是管理员日志配置不当的问题,但好在我们可以通过浏览器指纹来定位不同的访问来源,还原攻击路径。
1、定位攻击源
首先访问图片木马的记录,只找到了一条,由于所有访问日志只记录了代理IP,并不能通过IP来还原攻击路径,这时候,可以利用浏览器指纹来定位。
more u_ex180408.log | grep "asp;."
浏览器指纹:
Mozilla/4.0+
(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+.NET4.0C;+.NET4.0E)
2、搜索相关日志记录
通过筛选与该浏览器指纹有关的日志记录,可以清晰地看到攻击者的攻击路径。
3、对找到的访问日志进行解读,攻击者大致的访问路径如下
- 攻击者访问首页和登录页
- 攻击者访问MsgSjlb.aspx和MsgSend.aspx
- 攻击者访问Xzuser.aspx
- 攻击者多次POST(怀疑通过这个页面上传模块缺陷)
- 攻击者访问了图片木马
打开网站,访问Xzuser.aspx,确认攻击者通过该页面的进行文件上传了图片木马,同时,发现网站了存在未授权访问漏洞,攻击者访问特定URL,无需登录即可进入后台界面。通过日志分析找到网站的漏洞位置并进行修复。
2.3.3. 日志统计分析技巧
统计爬虫:
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
2206 219.136.134.13
1497 182.34.15.248
1431 211.140.143.100
1431 119.145.149.106
1427 61.183.15.179
1427 218.6.8.189
1422 124.232.150.171
1421 106.187.47.224
1420 61.160.220.252
1418 114.80.201.18
统计网段
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
HTTP Status:
cat /www/logs/access.2019-02-23.log | awk '{print $9}' | sort | uniq -c | sort -
rn | more
5056585 304
1125579 200
7602 400
5 301
URL统计:
cat /www/logs/access.2019-02-23.log | awk '{print $7}' | sort | uniq -c | sort -rn | more
文件流量统计:
cat /www/logs/access.2019-02-23.log | awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}' | sort -rn | more
grep ' 200 ' /www/logs/access.2019-02-23.log | awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}' | sort -rn | more
URL访问量统计:
cat /www/logs/access.2019-02-23.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more
脚本运行速度:查出运行速度最慢的脚本:
grep -v 0$ /www/logs/access.2019-02-23.log | awk -F '\" ' '{print $4" " $1}' web.log | awk '{print $1" "$8}' | sort -n -k 1 -r | uniq > /tmp/slow_url.txt
IP、URL 抽取:
tail -f /www/logs/access.2019-02-23.log | grep '/test.html' | awk '{print $1" "$7}'
2.4. Mysql日志分析
使用环境:DVWA
Mysql 中的 general_log 能记录成功连接和每次执行的查询,我们可以将它用作安全布防的一部分,为故障分析或黑客事件后的调查提供依据。
<!-- 1、查看log配置信息 -->
show variables like '%general%';
<!-- 2、开启日志 -->
SET GLOBAL general_log = 'On';
<!-- 3、指定日志文件路径 -->
SET GLOBAL general_log_file = '/var/lib/mysql/mysql.log';
查看mysql日志文件:
按列来解析一下:
- 第一列:Time
前面一个是日期,后面一个是小时和分钟,有一些不显示的原因是因为这些sql语句几乎是同时执行的,所以就不另外记录时间了。 - 第二列:ID
show processlist出来的第一列的线程ID,对于长连接和一些比较耗时的sql语句,你可以精确找出究竟是哪一个线程在运行。 - 第三列:Command,操作类型
比如Connect是连接数据库,Query是查询数据库(增删查改都显示为查询),可以特定过滤一些操作。 - 第四列:Argument,详细信息
例如 Connect root@localhost on 意思是连接数据库,以此类推,接下面的连上数据库之后,做了什么查询操作。
Mysql暴力破解日志分析
查看登录日志是否开启:show variables like '%general%';
发现登录日志关闭,日志文件位置为:C:\phpstudy_pro\Extensions\MySQL5.7.26\data\Win7-PC.log
开启登录日志:SET GLOBAL general_log='on';
利用hydra爆破Mysql,生成Win7-PC.log日志
登录失败的记录:不管是爆破工具、Navicat for MySQL、还是命令行,登录失败都是一样的记录。
80 Connect root@192.168.108.128 on using TCP/IP
80 Connect Access denied for user 'root'@'192.168.108.128' (using password: YES)
登录成功的记录:不同的爆破工具或者登录方式,显示出来的口令猜解成功的记录会有所差别。这个差
别在于,不同的数据库连接工具,它在连接数据库初始化的过程中是不同的。通过这样的差别,我们可
以简单判断出用户连接数据库的方式。
Navicat for MySQL登录:
2022-11-06T13:49:03.648194Z 145 Connect root@LAPTOP-5NFOIJFJ on using
TCP/IP
2022-11-06T13:49:03.648194Z 145 Query SET NAMES utf8mb4
2022-11-06T13:49:03.710594Z 145 Query SHOW VARIABLES LIKE 'lower_case_%';
2022-11-06T13:49:03.835394Z 145 Query SHOW VARIABLES LIKE 'sql_mode';
2022-11-06T13:49:03.882194Z 145 Query SELECT COUNT(*) AS support_ndb FROM
information_schema.ENGINES WHERE Engine = 'ndbcluster'
2022-11-06T13:49:03.897794Z 145 Query SELECT SCHEMA_NAME,
DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM
命令行登录:
2022-11-06T13:49:03.648194Z 111 Connect root@localhost on
111 Query select @@version_comment limit 1
2022-11-06T13:49:03.710594Z 145 Quit
还可以利用shell命令进行简单的分析:
有哪些IP在爆破?
grep "Access denied" Win7-PC.log |cut -d "'" -f4 | uniq -c | sort -nr
发现192.168.108.128在爆破
爆破的用户名字典是哪些?
grep "Access denied" Win7-PC.log |cut -d "'" -f2 | uniq -c | sort -nr
发现用户名字典为root。