软件开发者开发软件时的疏忽,或者是编程语言的局限性,比如c语言家族比java效率高但漏洞也多,电脑系统几乎就是用c语言编的,所以常常要打补丁。 软件漏洞有时是作者日后检查的时候发现的,然后修正;还有一些人专门找别人的漏洞以从中做些非法的事,当作者知道自己的漏洞被他人利用的时候就会想办法补救。多年以来,在计算机软件(包括来自第三方的软件,商业的和免费的软件)中已经发现了不计其数能够削弱安全性的缺陷(bug)。黑客利用编程中的细微错误或者上下文依赖关系,已经能够控制Linux,让它做任何他们想让它做的事情。缓冲区溢出是一种常见的编程错误,也是一种牵扯到复杂因素的错误。开发人员经常预先分配一定量的临时内存空间,称为一个缓冲区,用以保存特殊信息。如果代码没有仔细地把要存放的数据大小同应该保存它的空间大小进行对照检查,那么靠近该分配空间的内存就有被覆盖的风险。熟练的黑客输入仔细组织过的数据就能导致程序崩溃,更糟糕的话能执行代码。