访问硬件

大多数的硬件设备都有一个可以再某处进行寻址的微芯片。将数据移入和移出微芯片都需要一个地址,通常这个地址是预先知晓的并且固化到系统中的。地址总线包含许多细线,其中一些连至每个微芯片,因此通过在内存中指定一个要写入的地址,实际上就选择了一个微芯片。大多数的硬件都有某种控制器芯片,它给出一个可寻址的内存位置,有时称为端口(port),读写端口可能需要特殊的操作码指令:一些处理器具有特殊指令集,必须使用它们与端口通信。

在x86体系结构上,通过in和out指令访问端口,但一些芯片是内存映射的,可以通过更常见的移动指令来访问。

不管使用什么指令,都需要一个地址,这是主板获知数据传输目的地的途径。

下面解释其中的一些问题:

1.      访问硬件与访问RAM的区别

硬件可能会表现怪异,因为它不像正常的RAM那样运行,如果写入一个地址然后读取该地址,这并不能确保可以读取刚写入的值,即使这俩个操作都使用同一个地址,对读操作的处理可能完全不同于写操作,这是因为锁存机制。

  在芯片内部,锁存机制可能会选择两个不同的寄存器,这依赖于操作是读出还是写入。

2.      定时问题

在写入闪存芯片时,必须意识到每个写操作都要消耗一定的时间完成,通常控制器或闪存芯片在接受下一条指令前都需要一段短暂时间,这个时间长度通常以微妙为单位。在Windows内核中,可以通过KeStallExecutionProcessor函数暂停特定的微妙数。

3.      I/O总线

I/O控制器芯片组是机器的核心和灵魂,CPU(或多个CPU)通常与主存(RAM)共享单条总线。但附加卡和外围硬件通常通过一条单独总线连接,到达该总线的唯一方式是利用控制器芯片。

4.      访问BIOS

现在的BIOS芯片是flashable的,可以通过软件进行更新,所以BIOS是放置rootkit的很好的位置。

5.      访问PCI和PCMCIA设备

大量设备都挂接到PCI和PCMCIA总线上,包括无线网卡以及外部驱动程序,PCI设备可以拥有自己的板上BIOS软件,将rootkit植入PCIBIOS是可行的。

你可能感兴趣的:(系统安全,windows,x86)