分享

SCADA网络安全问题

 老黄兄 2014-10-15

       从一个软件工程师的眼光来看,今年Luigi Auriemma发现的SCADA安全问题和NSSLabs发现的西门子公司的缺陷是非常有趣的。作为工业控制器、嵌入式设备、PLC研发领域的积极分子,我队另一个网络安全问题的处理比较有经验——不是如何制止漏洞,而是发现这些漏洞是怎么产生的。

       Auriemma试图通过反汇编查出SCADA漏洞的根源以及造成34项漏洞的根本原因。很有意思的是, “缓冲区溢出”错误是其中最常见的一个。正因为它如此常见,所以把它排在了“25个最危险的编程错误”的第三位。

Programming 101课上睡着了?

       这点令人很沮丧—所有学生“Programming 101”课程上都会学习到的一个如何避免的编程错误竟然是全世界范围超过百万套SCADA装置要面临的网络安全问题的来源。被Auriemm作为研究目标的SCADA包中的一个包上有太多的缓冲区溢出错误,我怀疑包含缓冲区溢出的代码很有可能是由一个程序员写的,而这个程序员在写代码时多次犯了同样的错误。

在基本路径上受阻?

       我对这一点一点也不惊讶。大多数工业、嵌入式和PC软件都是用C(C++)写的,这些语言对缓冲区溢出问题很敏感。许多程序员只对“基本路径”编码而不考虑“不可能”的情况。

       例如,在处理邻近SCADA站通讯的代码中,程序员“知道”SCADA站发送了25个字节的数据给B站。程序员是怎么知道这个的?因为他也写了这样的代码。所以处理B站上收到数据的代码使用了25个字节的缓冲区用来暂时存放收到的信息。为什么要浪费内存来分配更大的缓冲区呢?完全没有必要,没有人会发送更多的数据。

       如今时代不同了。不能相信在网络连接的另一端只有SCADA“A”站。现在黑客“H”可能就是发送信息的人。黑客故意地发送给“B”站一些额外的字节,“B”站就会出现缓冲区溢出的问题,从而黑客便有了可利用的漏洞。

       为什么会有这些的代码?为什么这样的代码依旧存在?很简单,它已经存在了数十年了,或许是90年代时某个人写的,软件一直正常的工作,没有必要更改。在那个年代,CPU的速率慢内存也很小,没有人听说过黑客所以也就没有必要防御黑客,有很多充分的理由编写所谓的“高效的”“快速的”代码。

       年复一年,每一个新发布的产品中都包含了相同代码。多年来,没有人仔细考虑这几行存在于无数代码中服务于同一产品的代码。但是自从2011年起,时代突然发生变化了。

供应商—请在黑客攻击前查出漏洞

       供应商已经修复了很多Auriemma / NSS实验室检测出的漏洞,但这就意味着就没有更多的漏洞吗?我们不知道,但是,由于研究团队才刚刚开始查找漏洞,我打赌一定还有更多的安全漏洞等待检查。也许到了供应商在黑客攻击前就检查出漏洞的时候了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多