[嵌入式Linux系统安全性探析] 嵌入式软件工程师
摘要:阐述了嵌入式Linux内核系统存在的安全性问题,重点分析了增强安全性若干种方法及原理,根据嵌入式产品受尺寸和成本约束的特点,给出了增加安全模块、设置软件防火墙和嵌入式系统特有的方法来增强系统的安全性。
关键词:嵌入式;Linux系统;LSM;系统安全;防火墙
中图分类号:TP309.1文献标识码:A文章编号:16727800(2012)008018502
作者简介:王友顺(1982-),男,硕士,郑州信息科技职业学院信息工程系助教,研究方向为嵌入式系统与应用;曲豪(1975-),男,郑州信息科技职业学院信息工程系助教,研究方向为嵌入式系统与应用。
0引言
社会发展日新月异,物联网离百姓生活越来越近,目前很多运行在局域网甚至Internet上的产品如雨后春笋般涌向市场,比如:智能家居、安卓手机等。这些产品在方便用户的同时也出现一些安全问题,系统置于网络上相当于暴露给所有人,故对嵌入式产品安全性研究刻不容缓。嵌入式产品由于尺寸、成本的约束注定不可能从硬件部分提供更多的安全措施,故提升安全性重点应考虑Linux内核。
1嵌入式Linux系统存在的安全问题
开源的Linux内核无论在功能上或性能上都有很多优点,但Linux内核属于开源项目,缺少提供商的安全保证,所以需要使用者最大限度地提升系统的安全性。根据实际情况裁剪Linux内核,并采取适当的安全措施可提升系统的安全性。掌握Linux核心技术、配合先进的安全模型、增强其安全性进而研发安全的操作系统非常有必要。Linux的安全性问题从机制角度可以有以下几点:
(1) Linux系统访问控制。Linux系统主流发行版本的访问控制属于自主访问控制;自主访问控制控制模式任何一个活动主体对应用户标识和组标识。显然自主访问控制模式的问题是忽略了用户的角色、程序可信性等安全信息,故不能提供有效的安全性保障。
(2) Linux系统管理。Linux系统中用户可以分为两类,一类是普通用户,另一类是管理员用户。Linux系统管理员用户拥有系统所有权限,包括用户管理、设备管理、审计管理和安全管理等;这样方便了管理员管理,易于用户操作,但是违背了“最小特权”管理原则。Linux系统的安全性只是建立在管理员必须正确设置系统功能、且不被冒充和不存在安全漏洞等一系列假设的基础上。显而易见这样的系统存在巨大的风险,假如系统管理员被非法控制,系统将没有安全性可言。
(3) Linux系统日志。Linux系统中的日志功能从设计到实现不是以系统安全为目标而是以内核调试为目的;此与系统安全审计有很大差距:第一,缺乏资源访问方面的记录;第二,不能详细记录系统发生的事件;最后,缺少必要数据分析与警告。
由此可见,嵌入式Linux内核自身的安全功能相当薄弱,对于安全性要求比较高的产品,则需要提高Linux内核的安全性。
2安全性问题解决方案
提升Linux安全性所采取措施主要有在Linux系统内核使用安全模块和安装必要的防火墙,还有一些嵌入式特有的安全措施。
(1) 使用安全模块LSM (Linux Security Modules)。2001年一次Linux内核峰会中美国国家安全局推出了他们的安全增强Linux(SELinux),与此同时Linux内核创始人提出,Linux内核作为一个开放的系统的确应该有一个通用的安全访问控制框架,不过也提出应该可以使用加载内核模块的方式来支持不同的安全模块, Linux内核的安全模块从此产生。下面可以通过图1来了解一下安全模块工作原理。
从图1中可知,Linux安全模块工作原理是通过使用函数回调的方法,系统根据用户配置来判断内核对象的访问。系统运行进程执行系统调用时找到I节点并分配相关资源,就在即将访问相应的对象时,系统立即调用Linux安全模块提供的函数,对安全模块提出疑问:“是否允许访问该对象?”,安全模块根据用户设定的安全策略进行判断该次访问是否具有相应的权限。在安全模块里可以调用不同的安全模块,使用较多的有SELinux 、Smack (Simplified Mandatory Access Control Kernel)、TOMOYO等。
图1安全模块工作原理
SELinux安全模块。该模块的使用使得系统由原来的自主访问机制改变为强制访问控制机制。但是SELinux安全模块并不适用于处理能力有限嵌入式产品,原因有以下几点:首先,SELinux模块的细粒度访问控制造成安全策略的复杂性,例如:Fedora发行版本里就超过800 000行,如此复杂的安全策略肯定不能应用于嵌入式系统;其次,在使用SELinux模块后,若要运行某一个进程时,需要给出所有要调用函数的权限才能运行,在本身资源短缺的嵌入式产品里非常不适用;另外一点,当系统安全策略频繁改变时,要将文件系统重新设置且重新装载到内核里,嵌入式文件系统一般都烧写在FLASH中,需要重新烧写文件系统,这对于最终用户是不可能实现的事。使用SELinux模块后,要求系统支持文件扩展属性,而嵌入式系统经常采用的文件系统有CRAMFS、JFFS2等,这些文件系统本身不支持属性扩展。由此可见,SELinux安全模块不适合在嵌入式产品中使用。
Smack安全模块的原理与SELinux模块一样,同样是强制访问控制的一个实现,与SELinux不同的是使用简单的配置策略来代替配置复杂的SELinux。因为Smack安全模块基于标签实现强制访问控制,故需要支持标签的文件系统支持。使用Smack安全模块需要完成3部分工作:配置修改Linux内核支持Smack、设置Smack脚本以及用户空间应用程序的修改。基于标签实现强制访问的Smack模块需要修改根文件系统,所以Smack不适合作为嵌入式系统的安全模块。
TOMOYO安全模块是基于路径名的强制访问控制安全模块,由NTT DATA公司开发和维护。MOTOYO 身材较小,只有100K左右代码、300K策略文件,是一个典型的基于路径面向行为的系统分析者和保护者,适合在嵌入式产品使用。MOTOYO安全模块拥有图形界面编辑策略工具,方便用户编辑策略,除此之外还支持友好的学习模式与强制模式。