最近本人在FPGA上做开发,课题是以太网控制器IP核。 发现这里面可以嵌入一个强大的后门。 如果你知道以太网的工作过程,就好懂多了。 以太网协议如此要求。
首先,网卡会接受数据,无论是发给谁的。
第二步,然后判断是不是自己MAC地址的,如果不是就扔掉。
第三步,如果是自己MAC地址的,就会校验CRC,超长帧,超小帧,字节对其错误,错误的一半都抛弃。 问题出现在第一步,网卡必然会接受数据。
如果网卡设计之初,嵌入这样一段逻辑:
收到某个特定的数据,例如,如果去掉MAC头,去掉IP头,去掉TCP或者UDP头之后得到这样的数据“a1a1a1a1a1a1ax”,然后就会触发网卡的“死亡模式”,不接受一切写寄存器操作,于是没法通过程序关闭网卡。网卡不断产生“收到数据中断”。让CPU疲于奔命,最终让用户无奈,只能断电关机。 然而这种攻击,只适用于无操作系统的设备,然而嵌入式领域的设备大多数都是无操作系统的,这种后门危害极大。 如果有操作系统,系统一般不会直接相应网卡的中断,所以没有什么危害。
如果网卡是WIFI的,那么更容易受到这种攻击,只要频道一样,直接广播就搞死一片。 有线的以太网,如果路由器可以配置防火墙过滤这种信息,估计会好很多。 网卡这个东西太厉害。万一触发了另一个“偷窥模式”,网卡会把缓存里面的数据发两次,一次是正常的目的地,另一个就是偷窥者的IP地址。
你还什么都不知道呢。驱动程序不知道。只有路由器知道,但路由器以为是正常工作,必会放行。 有意思吧?所以网卡太重要,太需要自主化。比CPU更应该自主化。
现在想想龙芯就可笑,CPU上哪儿那么容易出后门,非要自主化CPU。
网卡是一台主机的门户,最容易受到攻击。而CPU这东西,保护在里面。有人说CPU的后门会偷偷想美国发送隐私数据,就算有后门,我不给你写驱动程序,你也什么都干不了。
一个CPU指令没有高级到能够上传数据。必须有程序的支持才可以做到。所以防止CPU后门,用Linux,就够了,只要我们能够保证代码里面没有后门,就算CPU再有后门,也顶多是死机而已。
|