首页 结构无人之境 exploiting realtek rtl8139单芯片以太网操纵器[精彩]

结构无人之境 exploiting realtek rtl8139单芯片以太网操纵器[精彩]

举报
开通vip

结构无人之境 exploiting realtek rtl8139单芯片以太网操纵器[精彩]结构无人之境 exploiting realtek rtl8139单芯片以太网操纵器[精彩] 构造无人之境 Exploiting Realtek RTL8139单芯片以太网控制器作为目前应用范围较广的RTL8139芯片控制器提供了众多特性。比如高度集成的以太网MAC,物理芯片同收发器的集成,支持远程唤醒,最大可支 持128K EPROM和Flash Memory。与此同时,RTL8139提供了为数众多的端口寄存器供映射到I/O空间,下面仅结合网卡初始化、数据包的发送与接收讲解常用的几个,其它 的参考datashe...

结构无人之境 exploiting realtek rtl8139单芯片以太网操纵器[精彩]
结构无人之境 exploiting realtek rtl8139单芯片以太网操纵器[精彩] 构造无人之境 Exploiting Realtek RTL8139单芯片以太网控制器作为目前应用范围较广的RTL8139芯片控制器提供了众多特性。比如高度集成的以太网MAC,物理芯片同收发器的集成,支持远程唤醒,最大可支 持128K EPROM和Flash Memory。与此同时,RTL8139提供了为数众多的端口寄存器供映射到I/O空间,下面仅结合网卡初始化、数据包的发送与接收讲解常用的几个,其它 的参考datasheet即可。 1. 8139初始化 网卡在初始化时涉及到的寄存器有:CR(Command Register),TCR(Tx Configuration Register),RCR(Rx Configuration Register),IMR(Interrupt Mask Register),RBSTART(Rx Buffer Start Address)。它们很多可以顾名思义。初始化过程大致为: (1) 设置CR:将CR中的RE和TE标志位置1并写入CR,即启用8139网卡芯片的收发器。这两个标志位置1后,接收状态机和发送状态机将由空闲变为活动状态 (2) 设置RCR: a 将RCR中的RBLEN(BIT12-11)相应位置1并写回RCR:即指定接收环形缓冲区(Rx Ring Buffer)的大小(通常设为16K+16bytes); b 将MXDMA(BIT10-8)标志中的相应位置1,写回RCR:即指定接收的DMA传输数据最大值(通常为1024bytes); c 将RXFTH(BIT15-13)标志中的相应位置1并写回RCR:即指定Rx FIFO的接收数据阀值(通常为64bytes),这个下面会讲到 d 将AB,AM,APM位置1写回,即指明接受广播、组播以及匹配网卡地址的数据包 (3) 设置TCR: a 将TCR中的IFG(BIT25-24)标志位置为全1并写回TCR,指定帧间隔时间; b 将MXDMA(BIT10-8)相应位置1(视不同情况而定),指明每次DMA发送数据的最大字节数(推荐值为1024bytes) (4) 设置RBSTART:将事先分配的物理地址写入Receive Buffer Start Address,8139芯片会将Rx FIFO中的数据移动到这块物理内存 (5) 设置IMR:开启除系统错误外的所有中断,并写入IMR。这个寄存器指明了在什么条件下会致使芯片的中断控制逻辑产生一个中断并调用ISR 2. 发送数据包 其实在我们的rk中完全没必要再对网卡进行初始化,因为网卡驱动已经帮助我们做了这项工作。如果需要,rk可以读出这些端口寄存器的值进行修改 (比如直接让网卡halt掉)。让我们把注意力放在8139芯片的收发数据包上。根据RTL8139 datasheet中的规定,其在进行数据发送时要用一对描述符用以描述待发送的数据。这对描述符分别是TSD(Transmit Status Descriptor)和TSAD(Transmit Start Address Descriptor)。而8139共提供了4对这样的描述符用于数据的发送,即TSD0-3,TSAD0-3。它们分别位于I/O空间的0x10偏移和 0x20偏移处,每个描述符4字节大小。这四个描述符是轮流使用的。 从硬件层讲,当对一对transmit描述符I/O完毕之后,8139芯片就会在指令的控制下通过PCI接口将数据包从物理内存以总线主控的 DMA传输模式搬运到网卡芯片的发送FIFO(Tx FIFO)。而这个数据包的物理地址和大小恰好是对TSD和TSAD进行I/O写时指定过的,所以它可以很轻松地得到该数据包。8139芯片内置了两个大 容量(2K)的收发FIFO用于暂存即将送上电缆及从电缆上接收的报文。如果FIFO中包含了一个完整的数据包抑或包大小到达了在TSD中指定的阀值,芯 片便开始继续向下传输。接下来数据包将会经由FIFO控制 逻辑部件,到达收发逻辑接口,然后再经MII接口出去离开MAC到达物理芯片。物理芯片中经过编 码后再通过发送器部件送至RJ-45端口。 当然,软件层没必要关心太多FIFO之后的事情,rk只需要按照规矩做就行了。发送包的流程大概如下: (1) 分配好一块物理内存,将待发送数据包拷贝到这片内存 (2) I/O写transmit描述符,将数据包的内存地址和大小填入 当整个数据包被送上电缆时,TSD中的TOK(Transmit OK)标志位被置为1,如果之前在IMR中开启了TOK中断,此时中断就会触发。 3. 接收数据包 接收模块相对就要复杂一些。因为transmit是一个主动行为,而receive是被动的。rk毕竟不是硬件,没有一个机制触发它使其能比网卡更早的得到数据包到达的中断信号。因此我们不得不对网卡驱动的ISR做些处理。 之前提到了所谓的Tx FIFO,那么自然就会有一个Rx FIFO。从电缆上接收的数据包首先被放置在芯片的Rx FIFO中。当Rx FIFO到达了RCR中预先设定的数据量阀值时,芯片就会发信号申请占用PCI总线,以总线主控模式通过DMA将数据传送到接收缓冲区。 而这个接收缓冲区是以一个环形的方式组织而成的,其实质还是一片连续的物理内存。这里面涉及到一个CAPR(Current Address of Packet Read),其中包含了当前读到的数据包的地址。综上,那么网卡处理一个包的整个过程为: (1) 线路上接收到的数据存储在芯片的Rx FIFO中 (2) 当到达接收阀值时,数据被移动到Rx Buffer(RBSTART指定的 物理内存) (3) 当整个包移动完毕时,接收包头信息被写入包的起始。 (4) CR中的BUFE标志位被置为1,ISR中的TOK标志位置为1 (5) 网卡的ISR例程被调用,由ISR来清TOK位并更新CAPR 讲到这里,原理已经很明显了。rk能做的就是替换掉网卡驱动的ISR, 当接收中断产生时自己同芯片控制器交互,读包并判断是否是自己的 包,如是做特殊处理,否则交由原始ISR处理,当然,也可以邪恶地 对包任意进行涂改让Sniffer去嗅去吧。 不得不提地是,这种方法明显存在严重依赖网卡芯片型号,通用性不 好的弊端,但鱼和熊掌不可兼得,我们毕竟迈出了一步,但要走的路 还很远。 PS:原来的帐号忘掉了,邮箱要把4变成a 四、参考资源 [1] Realtek RTL8139C(L) datasheet Rev1.4, 2002 [2] Sean. Programming guide and sample code for RTL8139 family. 1999 [3] Alex Tereshkin. Rootkits: Attacking Personal Firewalls. BH Vegas 2006 [4] Joanna Rutkowska. Fighting Stealth Malware-Towards Verifiable OSes. CCC 2006 [5] uty. Uay Rootkit source code [6] Azy. AK922 Rootkit :P
本文档为【结构无人之境 exploiting realtek rtl8139单芯片以太网操纵器[精彩]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_196623
暂无简介~
格式:doc
大小:16KB
软件:Word
页数:0
分类:生活休闲
上传时间:2018-01-14
浏览量:13