协议设计
安全问题常被忽视
一般设计人员制定协议之时,通常首先强调功能性,而安全性问题则是到最后一刻、甚或不列入考虑范围。在网络应用环境下,安全问题尤须更加注意。
架构在其它问题之上
选用其它基础协议时,必须要注意该协议是否易于了解、易于实作。就算费尽心思制定完善的协议,若架构在不风固的基础之上,其结果可想而知。 以CERT®/CC (computer emergencyresponse team, http://www.cert.org/ ) CA-2001-18 [LDAP] (http://www.cert.org/advisories/CA-2001-18.html) 及CA-2002-03 [SNMP] (http://www.cert.org/advisories/CA-2002-03.html) 两起安全事件为例,两者发生问题的原因类似 (皆起因于BER编码处理问题),但前后事件相隔近七个月,却不见厂商重视。
流程问题
设计协议时,可能考虑不够周全,导致发生状况时,系统处理方式不当。如CERT CA-1996-21 TCP SYN Flooding (http://www.cert.org/advisories/CA-1996-21.html) 问题。
设计错误
协议设计错误,导致系统服务容易失效或容易招受到攻击。
■软件实作
实作错误
就算协议订定正确,实作协议时若发生错误,或实作人员对协议的认知错误,同样会导致安全漏洞。
程序错误
安全漏洞也常因程序撰写习惯不良引起,其中包含常见的未检查资料长度内容、输入资料容错能力不足、未检测可能发生的错误、应用环境的假设错误、引用不当模块、未检测资源不足等。
■人员操作
作业疏失
最严格规定,若操作人员未受过良好训练、或未按手册操作,同样会导致安全的漏洞。把守网络安全最重要公司之一的VeriSign,仍曾经因为操作人员的疏忽,导致发生重大的安全损失,就是一例 (CERT CA-2001-04)。
■系统维护
默认值不安全
许多软件或操作系统在安装完成后,是处于极度不安全的状况下。而这些预设环境背后的理由竟是为了方便用户,诚然,用户是方便了,不过此处所指的用户,范围也同时包含了病毒、蠕虫、特洛依木马等等不速之客。也难怪「Code Red」、「SirCam」、「Nimda」等等,能够大肆侵扰网络用户。
未修补系统
一般软件多多少少都会有些错误,勤于修补才能让系统免遭破坏。
萧墙祸起
或许你不愿相信,但对系统发起攻击的,通常是你信任的系统。在你信任的领域里 (通常这信任关系太过薄弱) 若存在不够安全的系统,这不够安全的系统很快就会成为下次攻击的跳板。一个领域的安全强度,等同这领域中最不安全系统的安全强度。