软件漏洞的最常见的软件漏洞
缓冲区溢出是一种常见的编程错误,也是一种牵扯到复杂因素的错误。开发人员经常预先分配一定量的临时内存空间,称为一个缓冲区,用以保存特殊信息。如果代码没有仔细地把要存放的数据大小同应该保存它的空间大小进行对照检查,那么靠近该分配空间的内存就有被覆盖的风险。熟练的黑客输入仔细组织过的数据就能导致程序崩溃,更糟糕的话能执行代码。幸亏近年来缓冲区溢出攻击发生的显著数量提高了编程界对这个问题的认识。虽然缓冲区溢出仍然在出现,但它们经常会被很快发现和纠正,特别在开放源代码应用中更是如此。像Java和.Net这样的比较新的编程体系都包含自动检查数据大小,防止发生缓冲区溢出的机制。缓冲区溢出是称为输入有效性漏洞的更大一类软件安全缺陷下的一个子类。几乎所有的程序都接受某种类型的用户输入(例如,命令行参数或者HTML表格)。如果代码没有严格检查输入的格式和内容是否合适,就开始处理数据,那么就会发生问题。考虑下面这个简单的例子:这段代码的意图可能是打印/var/www/html下某个HTML文件的内容,/var/www/html是Red Hat服务器上Apache的httpd服务程序默认的文档根目录。这段代码接受用户输入的一个文件名,把它作为参数传给open函数。不过,如果一个恶意的用户把../../../etc/shadow当作参数输入的话,就会显示出/etc/shadow的内容,并可能根据这些内容破译出root密码!作为一名系统管理员,您该如何防止这种情况发生呢?几乎无可奈何,至少在确定出缺陷(bug),并发布解决它的补丁之前是这样。紧盯补丁和安全性公告的发布,这是大多数系统管理员工作的一个重要部分。大多数Linux发行版本都带自动打补丁的工具,如Fedora上的yum、Debian和 Ubuntu上的apt-get。利用这些工具能让您的站点避免出现软件的安全漏洞问题。
避免软件漏洞是不可能的
任何系统都存在漏洞的风险,没有例外!主要是因为所有的系统都是由软件,硬件,网络再加上应用组合而成;而所有的部件都存在漏洞风险。从逻辑上来推演,的确不可避免,但是从实际运作上,可以透过严谨的主动防护,快速准确的漏洞查补,以及平时的迭代更新,可以将风险降到最低。管理无序,未进行威胁优先级排序。无法对威胁进行正确优先级排序是企业目前在漏洞管理环境中面临的最严重的问题之一。太多企业通过扫描识别安全漏洞,然后直接进入修复阶段。在某种程度上,这种紧迫性是可以理解的。但未能有效地确定优先级可能会导致时间和资源的浪费,因为团队竞相解决的可能是那些对业务关键资产没有真正风险的漏洞。