首页 > 代码库 > 可制作僵尸网络的Bootkit浅析
可制作僵尸网络的Bootkit浅析
最近翻出自己以前存的黑防的杂志,又兴致勃勃的看起来,索性把自己的学得记下来,今天的话题是Bootkit,首先介绍下所谓的Bootkit这个技术,其实就是Rootkit的增强版,所以还是先介绍Rootkit吧,Rootkit就是入侵者为了隐藏自己的踪迹和保存root权限的工具(也可以说是一种技术),同样这里Bootkit的目的也一样,这里就是不扩展讲rootkit的实现了,因为这里涉及windows内核提权等大量知识,如果对rootkit有兴趣的可以自己Google,这里回过头来讲Bootkit,说到这里不得不提下Bootkit技术制作的经典杰作-"鬼影"病毒,简单介绍下鬼影病毒,她是通过修改MBR(Main Boot Record,主引导记录)实现开机过程中还未加载windows的时候就执行恶意代码的能力,这里关键的问题是这种鬼影病毒一旦种植在您的电脑上就难以根除,原因有以下几点:1。他自己所在的位置不是普通硬盘簇里,而是在第0片盘片的引导扇区,而非文件系统中的文件。2.存在与MBR的代码在Windows加载之前就已经被加载执行了,所以他的权限极高,对杀软可以做到先发制人。
下面为了能进一步讲下去,先给大家科普下计算机的引导过程,首先当你按下电源使CPU加电之后,首先会执行在主板上固化的一段代码(一次性只读硬件烧录上的,一般修改不了,但是如果BIOS支撑刷写,那就可以做BIOS bootkit),这段代码就是BIOS (Bisic Input Output System)程序,这里的做的一些固定的活就是对硬盘,CPU,内存等基本固件做健康检查,如果这的硬件检查通过,下一步就按照在Boot step(BIOS中可设置的系统引导启动顺序表)中的先后顺序去找系统启动引导(大概有 本地硬盘引导,USB引导,网络位置引导几种,在没修改的情况下默认是先找本地硬盘引导排在第一位),这里BIOS就会去本地硬盘上的第一个分区的第一个扇区去找DBR(DOS Boot Record,DOS引导记录)在DBR中找寻加载系统的程序NTLDR(NT Loader Record),在Win 7和VISTA中就叫bootmgr,这里暂且都叫他们NTLDR了,找到这里后BIOS就将CPU的使用权交给这段代码用来加载和初始化后续的正式系统,但是要记住这里的几个过程还是在CPU实模式下。
这里总结下引导流程:BIOS->MBR->DER->NTLDR(bootmgr),这四个流程其实都是可以被劫持的,随便劫持哪个过程,但是因为这里是在实模式下直接执行的代码,这里直接启动和读取读取不同的IO硬件,所以在不同机器上代码的执行效果很难一致,也就是兼容性不同,如果做BIOS bootkit,这个就要判断不同的硬件是否支持刷写,并且对于不同厂家的BIOS还得分别做兼容处理,相反的,如果是在引导启动的后半部分也就是NTLDR的硬件差异性就会小很多,所以劫持代码相对简单,执行的成功率更高,所以,你懂的,对于Boot防护功能的杀软如Symantec的诺顿(Norton)和病毒们,NTLDR那快地儿到底是有多么的宝贵,多少人在默默的争抢。
这里专门做了个实验,在Windows 7 下,直接以管理员权限将bootmgr移出,造成的后果就是"boot missing , please use ctrl+alt+delete to restart" ,这个文件是一个混合的PE文件,其中即有16位程序也有32位程序,因为这里的系统引导文件bootmgr仍然是运行在实模式下,所以这里执行的始终还是16位的程序在执行,看到在黑防上逆向了NTLDR,当然是16位模式下的反编译, 看到开头就有jmp的跳转,所以在理论上实现劫持这个跳转是可以实现的,我们可以这样做,首先将跳转地址保存下来,然后先指向自己的代码地址,然后执行完了在还原现场,其中自己的代码可以在文件尾插入也可以在文件中间的空白处插入,当然实际的shellcode不是这么简单的,比如要注意使用到的字符串需要修正地址,如果有时间,去找段可行的代码贴下。
这里因为还没有进入正式的操作系统,所以系统版本对于劫持bootmgr/NTLDR的影响不太大,其实就是但上面的16位的shellcode的编写就很要求汇编额度技术功底,这类技术现在已经是在走下坡路了,因为在将来我们逐渐去掉这种实模式引导启动的方式,甚至都不需要BIOS(只是猜测),如果你经常摆弄BIOS,你会看到里面已经有的UEFI(Unified Extensible Firemware Interface)的选项(ASUS A43S 反正是有的),这中启动方式更加灵活,如果等到他普及了,直接取代BIOS也是有可能的,到那时有或许是Bootkit的终结了,就像缓冲区溢出技术逐渐终结一样(随着C++ 11 标准的普及,C++ 14 标准都要出现了).但是新技术亦有新挑战,学无止境!
下面为了能进一步讲下去,先给大家科普下计算机的引导过程,首先当你按下电源使CPU加电之后,首先会执行在主板上固化的一段代码(一次性只读硬件烧录上的,一般修改不了,但是如果BIOS支撑刷写,那就可以做BIOS bootkit),这段代码就是BIOS (Bisic Input Output System)程序,这里的做的一些固定的活就是对硬盘,CPU,内存等基本固件做健康检查,如果这的硬件检查通过,下一步就按照在Boot step(BIOS中可设置的系统引导启动顺序表)中的先后顺序去找系统启动引导(大概有 本地硬盘引导,USB引导,网络位置引导几种,在没修改的情况下默认是先找本地硬盘引导排在第一位),这里BIOS就会去本地硬盘上的第一个分区的第一个扇区去找DBR(DOS Boot Record,DOS引导记录)在DBR中找寻加载系统的程序NTLDR(NT Loader Record),在Win 7和VISTA中就叫bootmgr,这里暂且都叫他们NTLDR了,找到这里后BIOS就将CPU的使用权交给这段代码用来加载和初始化后续的正式系统,但是要记住这里的几个过程还是在CPU实模式下。
这里总结下引导流程:BIOS->MBR->DER->NTLDR(bootmgr),这四个流程其实都是可以被劫持的,随便劫持哪个过程,但是因为这里是在实模式下直接执行的代码,这里直接启动和读取读取不同的IO硬件,所以在不同机器上代码的执行效果很难一致,也就是兼容性不同,如果做BIOS bootkit,这个就要判断不同的硬件是否支持刷写,并且对于不同厂家的BIOS还得分别做兼容处理,相反的,如果是在引导启动的后半部分也就是NTLDR的硬件差异性就会小很多,所以劫持代码相对简单,执行的成功率更高,所以,你懂的,对于Boot防护功能的杀软如Symantec的诺顿(Norton)和病毒们,NTLDR那快地儿到底是有多么的宝贵,多少人在默默的争抢。
这里专门做了个实验,在Windows 7 下,直接以管理员权限将bootmgr移出,造成的后果就是"boot missing , please use ctrl+alt+delete to restart" ,这个文件是一个混合的PE文件,其中即有16位程序也有32位程序,因为这里的系统引导文件bootmgr仍然是运行在实模式下,所以这里执行的始终还是16位的程序在执行,看到在黑防上逆向了NTLDR,当然是16位模式下的反编译, 看到开头就有jmp的跳转,所以在理论上实现劫持这个跳转是可以实现的,我们可以这样做,首先将跳转地址保存下来,然后先指向自己的代码地址,然后执行完了在还原现场,其中自己的代码可以在文件尾插入也可以在文件中间的空白处插入,当然实际的shellcode不是这么简单的,比如要注意使用到的字符串需要修正地址,如果有时间,去找段可行的代码贴下。
这里因为还没有进入正式的操作系统,所以系统版本对于劫持bootmgr/NTLDR的影响不太大,其实就是但上面的16位的shellcode的编写就很要求汇编额度技术功底,这类技术现在已经是在走下坡路了,因为在将来我们逐渐去掉这种实模式引导启动的方式,甚至都不需要BIOS(只是猜测),如果你经常摆弄BIOS,你会看到里面已经有的UEFI(Unified Extensible Firemware Interface)的选项(ASUS A43S 反正是有的),这中启动方式更加灵活,如果等到他普及了,直接取代BIOS也是有可能的,到那时有或许是Bootkit的终结了,就像缓冲区溢出技术逐渐终结一样(随着C++ 11 标准的普及,C++ 14 标准都要出现了).但是新技术亦有新挑战,学无止境!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。