搜索
您的当前位置:首页正文

威努特工控安全---工控系统安全威胁建模入门

来源:小奈知识网


工控系统安全威胁建模入门

安全开发生命周期

近来工控安全日益受到大家的重视,但是大部分时间大家谈论的主要还是边界安全、网络安全、主机安全、日志审计等,今天我们换个话题,聊一聊工控系统(产品)开发过程中的安全设计。

工控系统(产品)开发和传统的软件过程一样,也可以大致分为需求、设计、编码、测试、发布维护等几个阶段。

要实现一款安全的工控(系统)产品,安全必须从需求开始就被考虑进去,否则很难保证最终版本的安全。ISASecure是国际最权威的工控系统(产品)安全认证机构,其对工控系统(产品)的安全认证要求就包括安全开发过程的评估,要求安全必须是在开始就被正确的设计(审核安全开发生命周期相关文档),并最终落实到产品中(审核设计的安全属性是否正确落实到产品中,可以在产品中验证)。

所以,安全开发是贯穿工控系统(产品)的整个生命周期的事情。 一个完整的工控系统(产品)开发生命周期如下图:

在该图中,上半部分是业务开发生命周期,下半部分是安全开发生命周期,两者融合在一起形成完整的系统(产品)开发生命周期。

我们今天主要讲讲安全设计阶段的威胁建模。

威胁建模

威胁建模是安全设计的一部分,目的是识别系统里的安全风险,确保系统被安全的设计。 风险,指没有发生的,可能带来损失或伤害的危险。要识别没有发生的事情,就需要使用抽象的方法和概念来思考问题,也就是安全威胁建模方法。使用安全威胁建模的方法,可以更全面的识别出系统的安全威胁,有利于设计更安全的系统。

一个可靠安全的系统一般都需要做两种模型分析:系统业务模型、安全威胁模型。

安全威胁建模有多种方法,我们今天讲的是来自微软的STRIDE建模方法,这个方法被广泛应用于微软的各个产品。

STRIDE 是5个英文单词的缩写,包括:

 Spoofing 假冒:伪装成非自己真实身份的人或物。  Tampering 篡改:修改自己不应该修改的东西。

 Repudiation 否认:宣称自己没做某事(不管是否做了)。

 Informatica Disclosure 信息暴露:将信息暴露给没有权限查看这些内容的人。

 Denial of Service 拒绝服务:阻止系统提供正常服务(系统崩溃、运行缓慢、内存溢

出、硬盘占满…)。

 Elevation of Privilege 权限提升:做了自己本来不能做、没权限做的事。

任何一个信息系统的安全属性都可以划分为6个类别:真实性、完整性、不可否认性、机密性、可用性、授权。STRIDE威胁建模方法所研究的威胁对应的就是这6种安全属性。

 假冒——真实性  篡改——完整性  否认——不可否认  信息暴露——机密性  拒绝服务——可用性  权限提升——授权

前面我们提到,系统开发需要两种模型:业务模型和安全模型,必须依赖于完整细致的业务模型,才能建立完善的威胁模型。业务模型中最有利于做STRIDE分析的是业务数据流模型(DFD),因为安全威胁主要针对的就是业务数据和信息。

一个完整的数据流模型,需要详细描述数据在不同机器、进程之间的转移、交互、存储。如果数据流模型不完整,就可能形成安全短板,安全威胁模型不完整,最后造成安全问题。

数据流模型的主要元素:

 进程:计算机上运行的计算或程序。

 数据流:通过网络连接、命名管道、RPC通道等移动的数据。  数据存储:表示文件、数据库、注册表项以及类似项。  外部实体(交互方):系统交互的端点,例如人、web服务器和服务器。  信任边界:表示可信元素与不可信元素之间的边界。 信任边界与威胁密切相关,好的威胁模型最关键的就是划清楚边界在哪,以及如何保护边界。信任边界的基本原则就是:永远不相信边界另一端的任何事物。

