应急响应

一、入侵排查篇

当企业发生黑客入侵、系统崩溃或其他影响业务正常运行的安全事件时,常规的应急响应流程为:
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账号下的新增可疑账户,需要立即删除,如下图:
img
img

3、查看服务器是否存在隐藏账号、克隆账号
检查方法:使用D盾_web查杀工具,集成了对隐藏、克隆账号检测的功能

增加隐藏账号:net user /add test$ # 增加隐藏账号命令
img

4、结合日志,查看管理员登录时间、用户名是否存在异常
检查方法:
a. cmd命令行输入eventvwr.msc,打开“事件查看器”
img

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。

img

b. 根据 netstat 命令定位出的 PID 编号,再通过 tasklist 命令进行进程定位

tasklist | findstr "3868"

img

在任务管理器中进一步定位(服务中不一定能看到端口)

img

2、查看进程、路径及运行文件
检查方法:
依据进程名称查看是否有可疑进程

tasklist /svc

img

a. 开始 -- 运行 -- 输入 msinfo32 命令,依次点击 "软件环境 -- 正在运行任务" 就可以查看到进程的详细信息,比如进程路径、进程ID、文件创建日期以及启动时间等。

img

b. 打开D盾查杀工具,进程查看,关注可以的进程信息

img

c. 通过微软官方提供的 Process Explorer 等工具进行排查
工具下载地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/process-explorer

img

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
img

2、检查服务器是否有异常的计划任务
检查方法:
a、在桌面打开【运行】,输入 control 打开控制面板,然后在”系统与安全“中查看计划任务,便可以看到具体的计划任务及相关属性。
b、利用安全软件查看计划任务。

img

3、检查服务器是否有异常的服务

检查方法:
在桌面打开【运行】,输入 services.msc,查看服务状态和启动类型,检查是否有异常服务。

img

注:一般通过服务是否有描述判断是否有异常服务


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 每分钟写入文件

img


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

网址:http://www.chkrootkit.org/


  • 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

网址:http://rkhunter.sourceforge.net/


2)病毒 查杀

Clamav

网址:http://www.clamav.net/download.html

安装方式:

# 安装
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

img


1.3. Webshell查杀工具

1.3.1. D盾_Web查杀

阿D出品,使用自行研发不分扩展名的代码分析引擎,能分析更为隐藏的 WebShell 后门行为。

兼容性:只提供 Windows 版本。

工具下载地址:http://www.d99net.net

img


1.3.2. 河马

专注 WebShell 查杀研究,拥有海量 WebShell 样本和自主查杀技术,采用传统特征+云端大数据双引擎的查杀技术。查杀速度快、精度高、误报低。

兼容性:支持 Windows、Linux,支持在线查杀。

官方网站:https://www.shellpub.com

img


1.3.3. Web Shell Detector

Web Shell Detector 具有 WebShell 签名数据库,可帮助识别高达 99% 的 WebShell。

兼容性:提供 PHP、Python 脚本,可跨平台,在线检测。

官方网站:http://www.shelldetector.com

img


1.3.4. CloudWalker

一个可执行命令行版本的 Webshell 检测工具。

兼容性:暂时只支持 PHP Webshell 的检测。

在线查杀 demo:https://webshellchop.chaitin.cn/demo/

GitHub 项目地址:https://github.com/chaitin/cloudwalker

img


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

img

Linux下MD5校验:

md5sum D_Safe_Manage.exe

img

那同理可得,我们可以将所有网站文件计算一次 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

img

注:如果只是想查看两个文件是否不同又不想显示差异之处的话,可以加上 -q 选项。

img


1.4.3. 文件对比工具

Beyond Compare
Beyond Compare 是一套由 Scooter Software 推出的文件比较工具。主要用途是对比两个文件夹或者
文件,并将差异以颜色标示,比较范围包括目录,文档内容等。

下载地址:http://www.scootersoftware.com/download.php

img

软件使用示例,通过文件夹比较,找出文件夹中的差异内容:双击 Beyond Compare ,打开软件主页,选择文件夹比较,分别加载两个文件夹,直接比较即可。

