CN101673332A - 一种基于哈佛体系结构的内核代码保护方法 - Google Patents

一种基于哈佛体系结构的内核代码保护方法 Download PDF

Info

Publication number
CN101673332A
CN101673332A CN200910044516A CN200910044516A CN101673332A CN 101673332 A CN101673332 A CN 101673332A CN 200910044516 A CN200910044516 A CN 200910044516A CN 200910044516 A CN200910044516 A CN 200910044516A CN 101673332 A CN101673332 A CN 101673332A
Authority
CN
China
Prior art keywords
page
kernel
kernel code
code
leaf
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN200910044516A
Other languages
English (en)
Inventor
孙建华
陈浩
李兴邦
刘志容
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan University
Original Assignee
Hunan University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hunan University filed Critical Hunan University
Priority to CN200910044516A priority Critical patent/CN101673332A/zh
Publication of CN101673332A publication Critical patent/CN101673332A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)
  • Storage Device Security (AREA)

Abstract

本发明属于计算机安全领域,针对现有操作系统在对内核代码保护方面的不足,结合虚拟化技术的研究,提出了一种利用虚拟化哈佛内存体系结构保护内核代码的方法。它通过内核补丁的形式,在基于冯诺依曼体系结构的计算机上实现了虚拟化的哈佛内存体系结构,分离了对内核代码所在内存区域的指令操作和数据操作,从根本上杜绝了内核代码被篡改的可能。本发明能很好地对抗内核级Rootkit对内核代码的威胁,在保证内核代码的完整性的同时还能够记录下非法操作的相关信息,为分析攻击行为提供线索;在性能方面,充分利用指令TLB(Translation Lookaside Buffer,即旁路转换缓冲,或称为页表缓冲)和数据TLB,对操作系统的性能没有明显的影响。

Description