工业控制系统都比较复杂,一般采取自顶向下逐步分解的方法来画数据流图,比如:

比如说一个基于OPC协议的工控系统,在DTD的第一层,将系统作为整体,描述和外部的接口;第二层,内部划分出OPC客户端、OPC服务器、PLC等;第三层,再细分内部的各个进程。如果有的组件比较复杂,应该单独作为子图来画DFD。

画DFD的关键是:

1)数据不是凭空臆造的,确保对于每个数据存储,都有读取者或写入者。 2)数据传输过程,确保始终有一个进程读取和写入数据。 3)识别信任边界。

根据DFD,结合STRIDE方法,就可以进行威胁建模了。不同的实体对应STRIDE中不同的威胁类型,对应关系见下表: S 仿冒 √ T 篡改 √ √ √ R 否认 √ I 信息泄露 √ √ √ D 拒绝服务 √ √ √ E 权限提升 √ 进程 数据流 数据存储 外部实体 √ √ 根据这个表,对DFD中的每一个元素和数据流做相应的威胁分析,最后形成业务数据流程图和对应的安全威胁列表,就建立起了整个工控系统的安全威胁模型。

比如上述的工控系统,OPC客户端需要监控OPC服务器,那么就会存在OPC客户端到OPC服务器的数据流,但是两者明显处于不同的服务器,实际部署时可能经过不同的子网,不处于同一个信任域。

对于OPC客户端,存在下面的威胁:

1、 仿冒:OPC客户端不是真实的终端,是假冒的进程。

2、 篡改:OPC客户端是真实的终端,但是已经被篡改,可能被植入了非法程序。

3、 否认:OPC客户端不承认下发过的指令,出了事故无法追查。

4、 信息泄露:OPC客户端采集的数据被其他进程或机器窃取,造成数据泄密。

5、 拒绝服务:OPC客户端因为采集了大量数据,造成内存溢出或硬盘占满,系统不可

用。

6、 权限提升:OPC客户端监控了本来不应该监控的OPC服务器,造成业务混乱。 对于OPC客户端和OPC服务器之间的数据流,存在下面的威胁: 1、 篡改:监控的数据被中间人篡改,拿到的数据是假数据。 2、 信息泄露:监控的数据流被旁路监听,导致数据泄密。 3、 拒绝服务:监控的数据流太多,导致链路拥塞,网络中断。

经过这样的分析,就明白了系统潜在的威胁点,可以进一步做安全设计了。 下图就是国外基于DFD做STRIDE建模分析的案例,大家可以参考一下:

威胁缓解

每一种安全威胁,都有多种可选的解决方案,需要衡量人力、技术、发生概率、影响程度等多种因素后,才能找到合适自身的方案进行详细设计并落实到具体的产品版本中。

在工控系统中,针对安全威胁,可以采取的缓解措施如下:

威胁类型 仿冒 篡改 否认 解决方案 身份认证、数字签名、多因子认证 访问控制、完整性验证、数字签名 日志记录 信息泄露 拒绝服务 权限提升 访问控制、权限控制、加密、白名单 访问控制、配额、防DDoS、白名单 访问控制、权限控制、白名单 这个表里面的每一个方案都涉及很多细节问题,比如加密使用什么样的加密算法,身份认证的密码如何保存,权限控制如何设计,这些问题我们以后再找时间慢慢详聊。

小结

1、 只有全面分析了系统(产品)的安全威胁,才能采取合适的安全措施,保证系统的安全。安全威胁建模是全面梳理系统安全威胁的有效方法。 2、 安全是为了保证业务,基于业务数据流模型做安全威胁建模是威胁建模的最佳方案。 3、 STRIDE威胁建模方法对应了信息系统的所有安全属性,是一种完备的威胁建模方法。

4、 每一种安全威胁在业界都有多种成熟的应对措施,需要针对威胁做评估,找到合适的解决方案。

5、 小威可以为工控安全提供全面的解决方案和安全咨询,记住工控安全找小威!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top