Linux为美国以外的其它国家提供了自主发展操作系统的一条捷径。主要是因为Linux操作系统本身的源代码是公开的,操作系统开发方可以对源代码自由修改并且从新编译成二进制机器码,也就是说用户可以对系统及网络安全的源代码根据自己的需要在进行研究后而进行修改从而轻松拥有自己版本的操作系统。而特别是在网络安全方面,Linux的关于防火墙及其它网络安全协议的源代码公开性使商家能够更加了解操作系统安全的弱点及漏洞所在,通过对源代码的修改对安全进行加强巩固。可是仅仅是源代码公开并不能解决网络不安全的问题。由于对源代码进行编译的编译程序GCC及Linux的内核(Kernel)程序本身有诸多弱点,这就造成了躲在防火墙后面的Linux系统程序仍然极其容易受到网络黑客的袭击。
防火墙仅仅提供了最基本的网络保护
防火墙的主要目的是封锁不必要的端口,并且对网络通讯数据进行转接过滤。但是只要有开放的端口,网络侵袭便是在所难免。如一般单位网络服务器端口,通常为80号端口,网络服务器主要任务是为用户发送网页因此必须全天开通。而黑客则可以通过浏览网页的HTTP协议轻松通过80号端口穿过防火墙从而对服务器进行攻击。举个例子说,防火墙就好象是一道密集铁丝网,虽然它可以挡住豺狼虎豹的袭击,可是马蜂蚊子还是可以轻松穿过。
GCC的内在漏洞造成服务器易受攻击
由于GCC源于网络前时代,因此对不少由网络而衍生的特殊情况毫无准备。GCC有诸多内在弱点,包括输出命令printf对特殊状态检查不足及对参数值变量值范围检查不足等两点,这些两点会导致内存地址轻易受到突破性侵袭。由GCC加工编译而成的Linux服务器自然就携带了GCC的弱点。这种情况与遗传性基因疾病非常类似,只要是GCC编译成的程序均有此遗传性弱点。黑客经过80号端口通过HTTP协议便可以对组成服务器的printf发送怪异数值或者对其它内存参数值输入超大或者超小值,服务器程序对此特殊状态不知所措便会在内存内胡乱读取内存地址及内容,黑客在获得内存地址后便可对其进行修改从而达到从修改网页内容到瘫痪服务器等各种非法目的。
GCC是Linux,Unix及BSD系统源代码的主要编译程序
修过计算机编程课程的朋友大多使用过GCC。GCC是对C/C++语言及一些其它语言进行二进制码编译的大型程序。Unix家族有三大独立成员,他们分别是美国电报电话公司(AT&T)的Unix, 伯克莱大学(UC Berkley) 的BSD及Linux。GCC目前是Unix家族操作系统的主要编译工具,全世界范围内由GCC编译而成的现行服务器不计其数,也就是说黑客们可以侵害的对象群非常庞大。
治标要治本
GCC的漏洞可以通过对源代码进行保护性修改来弥补。如对网络服务器的源代码中所有的用户输入参数进行参数值范围检测,对超大及超小的输入值不予通过。但是这样的做法会使源代码数量及复杂性大大增加,既费时又难以维护。而对GCC编译器程序的改善则是一个更好的办法。对拥有Linux的单位来说只要用经过安全改善的新版GCC对现有源代码从新编译便可以轻松将安全等级提高到一个新的水平。目前世界上有多个组织及个人正在致力于对GCC改善的研究和开发。美国的Immunix(译:免疫Unix)是目前世界第一家将GCC改进版进行商业化的高科技公司。该公司的GCC改进程序属于GPL协议范围,也就是对编译器GCC修改改善的源代码本身也是公开的。
网络安全前景不容乐观
虽然目前的几个主要漏洞可以通过对GCC的修改补充来填补,但是由于GCC程序非常庞大,可能存在的潜在漏洞还是很多。俗话说:“道高一尺,魔高一丈”,全世界范围内的黑客正在对GCC及Linux和微软操作系统内核的各种潜在漏洞进行潜心研究,网络安全目前的局面是“易攻难守”,黑客们在发现新漏洞后可以迅速发动大规模攻击,而对漏洞的所在的发现和随后的弥补措施则是相对缓慢的。
笔者认为我国自主操作系统的开发及源代码自主是一件鼓舞的事情,但是对源代码编译程序的学习和了解也同样重要。