取证分析
一、电子取证
电子取证是指利用计算机软硬件技术,以符合法律规范的方式对计算机入侵、破坏、欺诈、攻击等犯
罪行为进行证据获取、保存、分析和出示的过程。从技术方面看,计算机犯罪取证是一个对受侵计算
机系统进行扫描和破解,对入侵事件进行重建的过程。具体而言,是指把计算机看作犯罪现场,运用
先进的辨析技术,对计算机犯罪行为进行解剖,搜寻罪犯及其犯罪证据。
取证分为现场勘查阶段 和 证据分析阶段
- 现场勘查阶段
- 主要任务是获取可能的物理证据,如嫌疑人的计算机、移动硬盘、U盘、手机、数码相机、数字存储
卡等各种可能包含证据的介质。
- 主要任务是获取可能的物理证据,如嫌疑人的计算机、移动硬盘、U盘、手机、数码相机、数字存储
- 证据分析阶段
- 对获取的存储设备进行深入检查,发现可能的电子证据并生成报告,以便提交给法庭作为诉讼证据。
法律法规:
公安机关办理刑事案件电子数据取证规则:
http://gaj.cq.gov.cn/zslm_245/wlaqgl/flfg/201912/t20191221_2043591.html
计算机犯罪现场勘验与电子证据检查规则:
http://www.fakuyun.com/index.php?m=content&c=index&a=show&catid=5&id=7915&q=
人民检察院电子证据鉴定程序规则(试行):
http://www.gd.jcy.gov.cn/znbm/kjqj/gzzd/201207/t20120713_903417.htm
二、内存取证
内存取证是指在计算机系统的内存中进行取证分析,以获取有关计算机系统当前状态的信息。内存取证通常用于分析计算机系统上运行的进程、网络连接、文件、注册表等信息,并可以用于检测和分析恶意软件、网络攻击和其他安全事件
2.1、内存取证工具Volatility
- 介绍
Volatilty是一款开源的内存分析框架,主要用于从计算机内存中提取到数字证据,它可以用于取证,恶意代码分析、漏洞研究、操作系统学习以及其他安全领域。
Volatility 已经开发到了Volatility 3,但是第三代仍然在开发阶段,其功能相较于第二代还不完善,但是第三代对Windows 10以上的Windows系统所导出的内存数据提供了更完善的支持(Volatility 由于和 windows cmd 命令vol冲突,所以需要在 Powershell 中使用)
2.2、安装
2.2.1、安装pip
以kali中为例
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py |
2.2.2、下载vol并安装
git clone https://ghproxy.com/https://github.com/volatilityfoundation/volatility.git |
2.2.3、依赖安装
apt install python2-dev |
2.2.4、测试python2
python2 vol.py -h |
2.3、工具使用方法
2.3.1、获取镜像信息
python2 vol.py -f ../Challenge.raw imageinfo |
文件较大所用时间较长
Suggested Profile(s) : Volatility 推荐的配置文件
AS Layer2 显示了使用的内存镜像文件路径
KDBG 显示了内存镜像中的 KDBG 结构地址
Number of Processors 显示了处理器数量
Image Type 显示了操作系统服务包版本
Image date and time 显示了内存镜像文件的创建日期和时间
2.3.2、获取进程信息
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 pslist |
Volatility的procdump插件可以根据进程ID或进程名提取进程的内存映像,并保存为一个单独的文件
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 procdump -p 520 -D ./ |
2.3.3、查看终端里执行过的命令
Volatiltiy的cmdscan插件可以扫描内存镜像中的进程对象,提取已执行的cmd命令,并将其显示在终端中
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 cmdscan |
2.3.4、查看进程在终端里运行的命令
Volatility中的cmdline插件可以用于提取进程执行的参数和参数
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 cmdline |
2.3.5、查找内存中的文件
Volatility的filescan插件可以在内存中搜索已经打开的文件句柄,从而获得文件名、路径、文件大小等信息
我想找到hint.txt文件,可以使用一下命令
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 filescan |grep hint.txt |
grep是linux下常见的命令之一,它用于在文件中查找指定的字符串,它用于文件中查找指定的字符串,并将包含该字符串的行输出
如果只使用filescan而不匹配grep的话,Volatility就会输出系统上的全部文件
2.3.6、提取内存中的文件
Volatility的dumpfiles插件可以用来提取系统内存中的文件
提取hint.txt文件,hint.txt的内存位置为0x000000011fd0ca70,这两个由于位置都一样,随便提取哪个都行
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000011fd0ca70 -D ./ |
2.3.7、查看浏览器历史记录
Volatility中的iehistory插件可以用于提取Internet Explorer浏览器历史记录
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 iehistory |
2.3.8、提取用户密码hash值并爆破
Volatility中的Hashdump插件可以用于提取系统内存中的密码哈希值
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 hashdump |
2.3.9、查看剪切板的里的内容
Volatility中的clipboard插件可以用于从内存转储中提取剪贴板数据
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 clipboard |
2.3.10、查看正在运行的服务
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 svcscan |
执行了svcscan之后,每列代表服务的一些信息,包括服务名、PID、服务状态、服务类型、路径等等
2.3.11、查看网络连接状态
Volatility中的netscan插件可以在内存转储中查找打开的网络连接和套接字,该命令将显示所有当前打开的网络连接和套接字。输出包括本地和远程地址、端口、进程ID和进程名称等信息
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 netscan |
2.3.12、查看注册表信息
printkey是Volatility工具中用于查看注册表的插件之一。它可以帮助分析人员查看和解析注册表中的键值,并提供有关键值的详细信息,如名称、数据类型、大小和值等
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 printkey |
根据名称查看具体子项的内容,这里以SAM\Domains\Account\Users\Names做演示,这个是Windows系统中存储本地用户账户信息的注册表路径,它包含了每个本地用户账户的名称和对应的SID信息
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names" |
2.13.13、提取全部的注册表
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 dumpregistry -D ./ |
2.4、全部插件
amcache 查看AmCache应用程序痕迹信息 |
2.5、导入插件
mimikatz.py 放置到 volatility/plugins目录
mimikatz是一个开源的用于从Windows操作系统中提取明文密码,哈希值以及其他安全凭据的工具
python2 vol.py -f ../Challenge.raw --profile=Win7SP1x64 mimikatz |
如果报错为这个
pip2 install construct==2.10.54 |
安装这个包后就可以使用了
三、内存取证工具Strings
- 语法
strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [ File ... ] |
strings 命令在对象文件或二进制文件中查找可打印的字符串。字符串是 4 个或更多可打印字符的任意序列,以换行符或空字符结束。 strings 命令对识别随机对象文件很有用