查看原文
其他

CTF之misc杂项解题技巧总结(四)——SWF游戏和取证分析

  

CTF部落

高质量CTF社区,致力于国内网CTF比赛研究,每日分享行业最新资讯,交流解答各类技术问题。星球中可以获取各类CTF比赛信息、解题工具、技巧、书籍、各种资源,发布政府机关、企业、厂商网络安全招聘信息,及内类内推资格。所有发布的内容均精心挑选、成体系化,让你远离无用信息及零碎的知识点。


加入星球后获得:

  • 各类CTF比赛信息、解题工具、技巧、书籍、靶场资源;

  • CTF学习思维导图,0基础开启CTF之路;

  • 遇到任何技术题都快速提问与讨论交流的思路;

  • 组织队伍参与各类CTF比赛;

  • 面试大厂心得及内推资格;

加入星球后,可以跟我 1 对 1 免费提问交流、帮你确定安全学习方向和路线、和大家一起交流学习,从而激励你持续学习!

随着加入的星友越多,压力就越大,所以保证质量的同时,会适当提高门槛。现在限时限量扫码抢购500张¥100优惠券体验三天,如果不满意三天可以免费全额退款,尽早体验、以优惠价加入肯定是不亏的。


CTF之misc杂项解题技巧总结(四)——SWF游戏和取证分析

四、swf游戏和取证分析

(一).swf文件

(二)Windows取证基础

(三)内存取证

(四)磁盘取证

(五)ISO镜像光盘取证

文中涉及的所有工具在CTF部落中均有。

swf游戏和取证分析

(一).swf文件

