CN102592082B - 通过操作码随机化的安全 - Google Patents

通过操作码随机化的安全 Download PDF

Info

Publication number
CN102592082B
CN102592082B CN201110443529.7A CN201110443529A CN102592082B CN 102592082 B CN102592082 B CN 102592082B CN 201110443529 A CN201110443529 A CN 201110443529A CN 102592082 B CN102592082 B CN 102592082B
Authority
CN
China
Prior art keywords
code
executable
operational
conversion
module
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.)
Expired - Fee Related
Application number
CN201110443529.7A
Other languages
English (en)
Other versions
CN102592082A (zh
Inventor
J·C·斯普拉德林
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of CN102592082A publication Critical patent/CN102592082A/zh
Application granted granted Critical
Publication of CN102592082B publication Critical patent/CN102592082B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2125Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Devices For Executing Special Programs (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

本文涉及通过操作码随机化的安全。本文描述了一种当应用被存储在存储器中时改变操作系统或应用代码所使用的操作码的值的操作码模糊系统。该系统在应用代码被加载时使应用代码经受转换过程,从而使得具有变更指令集的代码位于存储器中。如果新的和潜在的恶意代码被注入到进程中,则它的指令集将无法匹配经转换的应用代码的指令集。随着执行应用代码的时间的临近,该系统使应用代码经受将应用代码转换回原始操作码的逆转换过程。被注入到进程中的任何恶意代码也将经受逆转换,它将具有使得恶意代码能够被检测为无效或错误的效果。

Description

通过操作码随机化的安全
技术领域
本发明涉及计算机安全,尤其涉及操作码的随机化。
背景技术
大多数计算机系统通过提供接收执行基本低级操作的一个或多个操作码的中央处理单元(CPU)来工作。一个示例是流行的英特尔x86体系结构,它提供用于移动数据的指令(例如,mov、push、pop)、对数字的数学运算的指令(例如,add、adc、sub、sbb、div、fdiv、imul)、逻辑运算的指令(例如,and、or、xor)、分支到不同执行路径的指令(例如,jmp、jne、jz、ret)、中断指令(例如int)等等。编译器通过编译、链接和汇编的过程将软件开发者用编程语言编写的人类可读的源代码转换成二进制操作码以产生可执行文件。在从用户接收到执行可执行文件的指令后,操作系统将二进制操作码提供给处理器,处理器执行由可执行文件表示的程序的指令。
现代程序利用一般涉及使CPU执行除了应用的作者原先想要的指令之外的指令。这可包括将新的二进制代码以操作码的形式插入到应用的进程中。通常,这通过超出缓冲器的长度(即,缓冲器溢出)来发生,这么做具有盖写函数的返回地址以使得该函数的退出导致控制流分支到被插入到缓冲器中的恶意代码。因为应用程序布局的可预测的本质,这些攻击主要以广泛的方式产生效果。如果每次程序运行时都将数据放在同一位置且用同一方法来处理数据,则攻击者能够可靠地确保同一攻击向量将在许多计算机系统上起作用。
这些攻击全部都以攻击者理解和预测系统行为的能力为基础。攻击者需要理解的最基本的行为就是机器指令代码集(即操作码)以及要执行什么指令以便获得所需行为。为什么许多类型的计算设备没有像个人计算机那样频繁地遭受黑客入侵的一个很大的因素就是它们使用不同的指令集。例如,许多移动电话使用ARM处理器或具有非x86指令集的其他处理器。涉及阻止恶意代码执行的大多数解决方案依赖于开发期间的阻止、对恶意代码的软件检测(例如,反病毒扫描)或管理进程状态的其他手段(例如,随机化堆布局和其他修改的存储器管理程序)。尽管这些方法取得了一些成功,但恶意代码执行仍然是一个重大的问题。
发明内容
本文描述了一种操作码模糊系统,其当应用存储在存储器中时改变操作系统或应用代码使用的操作码的值。应用被存储在存储器期间的时间段以及执行之前是最常见的注入恶意代码的时间。该系统在应用代码被加载时使应用代码经受转换过程,从而使得具有随机指令集的代码位于存储器中。如果新的和潜在的恶意代码被注入到进程中,它的指令集将无法匹配经转换的应用代码的指令集。随着执行应用代码的时间的临近,该系统使应用代码经受将应用代码转换回原始操作码的逆转换过程。被注入到进程中的任何恶意代码也将经受逆转换,这将检测到无效操作码,或者具有使恶意代码执行未知且可能无意义的指令集(可能造成CPU出错)的效果。由未结构化的操作码组成的代码在引起由操作系统捕捉的、终止进程的某种中断或陷阱之前,一般不会执行很长时间。因此,尽管恶意代码会引起可察觉的错误,但应用代码仍将很好地运行。
提供本发明内容以便以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
附图说明
图1是示出在一个实施例中的操作码模糊系统的各组件的框图。
图2是示出在一个实施例中,在为了执行应用代码之前对其进行保持而将其从存储加载到模糊域中时,操作码模糊系统转换应用代码的处理的流程图。
图3是示出在一个实施例中,在应用代码执行时,操作码模糊系统将应用代码从模糊域逆转换到本机域的处理的流程图。
图4是示出在一个实施例中,在操作码模糊系统的操作期间,含有可执行代码的模块的三个阶段的框图。
图5是示出在一个实施例中的操作码模糊系统提供的保护以及保护在什么情况下可发生的框图。
具体实施方式
本文描述了一种当应用被存储在存储器中时改变操作系统或应用代码使用的操作码的值的操作码模糊系统。应用被存储在存储器期间的时间段以及在应用执行之前是最常见的注入恶意代码到该存储器中的时间。该操作码模糊系统在应用代码被加载时使应用代码经受转换过程,从而使得具有随机或伪随机指令集的代码位于存储器中。如果新的和潜在的恶意代码被注入到进程中,它的指令集将无法匹配经转换的应用代码的指令集。随着执行应用代码的时间的临近,该操作码模糊系统使应用代码经受将应用代码转换回原始操作码的逆转换过程。
被注入到进程中的任何恶意代码也将经受这一转换,这将具有使恶意代码执行未知且可能无意义的指令集或将会造成CPU出错的效果。由未结构化的操作码组成的代码在引起由操作系统捕捉的、终止进程的某种中断或陷阱之前,一般不会执行很长时间。逆转换可发生在硬件或软件中。例如,处理器可被修改以在执行之前执行转换。在一种简单的实现中,转换和逆转换组件可共享数字密钥,该系统将该数字密钥与操作码一起经受异或逻辑运算来创建容易逆转但有效的转换过程。以此方式,尽管恶意代码会引起可察觉的错误,但应用代码仍将很好地运行。除了随机或无意义的操作码之外,存在检测是否被注入了恶意代码的许多可能的手段。例如,如果发现无效的随机化操作码,则逆转换组件可生成差错。该组件还可确认任何给定操作码的自变量且如果遇到无效自变量则报错。
通过在机器操作码存储在存储器中时随机化机器操作码的实际值,操作码模糊系统阻止了攻击者可能利用的可预测的机器行为。一种副作用是自修改代码也受到影响,虽然不太常见。随机化在机器的生存期至少发生一次,但还可每次引导甚至每个进程发生一次,取决于硬件设计。理想地,操作码随机化将得到正交的结果集,所以不发生碰撞(例如,)。所得的两个集之间的公共操作码集越小,逆转换越可能预先检测到恶意代码。在某些实施例中,操作码模糊系统随机化机器操作码,并使用查找表来将经移位的操作码转换成对CPU而言是本机的操作码。该系统经操作系统在逐进程的基础上应用这一技术。例如,该系统可招致性能损失,使得系统实现者选择将该系统应用于更易受攻击的进程而不将该系统应用于受信的或性能重要的进程。因此,操作码模糊系统保护计算设备和所选进程免受恶意代码并为应用提供更安全的执行环境。
在某些实施例中,操作码模糊系统充分利用对计算机硬件和操作系统两者的修改来执行本文描述的应用进程。在以下段落中进一步描述选择修改。另外,可能的实现上存在许多可能的变型,取决于适于特定实现目标的保护级别(例如,是只保护特定进程还是保护在机器上运行的所有可执行代码)。
在第一种变型中,操作码模糊系统保护所有的可执行代码。在这种情况下,保护存储器中的任何可执行页,且加载到可执行页中的所有代码都经受转换过程以变更操作码。现代CPU提供对存储器中的页的指定,该指定确定特定页是否可被执行(例如,用于x86处理器的NX“不执行”位)。在硬件支持不可用的情况下,许多操作系统已经被修改为在分配和管理虚拟存储器页的存储器管理单元(MMU)中提供类似的支持。这种变型提供了简易性,因为保护所有代码,但也可招致某些计算设备无法接受的性能折衷。
在第二中变型中,操作码模糊系统只保护具体标记的进程。在这种情况下,特定进程被标记为受保护的,且用于存储操作码的页被标记为“受保护执行”或可由CPU和/或操作系统和MMU解释的另一指定。如前所述,存在与将操作码从它们的本机域转换到经变更的域以及再将它们转换回来相关联的某些成本。通过只保护特定进程,实现者可在任何有用的地方(例如,在处理未证实的输入时)充分利用操作码模糊系统的保护,而在其他位置避免性能损失。
本文描述的保护可发生在各个位置,诸如在没有CPU高速缓存时可发生在CPU中,在有CPU高速缓存时可发生在CPU的高速缓存控制器中,或者在有CPU外高速缓存时可发生在高速缓存控制器中,可发生在MMU中等等。在高速缓存控制器保护代码的情况下,当代码被加载到存储器中时,操作系统调用指示高速缓存控制器应用本机和变更操作码域之间的操作码映射的例程。相反,在CPU中的高速缓存代码加载存储器时,高速缓存控制器将执行从变更域到本机域的反向转换。因此,在CPU高速缓存内,指令将在本机域中。以非正式的方式加载的任何代码将经受第二转换而非第一转换,从而导致不可预测的操作。这一解决方法允许容易维护CPU高速缓存内的现有分支预测代码。
在CPU保护代码的情况下,在变更域中,甚至在CPU 2级高速缓存中维护可执行代码,且在1级高速缓存中完成转换或在评估之前直接由处理器完成转换。处理器负责将可执行代码加载到存储器中,并且由此可实施其他约束(诸如足以加载可执行代码的特定特权级别)。这种变型提供了较高的安全级别,因为可执行代码在它的本机域中只停留了很短的时间段,但这种变型涉及可能昂贵的CPU的再次工作或性能降级。
图1是示出在一个实施例中的操作码模糊系统的各组件的框图。系统100包括代码加载组件110、操作码转换组件120、代码数据存储130、代码执行组件140、逆转换组件150、错误检测组件160和进程选择组件170。这些组件中的每一个都在此处进一步详细讨论。
代码加载组件110将可执行代码从存储位置加载到预执行存储区域。预执行存储区域可包括个人计算机的主存储器、一个或多个高速缓存级等等。对于具有固态持久存储的设备,组件110可将可执行代码的一部分预先高速缓存或存储在固态存储设备(例如,微软TM WINDOWSTM Ready Boost)中。代码加载组件110接收从操作系统外壳或加载器加载可执行代码的请求,并标识与可执行代码相关联的一个或多个模块。在某些实施例中,代码加载组件110可被内置于操作系统的加载器中以截取加载应用代码的所有请求,或者被内置于基本输入输出系统(BIOS)或其他固件层中,诸如可扩展固件接口(EFI)。
操作码转换组件120将经加载的可执行代码从本机域转换到模糊域。代码转换修改至少操作码以及可执行代码的指令流中的可能的其他数据,从而造成难以预测可执行代码的变更。在某些实施例中,该系统在计算机系统每次引导时或在每一进程启动时选择随机数或加密盐并用某种方式使用该值来滚动操作码(例如,逻辑XOR或其他可逆运算)。即使计算机系统在安装操作系统时只选择了随机数,用来模糊操作码的每一计算机系统具有可能不同的数的这一事实也可使得恶意代码作者感到灰心并使得难以在计算机系统上安装将作出任何破坏的代码。随机数生成器的强度、密钥大小和系统熵将确定共享同一变更域的机器的实际数量。
代码数据存储130存储经加载的和经转换的可执行代码以供稍后执行。代码数据存储130可包括一个或多个存储器内的数据结构、文件、文件系统、硬盘驱动器、数据库、基于云的存储服务或用于存储数据的其他设施。如今的计算机系统运行许多类型的应用代码,包括在安装在代码要在其上运行的计算设备上之后经受即时(JIT)编译的托管应用代码。例如,微软TM.NET生产了从中间语言(IL)代码中编译的且准备好被加载并在计算机系统上运行的模块的全局汇编高速缓存(GAC)。在某些实施例中,操作码转换组件120可在这一阶段操作以在程序模块被JIT编译时对它们进行模糊处理。每一次请求加载更传统的本机应用代码时,可在存储器中转换该代码,或者系统可高速缓存本机应用代码的经转换的版本。如今某些操作系统产生模块的预先提取的存储器截图以加速执行(例如,微软TM WINDOWSTM Superfetch),且可修改这些特征以执行并高速缓存上述转换。这节约了进程执行期间的时间,因为二进制代码的经转换的版本在高速缓存中可能已经准备好可供使用。
代码执行组件140接收要执行所标识的存储器内的程序代码的指令。组件140可作为操作系统的存储器管理程序的一部分来操作,或者位于在可执行页要执行的时间略前将其从存储器加载到CPU高速缓存的CPU控制器或高速缓存控制器内。代码执行组件140可从代码数据存储130访问经转换的可执行代码并调用逆转换组件150来逆转该转换。如果自转换时起经转换的代码已经被修改过,诸如由于缓冲器溢出而被注入了恶意代码,则逆转换组件150将原始程序代码转换成本机域操作码并将恶意代码转换成混乱的或引起错误的操作码。
逆转换组件150逆转操作码转换组件120的转换,以将模糊域可执行代码转换成处理器可执行的本机域可执行代码。逆转换组件150可在CPU中操作以转化传入指令流,可在MMU中操作,可在操作系统的各组件中操作,等等。逆转换组件150可接收原始转换所使用的随机数或加密盐以使得转换过程可被逆转。在用逻辑XOR来置乱操作码的情况中,逆转换简单地再次执行同一操一作,而输出是原始操作码集。在更复杂的实现中,操作码转换组件120和逆转换组件150可采用公钥/私钥对或其他匹配密钥集来转换和逆转换操作码。
错误检测组件160检测执行流中的错误操作码。操作码因为以下原因而可能是错误的:因为它们是无效的、因为它们不适合特定上下文、因为它们访问了该指令不具有访问权的数据(例如,访问违规)、因为它们引起了中断或溢出等等。逆转换过程使得在应用最初被加载时被置于应用的可执行空间中的任何恶意代码被转换成随机或无意义操作码或者引起差错。因为正常程序操作码的精确且仔细制作的本质,随机操作码将很快地引起某种类型或另一类型的错误,或者可容易地被检测为超出范围或是无效的。此时,错误检测组件160检测到该错误并采取适当的动作,诸如终止该应用进程。检测错误可通过对错误代码设陷阱并避免对数据的破坏的正常CPU和操作系统机制来发生。
进程选择组件170选择要对哪些进程应用操作码转换组件120以产生模糊操作码。在某些实施例中,系统100不对所有进程应用转换,而进程选择组件170确定给定的进程是否要接收转换。该系统从用户或操作系统厂商接收标识了要为其转换操作码的进程的配置信息。在某些实施例中,操作系统厂商可签署被允许在平台上运行的二进制代码,并使未签署的或不受信的二进制代码遭受转换而受信代码不必遭受转换。作为另一示例,系统100可只对与网络交互或不与网络交互的代码执行转换。这些和其他变型可用于系统100以实现合适的安全和性能级别。
其上实现操作码模糊系统的计算设备可包括中央处理单元、存储器、输入设备(例如,键盘和定点设备)、输出设备(例如,显示设备),以及存储设备(例如,磁盘驱动器或其他非易失性存储介质)。存储器和存储设备是可以用实现或启用该系统的计算机可执行指令(例如,软件)来编码的计算机可读存储介质。另外,数据结构和消息结构可被存储或经由诸如通信链路上的信号等数据传送介质发送。可以使用各种通信链路,诸如因特网、局域网、广域网、点对点拨号连接、蜂窝电话网络等。
该系统的实施例可以在各种操作环境中实现,这些操作环境包括个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子产品、数码照相机、网络PC、小型计算机、大型计算机、包括任何上述系统或设备、机顶盒、片上系统(SOC)等中任一种的分布式计算环境等。计算机系统可以是蜂窝电话、个人数字助理、智能电话、个人计算机、可编程消费电子设备、数码相机等。
该系统可以在由一个或多个计算机或其他设备执行的诸如程序模块等计算机可执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可在各个实施例中按需进行组合或分布。
图2是示出在一个实施例中,在为了执行应用代码之前对其进行保持而将其从存储加载到模糊域中时,操作码模糊系统转换应用代码的处理的流程图。图2和3中描述的过程通常连续地发生,这些过程之间经过某一时间量。在该时间期间,应用代码通常位于存储器中,在该情况下应用代码易遭受恶意黑客企图的干扰。参考图2描述的转换过程呈现由于图3的逆转换而无效的黑客企图,这将具有使得原始应用代码正常执行以及任何恶意代码执行引起可检测的错误的未预期的操作的净效果。
在框210中开始,系统接收指定要加载到进程中以供执行的一个或多个可执行模块的模块执行请求。操作系统通常定义用于包含可执行二进制代码的可执行模块的二进制模块格式,诸如可移植可执行(PE)格式。模块可静态地引用其他模块(例如,PE图像的导入表),和动态地加载其他模块(例如,通过调用微软TM WIN32TM平台上LoadLibrary/GetProcAddress)。相比于在应用的执行期间在该进程外加载的二进制代码,以此方式加载的二进制代码可被信任是无害的或受到其他机制的保护,诸如代码签署。
在框220中继续,系统标识指定的可执行模块中的可执行代码。在大部分情况下,模块的已知格式将指示模块中包含可执行代码的部分。例如,PE图像常常包含指定模块内可执行代码的入口点的“文本”部分或头部。对于预先高速缓存或JIT编译的代码,计算机系统可包含标识可执行区域的调试符号或其他元数据。
在框230中继续,系统加载所标识的可执行代码。操作系统加载程序通常处理可执行代码的加载,包括处理任何静态链接的模块、二进制重定位以避免地址空间冲突、指令流中的绝对地址的修补等等。操作码模糊系统挂钩或修改加载程序进程以插入将可执行代码的操作码从本机域转换到模糊域的步骤。作为一个简单的示例,系统可向每一操作码加0x20从而使得0x55(PUSH EBP,在函数入口处常见的x86栈帧的建立)变成0x75(如果执行将是JNE指令)。
在判定框240中继续,如果系统确定当前过程将由操作码转换保护,则系统在框260继续,否则系统在框250继续。在框250中继续,系统存储已加载的、未转换的可执行代码以供正常执行。系统可将存储器中的代码存储在先前分配的、被标记为以供执行的页中。在框250后,系统完成。在框260中继续,系统将已加载的可执行从本机域转换到模糊域。在某些实施例中,系统反汇编可执行代码以标识每一操作码,随后使用良好定义的且可逆的过程来加扰操作码,不过该过程是恶意代码难以预测的。因为恶意代码无法正确地加扰其自身,所以参考图3描述的去除干扰过程将把恶意软件呈现为无害于它最初的目的。
在框270中继续,系统存储经转换的可执行代码以准备执行。系统可将可执行代码存储在主存储器中、存储在快速存储器高速缓存中、或者存储准备好被执行的代码的另一位置中。当执行代码的时间到来时,系统逆转如参考图3所述的转换过程。在框270之后,这些步骤结束。
图3是示出在一个实施例中,在应用代码执行时,操作码模糊系统将应用代码从模糊域逆转换到本机域的处理的流程图。在框310中开始,系统标识应用代码的当前执行位置。该标识可包括接收正从存储器请求可执行页的通知、遵循CPU的指令指针的通知、在CPU中操作以预先处理指令流的通知等等。系统等到足够接近指出要被执行的操作码的时间才逆转换存储在存储器中的代码的操作码,以减小恶意代码可能渗入合法应用代码的时间窗口。
在框320中继续,系统基于所标识的当前执行位置来检索要被执行的下一批代码。该批可包括存储器页、函数、接下来的N个操作码或代码的其他子集。例如,系统可在操作系统存储器管理程序中操作以检测存储器的可执行页的访问,或在CPU内操作以准备要执行的指令流。
在判定框330中继续,如果系统确定下一批代码已经被转换到模糊域,则系统在框340继续,否则系统在框350继续。允许未转换的代码照常执行,除非系统被设置成转换所有代码。操作码模糊系统允许操作系统或应用请求只用所述过程保护某些代码的安全,而系统基于代码是否被标记为已经经历参考图2所述的初始转换来有条件地逆转该过程。
在框340中继续,系统将检索到的该批代码从模糊域逆转换到处理器可执行的本机域。例如,本机域可包括英特尔x86指令集,而模糊域可包括x86指令集的随机扰动。逆转换将逆转操作应用于先前被应用的转换,并为合法的应用代码产生准备由处理器执行的二进制代码。对于在原始转换时不存在的恶意代码,逆转换过程产生不可预测的、易于出错的二进制代码,预期该二进制代码很快将产生一个或多个可检测的错误。在判定框345中继续,如果系统在逆转换期间检测到报错,则系统跳转至框370以终止过程,否则系统在框350中继续。
在框350中继续,系统将经逆转换的代码提交给处理器以供执行。如果代码是正常应用代码,则它将如程序的作者所设计的那样执行以执行任何它期望的目的。然而如果代码包含被逆转换过程加扰的恶意程序代码,则它在产生某种类型的错误(例如,访问违规、范围错误、溢出等等)之前可能执行若干指令。
在判定框360中继续,如果系统检测到执行错误,则系统在框370中继续,否则系统完成。执行错误可包括由处理器或操作系统设陷捕捉到的一个或多个异常,诸如中断、访问违规、保护报错等等。在某些实施例中,系统使用查找表来逆转换可执行代码。系统可用已知的错误指令来替换要转换无效操作码的任何请求。在大多数指令集中,存在未使用的、被弃用的、被保留以供将来使用等的操作码。系统可将这些代码转换为例如中断,以进一步确保要执行经加扰的恶意代码的尝试将产生异常或其他异常停机结果。
在框370中继续,系统终止应用代码的执行。系统可向用户显示错误、提供附连一调试程序、或向中央服务提交自动错误报告以供将来处理。在任何情况下,应用代码在它已经被破坏之后不会继续运行很长时间,从而确保恶意代码无法进行任何破坏。在框370之后,这些步骤结束。
图4是示出在一个实施例中,在操作码模糊系统的操作期间,含有可执行代码的模块的三个阶段的框图。第一阶段410示出模块的存储在磁盘上的版本。该模块包括一个或多个函数440或用于执行模块的目的的其他可执行代码。操作码模糊系统将该模块加载到存储器中以产生第二阶段420。该图的阴影区域示出使用本文描述的技术被转换或加扰的区域。如第二阶段420所示,函数450在该模块被加载时被转换。稍后,恶意代码460通过缓冲器溢出或其他攻击向量将它本身注入到模块中。因为恶意代码460在模块被加载时还不在,所以它未使用本文描述的技术来进行转换。第三阶段430示出模块处于马上要执行的状态。它可能被保持在CPU高速缓存中、存储器高速缓存中、或CPU内马上要执行的其他位置中。系统已经逆转了模块的可执行代码的转换过程,具有函数470回到它们原始预先转换的状态的效果,但恶意代码480已经被加扰了。在模块执行时,函数470将照常工作,但恶意代码480将产生包括一个或多个错误的非预期的结果。以此方式,操作码模糊系统使得进程的执行更安全。
图5是示出在一个实施例中的操作码模糊系统提供的保护以及保护在什么情况下可发生的框图。该图包括主存储器510、CPU前高速缓存520以及CPU 530(它还可具有一个或多个内部的高速缓存层)。在所示的实施例中,系统在将代码加载到主存储器510中之前转换代码的操作码,而高速缓存控制器或其他实体在代码从主存储器510移动至高速缓存520时转换操作码。因此,在高速缓存520和CPU 530周围存在概念上受信的区域540。注意,系统在各实施例中可被实现为用不同方式来定位受信区域540。例如,在某些实施例中,受信区域540可包括CPU 530但不包括高速缓存520。
在某些实施例中,操作码模糊系统转换数据以及操作码。某些指令集比其他指令集更难以标识操作码。例如,复杂指令集架构(CISC)常常包括可变长度的操作码,从而使得在不反汇编的情况下难以分辨一条代码在哪里停止而另一条代码在哪里开始。在这样的情况下,系统可选择转换整个指令流,包括诸如跳转地址、操作数值等的任何数据。还对数据进行转换没有坏处,因为它还会由逆转换过程被反向转换,除了会招致潜在的额外时间。然而,匹配值是相对快速的操作。
在某些实施例中,操作码模糊系统可将逆转换阶段定位在各个级别处。例如,逆转换可发生在主存储器中、发生在MMU中、发生在2级高速缓存中、发生在1级高速缓存中或发生在CPU本身中。系统实现者可基于安全的目标级别和安排在各个阶段的成本来选择定位。一般地,转换发生得越晚且越接近CPU,进程将越安全。然而,较晚阶段的转换还涉及成本可能很高的硬件修改,诸如修订的CPU。类似地,前向转换可发生在各个阶段,诸如在磁盘上、在加载期间、在主存储器中等等。一般地,转换将在应用代码位于存储器中以等待执行之前发生。
从前面的描述中可以看出,可以理解,此处描述的操作码模糊系统的特定实施例只是为了说明,但是,在不偏离本发明的精神和范围的情况下,可以进行各种修改。因此,本发明只受所附权利要求限制。

Claims (21)

1.一种计算机实现的方法,用于为了在应用代码执行之前对其进行保持而在将应用代码从存储加载到模糊域中时转换应用代码,所述方法包括:
接收模块执行请求,所述模块执行请求指定要加载到进程中以供执行的一个或多个可执行模块;
标识所指定的可执行模块中的可执行代码;
加载所标识的可执行代码;
确定所述进程将用操作码转换来保护;
将已加载的可执行代码从本机域转换到模糊域;
存储经转换的可执行代码以准备执行;
标识所述可执行代码的当前执行位置;
基于所标识的当前执行位置来检索要执行的下一批代码;
在确定所述下一批代码已经被转换到模糊域之后,逆转所述转换过程以将所述可执行代码转换成它的原始形式,且其中被插入到经转换的可执行代码中的任何恶意代码也根据所述逆转换过程转换成无效形式,
其中,前面的各步骤由至少一个处理器来执行。
2.如权利要求1所述的方法,其特征在于,接收所述模块执行请求包括标识包含可执行二进制代码的已存储可执行模块。
3.如权利要求1所述的方法,其特征在于,接收所述模块执行请求包括标识由主模块引用的一个或多个静态链接的模块并加载所述静态链接的模块。
4.如权利要求1所述的方法,其特征在于,标识可执行代码包括基于模块格式来确定模块中的可执行代码的位置。
5.如权利要求1所述的方法,其特征在于,标识可执行代码包括加载标识可执行区域的调试符号或其他元数据。
6.如权利要求1所述的方法,其特征在于,加载所述可执行代码包括挂钩或修改操作系统加载程序进程以插入将所述可执行代码的操作码从本机域转换到模糊域的步骤。
7.如权利要求1所述的方法,其特征在于,还包括,在确定所述进程将不用操作码转换来保护后,存储所加载的、未转换的可执行代码以供正常执行。
8.如权利要求1所述的方法,其特征在于,转换所述可执行代码包括用查找表中标识的新操作码来替换每一操作码。
9.如权利要求1所述的方法,其特征在于,转换所述可执行代码包括标识每一操作码并使用良好定义的且可逆的过程来加扰所标识的操作码,所述过程对于恶意代码是难以预测的。
10.如权利要求1所述的方法,其特征在于,存储经转换的可执行代码包括将所述可执行代码存储在主存储器中。
11.一种用于通过操作码随机化来提供应用进程安全的计算机系统,所述系统包括:
被配置成执行包含在以下组件内的软件指令的处理器和存储器;
将可执行代码从存储位置加载到预执行存储区域的代码加载组件;
将经加载的可执行代码从本机域转换到模糊域的操作码转换组件;
存储经加载的和经转换的可执行代码以供稍后执行的代码数据存储;
接收要执行所标识的存储器内的程序代码的指令的代码执行组件;
逆转换组件,所述逆转换组件标识所述可执行代码的当前执行位置,基于所标识的当前执行位置来检索要执行的下一批代码,并在确定所述下一批代码已经被转换到模糊域之后,逆转操作码转换组件的转换以将模糊域可执行代码转换成处理器可执行的本机域可执行代码;以及
错误检测组件,所述错误检测组件检测执行流中的错误操作码并阻止恶意或经修改的代码正确执行,其中错误操作码经历所述逆转换组件进行的逆转换过程。
12.如权利要求11所述的系统,其特征在于,所述代码加载组件的预执行存储区域包括个人计算机的主存储器,且所述组件接收要从操作系统外壳或加载程序加载可执行代码的请求,并标识与所述可执行代码相关联的一个或多个模块。
13.如权利要求11所述的系统,其特征在于,所述操作码转换组件用于本机域和模糊域,所述本机域包含处理器指令集的操作码而所述模糊域包含能够检测到错误的操作码。
14.如权利要求11所述的系统,其特征在于,所述操作码转换组件修改所述可执行代码的指令流中的操作码,以造成难以预测所述可执行代码的变更,并在所述计算机系统的固件层的加载期间操作。
15.如权利要求11所述的系统,其特征在于,所述代码数据存储包括用于即时(JIT)编译的可执行模块的汇编高速缓存。
16.如权利要求11所述的系统,其特征在于,所述代码执行组件用作操作系统的存储器管理程序的一部分,所述存储器管理程序在每一可执行页要执行的时间之前将所述可执行页从存储器加载到CPU高速缓存中。
17.如权利要求11所述的系统,其特征在于,所述代码执行组件从所述代码数据存储访问经转换的可执行代码并调用所述逆转换组件以逆转所述转换,如果所述经转换的代码自从它被转换以来已经被修改,则所述逆转换组件将原始程序代码转换成本机域操作码并将任何恶意代码转换成引起错误的操作码。
18.如权利要求11所述的系统,其特征在于,所述逆转换组件在所述处理器内操作以将传入指令流转换成未转换的可执行代码。
19.如权利要求11所述的系统,其特征在于,还包括进程选择组件,所述进程选择组件选择要向哪些进程应用所述操作码转换组件以产生模糊操作码,其中所述系统不将所述转换应用到所有进程,且所述进程选择组件确定给定进程是否将接收转换。
20.一种用于控制计算机系统以在应用代码执行时将应用代码从模糊域逆转换到本机域的方法,所述方法包括:
标识所述应用代码的当前执行位置;
基于所标识的当前执行位置来检索要执行的下一批代码;
在确定所述下一批代码已经被转换到模糊域之后,将所检索的这批代码从模糊域逆转换到处理器可执行的本机域;
向所述处理器提交经逆转换的代码以供执行;
在基于不正确的操作码检测到执行错误之后,终止所述应用代码的执行。
21.一种用于控制计算机系统以在应用代码执行时将应用代码从模糊域逆转换到本机域的系统,所述系统包括:
用于标识所述应用代码的当前执行位置的装置;
用于基于所标识的当前执行位置来检索要执行的下一批代码的装置;
用于在确定所述下一批代码已经被转换到模糊域之后,将所检索的这批代码从模糊域逆转换到处理器可执行的本机域的装置;
用于向所述处理器提交经逆转换的代码以供执行的装置;
用于在基于不正确的操作码检测到执行错误之后,终止所述应用代码的执行的装置。
CN201110443529.7A 2010-12-18 2011-12-16 通过操作码随机化的安全 Expired - Fee Related CN102592082B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/972,433 US20120159193A1 (en) 2010-12-18 2010-12-18 Security through opcode randomization
US12/972,433 2010-12-18

Publications (2)

Publication Number Publication Date
CN102592082A CN102592082A (zh) 2012-07-18
CN102592082B true CN102592082B (zh) 2015-07-22

Family

ID=46236041

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110443529.7A Expired - Fee Related CN102592082B (zh) 2010-12-18 2011-12-16 通过操作码随机化的安全

Country Status (8)

Country Link
US (1) US20120159193A1 (zh)
EP (1) EP2652668A4 (zh)
JP (1) JP2014503901A (zh)
KR (1) KR20130132863A (zh)
CN (1) CN102592082B (zh)
AR (1) AR084212A1 (zh)
TW (1) TW201227394A (zh)
WO (1) WO2012082812A2 (zh)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012044576A (ja) * 2010-08-23 2012-03-01 Sony Corp 情報処理装置、および情報処理方法、並びにプログラム
US20130086328A1 (en) * 2011-06-13 2013-04-04 Paneve, Llc General Purpose Digital Data Processor, Systems and Methods
WO2014051608A1 (en) * 2012-09-28 2014-04-03 Hewlett-Packard Development Company, L.P. Application randomization
EP2917866B1 (en) 2012-11-06 2020-01-01 Nec Corporation Method and system for executing applications in an untrusted environment
US20140283038A1 (en) * 2013-03-15 2014-09-18 Shape Security Inc. Safe Intelligent Content Modification
US9178908B2 (en) 2013-03-15 2015-11-03 Shape Security, Inc. Protecting against the introduction of alien content
CN104077504B (zh) * 2013-03-25 2017-04-19 联想(北京)有限公司 一种应用程序加密的方法及装置
US20150039864A1 (en) * 2013-07-31 2015-02-05 Ebay Inc. Systems and methods for defeating malware with randomized opcode values
US9213807B2 (en) * 2013-09-04 2015-12-15 Raytheon Cyber Products, Llc Detection of code injection attacks
US9292684B2 (en) 2013-09-06 2016-03-22 Michael Guidry Systems and methods for security in computer systems
GB2519115A (en) * 2013-10-10 2015-04-15 Ibm Providing isolated entropy elements
KR101536920B1 (ko) * 2013-12-16 2015-07-15 주식회사 에스이웍스 Arm 프로세서 기반의 파일 난독화 방법
US8954583B1 (en) 2014-01-20 2015-02-10 Shape Security, Inc. Intercepting and supervising calls to transformed operations and objects
US8893294B1 (en) 2014-01-21 2014-11-18 Shape Security, Inc. Flexible caching
US9544329B2 (en) 2014-03-18 2017-01-10 Shape Security, Inc. Client/server security by an intermediary executing instructions received from a server and rendering client application instructions
US9659156B1 (en) * 2014-03-20 2017-05-23 Symantec Corporation Systems and methods for protecting virtual machine program code
US8997226B1 (en) 2014-04-17 2015-03-31 Shape Security, Inc. Detection of client-side malware activity
US9075990B1 (en) 2014-07-01 2015-07-07 Shape Security, Inc. Reliable selection of security countermeasures
US9825984B1 (en) 2014-08-27 2017-11-21 Shape Security, Inc. Background analysis of web content
US9825995B1 (en) 2015-01-14 2017-11-21 Shape Security, Inc. Coordinated application of security policies
US10049054B2 (en) * 2015-04-01 2018-08-14 Micron Technology, Inc. Virtual register file
US9813440B1 (en) 2015-05-15 2017-11-07 Shape Security, Inc. Polymorphic treatment of annotated content
US9807113B2 (en) 2015-08-31 2017-10-31 Shape Security, Inc. Polymorphic obfuscation of executable code
US9760736B2 (en) * 2015-09-29 2017-09-12 International Business Machines Corporation CPU obfuscation for cloud applications
US11170098B1 (en) * 2015-11-10 2021-11-09 Source Defense Ltd. System, method, and medium for protecting a computer browser from third-party computer code interference
FR3045858B1 (fr) * 2015-12-16 2018-02-02 Oberthur Technologies Procede de chargement d’une sequence de codes d’instruction, procede d’execution d’une sequence de codes d’instruction, procede mis en oeuvre dans une entite electronique et entites electroniques associees
WO2017156158A1 (en) 2016-03-09 2017-09-14 Shape Security, Inc. Applying bytecode obfuscation techniques to programs written in an interpreted language
CN105868589B (zh) * 2016-03-30 2019-11-19 网易(杭州)网络有限公司 一种脚本加密方法、脚本运行方法及装置
US11349816B2 (en) 2016-12-02 2022-05-31 F5, Inc. Obfuscating source code sent, from a server computer, to a browser on a client computer
CN107315930A (zh) * 2017-07-07 2017-11-03 成都恒高科技有限公司 一种保护Python程序的方法
US10824719B1 (en) * 2017-08-01 2020-11-03 Rodney E. Otts Anti-malware computer systems and method
US10489585B2 (en) 2017-08-29 2019-11-26 Red Hat, Inc. Generation of a random value for a child process
KR102416501B1 (ko) 2017-09-20 2022-07-05 삼성전자주식회사 전자 장치 및 그의 제어 방법
US20190163642A1 (en) * 2017-11-27 2019-05-30 Intel Corporation Management of the untranslated to translated code steering logic in a dynamic binary translation based processor
KR102456579B1 (ko) 2017-12-07 2022-10-20 삼성전자주식회사 암호화 관련 취약점 공격에 강인한 전자 장치 및 그 방법
US10810304B2 (en) * 2018-04-16 2020-10-20 International Business Machines Corporation Injecting trap code in an execution path of a process executing a program to generate a trap address range to detect potential malicious code
US11032251B2 (en) * 2018-06-29 2021-06-08 International Business Machines Corporation AI-powered cyber data concealment and targeted mission execution
US11809871B2 (en) 2018-09-17 2023-11-07 Raytheon Company Dynamic fragmented address space layout randomization
US10884664B2 (en) * 2019-03-14 2021-01-05 Western Digital Technologies, Inc. Executable memory cell
US11741197B1 (en) 2019-10-15 2023-08-29 Shape Security, Inc. Obfuscating programs using different instruction set architectures
US11361070B1 (en) * 2019-12-03 2022-06-14 Ilya Rabinovich Protecting devices from remote code execution attacks
US11403392B2 (en) * 2020-01-06 2022-08-02 International Business Machines Corporation Security handling during application code branching
EP3907633B1 (en) 2020-05-05 2022-12-14 Nxp B.V. System and method for obfuscating opcode commands in a semiconductor device
US20220197658A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Isa opcode parameterization and opcode space layout randomization
US20230273990A1 (en) * 2022-02-25 2023-08-31 Shape Security, Inc. Code modification for detecting abnormal activity

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070039048A1 (en) * 2005-08-12 2007-02-15 Microsoft Corporation Obfuscating computer code to prevent an attack
CN101021886A (zh) * 2006-02-14 2007-08-22 联想(新加坡)私人有限公司 防止恶意软件在计算机系统内执行的方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5825878A (en) * 1996-09-20 1998-10-20 Vlsi Technology, Inc. Secure memory management unit for microprocessor
WO2001086372A2 (en) * 2000-05-12 2001-11-15 Xtreamlok Pty. Ltd. Information security method and system
WO2002071231A1 (en) * 2001-02-15 2002-09-12 Nokia Corporation Method and arrangement for protecting information
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
US20040221021A1 (en) * 2003-04-30 2004-11-04 Domer Jason A. High performance managed runtime environment application manager equipped to manage natively targeted applications
US7500098B2 (en) * 2004-03-19 2009-03-03 Nokia Corporation Secure mode controlled memory
EP1745340B1 (en) * 2004-04-29 2011-04-13 Nxp B.V. Intrusion detection during program execution in a computer
US20070016799A1 (en) * 2005-07-14 2007-01-18 Nokia Corporation DRAM to mass memory interface with security processor
US20070074046A1 (en) * 2005-09-23 2007-03-29 Czajkowski David R Secure microprocessor and method
WO2007049817A1 (en) * 2005-10-28 2007-05-03 Matsushita Electric Industrial Co., Ltd. Obfuscation evaluation method and obfuscation method
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
US8434059B2 (en) * 2009-05-01 2013-04-30 Apple Inc. Systems, methods, and computer-readable media for fertilizing machine-executable code

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070039048A1 (en) * 2005-08-12 2007-02-15 Microsoft Corporation Obfuscating computer code to prevent an attack
CN101021886A (zh) * 2006-02-14 2007-08-22 联想(新加坡)私人有限公司 防止恶意软件在计算机系统内执行的方法

Also Published As

Publication number Publication date
CN102592082A (zh) 2012-07-18
KR20130132863A (ko) 2013-12-05
JP2014503901A (ja) 2014-02-13
EP2652668A4 (en) 2015-06-24
US20120159193A1 (en) 2012-06-21
EP2652668A2 (en) 2013-10-23
TW201227394A (en) 2012-07-01
AR084212A1 (es) 2013-05-02
WO2012082812A3 (en) 2012-08-16
WO2012082812A2 (en) 2012-06-21

Similar Documents

Publication Publication Date Title
CN102592082B (zh) 通过操作码随机化的安全
EP3738058B1 (en) Defending against speculative execution exploits
US20200372129A1 (en) Defending Against Speculative Execution Exploits
Dalton et al. Raksha: a flexible information flow architecture for software security
US20180211046A1 (en) Analysis and control of code flow and data flow
TW201738800A (zh) 用以在環移轉期間保護堆疊的處理器擴展
TW201941049A (zh) 用於轉換詮釋資料處理的指令的系統和方法
Lu et al. AutoD: Intelligent blockchain application unpacking based on JNI layer deception call
Kong et al. Improving software security via runtime instruction-level taint checking
US10528729B2 (en) Methods and systems for defending against cyber-attacks
CN107194246B (zh) 一种用于实现动态指令集随机化的cpu
Zhu et al. Privacy scope: A precise information flow tracking system for finding application leaks
Yoon et al. Pift: Predictive information-flow tracking
Zhang et al. SeBROP: blind ROP attacks without returns
Bresch et al. A red team blue team approach towards a secure processor design with hardware shadow stack
Parikh et al. Aslr and rop attack mitigations for arm-based android devices
Park et al. Microarchitectural protection against stack-based buffer overflow attacks
WO2017201453A1 (en) System and method for probabilistic defense against remote exploitation of memory
Singh Identifying malicious code through reverse engineering
Ruchlejmer Secure Rewind and Discard on ARM Morello
Hossain et al. Software security with hardware in mind
Wang et al. IRePf: An Instruction Reorganization Virtual Platform for Kernel Stack Overflow Detection
Zhan et al. Securing Operating Systems Through Fine-Grained Kernel Access Limitation for IoT Systems
Kim et al. Fast and space-efficient defense against jump-oriented programming attacks
Kisore et al. FFRR: a software diversity technique for defending against buffer overflow attacks

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150720

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150720

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150722

Termination date: 20181216