基于NTLDR的BOOTKIT原理及实现解析
U盘启动技术解析与制作CH
U盘启动技术解析与制作随着计算机科技飞速发展,摩尔定律的一次次应验。
U盘取代了早期的软盘、光盘,成为人们身边必不可少的工具。
U盘的便携性,存储性,兼容性都远远超过早期的存储设备。
那怎么样让你手里的U盘变成更强大呢?这次就来说说U 盘启动技术的“革命“。
从早期的纯DOS启动到现今PE系统、linux系统启动。
计算机引导模式没有太大的变化,引导启动大概分成两种:1、主引导记录(MBR)-分区引导扇区(PBR)-引导文件(NTLDR/GRLDR/SYSLINUX/BOOTMGR..)-系统启动。
2、主引导记录(MBR)-引导文件(GRLDR)-系统启动。
NT 5.X、NT6.X系统启动基于第一种启动方式,Fbinst是基于第二种启动。
Fbinst启动兼容性高,具有一个防毒的UD分区,USB引导模式最强。
本次解析的U启技术就是针对Fbinst。
Fbinst是某论坛作者Bean制作,FbinstTool是Fbinst的GUI程序。
目前大多数U盘启动工具都是基于FbinstTool制作(大白菜、老毛桃、U深度)。
但是这类集成软件都带有插件,安全性受到影响,自己动手丰衣足食,让我们一起DIY专属U盘。
使用方法1、目前最新的FbinstTool版本是1.607版(图1),提前备份好U盘数据,因为制作U盘启动需格式化全盘。
2、启动设置中选择格式化,跳出菜单中选择强行格式、UD扩展分区大小(图2)。
UD扩展分区为隐藏分区,根据所需文件大小而设定。
(建议500M以上便于以后扩展)。
(图1)(图2)3、格式化完毕设置Fbinst菜单(用于引导UD分区GRLDR文件)。
default 0timeout 3menu F1 grldr "grldr" (引导起初菜单按F1进去UD菜单)把以上命令复制在Fbinst菜单中右键保存菜单。
4、点击工具-更新grldr-(ud)grldr安装grldr。
点击Grldr菜单。
管理启动项之Windows 7中的BCDEDIT命令
Windows 7中的BCDEDIT命令在之前基于NT的Windows 系统中,Windows 使用Ntldr 作为Boot Loader 来启动系统,所谓boot loader,在指在操作系统内核运行之前执行的一段小程序,系统通过它来初始化硬件设备、建立内存空间的映射图等,将系统的软硬件环境设置成一个合适的状态,为最终调用操作系统内核准备好正确的环境。
在启动过程中,Ntldr 使用Boot.ini 文件来确定在启动/引导过程中要显示哪些操作系统选项,我们对启动选项的设置可以通过修改boot.ini 文件中相应内容实现。
在Vista 和Windows7中,微软引入了一种全新的boot loader 架构,Windows Boot Manager (Bootmgr.exe) 。
与Ntldr 严重地依赖于硬件不同的是,Vista 和Windows7中的新架构可以实现完整的硬件独立性,且能够与多种操作系统无缝结合,让Windows Vista 的启动/ 引导过程更加快速与安全。
同时,将之前Windows 系统中由Boot.ini 管理的内容移交给新的Boot Configuration Data (BCD : 启动设置数据) ,当然,也提供了新的启动选项编辑工具,BCDEdit (BCDEdit.exe) ,来管理启动设置。
BCDEdit : Vista 和 Windows 7 启动设置编辑工具在传统的基于BIOS 的计算机中,如果只安装Vista和Windows 7 ,除了极早期的Vista和Windows 7测试版本外,您将会发现Boot.ini 文件已经彻底从系统中消失;如果系统中安装了Vista和Windows 7和之前的Windows 系统如Windows XP,虽然仍可找到Boot.ini文件,不过,这个文件只作用于那些系统,而不会对Vista和Windows 7的启动有任何影响。
在基于EFI (Extensible Firmware Interface :可扩展固件接口,以后采用这种接口的PC会越来越多) 的计算机中,Boot.ini文件则更不复存在,在基于EFI的系统中,启动选项被贮存在主板的存储器中。
引导扇区修复工具bootsect
引导扇区修复工具bootsect引导扇区修复工具bootsect介绍bootsect.exe(boot sector)是Windows vista/7中光盘中自带的一个程序,字面解释是引导扇区修复工具(boot sector restoration tool),是位于安装光盘boot目录下,体积很小,不到100kb,但却很实用。
bootsect {/help|/nt60|/nt52} {SYS|ALL|:} [/force] [/mbr]启动扇区修复工具bootsect.exe为磁盘分区升级主引导编码,以转换bootmgr与NTLDR。
用该工具可以修复在你电脑上的启动扇区。
/help 显示使用说明。
/nt52涂写与NTLDR一致的主引导编码到(SYS,ALL,)分区。
装在(SYS,ALL,)分区的操作系统必须比vista老。
/nt60涂写与BOOTMGR一致的主引导编码到(SYS,ALL,)分区。
装在(SYS,ALL,)分区的操作系统必须是vista,2008,或以上版本。
SYS升级用来启动windows的系统分区的主引导编码ALL升级所有分区上主引导编码。
没必要升级所有卷的启动编码。
而且这个选项只针对那些可当作系统启动卷的卷,不包括任何与基本磁盘没连接的动态卷。
这个限制是明显的,因为引导编码必须位于磁盘分区的开始。
升级与盘符关联的分区的主引导编码。
在以下两种情况下引导编码将不被升级:1)没有与卷关联,2)与卷关联但没与基本磁盘连接。
/force在主引导编码升级时强制卸载卷。
使用选项时可能收到警告。
如果Bootsect.exe不能获得唯一使用权限,文件系统将在下次重启前重写启动编码。
Bootsect.exe总是在各项升级前尝试锁定和卸载卷。
当/force被指定,那么锁定失败后将尝试强制卸载。
锁定可能失败,例如,在目标卷上的文件已经被其他程序打开时。
如果强制卸载成功,尽管开始的锁定失败,也将允许卷的唯一使用权限和可靠的引导编码升级。
针对插入攻击型Bootkit的分析及检测
针对插入攻击型Bootkit的分析及检测随着计算机技术的不断发展,黑客们也在不断地探索新的攻击手段,其中插入攻击型Bootkit是比较常见的一种。
这种攻击手段能够利用计算机开机时的自启动程序注入恶意代码,从而在操作系统还未启动之前便已经植入攻击者的后门程序,对系统造成极高的安全威胁。
本文将对插入攻击型Bootkit进行分析,并提出一些检测方式,以保护计算机系统的安全。
1. 插入攻击型Bootkit的原理插入攻击型Bootkit主要是利用计算机系统的启动过程中存在的弱点,将恶意代码注入到自启动程序中,从而在系统启动之前,就已经植入攻击者的后门程序。
其主要攻击方式有以下几种:(1)替换MBR:攻击者能够在MBR(主引导记录)中加入恶意代码,从而获得对系统的控制权,甚至能够在系统启动前即远程操作系统;(2)修改Windows的启动文件:攻击者能够修改系统启动文件,如boot.ini、bcd.exe等,注入恶意代码,使得攻击者可以通过后门程序控制系统;(3)修改硬件BIOS:攻击者通过修改BIOS,可以达到持久化入侵的目的,从而在每次系统启动时都能植入后门程序。
2. 插入攻击型Bootkit的危害插入攻击型Bootkit能够直接植入到系统内核中,从而绕开系统安全策略,完全掌控系统的控制权,导致的安全威胁非常严重。
具体包括以下方面:(1)窃取用户信息:攻击者可以利用后门程序窃取用户的敏感信息,如密码、账号等;(2)危害系统稳定性:Bootkit能够在系统内核中运行,可能会有损系统的稳定性,导致系统操作异常或者系统崩溃;(3)破坏系统安全:Bootkit可以完全破坏系统的安全策略,实现完全的控制权;(4)昂贵的维护成本:Bootkit可能会阻止用户调整系统配置,使得企业付出巨大的维护成本。
3. 插入攻击型Bootkit的检测和解决方案插入攻击型Bootkit的检测和解决方案较为复杂。
在企业内部,可以利用以下方式:(1)使用反病毒软件:常规的反病毒软件无法完全检测和清除Bootkit,所以需要使用专门的Bootkit检测工具,如TDSS Killer、GMER等;(2)安装第三方BIOS:第三方BIOS具有一定的安全性保障,可以屏蔽插入攻击型Bootkit;(3)防火墙+杀毒软件+加密工具:最好的方法是在企业内部完善防火墙系统,并且使用高级杀毒软件进行扫描、检测和清除;而加密工具可以有效保障敏感信息和文件的安全。
从rootkit到bootkit
从rootkit到bootkit可以说,如今最复杂,最致命类型的恶意代码就是"Rootkit" 。
顾名思义,这种恶意可以获得"root"权限,在unix系统中最高级别的权限,并部署恶意程序的很小的“包”,这些“包”往往是恶意的,并可执行的软件包。
这些恶意代码可以提供连续下载并进入了用户机器。
今天的Rootkit技术利用手中的特权,进入操作系统的内核。
这些"内核模式"Rootkit程序同其他可信赖的系统进程运行在同一较低水平级上,从而获取系统控制,并提供有效的方法来保持隐蔽。
Rootkit高效的获取系统准入使得安全领域的检测技术受到极大的挑战。
为防止内核模式的恶意软件以及数字权限管理(DRM)的侵犯,微软在其Vista操作系统中增加了安全策略,在其设备驱动中要求数字签名。
这一安全机制,一直被外界批评,因为其同时防止合法的第三方应用软件开发商驱动程序。
微软认为,虽然造成部分周边设备的不相容,但vista的驱动安全策略是对创造带有引导扇区病毒后门的挑战。
Bootkit前段时间恶意代码借助移动存储设备在互联网上大规模的传播。
恶意软件通常隐藏在磁盘的引导扇区,它就像电子寄生虫,当用户开机时感染用户计算机。
恶意代码可以影响硬盘驱动器的主引记录,每一个分区的引导扇区,或是硬盘分区表(DPT)。
如今当我们讨论新的Rootkit技术可以攻破vista设备驱动签名请求时,磁盘引导病毒也已经关注于此技术。
" Bootkit "主要利用其内核准入和开机过程的隐身技术,当在功能上并无异于Rootkit。
他们的不同主要表现在获取准入的方式上。
传统的rootkit利用系统启动时提升权限。
而Bootkit是被安置在外设的主引导扇区和驻留在整个系统的启动过程。
这个概念是在2005年被第一次提出的,当时eEye Digital安全公司的研究人员正研究如何在系统启动时利用BIOS。
universalbiosbackuptoolkit 备份原理 -回复
universalbiosbackuptoolkit 备份原理-回复universalbiosbackuptoolkit(以下简称UBTK)是一款用于备份电脑BIOS 的工具包。
本文将对UBTK的备份原理进行详细解析,并分步介绍其操作流程。
一、UBTK备份原理概述UBTK利用计算机中的Flash EEPROM芯片特性,通过读取和保存BIOS 数据,以实现备份的功能。
Flash EEPROM是一种非易失性存储器,它可以在断电的情况下保存数据。
BIOS(Basic Input Output System)则是计算机开机自检时首先运行的程序,负责初始化系统硬件和软件的基本设置,保证计算机能够正常启动。
二、UBTK备份流程详解1. 准备工作a. 下载安装UBTK工具包。
UBTK是一款免费、开源并且跨平台的工具,用户可以从官方网站或者其他可靠来源获取。
b. 准备一个USB闪存驱动器,用于保存备份的BIOS数据。
2. 启动计算机使用USB闪存驱动器重新启动计算机,在BIOS启动过程中按下相应的按键(通常是Del、F2、F10等键)进入BIOS设置界面。
每台计算机的按键可能不同,可以在计算机开机时仔细观察提示信息。
3. BIOS设置界面进入BIOS设置界面后,使用方向键和回车键来导航和选择选项。
找到“Save BIOS settings”或类似选项,保存当前的BIOS设置。
这是一个重要的步骤,因为备份的BIOS数据将包含这些设置。
4. 备份BIOS数据UBTK工具包在启动时会提供一系列选项,包括备份BIOS。
在UBTK菜单中选择“Backup BIOS”或相应选项,然后按照屏幕提示操作。
UBTK将读取计算机中的Flash EEPROM芯片,并将其保存到USB闪存驱动器中。
5. 完成备份备份过程可能需要一段时间,取决于计算机硬件的速度和备份的数据大小。
备份完成后,UBTK将显示成功的消息。
用户可以检查USB闪存驱动器上的文件来确认备份结果。
基于MBR的BOOTKIT分析及安全防护措施
基于MBR的BOOTKIT分析及安全防护措施作者:wowocock(360系统急救箱工程师)传统木马病毒普遍是基于文件形式存在于机器上,尽管它们会通过各种加壳免杀技术逃避杀软检测,但随着云安全和主动防御技术的发展,恶意程序想驻留系统已经变得越来越难。
在这种情况下,基于MBR的BOOTKIT在近年来开始兴起。
基于MBR的BOOTKIT特点是无文件、无进程、无模块,可以只存在于运行的内存和位于操作系统之外的磁盘扇区空间里,即使重装系统、甚至格式化硬盘也无法清理干净。
什么是MBR呢?MBR是Master Boot Record的简写,又称为主引导扇区,位于硬盘的第一个扇区。
开机BIOS自检后,所被加载的第一个扇区。
系统启动过程主要由以下几步组成(以硬盘启动为例):1. 开机:-)2. BIOS加电自检( Power On Self Test – POST ) ,内存地址为0ffff:0000;3. 将硬盘第一个扇区(0头0道1扇区, 也就是MBR) 读入内存地址0000:7c00 处;4. 检查(WORD) 0000:7dfe 是否等于0xaa55, 若不等于则转去尝试其他启动介质, 如果没有其他启动介质则显示”No ROM BASIC” 然后死机;5. 跳转到0000:7c00 处执行MBR 中的程序;6. MBR 首先将自己复制到0000:0600 处, 然后继续执行;7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动分区或有不止一个活动分区,则转停止;8. 将活动分区的第一个扇区读入内存地址0000:7c00 处;9. 检查(WORD) 0000:7dfe 是否等于0xaa55, 若不等于则显示”Missing Operating System” 然后停止, 或尝试软盘或其他介质启动;10. 跳转到0000:7c00 处继续执行特定系统的启动程序;11. 启动系统。
以上步骤中,2、3、4、5是由BIOS 的引导程序完成;6、7、8、9、10由MBR中的引导程序完成。
WinCE开发中BootLoader点点滴滴-电脑资料
WinCE开发中BootLoader点点滴滴-电脑资料我很庆幸在公司的产品开发过程中并没有受到Boot Loader带来的阻力,因为我们采用MSDOS+Loadcepc来启动CE操作系统,。
显然这样的幸运不是永远的,所以对Boot Loader应该有足够的研究和了解,做到未雨绸缪。
Boot Loader是定制Windows CE操作系统过程中一个重要的开发环节。
Boot Loader的作用正如名字中的两个单词:Boot,既引导系统,如果基于CE的产品采用BIOS实现硬件初始化和配置,那么Boot Loader只需引导软件系统。
如果没有采用BIOS,那么Boot Loader的作用还包括实现BIOS的基本功能;Loader,既加载操作系统,在整个系统正常启动后Boot Loader通过不同的方式加载CE的内核文件nk.bin。
当Boot Loader把nk.bin解压到RAM后就把CPU 控制权交给CE内核。
x86平台的Boot Loader种类最多,下面就对x86平台的Boot Loader做一说明:x86 ROM Boot Loader又叫Rom Boot,记得以前写过的文章中提到了Rom Boot。
Rom Boot 被设计存放在Flash/EEPROM中,也就是原来BIOS的位置,这样当上电后CPU到固定地址执行代码,也就是执行了Rom Boot包含的代码,它对整个硬件系统进行初始化和检测,并且支持通过网卡从远程机器上下载nk.bin或者从本地IDE/ATA 硬盘的活动分区中寻找nk.bin文件加载。
Rom Boot的优点就是引导并且加载速度快,而且它自身完成了所有的操作,这样就不用BIOS、MSDOS,更不用Loadcepc了。
缺点就是需要CE开发者读懂它的源码并修改。
CE提供了Rom Boot的所有源码,读者可以查找标题为"x86 Source Organization"的帮助文档,在这个文档中列举了所有相关的目录及内容,另外还列举了四种网卡的驱动程序源码所在目录。
U-boot引导加载程序(Bootloader)源代码分析与移植
U-boot引导加载程序(Bootloader)源代码分析与移植目录第一章绪论 (3)1.1 U-boot 简介 (3)1.2 U-boot 源码树 (4)1.3 U-boot 支持的主要功能 (5)第二章U-boot源代码详细分析 (6)2.1 U-boot的启动流程 (6)2.1.1 第一阶段(Stage 1) (6)2.1.2 第二阶段(Stage 2) (9)2.2 U-boot 的初始化 (13)2.2.1 私有数据global_data (13)2.2.2 初始化序列init_sequence (14)2.2.3 NAND Flash 初始化 (20)2.2.4 DataFlash 初始化 (21)2.2.5 环境变量重定位 (23)2.2.6 初始化设备 (25)2.2.7 控制台初始化 (27)2.2.8 单板后期初始化 (30)2.3命令处理 (33)2.3.1 命令数据结构 (33)2.3.2 命令查找 (34)2.3.3 主循环 (35)2.4 Linux 的引导 (42)2.4.1 映象格式 (42)2.4.2 linux 引导 (42)2.4.3 linux 的内核参数传递 (52)第三章U-boot 在S3C2410 上的移植分析 (58)3. 1 对ARM-920T内核的支持 (58)3. 2 配置自己的开发板 (58)3. 3 实现网卡的驱动程序 (60)3.4 从NAND Flash启动 (61)3.4.1 修改cpu/arm920t/start.s 添加NAND Flash启动跳转代码 (61)3.4.2 添加从NAND Flash启动代码 (63)3.4.3 添加上述代码中引用的宏定义 (65)3. 5 修改Makefile 文件 (65)3.6 搭建编译环境 (66)3. 7 生成目标文件并进行测试 (67)3. 8 测试 (69)第一章绪论1.1 U-boot 简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
分区工具的工作原理
分区工具的工作原理
分区工具的工作原理是通过对硬盘进行操作,将硬盘分为不同的区域。
分区工具可以读取硬盘的分区表信息,然后根据用户的设置,创建、修改、删除分区。
具体来说,分区工具会先读取硬盘的MBR(Master Boot Record)或GPT(GUID Partition Table)分区表,这些分区表
记录了硬盘的分区信息。
然后,用户可以选择在空闲的区域上创建新的分区,或者修改已有的分区大小、位置等属性,还可以删除分区以释放空间。
分区工具一般会提供可视化的操作界面,让用户能够直观地进行分区操作。
当用户进行分区操作后,分区工具会根据用户的设置,修改分区表信息,并将其写回硬盘中,完成分区的操作。
分区工具还可能会对分区进行格式化,以便操作系统能够识别和使用分区。
总的来说,分区工具通过读取和修改硬盘的分区表信息,实现对硬盘的分区操作。
它可以帮助用户合理利用硬盘空间,满足用户的存储需求。
ntrboot原理
ntrboot原理
ntrboot是一种用于Nintendo DS(NDS)系列游戏机的启动引导程序。
其原理基于在DS的启动过程中加载并执行自定义的启动代码,从而实现对系统的启动过程进行控制。
ntrboot的实现过程主要涉及到以下几个步骤:
烧录卡准备:首先,需要一张兼容的烧录卡,如Acekard 2i等。
这张烧录卡需要能够支持ntrboot的写入程序。
写入ntrboot:通过特定的工具,将ntrboot的引导代码写入到烧录卡中。
这个过程通常是通过在DS上运行一个特定的.nds文件来完成的。
启动ntrboot:当DS启动时,会首先检查烧录卡中是否存在ntrboot 的引导代码。
如果存在,DS会加载并执行这段代码,而不是执行正常的启动过程。
加载boot9strap:ntrboot的主要作用是加载并执行boot9strap。
boot9strap是一个更为复杂的启动引导程序,它能够实现对DS系统的更深层次的控制,如运行自制软件等。
BOOTP与TFTP技术介绍及原理
BOOTP与TFTP技术介绍及原理BOOTP与TFTP技术介绍及原理作者:未知时间:2005-08-02 22:26出处:中国协议分析网责编:chinaitpower 摘要:BOOTP与TFTP技术介绍及原理BOOTP远程启动是一种产生于早期UNIX的远程启动方式,在现在的UNIX、Linux的无盘网络中是较常用的远程启动方式之一,在Windows的无盘网络运用较少,但随着Windows 2000不支持RPL远程启动,并且以TCP/IP作为默认安装网络协议,逐步表明今后的Windows也将以TCP/IP协议作为主要的发展方向,纯TCP/IP的网络将是今后发展的方向。
本章将系统地介绍BOOTP的相关知识。
一、BOOTP服务简介BOOTP服务的全称是BOOTSTRAP PROTOCOL,是一种比较早出现的远程启动的协议,我们经常用到的DHCP服务就是从BOOTP服务扩展而来的。
BOOTP协议使用TCP/IP网络协议中的UDP 67/68两个通讯端口。
BOOTP主要是用于无磁盘的客户机从服务器得到自己的IP地址、服务器的IP地址、启动映象文件名、网关IP等等。
这个过程如下:第1步,由BOOTROM芯片中的BOOTP启动代码启动客户机,此时客户机还没有IP地址,它就用广播形式以IP地址0.0.0.0向网络中发出IP地址查询的请求,这个请求帧中包含了客户机的网卡MAC地址。
第2步,网络中的运行BOOTP服务的服务器接收到的这个请求帧,根据这帧中的MAC地址在BOOTPTAB启动数据库中查找这个MAC的记录,如果没有此MAC的记录则不响应这个请求,如果有就将FOUND帧发送回客户机。
FOUND帧中包含的主要信息有客户机的IP地址、服务器的IP地址、硬件类型、网关IP地址、客户机MAC地址和启动映象文件名。
第3步,客户机就根据ROUND帧中的信息通过TFTP服务器下载启动映象文件,并将此文件模拟成磁盘,从这个模拟磁盘启动。
NTLDR的用途和常见故障分析方法
NTLDR的用途和常见故障分析方法很多人对BOOT.INI 的重要性非常熟悉,但是实际上,和Windows NT 架构操作系统启动相关的重要文件不仅仅是BOOT.INI,更重要的文件是NTLDR。
本文件简单的描述了NTLDR 的基本用途和一些常见的故障分析方法。
本文适用于初次接触Windows NT1架构操作系统的用户。
基本介绍NTLDR,Windows NT 架构操作系统特有的一个文件,用于操作系统的引导。
如果这个文件不存在则操作系统不能够正常启动。
该文件储存在启动卷根目录下,一般为C:\。
NTLDR 职责1. 解析BOOT.INI 文件的内容。
2. 加载Windows NT 内核或把控制权交给BOOTSECT.DOS2文件用于启动Win9X 或把控制权交给其他操作系统引导代码。
NTLDR 的使用NTLDR 启动以后,如果在系统卷根目录下发现了Hiberfil.sys 文件且文件是有效的,那么NTLDR 读取Hiberfil.sys 里面的信息并让系统恢复到休眠以前的状态。
这个时候并不处理BOOT.INI 文件。
如果BOOT.INI 文件里面有两个或两个以上的启动选项,那么NTLDR 暂停系统引导,让用户选择一个启动选项直至超时。
超时值由BOOT.INI 里面的TimeOut 值设定。
超时以后,NTLDR 读取BOOT.INI里面DEFAULT 后面的信息,获取Windows 目录的路径以便执行后面的启动流程。
提示:按下F8 会显示启动菜单,启动菜单里面可以选择多种启动模式。
NTLDR 根据用户的选择,设置不同的启动参数并使用启动参数来加载NT 内核。
用户也可以直接在BOOT.INI 里面设置启动参数。
完整的BOOT.INI 的启动参数可以在/Information/bootini.html 查阅到。
另外在Windows 帮助文档里面也记录了常1 Windows NT 架构操作系统:指在Windows NT 操作系统上发展起来的操作系统,目前主流的有:Windows 2000、WindowsXP 和Windows Server 2003 等。
Windows Bootkit实现及其检测系统设计
过 程 中要读 写磁盘 时 ,就 会调 用 HOOK 后 的 i t3 n l 中断 ,继 而 执行 预 先植 入 的 恶意 代 码 ,实现 M BR
Bo t i okt 。 {
准结构 总线 )模块 和 PC ( ei h r l I rp ea Co o e t P mp n n
w i l gon. xe no e 。
高 电压 的条 件下 对其 进 行刷 写 ,这都 为 基于 BI OS
芯片实现 Bo t i 提供 了条件 。基 于 BI okt OS芯 片 的 B okt 要流程 如 图 l 示 。 o t i主 所
1 基 于 NT DR 的 B okt ) L o ti
保 存 it 3 地 垃 nl 原 设 篷 科 o 铹 麟 ok
_ . r
I校釉酸 验蟛 l
1 eb I W轴 r自
麓8 l 孳。 t s
图 1基 于 BO IS芯 片 的 B okt主要 流 程 ot i
基于 B O I S芯片 的 B okt 先从 B OS芯片 中 o ti首 I 读 取原 B O I S文件 od is bn lb o . i ,然后将 自己编写 的 I A 或者 P I 块 my. i S C模 bn增加 到 od is bn中 , lbo . i
。T v
t ) I I E 1 1 ! ̄ J ' | I
W id ws o ti 篡 改的软 硬件 代码 ,从 而消除 n o B ok t 了 Wi d ws o t i 感染攻 击 的可能性 ,保 证 了 n o B o k t 计算 机 系统 具有 可信 安全 的软硬件 环境 。
【] L- i Sa og -x W n, g Bo eet n ae 6 e t n h ,Hn a i ag a / ot tco d i bsd
Bootkit技术演变趋势及研究分析
Bootkit技术演变趋势及研究分析(上)---by nEINEI2011.10Bootkit演化及分析共2篇,本文是上篇,着重讨论截至2011底,中国地区主要Bootkit病毒的技术演化过程及新技术的对抗,下篇着重讨论TDL4变种的最新技术变化。
一简介二从哪里来-- mebroot 深入分析三更多改进-- ShadowGhost系列攻击手段3.1对抗静态检测3.2加密磁盘数据3.3kernel hook 方式3.4内存隐藏3.5 加载方式3.6 自身保护四更高级的攻击手段bioskit五防御者的任务5.1 Ring3 拦截5.2 Ring0 拦截5.3实模式内存搜索5. 4 Hook DBR一简介在持续的跟踪bootkit病毒发展的过程中我们发现仅2011年4月~ 9月,在中国区分别出现了,鬼影2代,鬼影3代,ZeroAccess(aka:Max++不是严格的BK,利用驱动感染的方式加载,TDL3的另一个分支变种),Tdss-4,bmw bios 等复杂的攻击windows引导启动阶段的方法。
在深入的代码分析中发现,流行的bootkit病毒特别是中国地区的流行的病毒已经从最初的借鉴eeye bootroot,mebroot 技术,发展为更复杂的隐蔽攻击方式。
在撰写本文的过程,我们获了更底层的感染award bios的病毒。
但这只是开始,我们确信,黑客已经熟练了的多种bootkit技术。
这里将是未来的新战场。
下面是发现典型bookit病毒在中国区的时间表.这些病毒技术都和mebroot有非常大的联系,为了更好的说明后续技术的变化,下面将首先介绍mebroot是如何做到引导系统启动并加载恶意驱动程序的。
二从哪里来-- mebroot 深入剖析mebroot感染过程分三个阶段:1) 修改MBR 数据,隐藏自身到实模式系统内存空间(0~1MB)的尾部,hook int 13h 中断。
2 ) patch ntldr在0x422a6f 位置,搜索获得osloader的BlLoaderBlock结构,利用BlLoaderBlock 定位LDR_DATA_TABLE_ENTRY的DllBase成员,该指针指向ntoskrnl模块基址,拷贝自身数据到ntoskrnl模块尾部,同时hook IoInitSystem 函数3) 系统调用IoInitSystem时进入病毒代码空间,搜索导出表,获得ntOpenFile , ntReadFile , ntClose, ExAllocatepool ,利用以上函数读取磁盘上的病毒驱动程序到内存中,解析驱动程序PE结构,模拟PEloader加载过程,把病毒驱动加载到另外一块非分页内存中执行。
多系统启动引导原理
多系统启动引导原理简介2008-01-11 20:57多系统启动引导原理简介同样鉴于诊所里一部分会员对多重系统引导原理的一知半解,并经常发贴求助,我把我知道的一点皮毛简单介绍下。
我先来介绍分区,从启动引导的角度讲,磁盘分区可以分为系统分区和引导分区。
系统分区主要用于启动Windows系统,通常,系统分区总是C:\。
而引导分区则是装有Windows操作系统的分区,即%SystemRoot%所在分区。
我们知道,主盘系统分区的第一个扇区中储存着系统的主引导记录,就是通常说的MBR区。
它负责搜索磁盘上可启动的分区,然后把引导代码装入内存。
对于DOS来说,MBR由Fdisk 生成。
主引导记录所在分区是系统分区,除此之外装有操作系统并能引导启动的分区是引导分区,引导分区的第一扇区储存着引导代码,用来引导本分区相应的操作系统。
下面我们来看下启动文件,Win98一般为:io.sys、msdos.sys、、config.sys、autoexec.bat。
五个。
其中最重要的是头三个,是启动必需要的。
Win2000/XP的启动文件:ntldr、、boot.ini、bootfont.bin、bootsect.dos、、ntbootdd.sys等。
其中ntldr和 对于2000与XP共存的系统引导至关重要。
我简单介绍下各个文件的作用ntldr,操作系统载入程序,位于系统分区根目录下。
boot.ini, 用于指定Windows的安装位置和磁盘属性。
位于系统分区根目录下。
bootfont.bin, 对非英文操作系统的启动菜单标题提供文字支持。
不是必需的。
bootsect.dos, 用于启动旧版操作系统所需要的引导扇区。
, 用于检测计算机的硬件配置信息,并将这些信息返回给ntldr。
ntbootdd.sys, 当ATA技术被禁用或磁盘控制器是SCSI类型或磁盘控制器不支持扩展INT 13调用时,提供驱动支持。
而不用通过BIOS来直接访问。
嵌入式linux操作系统u-boot启动顺序以及代码解析
Bootloader/u-boot的启动模式对于计算机系统来说,从计算机开机上电的到操作系统的启动需要一个引导过程。
嵌入式Linux同样也需要一个引导的过程,及引导程序就叫做Bootloader。
Bootloader是在操作系统启动之前执行的一小段程序,通过这段小程序,我们可以初始化硬件设备、建立内存空间映射表,从而建立适当系统软硬件环境,为最终调用操作系统内核做好准备。
对于嵌入式系统,Bootloader是基于特定平台来实现的,因此几乎不可能为所有的计算机操作系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader,Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级的设备的配置。
对于两块不同的嵌入式开发板,即使他们使用同一种处理器,要想让运行于一块板子上的Bootloader运行在另一块板子上,一般都需要修改Bootloader源程序。
反过来大多数的Bootloader都具有很多的共性,某些Bootloader也能够支持多种体系结构的嵌入式系统。
例如:u-boot就同时支持Powerpc、ARm、MIPS和X86等等的体系结构,支持的板子有上百种,通常他们都能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和网口的操作。
系统加电或者复位后,cpu通常都会从某个地址开始执行,这是由处理器决定的,对于ARM处理器而言会从0x00000000取第一条指令,嵌入式系统的开发板都要把ROM和FLASH映射到这个地址上,因此必须将Bootloader的程序存储在相应的FLASH位置,这样系统加电后就会首先执行它。
u-boot的启动一般流程:第一阶段:依赖cpu初始化外围硬件代码,通常用汇编代码实现1、设置cpu的工作模式;2、关中断,以防止意外发生;/************************************************** set the cpu to SVC32 mode,设置cpu工作模式为11010011,* 后五位表示cpu的工作模式设置为”管理”,并且关闭中断* 110则表示IRQ(普通中断)和FIQ(快速中断)都为禁止**************************************************/mrs r0,cpsr//读取cpsr中的数据到r0中bic r0,r0,#0x1f//将寄存器r0的值和0x1f的反码安位与之后将结果存储在r0中相当于清零orr r0,r0,#0xd3//将寄存器r0的值和0xd3 安位或之后将结果保存在r0寄存器之中,关闭中断msr cpsr,r0//将cpsr中的数值写到r0寄存器中3、关闭看门狗,避免系统重启;#ifdefined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3 C2440)/* turn off the watchdog ,关闭开门狗*/# if defined(CONFIG_S3C2400)# define pWTCON 0x15300000# define INTMSK 0x14400008 /* Interupt-Controller base addresses */# define CLKDIVN 0x14800014 /* clock divisor register */#else# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */ # define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */# endif4、设置back初始化,设置cpu的工作频率;#if defined(CONFIG_S3C2440)/*FCLK HCLK PCLK = 1: 4: 8*/ldr r0, =CLKDIVNmov r1,#5str r1,[r0]mrc p15,0,r1,c1,c0,0orr r1, r1,#0xc0000000mcr p15,0,r1,c1,c0,0mov r1,#CLK_CTL_BASEmov r2,#MDIV_405add r2,r2,#PSDIV_405str r2,[r1,#0x4]#else/* FCLK:HCLK:PCLK = 1:2:4 *//* default FCLK is 120 MHz ! */ldr r0, =CLKDIVNmov r1, #3str r1, [r0]#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 *5、从FLASH拷贝到RAM;#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate: /* relocate U-Boot to RAM */adr r0, _start /* r0 <- current position of code *///adr是读取地址的伪指令,表示将_start标示的运行地址给r0ldr r1, _TEXT_BASE /* test if we run from flash or RAM */// 表示将_TEXT_BASE 指向的地址中的数据拷贝到r1中cmp r0, r1 /* don't reloc during debug *///比较是否相同beq stack_setup //相同跳转出去/*****************不同则执行以下代码***********************/ldr r2, _armboot_start //start起始地址,包含RO代码段+RW 数据段+ZI全局变量ldr r3, _bss_start //全局变量的地址sub r2, r3, r2 /* r2 <- size of armboot *///相减之后得到的是代码段+数据段的总大小add r2, r0 r2, /* r2 <- source end address *///r0是要烧录的内容,表示的是烧录的代码段+数据段的结束地址copy_loop:ldmia r0!, {r3-r10} /* copy from source address [r0] *///ldmia批量的拷贝,向后拷贝32位到r3-r10(将r0中的数据读出到r3-r10的,r0自动加一) stmia r1!, {r3-r10} /* copy to target address [r1] *///stmia批量的存储到r1上也就是目标运行的地址上(将r3-r10中的数据保存到r1指向的地址上,r1自动加一)cmp r0, r2 /* until source end addreee [r2] *///r0 烧录的起始地址,r2烧录的结束地址,相等则说明拷贝完成ble copy_loop#endif /* CONFIG_SKIP_RELOCATE_UBOOT */6、设置建立堆栈;7、执行内存地址上的程序,该工作可以使ldr pc来完成;start.s是u-boot启动所执行的第一个文件,它说做的是设置系统堆栈和cpu的工作方式,为进入c程序奠定基础。
基于NTLDR的BOOTKIT原理及实现解析
IT专家网 > 安全子站 > 安全技巧基于NTLDR的BOOTKIT原理及实现解析作者:inghu出处:IT专家网2008-11-19 15:02NTLDR是Windows NT系列内核的Osloader,当开机以后BIOS载入MBR,MBR 载入DBR,然后DBR载入NTLDR,并将执行权转交给NTLDR,最后再来启动内核。
理论上讲NTLDR是最接近内核的,而且对NTLDR做HOOK,可以避免针对各种外设的编码工作,提高通用性。
BOOTKIT具有以下几个特点:1.在Ring3下可完成Hook(改写NTLDR);2.注入内核的代码没有内存大小限制,也无需自己读入代码;3.BOOTDRIVER驱动初始化时加载(依情况而定,也可hook内核其它地方);4.理论上可以Hook各种版本ntldr;5.理论上可以引导各个版本NT内核和内存相关boot.ini参数。
本文适用范围仅限于Win2000 sp4、WinXp sp2、Win2003 sp1,暂时没有对PAE 内核,x64和内存相关BOOT.INI参数提供支持。
一、NTLDR的HOOK:要做NTLDR的BOOTKIT,我们首先面临的问题就是如何对NTLDR做HOOK?要对NTLDR做HOOK,那就首先要对NTLDR的文件结构有所理解才行。
NTLDR 是由两部分构成,一部分是被称作Su Module(Startup)的16位汇编代码,另一部分则是名为Osloader的PE文件。
Su module位于NTLDR的头部,Osloader紧随其后。
DBR将NTLDR加载到物理地址2000:0000开始的地方,然后跳转到这个地址,将控制权交给NTLDR进行引导,而这个地址也就是Su的入口。
Su的主要功能是为Osloader准备内存环境。
在Windows 2003中为了避免Su对NTDLR完整性检测,本文将会用没有校验的Su替换了它。
Osloader,它的作用比较复杂,说的简单点就是为内核准备执行环境,然Osloader会根据boot.ini的设置将Windows内核、hal.dll和其它Boot Driver加载进内存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文是基于NTLDR的Bootkit原理及实现的介绍,Bootkit在安全领域被认为是一种高级的 Rootkit形式,对于用户的信息安全而言威胁巨大。
本文意在讲述后如何映射内存和HOOK内核,以求更为巧妙的技术出现。
NTLDR是Windows NT系列内核的Osloader,当开机以后BIOS载入MBR,MBR 载入DBR,然后DBR载入NTLDR,并将执行权转交给NTLDR,最后再来启动内核。
理论上讲NTLDR是最接近内核的,而且对NTLDR做HOOK,可以避免针对各种外设的编码工作,提高通用性。
BOOTKIT具有以下几个特点:1.在Ring3下可完成Hook(改写NTLDR);2.注入内核的代码没有内存大小限制,也无需自己读入代码;3.BOOTDRIVER驱动初始化时加载(依情况而定,也可hook内核其它地方);4.理论上可以Hook各种版本ntldr;5.理论上可以引导各个版本NT内核和内存相关boot.ini参数。
本文适用范围仅限于Win2000 sp4、WinXp sp2、Win2003 sp1,暂时没有对PAE内核,x64和内存相关BOOT.INI参数提供支持。
一、NTLDR的HOOK:要做NTLDR的BOOTKIT,我们首先面临的问题就是如何对NTLDR做HOOK?要对NTLDR做HOOK,那就首先要对NTLDR的文件结构有所理解才行。
NTLDR是由两部分构成,一部分是被称作Su Module(Startup)的16位汇编代码,另一部分则是名为Osloader的PE文件。
Su module位于NTLDR的头部,Osloader紧随其后。
DBR将NTLDR加载到物理地址2000:0000开始的地方,然后跳转到这个地址,将控制权交给NTLDR进行引导,而这个地址也就是Su的入口。
Su的主要功能是为Osloader准备内存环境。
在Windows 2003中为了避免Su对NTDLR完整性检测,本文将会用没有校验的Su替换了它。
Osloader,它的作用比较复杂,说的简单点就是为内核准备执行环境,然Osloader会根据boot.ini的设置将Windows内核、hal.dll和其它Boot Driver 加载进内存。
有关NTLDR更详细的结构和功能,请读者参看有关资料。
了解了NTLDR的大致结构和功能。
接着我们来看一下我们HOOK NTLDR所存在的问题?首先就是该在哪下手,理论上你可以在任何一个地方下手,但是接下来你该跳转到哪里呢?执行HOOK CODE之后,才能让CPU有个地方可以去。
我选择将CODE放在Osloader里,没错,Su会按SECTION的地址重定位Osloader,这样我们就可以很轻松地定位我们CODE的地址。
我的做法就是直接用工具在Osloader里新建了一个节,将所有HOCK代码都放在了里面。
因为我们的根本目的是要HOOK内核,所以执行代码的时候,内核要已经被加载进了内存。
那我们怎么知道在哪内核已经被加载进了内存呢?通常,在将控制权交给内核之前,Osloader会调用函数BlSetupForNt,这个函数的会最后做些设置的收尾工作,包括剪裁页表。
在BlSetupForNt函数里面存在如下特征码:mov eax, cr3mov cr3, eax (机器码:“0F 20 D8 0F 22 D8” )这段代码是用来刷新TLB的,这段代码在内核加载前后被频繁调用的。
为了顺利HOOK内核,所以我在CODE里加入保护性代码,通过这段代码几乎可以在任何完整指令处进行HOOK。
你可以下很多HOOK,不过得有一个是在内核加载之后执行的。
利用这段特征串可以比较方面的找到HOOK点。
实际过程中“0F 20 D8 0F 22 D8” 串会集中出现在文件头的部分和文件尾的部分,建议只HOOK文件尾的串。
这里使用"call RVA"共5个字节的指令来实现跳转。
小提示:Osloader位置的确定可以直接搜索特征值"MZ", "PE"。
二、内核的加载与定位当控制权顺着hook代码,我们必须确定内核是否加载。
这里我们首先想到的办法就是硬编码内核一个地址,然后测试这个地址是否有效,因为同一个NTLDR总会将内核加载在同一个地址。
但是这样的通用性不高,ring3下面的工作会增加。
为了使测试具有较高通用性,我使用了暴力搜索的方法,从可能的加载地址:VA0x80400000~0x81000000。
为了不致引起page fault,首先必须从PDE搜索起,再确定PTE是否有效,然后测试MZ、PE标志,最后ImageSize的大小要大于0x150000(也就内核这么大了),这是为了避免其它PE文件影响结果,像Osloader。
三、对内核做HOOK这个时候整个内核就在我们眼前了,但是我们还不能直接动手,因为我们现在代码所在的内存会在内核初始化的时候被清洗掉,所以我们还要HOOK一次EntryPoint。
这是为了获取内核入口函数KiSystemStartup的参数LoaderBlock。
这是一个类型名为LOADER_PARAMETER_BLOCK的指针。
它的结构如下:typedef struct _LOADER_PARAMETER_BLOCK {LIST_ENTRY LoadOrderListHead;LIST_ENTRY MemoryDescriptorListHead;LIST_ENTRY BootDriverListHead;ULONG KernelStack;ULONG Prcb;ULONG Process;ULONG Thread;ULONG RegistryLength;PVOID RegistryBase;PCONFIGURATION_COMPONENT_DATA ConfigurationRoot;PCHAR ArcBootDeviceName;PCHAR ArcHalDeviceName;PCHAR NtBootPathName;PCHAR NtHalPathName;PCHAR LoadOptions;PNLS_DATA_BLOCK NlsData;PARC_DISK_INFORMATION ArcDiskInformation;PVOID OemFontFile;struct _SETUP_LOADER_BLOCK *SetupLoaderBlock;ULONG Spare1;union {I386_LOADER_BLOCK I386;MIPS_LOADER_BLOCK Mips;ALPHA_LOADER_BLOCK Alpha;PPC_LOADER_BLOCK Ppc;} u;} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;在这里我们能找到很多我们想得到的数据,以便我们能成功hook内核四、内存作业当CPU执行到这里的时候,我们已经来到了内核入口点。
为了可以常驻内核,我们有两样工作要做,首先,设法找到空闲的物理页用于映射;其次,找一个虚拟地址空间映射我们找到的物理页。
对于第一步,我需要利用LoaderBlock中的MemoryDescriptorListHead。
它指向的实际数据结构如下:typedef struct _MEMORY_ALLOCATION_DESCRIPTOR {LIST_ENTRY ListEntry;TYPE_OF_MEMORY MemoryType;ULONG BasePage;ULONG PageCount;} MEMORY_ALLOCATION_DESCRIPTOR, *PMEMORY_ALLOCATION_DESCRIPTOR;其中MemoryType为typedef enum _TYPE_OF_MEMORY {LoaderExceptionBlock = MemoryExceptionBlock, // 0 LoaderSystemBlock = MemorySystemBlock, // 1LoaderFree = MemoryFree, // 2LoaderBad = MemoryBad, // 3 LoaderLoadedProgram = MemoryLoadedProgram, // 4LoaderFirmwareTemporary = MemoryFirmwareTemporary, // 5 LoaderFirmwarePermanent = MemoryFirmwarePermanent, // 6 LoaderOsloaderHeap, // 7 LoaderOsloaderStack, // 8 LoaderSystemCode, // 9 LoaderHalCode, // a LoaderBootDriver, // bLoaderConsoleInDriver, // c LoaderConsoleOutDriver, // d LoaderStartupDpcStack, // e LoaderStartupKernelStack, // f LoaderStartupPanicStack, // 10 LoaderStartupPcrPage, // 11 LoaderStartupPdrPage, // 12 LoaderRegistryData, // 13LoaderMemoryData, // 14 LoaderNlsData, // 15 LoaderSpecialMemory, // 16LoaderMaximum // 17 } TYPE_OF_MEMORY;“借”物理内存的方法有很多种,我们可以遍历List,将合乎我们要求的DESCRIPTOR标记为LoaderSystemCode或者 LoaderBad等等。
本文说使用的方法主要在BasePage和PageCount两个参数上做文章。
它们分别代表了这个DESCRIPTOR起始页号和包含的物理页数。
只要修改这两个参数,就可以获取物理内存的空间了。
接下来我们要做的事就是在虚拟内存中映射我们自己,4GB的空间我们应该映射在哪里呢?我首先注意到的就是最后4MB的空间,这个空间是给 Hal用的,但实验表明这一块的区域会被重写,导致我们的地址被抹去,所以是不可用的。
这里所使用的方法是在内核虚拟地址所在的那个PDE的后面一个 PDE开始寻找虚拟地址空间,找的PDE是有效PDE,然后再在页表中找无效PTE,将要映射的物理地址的PTE写入这个无效PTE。
最后这种方法成功了,不仅没有抹去,连进入windows之后这片内存还完整的存在。