最小特权原则是系统安全中最基本的原则之一。具体来说,指的是“在完成某种操作时,赋予系统主体(用户或进程)所必须的最小特权,确保系统由于事故、错误、篡改等原因造成的损失最小”。
最小特权原则一方面需要系统提供主体必要的特权,以确保操作能够正常、正确地执行;另一方面需要系统“仅仅”提供所必须的特权,限制主体完成计划之外的操作。
很多时候,我们不经意的习惯,恰恰违反了最小特权原则。这些习惯会在一定程度上带来安全风险。例如,在linux系统中,不少用户为了方便,习惯在日常使用时就用Root登录。一旦Root密码泄露,系统就很有可能受到严重的破坏。比较好的做法是,正常操作时使用普通用户,当需要Root权限时,再调用sudo来实现。
最小特权原则在Android系统中同样有所体现。Android为不同的角色创建了很多用户,例如,system, radio, shell, wifi, media等等。不同的用户仅仅赋予了其所必须的系统权限。更有甚者,Android为每一个安装的app都创建了一个单独的用户。这样可以保证app之间无法相互干扰。目前很多Android用户会去Root手机。这样虽然会使系统更加灵活,用户能够更加方便地订制系统;安全软件也能更加方便地对系统进行监控和保护。但是,无形之中,这种做法却违反了最小特权原则,给系统留下了极大的安全隐患。一旦手机被Root,每一个用户都有可能拥有Root权限。一旦某些恶意app拥有了Root权限,就可以肆意地对系统以及正常的app进行注入,篡改,获取其内部数据。轻则系统出错重启,重则隐私数据(例如银行卡密码等)丢失,系统彻底崩溃。
怎样才能在系统不root的情况下,还能够使安全软件正常工作呢?首先我们来分析一下,普通的安全软件有哪些功能。目前市面上的安全软件功能主要有以下几种.
- 电话拦截、短信拦截
- 设置呼叫转移
- 安装、扫描、卸载软件
- 监控、拦截软件的启动
- 广播拦截
- 进程、内存、缓存清理
- 通知管理
- 数据、wifi连接管理
- 网络防火墙
- Android权限管理
要实现这些功能的确需要root权限。在不root的条件下如何满足需求呢?目前市面上有一种做法:将安全软件做为内置应用订制在系统中,并设置用户为root。这样安全软件在运行时就可以获得足够的权限。这种做法一定程度上满足了最小特权的原则。但是仍存在着一些问题:首先,系统一但绑定了安全软件,用户就无法卸载,也无法更换其他品牌的安全软件;其次,安全软件获得root权限后,有可能利用权限上的优势,完成非必要的,甚至而已的功能。例如,可以在用户不知情的情况下搜集其它应用的数据,威胁用户隐私安全;修改系统文件,威胁系统安全和稳定性。
因此,从系统安全性和稳定性上出发,我们提出系统安全SDK的概念.
如图所示,在系统之上增加安全SDK模块,该模块拥有root权限,并提供了安全相关的功能模块。例如,应用管理、通信管理、网络管理等。安全软件在工作时,首先在安全SDK中注册自己,经过授权之后,可以通过调用安全SDK中的API来完成相应的功能。除了安全SDK提供的API外,安全软件无法完成其他操作。这就使得即使是安全软件也无法对系统进行不必要的修改。从而保证了系统的安全与稳定。此外,用户还可以通过安全SDK的UI界面安装、卸载、激活安全软件。
安全SDK满足了最小权限原则,防止root权限不必要的扩散,能够在满足安全软件正常功能的情况下,进一步提高系统的安全性和稳定性。