一种基于哈佛体系结构的内核代码保护方法
技术领域
本发明属于计算机安全领域,具体是Linux操作系统中一种保护内核代码的方法。
背景技术
计算机操作系统向下管理硬件资源,向上为应用程序提供接口,在计算机系统中扮演着重要角色。为了更好的利用底层硬件资源以及更好的为上层软件提供服务,操作系统正变得日益复杂,最直接的体现就是操作系统代码的日益复杂。例如当前最流行的两个操作系统Linux和Windows XP的内核代码分别为430万行和4000万行。如此纷繁复杂的操作系统内核代码必定存在一些漏洞,由此带来的安全隐患严重影响了计算机系统的安全性。
传统的保护内核代码的办法是基于段和页权限位的保护机制,另外还有一些较为复杂的反病毒软件,这些防御措施大多试图阻止攻击者,挫败任何非法操作,但是它们仅仅能够有效地防止一般的攻击者和低权限用户对内核的修改。随着黑客技术特别是Rootkit技术的发展,攻击者们已经把触角伸入到了操作系统的内核。操作系统的内核代码面临着严重的威胁,而传统的保护机制并不能很好的保护操作系统内核代码的安全。
针对现有内核代码保护存在的问题,我们提出了一种新的解决方法。在介绍这种方法之前,我们有必要了解以下相关的背景知识。
哈佛体系结构
哈佛体系结构最早来源于Harvard Mark I计算机。与传统的冯诺依曼体系结构相比,哈佛体系结构中指令和数据的总线和物理存储都是分开的(如图1所示)。这种方式的优势在于能够在一个时钟周期内同时读取指令和数据,相当于减少了执行每一条指令所需的时钟周期。
由于哈佛体系结构中指令和数据分开存放,有各自的数据总线,因而在CPU外部需要大量的数据线与存储器连接,不便于CPU的设计;另外,在哈佛内存体系结构下,数据和指令需要明确分开处理,对程序员来说编程不够方便。由于这些原因,哈佛体系结构现在已经很少看到。但是,在CPU的内部,通过采用指令和数据分离的Cache以及TLB能够有效提高CPU指令执行的效率。可以说哈佛体系结构的设计思想在当前的主流CPU中依然存在。
X86 CPU/Linux上的地址翻译
Linux在X86上的地址翻译过程使用了多级页表,这里只讨论最后一步,即由线性地址到物理地址的转换过程。
CPU每产生一个线性地址,MMU就通过页表找到这个线性地址对应的物理地址。页表的每一个表项称之为PTE(Page Table Entry,即页表项)。由于页表位于主存中,如果需要的PTE表项不在高速缓存中将会导致一次额外的访存操作,这个代价是非常大的。CPU的设计人员试图消除这样的开销,在MMU中包含了一个关于PTE的小缓存,称为TLB(Translation Lookaside Buffer,旁路转换缓冲,或称为页表缓冲)。
有了TLB以后,MMU对线性地址和物理地址的转换速度得到了很大的提升。有TLB之后的CPU对某个线性地址的访问如图2所示。
TLB和CPU流水线
虽然现在CPU的结构越来越复杂,但是一般来说指令在CPU中的执行过程可以大致分为五个相对独立而又相互联系的过程:取指、译码、执行、访存和写回。为了提高CPU执行指令的并行度,流水线的这五个过程应该要能够互不干扰地运行,但是取指和访存这两个阶段都要访问内存,而内存在某一时刻却只能允许进行一次内存访问。为了能够让这两个阶段能够充分并行,设计者们在CPU的内部引入了数据Cache和指令Cache,以及数据TLB(D-TLB)和指令TLB(I-TLB)。这其实是一种哈佛体系结构的设计思想。这样CPU可以在取指和访存阶段两个阶段并行地进行地址翻译或者物理内存访问。CPU在取指阶段进行内存访问时,它会在指令TLB中寻找其指令的线性地址所对应的物理地址,而在访存阶段进行内存访问时,就会在数据TLB中寻找数据线性地址对应的物理地址(如图3所示)。
发明内容
本发明针对现有内核代码保护存在的问题,结合在虚拟化方面的研究,提出了一种基于虚拟化哈佛内存体系结构的方法。它将哈佛体系结构在安全方面的优势通过虚拟化技术融入到当前通用的、基于冯诺依曼体系结构的操作系统上,分离了操作系统对内核代码的指令操作和数据操作,从根本上防止了内核代码被修改。除此之外,本发明并没有试图完全阻止非法操作,而是巧妙的将这些操作重定向,这种方法能够“愚弄”任何试图篡改内核的操作,给他们造成操作已经成功的假象,攻击者不会察觉他们的操作已经失败而且还被记录了下来。
本发明运行于操作系统层,是一个轻量级的系统,采用引导非法操作的办法,能较好地保证内核代码的安全,还能够记录恶意操作的结果。对操作系统带来的性能损失很小,部署也非常方便。
本发明主要由如下几部分构成:第一部分是创建影子区域。影子区域页中也有一份内核代码,从而需要确定内核代码页和其影子页的映射关系。第二部分是建立内核代码页的双重地址映射机制。但双重映射机制建立后还不足以保护内核代码。第三部分是建立双重映射的保障机制。这样的保护机制一直能够存在于系统中,持续的保护内核代码。系统的整体设计如图4所示。
1.创建影子区域
在操作系统初始化的时候,向内核申请一段区域作为内核代码页的影子区域,为了不浪费内核空间,必须保证申请的这段区域的大小和内核代码区大小完全一致。申请成功之后,将内核代码拷贝一份,放入这个影子区域中。可以看到,每一个内核页在影子区域中都有一个内容完全一致的页面与之对应,我们将影子页域中的这一页称为原内核代码页的影子页。
建立影子区域的目的是要给攻击者造成假象,如果攻击者需要读内核代码页的内容,我们给他提供的就是真实的内核代码;如果是攻击者要篡改内核代码,那么影子区域就记录下来了这些篡改,而且对操作系统没有任何影响。
2.建立内核代码页的双重地址映射机制
系统初始化时建立起了一个和内核代码页完全一致的代码区域。这个区域就是影子区域,所有针对内核代码的恶意操作都被导向到这里。我们用一个指针常量指向这个影子区域。这样,一个内核代码页到影子页的一一映射已经形成。任何一个内核代码页的页号加上一个固定的值(影子区域首地址与内核代码首地址之差)就可以得到它对应的影子页的页号。
有了影子区域和内核代码的映射,我们可以确定任一内核代码页所对应的影子页的页号,从而在攻击者试图读写或者篡改某个内核代码页的内容时将这些恶意操作导向到其对应的影子页中。
本发明采用的方法是利用CPU上的两个TLB来实现这一点。因为一般的CPU的TLB有两个,分别为取值和数据操作过程中的地址翻译过程提供页表项的缓存,分别为I-TLB(指令TLB)和D-TLB(数据TLB)。在针对内核代码页的取指操作的地址翻译过程中,我们提供的页表项是原始的页表中的页表项;而在数据操作的地址翻译过程中,我们提供的则是修改过以后的页表项,这将会导致对内核代码的数据操作实际上是在影子区域中进行,保护了原始的内核代码。这种双重地址映射机制类似于哈佛内存体系结构的地址翻译过程,所以又称之为虚拟的哈佛内存体系结构。
针对内核代码的双重映射机制的建立也在系统启动时完成,位于影子区域的创建之后。图5说明了本发明的保护机制建立起来后对内核代码访问时的地址翻译过程。但是,双重映射机制的建立还不足以保护内核代码,本发明的第3部分就是用来保障这样的保护机制一直能够存在于系统中,持续的保护内核代码。
3.建立双重地址映射的保障机制
系统正常启动后,虚拟的哈佛内存体系结构就已经建立。这种双重地址映射机制需要修改后的页表项一直驻留于D-TLB中。一般来说,Linux内核代码页的页表项由于设置了Global位,是不会被置换出TLB的。但是为了做到万无一失,需要确保在内核代码的页表项被换出TLB的情况下能够尽快的重新建立起虚拟的哈佛内存体系结构。
为了做到这一点,需要修改页错处理程序,在对内核代码页的操作出现页错的时候,重新建立起“双重”地址映射即虚拟哈佛内存体系结构,就像系统刚启动时一样。其重新建立的过程与第2部分的过程相同。
附图说明
图1:冯诺依曼体系结构和哈佛体系结构的差异
图2:CPU访问内存过程中地址转换
图3:流水线不同阶段的地址翻译
图4:系统原型图
图5:对内核代码访问时的地址翻译过程
具体实施方式
本发明的方法对硬件没有过多的要求,虽然是一种虚拟化技术,但是并不需要CPU硬件虚拟化技术的支持,所以本发明的实验平台可以是一台普通配置的计算机。如下表所示。
表1实验的软硬件配置
本发明方法的实现需要重新编译内核。由于Fedora Core 4本身没有源码包,所以为了搭建起本发明的保护机制,首先必须安装当前操作系统的内核源码包。然后在当前的内核源码上进行修改,重新编译得到所需的内核。
在软硬环境基础上搭建实验的测试环境有四个步骤:安装内核源码包,修改内核源码,重新编译内核,从新内核启动。
1.安装内核源码包
在修改内核之前,必须要看到当前运行内核的源码树。FC4默认安装时没有包含内核源码包,在/usr/src/目录下看不到内核源码树。所以修改内核之前,首先要做的是安装内核源码包。具体安装过程不再详细介绍。
2.修改内核源码
本发明的实施最主要是通过修改内核代码来完成的,其实现主要包括两个部分。第一部分主要是为了在系统启动时在内核代码区域建立起哈佛内存体系结构,它使得操作系统从启动时开始就能够较好保证内核代码的安全性。第二部分的主要是为了防止由于内核代码页的PTE被冲刷出TLB而引起的保护机制的失效。这是对第一部分的补充,也是本发明能够持续保护操作系统的保障。其实现主要包括两个部分,下面将分别说明。
(1)系统实现的第一部分
(a)系统初始化时,在内核中分配一块与内核代码区大小相同的连续物理内存,作为内核代码的影子区域(P_D),并用一个只读的全局指针变量kernel_mirror指向它。然后把所有的内核代码都拷贝一份放入这个区域中。这个物理地址空间中所有页帧与内核代码空间中的页帧一一对应。内核代码页的第一个物理页帧的页号为text_start,影子区域的第一个物理页帧的页号为mirror_start,内核代码中物理页帧号为pfn所对应的影子页的页号为shadow(pfn)=pfn+(mirror_start-text_start)。
(b)在操作系统的页表中,将所有内核代码页所对应的PTE中的物理页号pfn部分暂时改为这些页在对应的影子页页号(shadow(pfn)),R/W位改为1,并将这些PTE都导入到D-TLB中(读取某个页面上的一个字节即可让这个页面的PTE项被导入到D-TLB中)。
(c)将页表中所有被修改的PTE的物理地址字段的值改回原始内容(pfn),并且将R/W位改为0(只读)。
这一部分的伪代码描述如下:
CreatKernelShadow();//创建影子区域While(PageInKernel)//遍历内核代码页{Modify(pte);//修改代码页对应的PTE项,将对应的影子页页帧号填入LoadToTlb(pte);//将修改后的PTE项导入D-TLB中Recover(pte);//恢复被修改的PTE项,并修改其权限为只读}
(2)系统实现的第二部分
(a)修改页错处理程序(page fault handler),加入以下功能:判断页错类型,如果是由于试图写代码区引起的页错,则进入下一步。
(b)重复第一部分的(b)和(c)。
这一部分的伪代码描述如下:
If(WriteKernelCode)//判读页错类型{While(PageInKernel)//遍历内核代码页,再次建立起保护机制{Modify(pte);LoadToTlb(pte);Recover(pte);}}
3.重新编译内核
完成了对内核的修改之后,接下来就是要编译新的内核源码,得到新的内核镜像。这一步骤很简单,但是需要较长的时间。这样生成了新的内核镜像文件后,主机重新启动时就能够从新的内核启动。
4.从新内核启动
重启电脑,发现Grub的启动项里多了一项,这一项就是新内核的启动项。选择新的内核,进入实现了虚拟化哈佛内存体系结构的系统中。

