设为首页 | 成都一卡通
一卡通解决方案
LonWorks 安全体系 LonSec 的构建
发布时间:2014-06-20 来源:未知
为了保障基于 LonWorks 网络的建筑智能化系统网络安全,弥补 LonWorks 网络安全存在的严重不足,结合上一章分析的建筑智能化系统网络安全目标,并在建筑智能化系统网络安全体系框架的指导下设计了一种专门用于 LonWorks 的网络安全体系并命名为 LonSec,其架构如图 5.2 所示,主要由初始密钥分配、传输安全、安全更新以及入侵防御四大部分组成。 
5.3.1   安全防护装置
在设计 LonSec 之前需要引入了一种非常重要的安全设备--安全防护装置(SPU,Security Protection Unit)以作为 LonSec 的基础设施。SPU 作为一个具体的设备在 LonSec 中使用,但在现实中并未实现,图 5.3 所示的是其具有多种功能单元的系统功能结构。
SPU 主要包括以下四个主要功能单元:
①LonTalk 协议单元 
SPU 中的该单元集成了 LonTalk 协议栈,使其具有了相当于 LonWorks 网络域间网关节点的功能,因此可以被部署来连接不同子网,为隔离网络威胁提供条件。
②密钥管理单元
密钥管理单元相当于密钥服务器,是整个网络安全的基础,是数据加密、数据认证以及身份认证等的重要保证。该单位行使密钥管理的相关功能,负责处理密钥从生成到销毁的整个生命周期的相关问题,涉及到密钥的生成、存储、备份/恢复、传递、分配、更新、吊销和销毁等多方面的内容。SPU 中的密钥管理单元管理在 LonSec 安全体系中涉及到的四类密钥:节点与 SPU 之间的通信密钥、SPU所在子网中节点与节点之间的通信密钥、SPU 与所有子网节点的组密钥以及同一子网中的节点与其他邻居节点通信的组密钥。
③安全更新单元
负责软件更新的发布,主要功能是弥补当现场设备安装后发现的软件缺陷。
④入侵防御单元
该单元用于检测网络中的异常流量以及常规方法很难在早期发现的网络攻击(如 DoS 攻击)。一旦发现异常情况,可以将 SPU 转入警戒状态并实施后续防御动作。
5.3.2   传输安全
①安全单播通信
为了远程配置和维护现场设备,需要与受控设备建立连接,而很明显的是必须有安全措施来保护这种单播连接免受网络攻击,同时也有必要验证通信参与双方的真实身份。
为了能够满足此种需求,LonSec 使用会话密钥来加密信息。在会话建立阶段使用的会话密钥具有一定的生存期限,当会话结束后会话密钥便自动失效。而为了能鉴别通信双方身份的确是他们所声称的那样,在会话建立的初期需要验证通信参与者的身份。
假设网络实体 A 与 B 建立安全连接(图 5.4),那么 A 和 B 需要一个会话密钥。因此,A 发送了一个 A_SessionKey_Request 请求报文给所在子网的 SPU,该报文中包含了 B 的私有地址和一个 nonce  N1(用以避免回放攻击,可以是时间戳、足够大的随机数或伪随机数)。然后 SPU 向 B 发送 A_Init_Connect_Request 报文,B收到后回复一个 nonce N。由于 B 是直接将 N2发送给 SPU,B 没有必要将加密的nonce 发送给 A,因此,只有一个 A_SeeionKey_Request 信息被要求发送。在收到A_Init_Connect_Response 后,SPU 产生一个 128 位 AES 的会话密钥 KAB,由于Lontalk 协议的 PDU 中的数据部分还不错大可以达到 229 位,这足以将密钥一次性全部写入。 这个会话密钥必须被分配给通信双方 A 和 B,与使用通行证模式的认证不同,会话的密钥使用 A_Key_Response 报文被传送给双方。为了避免攻击者重放使用旧的会话密钥,报文中将 A 和 B 在与 SPU 通信过程中发送的 nonce N
1和 N2也被包含进去。
此种模式至需要 4 个报文,每一方两个,因此减少了通信量。为了避免 A 在 B接收到会话密钥之前发送 A_Auth_Connect_Request 信息,SPU 必须首先发送会话密钥给 B。此外,A 的传送应该有所延迟,而这个延迟可以设定为一固定值。如果A 在 B 还没有获得会话密钥之前发送用会话密钥加密的报文给 B,那么 A 可以按照设定的时间延迟有重传报文直到 B 收到会话密钥。 在通信双发均收到会话密钥后,A 和 B 的安全通信便建立起来了。为了验证 B的身份,A 发送 A_Auth_Connect_Request 信息给 B。这个信息中包含了一个新的nonce N3
,并且用会话密钥 KAB加密。B 收到信息后,也产生一个 nonce N4,然后,B 将 N3按照事先约定好的策略进行转换(例如, '132N = N−)后随同新产生的 N4一起使用 A_ Auth_Connect_Reply 报文返回。对 N3的转换能够证明 B 是有解密密钥的。在收到加密的回复信息后,A 验证转换过的 '3N 是否正确,如果正确那么 B的身份将被验证为合法。过来,为了验证 A 的身份,A 也将接收到的 N4进行转换,然后同样用会话密钥 KAB加密后使用 A_Auth_Connect_Response 报文回传。 在通信参与双方的身份均已认证过后,A 和 B 就能够安全通信。此外,在后续的所有通信数据除了加密外,还使用了一种能够满足高速通信的加密算法的计数器模式(CTR)。
每一个子网都有一个 SPU,而每个 SPU 均只是存储了处于该子网中所有设备的密钥。因此,如果通信双方处于不同的子网的设备需要会话密钥进行通信,而一方的 SPU 并不知道另一方的密钥。为了处理此类请求,一方的 SPU 必须从另一方得到密钥,因此,每一个 SPU 必须有其父 SPU 和子 SPU 的密钥。 图 5.5 描述了一种解决方法使得这类需求能够满足。假设位于子网 1 的地址为
1.1.1 的网络实体 A 想要与位于子网 2 中的私有地址为 1.2.2 的网络实体 B 建立会话。为了能够得到会话密钥,A 发送一个 A_SessionKey_Request 给所在子网的地址为 1.1.0 的 SPU。SPU S 1.1.0 接收到此请求后由于其具有 LonWorks 路由功能,因此可以发送 A_Init_Connect_Request 信息给 B。B 收到请求后产生一个 nonce。这个 nonce 用 B 和网络地址为 1.2.0 的 S 之间的密钥(表示为 KBS1.2.0)加密。由于SPU S1.1.0 和 B 不是在同一个子网中,SPU S1.1.0 没有密钥 KBS1.2.0,因此SPU S1.1.0不能够解密 A_Init_Connect_Response。
为 了 能 获 得 密 钥 KBS1.2.0 , SPU  S1.1.0 给 父 SPU  S1.0.0 发 送 信 息A_PrivateKey_Request。这个请求包含一个 nonce 和请求密钥的地址。为了避免篡改,此请求信息用 SPU S1.1.0 和 SPU S1.0.0 之间共享的密钥 KS1.1.0S1.0.0 进行加密。SPU S1.0.0 收到请求后,确认其是否有被请求的密钥。由于 B 不在子网 1 中,SPU S1.0.0 发送 A_PrivateKey_Request 信息给 SPU S1.2.0。由于 SPU S1.2.0 存储了请求的密钥,它将密钥用 A_Key_Response 回复给 SPU S1.0.0。SPU S1.0.0 收到 B的密钥以后传送给 SPU  S1.1.0。在收到密钥以后,SPU  S1.1.0 可以解密A_Init_Connect_Response 的信息。现在,SPU S1.1.0 产生一个会话密钥 KAB 并将其传送给通信的双方,此时 A 和 B 可以建立安全通信连接了。
②安全组播通信
建筑智能化系统中的传感器通信主要采用的是组通信的方式,因此为了保证组信息的安全传输,相应的组信息(A_GroupValue_Read,  A_GroupValue_Write  和A_GroupValue_Response)需要使用计数器模式加密。为了使用计数器模式,需要一个组密钥。这个组密钥由组成员共享,组密钥不需要在安装时分配,而是直接通过所在网段的 SPU 获取。整个过程如图 5.6 所示假如网络实体 A 想要接收或者给一个组 G 发送数据,A 必须获得这个组的相应的组密钥 KG。因此,A 发送一个A_Join_Group_Request 报文给相应的 SPU,该信息中包含了组地址和一个 nonce NG。SPU 接收到请求后,验证实体是否有加入这个组的资格。在通过资格审查以后,SPU 用 A_Join_Group_Response 报文发送组密钥 KG
、接收到的 nonce 以及组地址给 A。由于 A 并不知道通过计数器模式加密信息的计数器值,因此 SPU 同时也应该通过发送 A_Group_Resync_Response 信息把当前的计数器值发送给 A。收到组密钥和计数器的值以后,A 便可以接收和发送组信息了。需要注意的是,由于加密使用了计数器模式,因此每个组成员在接收和转发信息时必须增加计数器值。 上面提到过由于加密和解密均使用到了计数器模式,因此组成员对计数器的操作应该同步。如果一个实体丢失了一个组信息,那么实体的计数器就不能同步。
如果一个网络实体意识到它的计数器已经不同步了,那么它可以试着自动少量增加 计 数 器 的 数 值 。 如 果 这 个 也 失 败 了 , 那 么 他 可 以 发 送 一 个A_Group_Resync_Request 给 SPU。SPU 收到这个请求以后就将当前的计数器值写入 A_Group_Resync_Response 信息回复给该实体。同样地,为了防止重放攻击,报文中增加了 nonce。为了能够实现这样的同步机制,SPU 必须跟踪发送的组信息,这意味着 SPU 也必须计算接收到的组信息的数量。
LonSec 同样也提供了吊销组密钥的方法。SPU 发送 A_Group_Invalidate 信息以告知组成员该组密钥已经被吊销。当此报文一发出,原组密钥就自动失效,每个组成员必须发送 A_Join_Group_Request 重新申请一个新的组密钥,需要注意的是每个组成员都有自动获得组密钥的义务。该用于吊销组密钥的机制同样也可以用于限制组密钥的生存期,因为 SPU 可以定期发送 A_Group_Invalidate 吊销原组密钥而产生新的。
5.3.3   入侵防御管理
LonSec 提供了基本的入侵检测服务,每个 SPU 中包括一个集成的入侵检测单元,该单元实时检测网络通信流量并试图发现异常行为。
图 5.7 描述了当一个 SPU 发现异常后进行防御的过程。当 SPU  A 检测到了异常行为便立刻通知其父 SPU B,那么 A 与 B 之间必须首先建立起一条安全连接,而这是通过 LonSec 中的质询-回复(Chanage-Response)机制实现。由于每个 SPU与其父 SPU 都有一个共享密钥,因此交换会话密钥的过程可以省略,而后续的通信均通过密钥 KAB加密。
会话建立以后,A 发送一个 A_IDS_Alert 给 B 以通知检测到的异常。除此之外,该信息中还包含了 IDS 代码和有关入侵的附加信息。B 在收到信息后便可以实施具体的防御措施,例如 B 可以暂时切断受影响网络的通信以待 A 将威胁清除。当A 把威胁解决以后,A 可以发送 A_IDS_Clear 信息通知 B。
5.3.4   安全更新
建筑智能化系统网络设备中的软件必然存在一些或大或小的安全缺陷,由于建筑智能化系统网络设备数量众多,通过手动更新的方式是不现实的,为了能够在被不法分子发现并利用这些缺陷实施安全攻击之前快速更新修补漏洞,LonSec 安全体系设计了一种软件更新机制对这些缺陷进行修复。SPU 中包含负责接收新的软件更新并可进行分配的更新单元。首先,管理员应首先将软件更新发布到 SPU根节点上,然后由 SPU 根节点分配给下属的子 SPU,还不错后安装到每个节点上,更行过程如图 5.8 所示,SPU A 与 B 首先建立发送一系列信息建立安全会话,然后开始传送更新。A 发送 A_Software_Update_Init 给 B,该报文中包含了软件的版本号,以辨别软件的新旧,同时也包含了需要更新的软件补丁数量。
B 收到 A_Software_Update_Init 后完成初始化过程,软件更新被连续传送至 B。
传送更新的信息 A_Software_Update_Patch 中包含更新的大小和用于更新所需内存的大小。更新发送到设备以后,将会比对更新号,从而决定是否进行更新。更新结束后设备应该自动重启或由 SPU 发送 A_Restart 报文强制重启。更新的软件应该存储在可编程内存区域内。
5.3.5   初始密钥分配
为了能够获取会话密钥与组密钥,必须建立一条安全加密信道,将被请求的密钥 以 加 密 后 密 文 的 形 式 发 送 出 去 。 例 如 , A_Key_Response 和A_Join_Group_Response 需要加密后传送,因此每个网络节点必须有能与 SPU 通信的初始共享密钥。
在建筑智能化系统安装时,这些共享密钥必须首先被分配到每一个网络节点中,否则不能建立与 SPU 的安全通信信道。分配初始密钥的时候必须在一个安全的环境中进行,保证不会泄露或者窃取。同样,写入网络节点中的初始密钥不能被轻易修改或读出,即使是在网络中的某个节点已经被攻击者俘获的情况下,因此需要保护设备中存储该密钥的内存。 
5.4   本章小结
本章首先对 BACnet、KNX/EIB 和 LonWorks 技术的安全性方面进行了研究,结果显示相比之下只有 BACnet 的安全机制较为健全以外,其他的两种技术均存在较严重的安全缺陷。然后,选择 LonWorks 作为网络技术基础,构建了 LonWorks的安全体系 LonSec,其中还引入了一种安全设备模型用于配合 LonSec 的具体实施。