通过动态检查的静态验证来实施资源边界
1. 引言
如今,用户越来越频繁地在设备(如计算机、个人数字助理、手机等)上下载代码,像软件更新、应用程序、游戏、动态网页、新协议代理、新格式编解码器以及分布式应用程序前端等。然而,与此同时,病毒、蠕虫和其他恶意程序也日益猖獗,可能导致数据损坏、隐私侵犯以及因过度使用系统资源而造成的拒绝服务等攻击,特别是对于个人数字助理和手机等小型设备,资源过度使用问题尤为突出。
在移动代码执行领域,虽然已经有强大的技术来防止数据损坏(如字节码验证),但对资源使用边界的控制相对滞后。本文旨在提供一种高效且灵活的方法,来限制不可信代码的资源使用。这里的“灵活”指的是该方法适用于所有顺序计算机程序,包括那些在运行时才能确定资源使用情况的程序;“高效”则意味着在实施资源边界控制时,它比以往方法进行的运行时检查显著减少。
我们聚焦于代码消费者运行由代码生产者创建的不可信程序这一场景,该程序通过运行时库与消费者的计算机通信,该库提供访问资源的功能。我们考虑的资源既包括物理资源(如 CPU、内存、磁盘和网络),也包括虚拟资源(如文件、数据库连接和进程)。我们的目标是根据代码消费者的安全策略来限制资源使用,该策略明确了每个程序可使用的资源及其相应的使用边界。
我们的技术结合了静态检查和动态检查来实施资源使用边界控制。具体而言,我们静态验证程序的动态检查是否足以实施消费者的安全策略。为支持这种混合检查,我们将获取资源的 acquire
函数与消耗资源的各种函数分开。在当前库中,使用资源时 acquire
和 consume
操作是一起执行的,我们可以轻松地将这些调用