img

WinMerge
WinMerge 是一款运行于 Windows 系统下的文件比较和合并工具,使用它可以非常方便地比较文件夹和文件,以易于理解的可视文本格式显示差异。

下载地址:https://winmerge.org/downloads/

img

1、文件 -- 打开,选择文件或文件夹,然后点击进行比较。
2、在同一个界面里,通过颜色和文本提示,显示文件夹内容差异。


1.5. 勒索病毒自救指南

1.5.1. 勒索病毒加密原理

img

原理
公开密钥密码体系要求密钥成对出现,一个用于加密,另一个用于解密,并且不可能从其中一个推导出

加密过程
1、病毒作者首先在自己电脑上生成的 私钥Q 和 公钥Q
2、病毒在目标电脑上随机生成 私钥Z 和 公钥Z
3、将用户电脑上的文件通过 公钥Z 加密
4、将用户电脑上的 私钥Z 通过 公钥Q 加密
5、删除用户电脑上的 私钥Z 、公钥Q、数据

解密过程
支付完赎金之后获得 私钥Q ,通过用户的 加密私钥 解出 私钥Z,通过 私钥Z 解密 用户数据。


1.5.2. 勒索病毒搜索引擎

在勒索病毒搜索引擎输入病毒名、勒索邮箱、被加密后文件的后缀名,或直接上传被加密文件、勒索提示信息,即可快速查找到病毒详情和解密工具。

【360】 勒索病毒搜索引擎,支持检索超过800种常见勒索病毒

官网:http://lesuobingdu.360.cn

img


【腾讯】 勒索病毒搜索引擎,支持检索超过 1000+ 种常见勒索病毒

官网:https://guanjia.qq.com/pr/ls

img


** 【启明】** VenusEye勒索病毒搜索引擎,超300种勒索病毒家族

官网:https://lesuo.venuseye.com.cn

img


【奇安信】勒索病毒搜索引擎

官网:https://lesuobingdu.qianxin.com

img


【深信服】 勒索病毒搜索引擎

官网:https://edr.sangfor.com.cn/#/information/ransom_search

img


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

设置:开始 → 管理工具 → 本地安全策略 → 本地策略 → 审核策略,本地安全设置。

img

img

查看系统日志方法:
1、在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”
2、按 "Window+R",输入 eventvwr.msc 也可以直接进入“事件查看器”

img

img


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;."

img
浏览器指纹:
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、搜索相关日志记录
通过筛选与该浏览器指纹有关的日志记录,可以清晰地看到攻击者的攻击路径。
img

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日志文件:
img
按列来解析一下:

  • 第一列:Time
    前面一个是日期,后面一个是小时和分钟,有一些不显示的原因是因为这些sql语句几乎是同时执行的,所以就不另外记录时间了。
  • 第二列:ID
    show processlist出来的第一列的线程ID,对于长连接和一些比较耗时的sql语句,你可以精确找出究竟是哪一个线程在运行。
  • 第三列:Command,操作类型
    比如Connect是连接数据库,Query是查询数据库(增删查改都显示为查询),可以特定过滤一些操作。
  • 第四列:Argument,详细信息
    例如 Connect root@localhost on 意思是连接数据库,以此类推,接下面的连上数据库之后,做了什么查询操作。

Mysql暴力破解日志分析
查看登录日志是否开启:show variables like '%general%';
img
发现登录日志关闭,日志文件位置为:C:\phpstudy_pro\Extensions\MySQL5.7.26\data\Win7-PC.log
开启登录日志:SET GLOBAL general_log='on';
img
img
利用hydra爆破Mysql,生成Win7-PC.log日志
img
img
登录失败的记录:不管是爆破工具、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在爆破
img
爆破的用户名字典是哪些?

grep "Access denied" Win7-PC.log |cut -d "'" -f2 | uniq -c | sort -nr

img
发现用户名字典为root。



三、权限维持篇

四、Windows实战篇

五、Linux实战篇

六、Web实战篇

七、撰写应急响应报告

posted @ 2024-05-20 15:05  Yoob  阅读(23)  评论(0编辑  收藏  举报