swf(shock wave flash)是Macromedia(现已被ADOBE公司收购)公司的动画设计软件Flash的专用格式,被广泛应用于网页设计、动画制作等领域,swf文件通常也被称为Flash文件。swf普及程度很高,现在超过99%的网络使用者都可以读取swf档案。这个档案格式由FutureWave创建,后来伴随着一个主要的目标受到Macromedia支援:创作小档案以播放动画。计划理念是可以在任何操作系统和浏览器中进行,并让网络较慢的人也能顺利浏览。swf 可以用Adobe Flash Player打开,浏览器必须安装[Adobe Flash Player](https://baike.baidu.com/item/Adobe Flash Player)插件。

回到顶部

取证分析

关于取证:

  • 活取证:抓取文件的metadata、创建是时间线、命令历史、分析日志文件、哈希摘要、转存内存信息,使用未受感染的干净程序进行取证,U盘、网络、存储设备收集到的数据。

    在活取证中,可以使用内存dump工具,将被入侵的机器的内存保存下来,

    • Windows环境下常用的工具是Dumpit。DumpIt 是一款绿色免安装的 windows 内存镜像取证工具。利用它我们可以轻松地将一个系统的完整内存镜像下来,并用于后续的调查取证工作,下载之后放到虚拟机中,双击之后输入y即可获取当前的状态的内存文件,

    • Linux环境下常用的工具是lime(Linux Mem Extractor),从intel硬件或虚拟机上抓取内存,

  • 死取证:系统关机后制作硬盘镜像、分析镜像。


(二)Windows取证基础

1. .evtx日志取证

windows 日志取证主要包括三方面:Windorw 系统日志(由 windows 系统记录的日志),应用程序独自维护的日志防火墙或入侵检测系统维护的日志。其中 Windows 操作系统维护三个相互独立的日志文件分别为:系统日志应用程序日志安全日志。日志文件位置:C:\Windows\System32\winevt\Logs\。登陆事件、策略更改、账户登陆、系统事件的成功失败,还有任何成功的入侵都将在安全日志中留下痕迹。

通过对Windows事件日志的取证分析,取证人员可以对操纵系统、应用程序、服务、设备等操作行为记录,通过关键的时间点进行回溯。

下表为Vista/Win7/Win8/Win10/Server2008/Server 2012及之后的版本

类型事件类型描述文件名
Windows日志系统包含系统进程,设备磁盘活动等。事件记录了设备驱动无法正常启动或停止,硬件失败,重复IP地址,系统进程的启动,停止及暂停等行为。System.evtx
安全包含安全性相关的事件,如用户权限变更,登录及注销,文件及文件夹访问,打印等信息。Security.evtx
应用程序包含操作系统安装的应用程序软件相关的事件。事件包括了错误、警告及任何应用程序需要报告的信息,应用程序开发人员可以决定记录哪些信息。Application.evtx
应用程序及服务日志MicrosoftMicrosoft文件夹下包含了200多个微软内置的事件日志分类,只有部分类型默认启用记录功能,如远程桌面客户端连接、无线网络、有线网路、设备安装等相关日志。详见日志存储目录对应文件
Microsoft Office Alerts微软Office应用程序(包括Word/Excel/PowerPoint等)的各种警告信息,其中包含用户对文档操作过程中出现的各种行为,记录有文件名、路径等信息。OAerts.evtx
Windows PowerShellWindows自带的PowerShell应用的日志信息。Windows PowerShell.evtx
Internet ExplorerIE浏览器应用程序的日志信息,默认未启用,需要通过组策略进行配置。Internet Explorer.evtx

evtx文件是微软从 Windows NT 6.0(Windows Vista 和 Server 2008) 开始采用的一种全新的日志文件格式。在此之前的格式是 evt 。evtxWindows事件查看器创建,包含Windows记录的事件列表,以专有的二进制XML格式保存。

.evtx文件可以在Windows事件查看器中打开,通过点击、筛选、查找等多种方式查看事件日志。

【注意】:

  • Windows操作系统默认没有提供删除特定日志记录的功能,仅提供了删除所有日志的操作功能。也就意味着日志记录ID(EventRecordID)应该是连续的,默认的排序方式应该是从大到小往下排列。

  • 默认情况下,当一个evtx文件的记录满了,日志服务会覆盖最开始的记录,从头开始写入新的记录。

5 种事件类型(级别)分为:

  1. 信息(Information):信息事件指应用程序、驱动程序或服务的成功操作的事件。

  2. 警告(Warning):警告事件指不是直接的、主要的,但是会导致将来问题发生的问题。例如,当磁盘空间不足或未找到打印机时,都会记录一个“警告”事件。

  3. 错误(Error):错误事件指用户应该知道的重要的问题。错误事件通常指功能和数据的丢失。例如,如果一个服务不能作为系统引导被加载,那么它会产生一个错误事件。

  4. 成功审核(Success audit):成功的审核安全访问尝试,主要是指安全性日志,这里记录着用户登录/注销、对象访问、特权使用、账户管理、策略更改、详细跟踪、目录服务访问、账户登录等事件,例如所有的成功登录系统都会被记录为“ 成功审核”事件。

  5. 失败审核(Failure audit):失败的审核安全登录尝试,例如用户试图访问网络驱动器失败,则该尝试会被作为失败审核事件记录下来。

Windows 用 Event ID来标识事件的不同含义,以Security.evtx为例,一些常见的Event ID 如下

事件ID描述
4608Windows 启动
4609Windows 关机
4616系统时间发生更改
4624用户成功登录到计算机
4625登录失败。使用未知用户名或密码错误的已知用户名尝试登录。
4634用户注销完成
4647用户启动了注销过程
4648用户在以其他用户身份登录时,使用显式凭据成功登录到计算机
4703令牌权限调整
4704分配了用户权限
4720已创建用户账户
4725账户被禁用
4768请求Kerberos身份验证票证(TGT)
4769请求Kerberos服务票证
4770已续订Kerberos服务票证
4779用户在未注销的情况下断开了终端服务器会话

(1)evtx文件结构

\textcolorred.evtx=1∗\textcolorredfileheader(1个文件头)+n∗\textcolorredchunks(n个数据块)+\textcolorredtrailingemptyvalues(尾部填充空值)\textcolorred.evtx=1∗\textcolorredfileheader(1个文件头)+n∗\textcolorredchunks(n个数据块)+\textcolorredtrailingemptyvalues(尾部填充空值)


——file header

File Header(文件头)文件头长度为4KB(4096bytes),一个evtx只有一个文件头,其结构如下:

偏移长度(Bytes)描述
0x008"ElfFile\x00"标志位/签名
0x088
第一个区块编号(存在时间最久的区块编号)
0x108
当前区块编号(块的编号从0开始)
0x188
下一条事件记录的ID
0x204128文件头有效部分的大小
0x2421次要版本
0x2623主要版本
0x2824096文件头的大小
0x2A2
区块的数量
0x2C76
未知 (空值)
0x784
文件标志
0x7C4
文件头前 120 bytes 的CRC32校验和
0x803968
未知 (空值)
——Chunk

每个块的大小是 65536 bytes(64KB),可以有多个块,主要由三部分组成:

  • chunk header 块头

  • array of event records 事件记录组

  • unused space 未使用的空间

chunk头长度为512bytes,其结构如下:

偏移长度(Bytes)描述
0x008"ElfChnk\x00"标志位/签名
0x088
基于日志编号的第一条日志记录的ID
0x108
基于日志编号的最后一条日志记录的ID
0x188
基于文件编号的第一条日志记录的ID
0x208
基于文件编号的最后一条日志记录的ID
0x284128chunk头大小
0x2C4
最后一条日志记录的偏移量(相对于块头的起始偏移量)
0x304
下一条日志记录的偏移量(相对于块头的起始偏移量)
0x344
事件记录数据的 CRC32 校验和
0x3864
Unknown (空值)
0x784
Unknown (flags?)
0x7C4
块头CRC32校验和(块头前120个字节和128至512字节的数据的CRC32校验和)

(2).evtx日志隐藏

参考:闲聊Windows系统日志_Make-CSDN博客_windows系统日志

2. 注册表取证

注册表有5个根键(HKEY):

  • HKEY_CLASSES_ROOT:启动应用程序所需的全部信息,如扩展名,应用程序与文档之间的关系,驱动程序名,DDE和OLE信息,类ID编号和应用程序与文档的图标等。

  • HKEY_CURRENT_USER:当前登录用户的配置信息,如环境变量,个人程序以及桌面设置等。

  • HKEY_LOCAL_MACHINE:本地计算机的系统信息,如硬件和操作系统信息,安全数据和计算机专用的各类软件设置信息。

  • HKEY_USERS:计算机的所有用户使用的配置数据,这些数据只有在用户登录系统时才能访问。

  • HKEY_CURRENT_CONFIG:当前硬件的配置信息,其中的信息是从HKEY_LOCAL_MACHINE中映射出来的。

(1)关于启动项

HKLM\SOFTWARE\Microsoft\Windows\CurrentVevsion\Run

HKLM\SOFTWARE\Microsoft\Windows\CurrentVevsion\RunOnce

HKLM\SOFTWARE\Microsoft\Windows\CurrentVevsion\RunOnceEx

HKLM\SOFTWARE\Microsoft\Windows\CurrentVevsion\RunServices

HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVevsion\Winlogon\Userinit

HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVevsion\Winlogon\Shell

Userinit.exe 运行登录脚本、建立网络连接和启动shell。很多木马程序和流氓软件选择它作为启动项

Autoruns工具:查看系统启动项的工具

(2)关于用户与系统信息项

HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVevsion\RegisteredOwner

HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVevsion\Registeredorganizaion

HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVevsion\ProductID

HKLM\SAM\SAM\Domains\Account\Users\Names

HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVevsion\Winlogon

HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVevsion\ProfileList

3. 系统进程

此类进程在系统中都会有固定的存放位置,假如在此存放位置之外发现此类程序,则有可能是病毒。据百度百科记载大多数此类文件都会存放在 C:\Windows\System32 不过根据自己亲自实验发现,在win 10 中每个此类文件的存放位置都会有四个,win 中自带有数字签名,此时只需要查看数字签名是否正常。而且据网上流传通过右键查看程序的版本信息是否存在也可以判断程序是否正常。并且大部分程序都会有自己固定的注册表信息,如果发现此时某程序对应的注册表信息不正确也极有可能是中毒情况。

(1)与其他应用程序相关进程

  1. iexplore.exe
      描述: IE 浏览器进程,这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。
                                        中毒: 浏览器被劫持,任务管理器中多出进程:IEXPL0RE.EXE,注意,这里是数字“0”,不是字母“O”,或任务管理器查看有多个 iexplore.exe。

  2. wmplayer.exe
      描述: Windows Media Player播放器的一部分,用于播放音频、视频文件。

  3. spoolsv.exe
      描述: 是Print Spooler的进程,管理所有本地和网络打印队列及控制所有打印工作。如果此服务被停用,本地计算机上的打印将不可用。
                                        中毒: 多个相似名称进程,CPU 占用率高,文件位置不正确。

  4. ctfmon.exe
      描述: 是有关输入法的一个可执行程序。它可以选择用户文字输入程序,和微软Office 语言条。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。它监视活动窗口,并为语音识别、书写识别、键盘、翻译和其他中文可选用户输入方法技术提供文本输入服务支持。
                                        中毒: 此进程占用资源太多

  5. internat.exe
      描述: 多语言输入程序。
                                        中毒: 出现提示缺少 exe 文件问题的大部分原因是因该文件被木马病毒破坏导致系统程序找不到此文件,出现错误提示框,或程序无法运行,解决此问题只需找到专业的 exe 文件下载网站,下载该文件后,找到适合程序的文件版本,复制到相应目录。

  6. conime.exe
      描述: 输入法编辑器相关程序。允许用户使用标准键盘就能输入复杂的字符与符号。

  7. wuauclt.exe
      描述: 是Windows自动升级管理程序。该进程会不断在线检测更新。删除该进程将使计算机无法得到最新更新信息。
                                        中毒: 该病毒自动修改原先的 wuauclt.exe 为 wuauclt1.exe ,并建立新的 wuauclt.exe 。建议关闭 wuauclt.exe 进程,删除 wuauclt.exe 进程,然后把 wuauclt1.exe 更改为 wuauclt.exe 。

  8. alg.exe
      描述: 它用于处理微软 Windows 网络连接共享和网络连接防火墙。
                                        中毒: 系统文件 ALG.EXE 出错,极有可能是盗号木马、流氓软件等恶意程序所导致,其感染相关文件并加载起来,一旦杀毒软件删除被感染的文件,就会导致相关组件缺失,游戏等常用软件运行不起来,通常会伴随下几种情况:
      - 桌面图标无法删除
      - 网络游戏打不开
      - 电脑无故蓝屏
      - 电脑没声音
      - 桌面无法显示
      - 主页被修改为网址导航

(2)图形化相关进程

  1. csrss.exe
      描述: 是微软客户端、服务端运行时子系统,windows 的核心进程之一。管理 Windows 图形相关任务,对系统的正常运行非常重要。csrss是Client/Server Runtime Server Subsystem 的简称,即客户/服务器运行子系统,用以控制Windows图形相关子系统,必须一直运行。

  2. explorer.exe
      描述: 是 Windows 文件资源管理器,它用于管理 Windows 图形界面,包括桌面和文件管理,删除该程序会导致 Windows 图形界面无法使用。
                                        中毒: 查看文件位置是否正常,查看版本信息和数字签名值。

  3. dwm.exe
      描述: 桌面窗口管理器,跟桌面相关。它建立在WPF核心图形层组件基础之上。它的出现几乎改变了 Vista 中应用程序的屏幕象素显示方式。启用 DWM 后,提供的视觉效果有毛玻璃框架、3D窗口变换动画、窗口翻转和高分辨率支持 。其中最明显的特征有:任务栏窗口的实时缩略图;Alt+Tab 和 Win+Tab 组合键所看到的效果。

(3)登陆相关进程

  1. smss.exe
      描述: 这是一个会话管理子系统,负责启动用户会话。这个进程是通过系统进程初始化的并且对许多活动的,包括已经正在运行的 Windows 登录程序 (winlogon.exe) ,Win32子系统(csrss.exe)线程和设定的系统变量作出反映。
                                        中毒: 查看文件位置是否正常,查看版本信息和数字签名值。

  2. winlogon.exe
      描述: Windows 用户登陆程序,用于管理用户登录和退出。
                                        中毒: 正常的winlogon系统进程,其用户名为 “SYSTEM” 程序名为小写 winlogon.exe 。而伪装成该进程的木马程序其用户名为当前系统用户名,且程序名为大写的 WINLOGON.exe。

  3. lsass.exe
      描述: 它用于本地安全和登陆策略,随着系统启动而自动启动。它提供本地的安全授权服务,并且它会为使用 winlogon 服务的授权用户生成一个进程。这个进程是通过使用授权的包,如果授权是成功的,lsass 就会产生用户的进入令牌,令牌被使用启动初始的 shell 。其他的由用户初始化的进程会继承这个令牌的。
                                        中毒: 如果你的启动菜单(开始-运行-输入“msconfig”)里有个lsass.exe启动项,那就说明你中了LSASS.EXE木马病毒,中毒后,在进程里可以见到有两个相同的进程,分别是lsass.exe和LSASS.EXE,同时在windows下生成LSASS.EXE和exert.exe两个可执行文件,且在后台运行,LSASS.EXE管理exe类执行文件,exert.exe管理程序退出,还会在D盘根目录下产生和 autorun.inf两个文件,同时侵入注册表破坏系统文件关联。

——Windows 登录过程

SMSS.exe 会话管理进程是内核创建的第一个用户态进程,它启动后会创建 Windows 子系统服务进程 CSRSS 和 WinLogon 进程。WinLogon 会创建登录桌面以及服务系统管理进程 Servises ,在用户登录前,系统使用特殊帐户(NT AUTHORITY\SYSTEM (帐户域\帐户权限))先行登录处理 Servises。然后它会创建数个 svchost.exe子进程,而每个svchost.exe进程都会启动并运行一些基本的windows服务 。因为 CSRSS 和WinLogon 对系统来说缺一不可,因此 SMSS 创建这两个进程遇到问题时便采取紧急措施,不会正常启动。

Explorer 进程是由 UserInit 创建的,UserInit是由 WinLogon 进程创建的,在 Windows 去启动过程中,用户输入用户名和密码后,负责登陆的系统进程 WinLogon 将用户名和密码发送给负责安全认证的另一个系统进程 LsassLsass 调用验证模块对用户名和密码进行验证,如果通过,则创建一个访问令牌对象。WinLogon 去启动 HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVevsion\Winlogon 的 Userinit 表键下指定的程序(默认为 userinit.exe) 。UseInit 进程执行登陆和初始化脚本,然后启动 Shell 表键中定义的 Shell 程序(默认即 Explorer.exe)。

所有这些过程都会被记录进系统内置的"安全"类型日志,可以通过事件查看器浏览。

(4)其他重要进程

  1. svchost.exe
      描述: Windows 服务主进程,是通过动态链接库 (DLL) 运行的服务的通用进程名。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。svchost 进程只作为服务宿主,它本身并不能实现任何功能,即它只能提供条件让其他服务在这里被启动。svchost通过系统服务在注册表中设置的参数找到某个服务的动态链接库。
                                        中毒: 查看文件位置是否正常,查看版本信息和数字签名值。

  2. rundll32.exe
      描述: 用于在内存中运行DLL文件,它们会在应用程序中被使用。这个程序对你系统的正常运行是非常重要的。
                                        中毒: 查看文件位置是否正常,查看版本信息和数字签名值。

  3. taskmgr.exe
      描述: 任务管理器。它显示系统中正在运行的进程。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。
                                        中毒: 多个相似名称进程,CPU 占用率高,文件位置不正确。

  4. services.exe
      描述: 用于管理启动和停止服务。该进程也会处理在计算机启动和关机时运行的服务。
                                        中毒:多个相似名称进程,CPU 占用率高,文件位置不正确。

  5. conhost.exe
      描述: 即命令行程序的宿主进程。win7 之前的宿主程序是由 csrss.exe 来完成的,所有命令行进程都使用 session 唯一的 csrss.exe 进程。而到了 win7 则改成每个命令行进程都有一个独立的 conhost 作为宿主了。

  6. mdm.exe
      描述: Windows进程除错程序。用于使用可视化脚本工具对Internet Explorer除错。

中毒:木马病毒程序的惯用伎俩:伪装成与原进程相似的文件名;将原进程名改为其他进程,然后将病毒程序改为原进程进程名;而且中病毒时一般 cpu 的占用率会升高。

(三)内存取证

计算机的操作系统和应用使用主内存(RAM)来执行不同的任务。这种易失性内存包含大量关于运行应用、网络连接、内核模块、打开的文件以及几乎所有其他的内容信息,但这些信息每次计算机重启的时候都会被清除。

内存取证(Memory forensics)是一种从内存中找到和抽取这些有价值的信息的方式。

1.基础知识了解

.vmem文件表示虚拟内存文件,与pagefile.sys相同

.raw文件是内存取证工具Dumpit提取内存生成的内存转储文件

profile是特定操作系统版本以及硬件体系结构(x86,x64,ARM)中VTypes,共用体,对象类型的集合。除了这些组件以外,profile还包括元数据(操作系统的名称),内核版本以及编译号,系统调用信息,索引以及系统调用的名称,常量值(全局变量),在某些操作系统中能够在硬编码的地址处找到的全局变量 系统映射(关键全局变量和函数的地址,仅限Linux和Mac)

每个profile都有个一个唯一的名称,通常是由操作系统的名称,版本,服务包,系统结构等信息组成。

例如Win7SP1x64是64位的Windows 7 SP1系统配置文件的名称

2. Volatility环境配置

Volatility:是一款开源的,基于Python开发的内存取证工具集,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。Volatility支持对32位或64位Wnidows、Linux、Mac、Android操作系统的RAM数据进行提取与分析。

linux下运行 Volatility 命令的主要入口点是 vol.py 脚本,windows下是一个exe文件。

  • windows中可以直接下载已经编译好的可执行文件,放入环境变量中命令行使用

  • linux下也有对应的可执行文件,同时也可以下载源码自己手动配置。(如果需要用到一些插件,建议手动配置)

下面介绍如何在linux下源码配置并关联扩展插件。(Volatility 已经用 Python 3 重写了,但是本教程使用的是用 Python 2 写的原始的 Volatility 包)

  1. 下载源码并安装

    git clone https://github.com/volatilityfoundation/volatility.git
    python setup.py build
    python setup.py install
  2. python2环境下配置第三方库

    在进行安装时,部分模块可能会报错,这就需要到https://pypi.org/project/搜索相应版本的模块的源码,进行手动安装。

    每次安装完一个库就在python2环境里import测试一下是否安装成功

  • Distorm3:反编译库

    pip2 install distorm3
  • Yara:恶意软件分类工具

    这里有个坑,安装yara需要手动安装yara-1.7.7· PyPI,直接pip安装会报错

    入坑参考:AttributeError: /usr/lib/libyara.so: undefined symbol: lookup_rule · Issue #326 · VirusTotal/yara · GitHub

    cd yara-python
    python setup.py build
    sudo python setup.py install
  • PyCrypto:加密工具集

    pip2 install pycrypto
  • PIL:图片处理库

    pip2 install Pillow
  • OpenPyxl:读写excel文件

    pip2 install openpyxl
  • ujson:JSON解析

    pip2 install ujson
  • 测试是否安装成功

    python vol.py --info
  • 配置mimikatz扩展插件(如果只用本体的功能可以忽略这一步)

    下载插件

    wget https://github.com/volatilityfoundation/community/raw/master/FrancescoPicasso/mimikatz.py
    cp mimikatz.py ./volatility-master/volatility/plugins/

    安装construct模块

    sudo pip2 uninstall construct
    sudo pip2 install construct==2.5.5-reupload

    单独执行一下mimikatz.py文件检查有没有报错

    python mimikatz.py
  • 3. Volatility使用

    其实使用volatility主要是使用它的内置插件来获取种种信息。

    Volatility命令的通用格式如下

    #linux
    python2 vol.py -f <memory-dump-file-taken-by-Lime> --profile=<name-of-our-custom-profile> <plugin-name>
    #windows
    volatility -f <memory-dump-file-taken-by-Lime> --profile=<name-of-our-custom-profile> <plugin-name>
    #<plugin-name>可以放在profile的前面

    使用下面的命令可以看volatility所支持的所有插件,不带前缀的是windows的插件,带linux前缀的是linux的插件,带mac前缀的是mac的插件

    python vol.py --info
    # 查看那些针对Linux设计的插件
    python vol.py --info | grep -i linux_

    一般在使用前看看目标内存转储文件的架构

    #windows
    volatility -f 内存转储文件 imageinfo
    #linux
    python vol.py -f 内存转储文件 imageinfo

    Windows内存转储文件取证分析

    参考:内存取证 | Yu'Blog (gitee.io)

    对于Windows内存转储文件,插件使用及对应的说明如下。

    插件名称功能
    amcache查看AmCache应用程序痕迹信息
    apihooks检测内核及进程的内存空间中的API hook
    atoms列出会话及窗口站atom表
    atomscanAtom表的池扫描(Pool scanner)
    auditpol列出注册表HKLMSECURITYPolicyPolAdtEv的审计策略信息
    bigpools使用BigPagePoolScanner转储大分页池(big page pools)
    bioskbd从实时模式内存中读取键盘缓冲数据(早期电脑可以读取出BIOS开机密码)
    cachedump获取内存中缓存的域帐号的密码哈希
    callbacks打印全系统通知例程
    clipboard提取Windows剪贴板中的内容
    cmdline显示进程命令行参数
    cmdscan提取执行的命令行历史记录(扫描_COMMAND_HISTORY信息)
    connections打印系统打开的网络连接(仅支持Windows XP 和2003)
    connscan打印TCP连接信息
    consoles提取执行的命令行历史记录(扫描_CONSOLE_INFORMATION信息)
    crashinfo提取崩溃转储信息
    deskscantagDESKTOP池扫描(Poolscaner)
    devicetree显示设备树信息
    dlldump从进程地址空间转储动态链接库
    dlllist打印每个进程加载的动态链接库列表
    driverirpIRP hook驱动检测
    drivermodule关联驱动对象至内核模块
    driverscan驱动对象池扫描
    dumpcerts提取RAS私钥及SSL公钥
    dumpfiles提取内存中映射或缓存的文件
    dumpregistry转储内存中注册表信息至磁盘
    editbox查看Edit编辑控件信息 (Listbox正在实验中)
    envars显示进程的环境变量
    eventhooks打印Windows事件hook详细信息
    evtlogs提取Windows事件日志(仅支持XP/2003)
    filescan提取文件对象(file objects)池信息
    gahti转储用户句柄(handle)类型信息
    gditimers打印已安装的GDI计时器(timers)及回调(callbacks)
    gdt显示全局描述符表(Global Deor Table)
    getservicesids获取注册表中的服务名称并返回SID信息
    getsids打印每个进程的SID信息
    handles打印每个进程打开的句柄的列表
    hashdump转储内存中的Windows帐户密码哈希(LM/NTLM)
    hibinfo转储休眠文件信息
    hivedump打印注册表配置单元信息
    hivelist打印注册表配置单元列表
    hivescan注册表配置单元池扫描
    hpakextract从HPAK文件(Fast Dump格式)提取物理内存数据
    hpakinfo查看HPAK文件属性及相关信息
    idt显示中断描述符表(Interrupt Deor Table)
    iehistory重建IE缓存及访问历史记录
    imagecopy将物理地址空间导出原生DD镜像文件
    imageinfo查看/识别镜像信息
    impscan扫描对导入函数的调用
    joblinks打印进程任务链接信息
    kdbgscan搜索和转储潜在KDBG值
    kpcrscan搜索和转储潜在KPCR值
    ldrmodules检测未链接的动态链接DLL
    lsadump从注册表中提取LSA密钥信息(已解密)
    machoinfo转储Mach-O 文件格式信息
    malfind查找隐藏的和插入的代码
    mbrparser扫描并解析潜在的主引导记录(MBR)
    memdump转储进程的可寻址内存
    memmap打印内存映射
    messagehooks桌面和窗口消息钩子的线程列表
    mftparser扫描并解析潜在的MFT条目
    moddump转储内核驱动程序到可执行文件的示例
    modscan内核模块池扫描
    modules打印加载模块的列表
    multiscan批量扫描各种对象
    mutantscan对互斥对象池扫描
    notepad查看记事本当前显示的文本
    objtypescan扫描窗口对象类型对象
    patcher基于页面扫描的补丁程序内存
    poolpeek可配置的池扫描器插件
    printkey打印注册表项及其子项和值
    privs显示进程权限
    procdump进程转储到一个可执行文件示例
    pslist按照EPROCESS列表打印所有正在运行的进程
    psscan进程对象池扫描
    pstree以树型方式打印进程列表
    psxview查找带有隐藏进程的所有进程列表
    qemuinfo转储Qemu 信息
    raw2dmp将物理内存原生数据转换为windbg崩溃转储格式
    screenshot基于GDI Windows的虚拟屏幕截图保存
    servicediffWindows服务列表(ala Plugx)
    sessions_MM_SESSION_SPACE的详细信息列表(用户登录会话)
    shellbags打印Shellbags信息
    shimcache解析应用程序兼容性Shim缓存注册表项
    shutdowntime从内存中的注册表信息获取机器关机时间
    sockets打印已打开套接字列表
    sockscanTCP套接字对象池扫描
    ssdt显示SSDT条目
    strings物理到虚拟地址的偏移匹配(需要一些时间,带详细信息)
    svcscanWindows服务列表扫描
    symlinkscan符号链接对象池扫描
    thrdscan线程对象池扫描
    threads调查_ETHREAD 和_KTHREADs
    timeliner创建内存中的各种痕迹信息的时间线
    timers打印内核计时器及关联模块的DPC
    truecryptmaster恢复TrueCrypt 7.1a主密钥
    truecryptpassphrase查找并提取TrueCrypt密码
    truecryptsummaryTrueCrypt摘要信息
    unloadedmodules打印卸载的模块信息列表
    userassist打印注册表中UserAssist相关信息
    userhandles转储用户句柄表
    vaddump转储VAD数据为文件
    vadinfo转储VAD信息
    vadtree以树形方式显示VAD树信息
    vadwalk显示遍历VAD树
    vboxinfo转储Virtualbox信息(虚拟机)
    verinfo打印PE镜像中的版本信息
    vmwareinfo转储VMware VMSS/VMSN 信息
    volshell内存镜像中的shell
    windows打印桌面窗口(详细信息)
    wintreeZ顺序打印桌面窗口树
    wndscan池扫描窗口站
    yarascan以Yara签名扫描进程或内核内存
    功能命令行及参数
    查看进程列表Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 pslist
    查看进程列表(树形)Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 pstree
    查看进程列表(psx视图)Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 psxview
    查看网络通讯连接Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 netscan
    查看加载的动态链接库Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 dlllist
    查看SSDT表Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 ssdt
    查看UserAssist痕迹Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 userassist
    查看ShimCache痕迹Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 shimcache
    查看ShellBagsVol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 shellbags
    查看服务列表Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 svcscan
    查看Windows帐户hashVol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 hashdump
    查看最后关机时间Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 shutdowntime
    查看IE历史记录Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 iehistory
    提取注册表数据Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 dumpregistry
    解析MFT记录Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 mftparser
    导出MFT记录,恢复文件Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 mftparser –output-file=mftverbose.txt -D mftoutput
    获取TrueCrypt密钥信息Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 truecryptmaster
    获取TrueCrypt密码信息Vol.exe -f Win7_SP1_x86.vmem –profile=Win7SP1x86 truecryptpassphras

    Linux内存转储文件取证分析

    直接参考

    • 技术|使用开源工具进行 Linux 内存取证

    • Volatility学习笔记一:使用手册

    CTF常用命令总结

    内存取证(volatility) - 云+社区 - 腾讯云 (tencent.com)

    使用imageinfo插件来猜测dump文件的profile值

    volatility -f xxx imageinfo

    指定profile值,使用pslist去列举系统进程

    volatility -f xxx --profile=xxx pslist

    查看控制台输入的历史命令

    volatility cmdscan -f xxx --profile=xxx

    查看IE历史信息

    volatility iehistory -f xxx --profile=xxx

    查看截图

    volatility -f xxx --profile=xxx screenshot --dump-dir=./

    配合管道指令和搜索指令扫描特定类型的文件

    volatility -f xxx --profile=xxx filescan | grep 'flag|ctf'
    volatility -f xxx --profile=xxx filescan | grep "doc|docx|rtf|txt"
    volatility -f xxx --profile=xxx filescan | grep "jpg|jpeg|png|tif|gif|bmp"
    #查看桌面文件
    volatility -f Cookie.raw --profile=xxx filescan | grep "Desktop"

    导出某个进程的内存数据

    volatility -f xxx --profile=xxx memdump -p [PID] -D [输出目录]

    获取系统密码(2种方法)

    1. 使用 hashdump 将hash值提取打印出来

      volatility -f xxx --profile=xxx hashdump

      打印出的字符串含义满足如下关系(最后末尾的项是NT-HASH,是我们要破解的HASH值)

      用户名:RID:LM-HASH:NT-HASH

      把要破解的用户名所在行复制粘贴作为Single Hash,load到ophcrack然后crack

    2. 用mimikatz扩展插件直接获取明文密码

      python vol.py -f xxx --profile=xxx mimikatz

    查看缓存在内存的注册表

    PS:注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。

    volatility -f xxx --profile=xxx hivelist

    恢复被删除的文件,mftoutput.txt 里面包含内存里面的文件(文件路径,文件内容)

    volatility -f xxx --profile=xxx mftparser>mftoutput.txt

    导出注册表资源

    volatility -f xxx --profile=xxx dumpregistry --dump-dir=C:\Users\18267\Desktop\2

    提取filescan的文件

    volatility -f xxx --profile=xxx dumpfiles -Q 0x...... --dump-dir=./
    //-Q指定了文件物理位置的开始,另一个参数制定了保存的位置。
    命令功能
    cmdscan列出历史cmd命令
    filescan扫描文件,可配合grep使用
    pslist/psscan列出进程列表
    svcscan扫描windows服务列表
    memdump从内存dump进程的内存
    dumpfiles从内存dump文件

    4. Magnet AXIOM环境配置与使用

    国外的一款图形化取证工具,功能类似于取证大师,内置volatility

    参考:CTF必备取证神器 - 知乎 (zhihu.com)

    下载链接:https://www.aliyundrive.com/s/EpRbevKEUi5

    使用:打开Magnet AXIOM Process;点击新建案件;在证据来源标签页下选择源计算机加载或获取证据源,然后加载要分析的转储文件。切换到分析证据,选中要分析的源然后点击分析证据

    分析过程中CPU占用比较大,时间也比较久

    5. ophcrack配置与使用

    参考:ophcrack的简单用法

    Ophcrack是一款利用彩虹表来破解 Windows密码的工具。其次是两篇有关Ophcrack的技术文章:杜莉翻译的“安全高手的利器认识彩虹哈希表破解工具”

    1. 下载便携版免安装ophcrack download | SourceForge.net

    2. 下载彩虹表Ophcrack (sourceforge.io)(只能下XP free small、XP free small、Vista free)

    3. 建立一个tables文件夹,把下载的彩虹表解压到该文件夹下,在ophcrack中点击Table,选中你下载的彩虹表对应的table,然后点击install,弹出文件夹选择框后选择解压出的彩虹表文件夹,可以看到标识变成绿色。

    点开load

    • Single Hash主要用于对单个Hash的破解,

    • PWDUMP file是对获取的Pwdump文件进行破解,

    • Encrypted SAM是对加密的sam文件进行破解

    (四)磁盘取证

    文件系统是一种用于向用户提供底层数据访问的机制。它将设备中的空间划分为特定大小的块(或者称为簇),一般每块512字节。数据存储在这些块中,大小被修正为占用整数个块。由文件系统软件来负责将这些块组织为文件和目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。不过,文件系统并不一定只在特定存储设备上出现。它是数据的组织者和提供者,至于它的底层,可以是磁盘,也可以是其它动态生成数据的设备(比如网络设备)。——维基百科

    DOS / Microsoft Windows对几类文件系统(FAT12/FAT16 、FAT32/VFAT、FAT64/exFAT、NTFS)的支持情况如下

    WindowsFAT12/FAT16FAT32/VFATFAT64/exFATNTFS
    Windows 3.x或更早 (MS-DOS 6.22) (PC-DOS 7.0)可读/可写不支持不支持不支持
    Windows 95可读/可写不支持不支持不支持
    Windows 95(OSR2以后) Windows 98(含SE) ME可读/可写可读/可写不支持不支持
    Windows NT 4.0 及以前可读/可写不支持不支持可读/可写
    2000 Windows XP Windows Vista Server 2003 Server 2008 (R2) Windows 7 Windows 8 Server 2012 (R2) Windows 8.1Windows 10可读/可写可读/可写可读/可写可读/可写
    Windows CE可读/可写可读/可写可读/可写不支持

    1. NTFS磁盘文件系统取证

    磁盘文件系统是一种设计用来利用数据存储设备来保存计算机文件的文件系统,最常用的数据存储设备是磁盘驱动器,可以直接或者间接地连接到计算机上。例如:FAT、exFAT、NTFS、HFS、HFS+、ext2、ext3、ext4、ODS-5、btrfs、XFS、UFS、ZFS。——维基百科

    题目:【2021强网杯】EzTime

    NTFS 包含若干用于定义和组织文件系统的文件(内含对磁盘的管理数据)。

    区段编号元文件名作用
    0$MFT描述卷上的所有文件,包括文件名、时间戳、流名称和数据流所在的簇的编号列表、索引、安全标识符,以及文件属性(如“只读”、“压缩”、“加密”等)。
    1$MFTMirr(MFT镜像) | $MFT 的最开始的几个关键项的副本,通常是 4 项(4KB)
    2$LogFile(日志文件)包含文件系统更改的事务日志,以保护元数据的稳定性。
    3$Volume(卷文件) | 包含卷的相关信息,如卷对象标识符、卷标、文件系统版本,以及卷标志(加载、需要扫描、需要调整 LogFile大小、在NT4上加载、正在更新卷串行号、需要升级结构)。卷串行号储存在LogFile大小、在NT4上加载、正在更新卷串行号、需要升级结构)。卷串行号储存在Boot 文件中。
    4$AttrDef(属性定义表)使用的 NTFS 属性的表,包含名称、编号和描述。
    5$Root(根目录)根目录。
    6$Bitmap(位图文件)一个位图,用于指示卷上的指定簇正在被使用或空闲。
    7$Boot(引导文件) | 卷引导记录,该文件位于卷的第一个簇,其中包含引导代码(用于定位并启动 NTLDR/BOOTMGR)、一个 BIOS 参数区块(其中包含卷串行号),以及 MFT和MFT和MFTMirr 所在的簇编号。
    8$BadClus(坏簇文件)包含所有标记为“有坏扇区”的簇的一个文件。该文件用于为 chksdk(磁盘扫描)工具简化簇的管理,用于放置新发现的坏扇区,以及标识未被引用的簇。
    9$Secure(安全文件)访问控制列表(ACL)数据库,统一将 ACL 存储于该数据库中而非每个文件存储各自的 ACL 以减少总体代价。包含两个索引:SII——可能是安全ID索引,以及 SDH——安全描述符哈希,用于索引包含实际 ACL 列表的称为 SDS 的流的位置。
    10$UpCase(大写文件)一个 Unicode 大写字母表,用于确保在 Win32 和 DOS 命名空间下大小写不敏感。
    11$Extend(扩展元数据文件) | 一个文件系统目录,包含若干不定的可选扩展,如 Quota、Quota、ObjIdObjIdReparse、Reparse、UsnJrnlUsnJrnl等。
    12 ... 23保留。
    通常是 24$Extend\$Quota(配额管理文件)包含关于磁盘限额的信息。
    通常是 25$Extend\$ObjId(对象ID文件)包含用于分布链接跟踪的信息。
    通常是 26$Extend\$Reparse包含对卷上所有重解析点(如符号链接)的反引用。
    27 ...*file.ext*常规文件项的开始位置。

    (1)$MFT文件

    参考:NTFS文件系统文件记录分析 | 数据恢复迷 (dgxue.com)

    MFT以文件记录来实现对文件的管理,每个文件记录都对应着不同的文件,大小固定为1KB,也就是占用两个扇区,而不管簇的大小是多少。如果一个文件有很多属性或是分散成很多碎片,就很可能需要多个文件记录。这时,存放其文件记录位置的第一个记录就称作“基本文件记录”。

    文件记录在MFT中物理上是连续的,从0开始依次按顺序编号。

    前16个文件记录总是元文件的记录,并且这16个文件记录的顺序是固定的(按照上表中的顺序)


    $MFT=n×文件记录文件记录=文件记录头+属性列表$MFT=n×文件记录文件记录=文件记录头+属性列表


    $MFT可以看作是一个结构体数组,结构体元素(即文件记录)的结构组成如下

    struct 文件记录{
    文件记录头;
    属性1;
    属性2;
    属性3;
    ……
    }
    ——文件记录头

    文件记录头是固定长度的

    字节偏移字段长度(字节)字段名和含义
    0x004MFT标志,一定为字符串“FILE”
    0x042更新序列号(Update Sequence Number)的偏移
    0x062更新序列号的大小与数组,包括第一个字节
    0x088日志文件序列号($LogFile Sequence Number,LSN),每次记录被修改都将导致其被修改
    0x102序列号(Sequence Number),记录主文件表记录被重复使用的次数。
    0x122硬连接数(Hard Link Count),即有多少目录指向该文件。只出现在基本文件记录中
    0x142第一个属性的偏移地址
    0x162标志(Flag),00H表示文件被删除,01H表示文件正在使用,02H表示目录被删除,03H表示目录正在使用
    0x184文件记录的实际长度也即文件记录在磁盘上实际占用的字节空间。
    0x1C4给文件记录的分配长度,一般为“00 04 00 00”,也就是1KB的长度
    0x208基本文件记录中的文件索引号,基本文件记录在此的值总为0。如果不为0,则是一个主文件表的文件索引号,指向所属的基本文件记录中的文件记录号。在基本文件记录中包含有扩展文件记录的信息,存储在“属性列表ATTRIBUTE_LIST”属性中。
    0x282下一属性ID,当增加新的属性时,将该值分配给新属性,然后该值增加,如果MFT记录重新使用,则将它置0,第一个实例总是0
    0x2A2边界,Windows XP中为偏移0x30处
    0x2C4文件记录参考号(从0开始编号),Windows XP中使用,Windows 2000中无此参数
    0x302更新序列号,这两个字节同时会出现在该文件记录第一个扇区最后两个字节处及该文件记录第二个扇区最后两个字节处,
    0x324更新数组
    ——属性列表

    对于属性列表中的每个属性而言

    属性=属性头+属性体属性=属性头+属性体

    每个文件记录中都有多个属性,它们相对独立,有各自的类型和名称。属性头前4个字节区分属性的种类,主要有以下几种属性

    属性类型(Little-Endian)属性类型名属性描述
    10 00 00 00$STANDARD_INFORMATION 标准信息:包括一些基本文件属性,如只读、系统、存档;时间属性,如文件的创建时间和最后修改时间;有多少目录指向该文件(即其硬连接数(hard link count))
    20 00 00 00$ATTRIBUTE_LIST 属性列表:当一个文件需要多个文件记录时,用来描述文件的属性列表
    30 00 00 00$FILE_NAME 文件名:用Unicode字符表示的文件名,由于MS-DOS不能识别长文件名,所以NTFS系统会自动生成一个8.3文件名
    40 00 00 00$VOLUME_VERSION 在早期的NTFS v1.2中为卷版本
    40 00 00 00$OBJECT_ID 对象ID:一个具有64字节的标识符,其中最低的16字节对卷来说是唯一的(链接跟踪服务为外壳快捷方式,即OLE链接源文件赋予对象ID;NTFS提供的API是直接通过这些对象的ID而不是文件名来打开文件的)
    50 00 00 00$SECURITY_DESCRIPTOR 安全描述符:这是为向后兼容而保留的,主要用于保护文件以防止没有授权的访问,但Windows 2000/XP中已将安全描述符存放在$Secure元数据中,以便于共享(早期的NTFS将其与文件目录一起存放,不便于共享)
    60 00 00 00$VOLUME_NAME 卷名(卷标识):该属性仅存在于$Volume元文件中
    70 00 00 00$VOLUME_INFORMATION 卷信息:该属性仅存在于$Volume元文件中
    80 00 00 00$DATA 文件数据:该属性为文件的数据内容
    90 00 00 00$INDEX_ROOT 索引根
    A0 00 00 00$INDEX_ALLOCATION 索引分配
    B0 00 00 00$BITMAP 位图
    C0 00 00 00$SYMBOLIC_LINK 在早期的NTFS v1.2中为符号链接
    C0 00 00 00$REPARSE_POINT 重解析点
    D0 00 00 00$EA_INFORMATION 扩充属性信息
    E0 00 00 00$EA 扩充属性
    F0 00 00 00$PROPERTY_SET 早期的NTFS v1.2中才有
    00 10 00 00$LOGGED_UTILITY_STREAM EFS加密属性:该属性主要用于存储实现EFS加密的有关加密信息,如合法用户列表、解码密钥等

    (2)工具

    • NTFS Log Tracker(导出为可视化的csv或者db文件)

    • X-Ways Forensics(强大的综合性计算机取证工具)

    2. 磁盘加密

    BitLocker加密解密

    题目:

    • 【2021强网杯】Cipherman

    在CTF中需要找BitLocker 恢复密钥来进行BitLocker解密,进而提取出磁盘里面的内容

    Bitlocker可以对存储设备做硬件加密,防止设备丢失时,导致文件内容被别人破解查看

    Bitlocker的解锁方式主要有三种:TPM、PIN、恢复密钥

    • TPM是在主板上的硬件芯片,可以存储各种证书密钥,不是所有电脑都有。

    • PIN就是自己设置的一个解锁密码。

    • 恢复密钥是一个最短48位的数字,可以被制作成密钥文件存储于U盘作为解密工具。

    恢复密钥的获取方式(来自在 Windows 中查找 BitLocker 恢复密钥 (microsoft.com)):

    1. 在 Microsoft 帐户中: 在另一台设备上登录到 Microsoft 帐户以查找恢复密钥。如果你有一台支持自动设备加密的现代设备,则恢复密钥最有可能在你的 Microsoft 帐户中。有关详细信息,请参阅 Windows 中的设备加密。

      或者直接登录此处就可以获取

    2. 在打印输出上: 在激活 BitLocker 时,可能打印了恢复密钥。在存放与你的计算机相关的重要文件的位置查找。

    3. 在 U 盘上: 将 U 盘插入锁定的电脑,然后按照说明进行操作。如果你已在 U 盘上将密钥另存为文本文件,则使用另一台计算机阅读此文本文件。

    4. 在 Azure Active Directory 帐户中: 如果设备曾使用工作或学校电子邮件帐户登录到组织,则恢复密钥可能存储在与Azure AD关联的组织帐户。你或许可以直接访问它,也可能需要联系系统管理员来访问恢复密钥。

    5. 由系统管理员持有: 如果设备已连接到域, (工作或学校设备) ,请向系统管理员请求恢复密钥。

    这种类型的题目通常结合内存取证,从内存中dump出恢复密钥,解密磁盘,挂载并取出加密磁盘中的flag

    ——如何解密磁盘文件:
    • 用工具把磁盘挂载到Windows系统内之后会提示输入PIN码和恢复密钥

    • 挂载到Linux系统可以参考How To Mount BitLocker-Encrypted Windows Partitions On Linux - Linux Uprising Blog

    3. 磁盘挂载

    参考:【电子取证:FTK Imager 篇】DD、E01系统镜像动态仿真__ftk挂载镜像

    【方法一】FTK Imager挂载

    FTK Imager工具 “可写”模式下挂载系统镜像为本地驱动器

    【方法二】Linux的mount指令

    Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是”挂载点”,解除次关联关系的过程称之为“卸载”。不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录

    mount  [−f  nrsvw]  [−t  系统类型]  [−o  options]  [其它选项]  device  dirmount  [−f  nrsvw]  [−t  系统类型]  [−o  options]  [其它选项]  device  dir

    1. device:指明要挂载的设备;

    • 设备文件:例如/dev/sda5

    • 卷标-L ‘LABEL’, 例如 -L 'MYDATA'

    • UUID-U ‘UUID’,例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'

    • 伪文件系统名称:proc, sysfs, devtmpfs, configfs

  • dir:挂载点,事先存在;建议使用空目录,进程正在使用中的设备无法被卸载;

  • 系统类型:指定欲挂载的文件系统类型。Linux 常见的支持类型有 EXT2、EXT3、EXT4、iso9660(光盘格式)、vfat、reiserfs 等。如果不指定具体类型,挂载时 Linux 会自动检测。

  • options

    options描述
    rw/ro是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。
    async/sync此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。
    dev/nodev是否允许从该文件系统的 block 文件中提取数据,为了保证数据安装,默认是 nodev。
    auto/noauto是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。
    suid/nosuidsuid/nosuid设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。
    exec/noexec设定在文件系统中是否允许执行可执行文件,默认是允许。
    user/nouser设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以。
    defaults定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项。
    remount重新挂载已挂载的文件系统,一般用于指定修改特殊权限。
  • 其它选项

    选项描述
    -rreadonly,只读挂载;
    -wread and write, 读写挂载;
    -n不更新/etc/mtab;
    -a自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)
    -B, --bind绑定目录到另一个目录上;
  • 【方法三】OSFMount / DiskGenius

    • OSFMount

    • DiskGenius

    (四)ISO镜像光盘取证

    1. ISO 9960文件结构

    先理清一下ISO文件的结构(n和m是数目)

    ISO=(1)\textcolorredSystemArea+(n)\textcolorredVolumeDescriptors+\textcolorredPathTable+(m)\textcolorredDirectoriesISO=(1)\textcolorredSystemArea+(n)\textcolorredVolumeDescriptors+\textcolorredPathTable+(m)\textcolorredDirectories


    参考:

    • ISO 9660 - OSDev Wiki

    • ISO 9660 - 维基百科,自由的百科全书 (wikipedia.org)

    ISO文件有很多数据类型,关于ISO文件的数据类型表可以参照附录部分

    (1)系统区域(System Area)

    前32 KB(0∼7FFFH0∼7FFFH)是ISO 9660 文件的系统区域,可用于任意数据。通常用于存储启动信息,以防 ISO 9660 文件系统不是存储在光学介质上,而是存储在类似硬盘的设备上,例如在 U 盘上。因此需要在该位置查找主启动记录(MBR,用于 BIOS)、GUID 分区表(GPT,用于 EFI)或 Apple 分区图 (APM)。

    (2)卷描述符(Volume Descriptors)

    先总结一下特点:

    • 每个卷描述符都是2KB(800H个字节)大小

    • 卷描述符以一个卷描述符类型码起始,类型码不同,作用也不同。

    • 符合 ISO 9660 标准的光盘必须至少包含一个描述文件系统的主卷描述符和一个卷描述符集终止符,该终止符是标记描述符集末尾的卷描述符。

    准备挂载 CD 时,您的第一个操作将是读取卷描述符(具体来说,您将查找主卷描述符)。

    卷描述符有很多种,基本格式如下:

    偏移长度(字节)字段名称数据类型描述
    01类型int8卷描述符类型代码(见下文)。
    15标识符strA始终为"CD001"。
    61版本int8卷描述符版本(0x01)。
    72041数据-取决于卷描述符类型。

    可以看出每个卷描述符因此是一个扇区(2 KB)长。

    卷描述符类型码不同数值所代表的含义如下

    数值描述
    0引导记录
    1主卷描述符
    2补充卷描述符
    3卷分区描述符
    4-254(保留)
    255卷描述符集终结符

    下面一 一介绍几种几种常见的卷描述符。

    引导记录卷描述符(The Boot Record)

    第一种类型的卷描述符是"引导记录"。

    描述符格式如下:

    偏移长度(字节)字段名称数据类型描述
    01类型int80表示启动记录。
    15标识符strA始终为"CD001"。
    61版本int8卷描述符版本(0x01)。
    732引导系统标识符strA可以作用于系统并从引导记录引导系统的系统的 ID。
    3932启动标识符strA标识在此描述符的其余部分中定义的引导系统。
    711977引导系统使用-自定义 - 由引导系统使用。

    最常见的引导系统使用规范是El Torito。它将字节 71 到 74 记录为 El Torito Boot Catalog 的块地址的小端 32 位数字。此目录列出了可用的启动映像,这些映像用作启动系统的起点。

    主卷描述符(The Primary Volume Descriptor)

    这是一个冗长的描述符,但它包含一些非常有用的信息。

    偏移长度(字节)字段名称数据类型描述
    01Type Code(类型代码)int8始终为主卷描述符0x01。
    15Standard Identifier(标准标识符)strA始终为"CD001"。
    61Version(版本)int8总是0x01。
    71Unused(闲置字段)-总是0x00。
    832System Identifier(系统标识符)strA可以作用于扇区0x00∼0x0F0x00∼0x0F的系统的名称。
    4032Volume Identifier(卷标识符)strD标识此卷。
    728Unused Field(未使用的字段)-都是零。
    808Volume Space Size(卷空间大小)int32_LSB-MSB记录卷的逻辑块数。
    8832Unused Field(未使用的字段)-都是零。
    1204Volume Set Size(卷集大小)int16_LSB-MSB此逻辑卷中集的大小(磁盘数)。
    1244Volume Sequence Number(卷序列号)int16_LSB-MSB卷集中此磁盘的编号。
    1284Logical Block Sizeint16_LSB-MSB逻辑块的大小(以字节为单位)。注意:这意味着 CD 上的逻辑块可能不是 2 KB!
    1328Path Table Sizeint32_LSB-MSB路径表的大小(以字节为单位)。
    1404Location of Type-L Path Tableint32_LSB路径表的 LBA 位置。指向的路径表仅包含小端值。
    1444Location of the Optional Type-L Path Tableint32_LSB可选路径表的 LBA 位置。指向的路径表仅包含小端值。零表示不存在可选路径表。
    1484Location of Type-M Path Tableint32_MSB路径表的 LBA 位置。指向的路径表仅包含大端值。
    1524Location of Optional Type-M Path Tableint32_MSB可选路径表的 LBA 位置。指向的路径表仅包含大端值。零表示不存在可选路径表。
    15634Directory entry for the root directory(根目录的目录条目)-请注意,这不是 LBA 地址,而是实际的目录记录,其中包含单字节目录标识符(0x00),因此固定的 34 字节大小。
    190128Volume Set Identifier(卷集标识符)strD此卷所属的卷集的标识符。
    318128Publisher Identifier(发布者标识符)strA卷发布者。对于扩展的发布者信息,第一个字节应0x5F,后跟根目录中文件的文件名。如果未指定,则应0x20所有字节。
    446128Data Preparer Identifier(数据准备器标识符)strA为此卷准备数据的人员的标识符。对于扩展的准备信息,第一个字节应0x5F,后跟根目录中文件的文件名。如果未指定,则应0x20所有字节。
    574128Application Identifier(应用程序标识符)strA标识数据如何记录在此卷上。对于扩展信息,第一个字节应0x5F,后跟根目录中文件的文件名。如果未指定,则应0x20所有字节。
    70237Copyright File Identifier(版权文件标识符)strD根目录中包含此卷集版权信息的文件的文件名。如果未指定,则应0x20所有字节。
    73937Abstract File Identifier(抽象文件标识符)strD根目录中包含此卷集抽象信息的文件的文件名。如果未指定,则应0x20所有字节。
    77637Bibliographic File Identifier(书目文件标识符)strD根目录中包含此卷集的书目信息的文件的文件名。如果未指定,则应0x20所有字节。
    81317Volume Creation Date and Time(卷创建日期和时间)dec-datetime创建卷的日期和时间。
    83017Volume Modification Date and Time(卷修改日期和时间)dec-datetime修改卷的日期和时间。
    84717Volume Expiration Date and Time(卷到期日期和时间)dec-datetime在此日期和时间之后,此卷被视为已过时。如果未指定,则该卷永远不会被视为已过时。
    86417Volume Effective Date and Time(批量生效日期和时间)dec-datetime在该字段指定的日期之后可以使用该卷。如果未指定,则可以立即使用该卷。
    8811File Structure Version(文件结构版本)int8目录记录和路径表版本(始终0x01)。
    8821Unused(闲置字段)-总是0x00。
    883512Application Used-ISO 9660 未定义的内容。
    1395653Reserved(保留字段)-由 ISO 保留。
    卷描述符集终结符(Volume Descriptor Set Terminator)

    卷描述符集终结符当前未定义其卷描述符的7∼20477∼2047字节内容 。这意味着其只有类型代码 (255)、标准标识符 ('CD001') 和描述符版本 号(0x01)。

    偏移长度(字节)字段名称数据类型描述
    01类型int8255 表示卷描述符集终止符。
    15标识符strA始终为"CD001"。
    61版本int8卷描述符版本(0x01)。

    (3)路径表(The Path Table)

    路径表汇总了相关目录层次结构的目录结构。对于映像中的每个目录,路径表提供目录标识符、记录目录的范围的位置、与目录关联的任何扩展属性的长度以及其父目录路径表条目的索引。

    路径表的位置可以在主卷描述符中找到。有两种表类型 - L 路径表(与 x86 相关)和 M 路径表。这两个表之间的唯一区别是 L 表中的多字节值是 LSB 优先的,而 M 表中的值是 MSB 优先的。

    路径表条目的结构如下:

    偏移大小描述
    01目录标识符的长度
    11扩展属性记录长度
    24范围位置 (LBA)。这是不同的格式,具体取决于这是L表还是M表(请参阅上面的说明)。
    62父目录的目录编号(路径表中的索引)。这是将表限制为 65536 条记录的字段。
    8(可变)以 d 类字符表示的目录标识符(名称)。
    (可变)1填充字段 - 如果"目录标识符的长度"字段为奇数,则包含零,否则不存在。这意味着每个表条目将始终以偶数字节号开头。

    路径表按目录级别的升序排列,并在每个目录级别中按字母顺序排序。

    (4)目录表(Directories)

    在从 ISO 9660 CD 读取时的某个时刻,您将需要一个目录记录来查找文件,即使您最初通常使用路径表来查找目录也是如此。与路径表不同,每个目录表只有一个版本,多字节码采用双字节序格式。每个目录都将以 2 个特殊条目开头:一个空字符串,描述 "." 条目,字符串 "\1" 描述".."条目。目录记录的布局如下:

    偏移大小描述
    01目录记录的长度。
    11扩展属性记录长度。
    28双端格式的范围位置 (LBA)。
    108双端格式的数据长度(范围大小)。
    187日期和时间(见下文)。
    251文件标识(见下文)。
    261以交错模式记录的文件的文件大小,否则为零。
    271以交错模式记录的文件的交错间隙大小,否则为零。
    284卷序列号 - 记录此扩展数据的卷,采用 16 位双端格式。
    321文件标识符(文件名)的长度。这将以";"字符结尾,后跟 ASCII 编码的小数("1")中的文件 ID 号。
    33(变量)文件标识符。
    (变量)1填充字段 - 如果文件标识符的长度为偶数,则为零,否则,此字段不存在。这意味着目录条目将始终从偶数字节号开始。
    (变量)(变量)系统使用 - 最大记录大小为 255 的剩余字节可用于 ISO 9660 的扩展。最常见的是系统使用共享协议(SUSP)及其应用程序Rock Ridge交换协议(RRIP)。

    即使目录跨越多个扇区,也不允许目录条目跨越扇区边界(与路径表不同)。如果没有足够的空间来记录扇区末尾的整个目录条目,则该扇区将进行零填充,并使用下一个连续扇区。

    上述一些字段需要解释。

    日期/时间字段(Date/Time)

    目录表的日期/时间格式与主卷描述符中使用的格式不同。目录表的日期/时间格式为:

    偏移大小(字节)描述
    01自1900年以来的年数
    11
    21
    31时(0∼230∼23
    41分( 0∼590∼59 )
    51秒( 0∼590∼59 )
    61从 GMT 偏移 15 分钟,从 -48(西)到 +52(东)。

    这与包含 ASCII 编码十进制值的 PVD 形成鲜明对比,但这种格式可能为了节省大量条目的磁盘空间。

    文件标识字段(File Flags)

    另一个需要解释的字段是"文件标志"字段。这由一个位标志表示,如下所示:


    描述
    0如果设置,则不需要让用户知道此文件的存在,即"隐藏"标志。
    1如果已设置,则此记录描述一个目录(换句话说,它是一个子目录范围)。
    2如果设置,则此文件是"关联文件"。
    3如果设置,扩展属性记录将包含有关此文件格式的信息。
    4如果已设置,则在扩展属性记录中设置所有者和组权限。
    5 & 6(保留)
    7如果设置,则这不是此文件的最终目录记录(对于跨越多个扩展数据块的文件,例如长度超过 4GB 的文件。

    文章来源于Em0s_Erit总结

    CTF部落

    高质量CTF社区,致力于国内网CTF比赛研究,每日分享行业最新资讯,交流解答各类技术问题。星球中可以获取各类CTF比赛信息、解题工具、技巧、书籍、各种资源,发布政府机关、企业、厂商网络安全招聘信息,及内类内推资格。所有发布的内容均精心挑选、成体系化,让你远离无用信息及零碎的知识点。


    加入星球后获得:

    • 各类CTF比赛信息、解题工具、技巧、书籍、靶场资源;

    • CTF学习思维导图,0基础开启CTF之路;

    • 遇到任何技术题都快速提问与讨论交流的思路;

    • 组织队伍参与各类CTF比赛;

    • 面试大厂心得及内推资格;

    加入星球后,可以跟我 1 对 1 免费提问交流、帮你确定安全学习方向和路线、和大家一起交流学习,从而激励你持续学习!

    随着加入的星友越多,压力就越大,所以保证质量的同时,会适当提高门槛。现在限时限量扫码抢购500张¥100优惠券体验三天,如果不满意三天可以免费全额退款,尽早体验、以优惠价加入肯定是不亏的。








    END





    扫码关注


    网络安全研究所

    更多精彩等着你


    继续滑动看下一个

    CTF之misc杂项解题技巧总结(四)——SWF游戏和取证分析

    向上滑动看下一个

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存