Claims (3)

1.一种工作在操作系统层的内核代码保护机制
首先,在操作系统初始化的时候,向内核申请一段区域作为内核代码页的影子区域,申请成功之后,将内核代码拷贝一份,放入这个影子区域中。可以看到,每一个内核页在影子区域中都有一个内容完全一致的页面与之对应,称之为影子页。建立影子区域的目的是要给攻击者造成假象,如果攻击者需要读内核代码页的内容,我们给他提供的就是真实的内核代码;如果是攻击者要篡改内核代码,那么影子区域就记录下来了这些篡改,而且对操作系统没有任何影响。
在建立了影子区域之后,一个内核代码页到影子页的一一映射已经形成。任何一个内核代码页的页号加上一个固定的值(影子区域首地址与内核代码首地址之差)就可以得到它对应的影子页的页帧号。有了内核代码页和影子区域之间的映射,就可以确定任一内核代码页所对应的影子页的页帧号,从而在攻击者试图读写或者篡改某个内核代码页的内容时将这些恶意操作导向到其对应的影子页中。本发明利用CPU上的两个TLB(Translation Lookaside Buffer,即旁路转换缓冲,或称为页表缓冲;里面存放的是一些PTE,即页表项),通过操纵它们的内容(内核代码页对应的PTE项)来实现这种双重地址映射机制(又称为虚拟的哈佛内存体系结构)。
双重映射机制的建立还不足以保护内核代码,还需要保障这样的保护机制一直能够存在于系统中,持续的保护内核代码。这个过程通过在操作系统的页错处理程序中添加功能代码来完成。它能够保证在保护机制意外失效的情况下尽快的重新建立起这种保护机制。
2.如权利1所述,本发明所建立的内核代码保护机制的功能有:在系统运行期间,保护内核代码不被篡改,持续的保证内核代码的安全性;记录恶意操作的结构,保存在一个无害的区域,为安全人员对入侵的分析和取证提供有用的信息。
3.如权利1或2所述的内核代码保护机制,其特征在于:
不同于传统的“阻挡”策略,本发明所采用的防御手段是“疏导”。通过重定位非法操作的方法来进行防御,攻击行为得到的反馈不是操作失败,而是完全没有反馈。这种做法有着明显的好处:攻击者根本无法从我们的系统中获得任何真实信息,包括其恶意操作是否成功的信息。它实际上被我们的系统所引导到了一个无害的区域。而其他的一些一味阻止非法操作的防御手段,虽然它们有效的防御一些威胁,但是攻击者在知道所用方法无效的情况下会获取失败过程中的一些信息去选择其他可能的手段对系统进行攻击。在这一点上,本发明的保护机制有着天然的优势。
本发明属于轻量级实现,容易部署,且对操作系统各方面的影响很小。本发明的保护机制在操作系统层实现,且代码量较少,实现起来很容易,只需给系统的内核源码打上补丁然后重新编译内核即可。另外,本发明没有过多的增加页错处理的时间,又充分利用了底层硬件的特性,因而对操作系统性能的损耗非常小。
另外,本发明提出的方法具有较高的安全性。由于保护机制的启动与操作系统的启动同步进行,而保障机制也一直存在,所以本发明能够从操作系统启动时开始,长时间持续的保护内核代码,没有给攻击者留有可乘之机。
CN200910044516A 2009-10-12 2009-10-12 一种基于哈佛体系结构的内核代码保护方法 Pending CN101673332A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200910044516A CN101673332A (zh) 2009-10-12 2009-10-12 一种基于哈佛体系结构的内核代码保护方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910044516A CN101673332A (zh) 2009-10-12 2009-10-12 一种基于哈佛体系结构的内核代码保护方法

