该技术通过使用随机密钥在程序执行前对其中的原始指令加密、运行时动态解密的方式,使得同一系统中每个进程都具有不同的指令集。由于攻击者在远程访问服务器的场景下无法直接获取目标进程的指令集或密钥,其注入的恶意代码会在执行时因被解密为错误的指令而失效。该技术同样适用于防范脚本和解释性语言的代码注入攻击(例如,SQL注入)。
2003年,G.S.凯西(Gaurav S. Kc)等人首次提出了指令集随机化这一技术,他指出代码注入攻击的成因是攻击者已知目标机器的指令集(例如,x86机器码,SQL查询语句等),而指令集随机化技术通过加密指令的方式随机化进程的指令集,有效阻止攻击者注入的外部代码被正常执行。但该方案仅适用于静态链接(即不使用外部动态链接库)的程序,且因采用虚拟机翻译等原因导致开销较大。2005年,A.N.索瓦雷尔(Ana Nora Sovarel)等人首次提出了对抗指令集随机化技术的猜测攻击。2010年,G.波托卡利迪斯(Georgios Portokalidis)等人利用动态插桩框架Intel PIN替代了虚拟机翻译技术,在一定程度改善了性能开销问题,不仅首次支持动态链接库,采用的多次随机化手段也能够对抗猜测攻击。
由于性能开销大、技术实现和特定架构相关、以及难以较好解决猜测攻击等问题,指令集随机化技术尚未被实际应用在操作系统中。