Publications (1)

Publication Number Publication Date
CN101673332A true CN101673332A (zh) 2010-03-17

Family

ID=42020554

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910044516A Pending CN101673332A (zh) 2009-10-12 2009-10-12 一种基于哈佛体系结构的内核代码保护方法

Country Status (1)

Country Link
CN (1) CN101673332A (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105243029A (zh) * 2015-11-24 2016-01-13 无锡江南计算技术研究所 基于tlb-miss的numa内存管理容错方法
CN105531712A (zh) * 2013-09-18 2016-04-27 高通股份有限公司 移动设备上的基于数据流的行为分析
CN106096407A (zh) * 2016-05-31 2016-11-09 华中科技大学 一种代码复用攻击的防御方法
CN106096455A (zh) * 2016-08-08 2016-11-09 王波 一种主机内核数据还原保护方法
CN107851153A (zh) * 2015-07-14 2018-03-27 比特梵德知识产权管理有限公司 使用异步自测异常的计算机安全系统及方法
CN107977577A (zh) * 2016-10-21 2018-05-01 龙芯中科技术有限公司 访存指令访问检测方法及装置
CN108038381A (zh) * 2017-12-27 2018-05-15 中国人民解放军战略支援部队信息工程大学 一种密钥安全性检测方法及系统
CN108363930A (zh) * 2018-03-21 2018-08-03 中国人民解放军战略支援部队信息工程大学 一种内存数据保护方法及系统
CN110574343A (zh) * 2017-10-26 2019-12-13 奥迪股份公司 用于保护车辆安全系统的操作系统的方法和半导体电路
CN115098173A (zh) * 2022-06-17 2022-09-23 电子科技大学 一种基于双核amp架构的敌我识别信号高速识别的方法

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105531712A (zh) * 2013-09-18 2016-04-27 高通股份有限公司 移动设备上的基于数据流的行为分析
CN105531712B (zh) * 2013-09-18 2018-07-27 高通股份有限公司 移动设备上的基于数据流的行为分析
CN107851153A (zh) * 2015-07-14 2018-03-27 比特梵德知识产权管理有限公司 使用异步自测异常的计算机安全系统及方法
CN107851153B (zh) * 2015-07-14 2021-03-30 比特梵德知识产权管理有限公司 使用异步自测异常的计算机安全系统及方法
CN105243029B (zh) * 2015-11-24 2018-01-19 无锡江南计算技术研究所 基于tlb‑miss的numa内存管理容错方法
CN105243029A (zh) * 2015-11-24 2016-01-13 无锡江南计算技术研究所 基于tlb-miss的numa内存管理容错方法
CN106096407A (zh) * 2016-05-31 2016-11-09 华中科技大学 一种代码复用攻击的防御方法
CN106096407B (zh) * 2016-05-31 2020-02-18 华中科技大学 一种代码复用攻击的防御方法
CN106096455A (zh) * 2016-08-08 2016-11-09 王波 一种主机内核数据还原保护方法
CN107977577B (zh) * 2016-10-21 2020-03-13 龙芯中科技术有限公司 访存指令访问检测方法及装置
CN107977577A (zh) * 2016-10-21 2018-05-01 龙芯中科技术有限公司 访存指令访问检测方法及装置
CN110574343A (zh) * 2017-10-26 2019-12-13 奥迪股份公司 用于保护车辆安全系统的操作系统的方法和半导体电路
US10783242B2 (en) 2017-10-26 2020-09-22 Audi Ag Method and semiconductor circuit for protecting an operating system of a security system of a vehicle
CN108038381A (zh) * 2017-12-27 2018-05-15 中国人民解放军战略支援部队信息工程大学 一种密钥安全性检测方法及系统
CN108363930A (zh) * 2018-03-21 2018-08-03 中国人民解放军战略支援部队信息工程大学 一种内存数据保护方法及系统
CN108363930B (zh) * 2018-03-21 2020-06-12 中国人民解放军战略支援部队信息工程大学 一种内存数据保护方法及系统
CN115098173A (zh) * 2022-06-17 2022-09-23 电子科技大学 一种基于双核amp架构的敌我识别信号高速识别的方法
CN115098173B (zh) * 2022-06-17 2024-04-26 电子科技大学 一种基于双核amp架构的敌我识别信号高速识别的方法

Similar Documents

Publication Publication Date Title
CN101673332A (zh) 一种基于哈佛体系结构的内核代码保护方法
Weisse et al. Foreshadow-NG: Breaking the virtual memory abstraction with transient out-of-order execution
US7757035B2 (en) Method for optimizing virtualization technology and memory protections using processor-extensions for page table and page directory striping
US7739466B2 (en) Method and apparatus for supporting immutable memory
US8316211B2 (en) Generating multiple address space identifiers per virtual machine to switch between protected micro-contexts
US20080077767A1 (en) Method and apparatus for secure page swapping in virtual memory systems
US20140380009A1 (en) Protected memory view for nested page table access by virtual machine guests
US8549254B2 (en) Using a translation lookaside buffer in a multiple stage memory address translation structure to manage protected microcontexts
US20110016290A1 (en) Method and Apparatus for Supporting Address Translation in a Multiprocessor Virtual Machine Environment
EP3867763B1 (en) Trusted intermediary realm
MX2008013345A (es) Memoria asociada de instrucciones etiquetada virtualmente con un comportamiento etiquetado fisicamente.
US20090172341A1 (en) Using a memory address translation structure to manage protected micro-contexts
CN105022956A (zh) 一种抵御代码重用攻击的方法
JP2020527777A (ja) レルム階層における目標レルムの無効化
US12001541B2 (en) Parameter signature for realm security configuration parameters
EP3881189B1 (en) An apparatus and method for controlling memory accesses
van de Ven New security enhancements in red hat enterprise linux v. 3, update 3
KR101632235B1 (ko) 디지털 콘텐츠 보호 장치 및 방법
KR20210059212A (ko) 바이너리 난수 주입을 통한 메모리 공유 기반 부채널 공격 방어 방법
CN107203716B (zh) 一种Linux内核轻量级结构化保护方法及装置
CN106096407B (zh) 一种代码复用攻击的防御方法
Blair et al. Mpkalloc: Efficient heap meta-data integrity through hardware memory protection keys
WO2023093385A1 (zh) 一种基于cet机制的保护通用内存完整性的方法
Lei et al. Put your memory in order: Efficient domain-based memory isolation for wasm applications
Zhang et al. Super Root: A New Stealthy Rooting Technique on ARM Devices

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20100317