《Computer Networking: A Top-Down Approach (8th Edition)》第八章 “Security in Computer Networks” 的学习笔记。
What Is Network Security?
secure communication 有下列性质:
- confidentiality: 由于通信可以被拦截,保密意味着需要以某种方式加密
- message integrity: 保证消息未被修改
- end-point authentication: 能够确认对方的身份
- operational security: 保护 organization network 不被攻击
intruder 可以对 message 进行 eavesdropping、modification、insertion、deletion,进而实现各种攻击。
在网络中,需要进行 secure communication 的双方可能是两个人类用户、可能是 client 和 server、可能是两个 router……
security functionality 可以在网络的各个 layer 提供。虽然底层的 security 看起来覆盖了高层的 security,但并非完全如此,例如 IP-layer security 不能区分 IP address 相同的多个用户。并且,底层协议的更新、普及相对更慢,在上层采取措施可以更快生效。
Principles of Cryptography
plaintext (cleartext) 经 encryption algorithm 得到 ciphertext,由 decryption algorithm 回到 plaintext。
encryption algorithm 一般是公开的,为了达到保密的效果,还需要使用 key。设 plaintext 是 ,sender 使用 key 进行 encrypt 得到 ,receiver 使用 key 进行 decrypt 得到 。
在 symmetric key system 中,,是保密的;在 public key system 中, 是公开的, 是保密的。
Symmetric Key Cryptography
在现代密码所使用的 block cipher 中,plaintext 被划分为若干个 block,例如在 AES 中每 128 bit 是一个 block,cipher 会构建一个 的 plaintext 到 ciphertext 的一一对应,而 key 用来生成这个对应关系,AES 的 key length 可以是 128/192/256 bit。太小的 block size / key length 会导致安全性不够;将整个对应关系存下来 key 会过长,所以只能用没那么长的 key 来生成对应关系;太大的 block size / key length 可能会影响性能。
如果 plaintext 中有多个相同的 block,它们对应的 ciphertext 也相同,就会暴露出一定的信息。为了避免这样的风险,可以给每个 block 异或上一个随机数再加密。
如果真的每个 block 都独立地生成一个随机数,则传输时需要附上这一堆随机数,整个 message 的长度会翻倍。所以实际上并不会这样做,而是会使用称作 cipher block chaining (CBC) 的技术:每条 message 只生成一个随机数,称作 initialization vector (IV),记作 ,而 plaintext 的第一块记作 ,对 加密得到 ,即每个 block 异或的是上一个 block 的加密结果,这样传输时的 overhead 就只有一个 block size 的 IV 了。
Public Key Encryption
symmetric key cryptography 需要双方以某种方式事先做到共享 key,而这本身就需要 secure communication。以前这可以通过线下之类的方式进行,而在网络中则需要另外的方式。
在 public key encryption 中,接收方有一对 key,public key 用来加密,private key 用来解密。public key 是公开的,从而不需要事先依赖于 secure communication 进行 key exchange。
public key encryption 带来身份认证的问题:在 symmetric key cryptography 中,知道 key 隐含了身份,但知道 public key 则不代表身份,所以需要额外的机制来进行认证。
RSA 是目前最流行的 public key encryption algorithm:
- 选两个大质数 和 (一般要达到 1024~4096 bit 长)
- 令 ,
- 选一个比 小、和 互质的数
- 算出 的乘法逆元
- public key 是 ,private key 是
- encryption: 设 plaintext 是 (),则 ciphertext 是
- decryption:
RSA 的计算比 AES 慢,为了性能,通常会结合 symmetric key cryptography 一起使用:每次生成一个用于 symmetric key cipher 的 session key,通过 public key encryption 来进行 key exchange,实际的通信则使用 symmetric key cipher。
RSA 的安全性依赖于大数分解的困难性,这受到量子计算的挑战。
Message Integrity and Digital Signatures
message integrity 即 sender 身份真实,message 未遭篡改。
cryptographic hash function 在一般的 hash 的基础上要求难以构造 collision,从而可以用来验证消息未被篡改。
可以用 message authentication code (MAC) 来验证 message integrity:双方共享保密的 authentication key,设 message 是 ,cryptographic hash function 是 ,最终传输的是 (具体实现可能有所不同,例如 HMAC 会 hash 两次)。可以使用 public key encryption 或者其他方式来 exchange authentication key。MAC 本身可以不涉及 encryption,如果只需保证 message integrity 而不在意 confidentiality 则无需付出 encryption 的性能代价。
digital signature 相当于 MAC 的 “public key 版本”,可以用来验证 sender 的身份,而验证者只需知道 public key,可以保持 private key 的私密。RSA 的 encryption 和 decryption 其实是可交换的,即先 public key 再 private key 或者先 private key 再 public key 都可以得到原来的 plaintext。digital signature 即使用 private key 进行“加密”,而使用 public key 进行“解密”。RSA 计算慢,所以可以对 cryptographic hash 而非 message 本身计算 digital signature。
虽然 MAC 和 digital signature 功能有一定的类似,但 MAC 可以完全不涉及 encryption,digital signature 则依赖于 public key infrastructure (PKI)。
digital signature 验证的是 message 和 public key 的对应关系,还需要额外的措施来保证 public key 和 entity (sender) 的对应关系。certification authority (CA) 提供了这一服务,通过某些手段认证 public key 和 entity 的对应关系,并颁发 certificate,certificate 包含 entity 和 public key 的相关信息(以及有效期)以及使用 CA 的 public key 对这些信息创建的 digital signature。有了 certificate,对 public key 和 entity 之间关联的信任取决于对 CA 的信任。
End-Point Authentication
书上说了很多,但感觉本质上就是,Alice 要向 Bob 证明自己的身份,则 Bob 提供一个一次性的随机数 nonce,Alice 通过某种方式(例如 symmetric key cryptography / MAC)发回 nonce 并保证 message integrity。nonce 用来防止 playback attack。
Securing E-Mail
Secure E-Mail
就是上面这些东西的一个实例,没啥新东西:结合 digital signature 和使用 session key 的 encryption 即可;需要双方互相知道对方的 public key(分别用于 digital signature 的验证和 session key 的传输),public key 可以由 CA 认证。
PGP
PGP 提供了 sign、encrypt、sign and encrypt 等功能,public key 通过用户之间的 web of trust 而非 CA 来 certify,可以线下举办 key-signing party 来互相 sign1。
Securing TCP Connections: TLS
TLS (Transport Layer Security) 为 TCP 提供了 security services,是 SSL (Secure Sockets Layer) 标准化后的升级版(只不过现在人们有时仍会把 TLS 误称为 SSL,OpenSSL 的名字也有一定的误导性2)。
TLS 通常用于 HTTP,表现为网址开头是 https://
,但它实际上可以用于任何基于 TCP 的 application。TLS 位于 application layer,但它提供了类似 TCP 的 API,对于 application developer 来说就像是 transport layer 的一部分。
TLS Handshake
- TCP 3-way handshake
- client 发送 TLS version、supported cipher suites (symmetric algorithm、public key algorithm、HMAC algorithm)、client nonce。
- server 发送 selected cipher suite、certificate、server nonce。
- client 验证 certificate,得到 server 的 public key;随机生成 pre-master secret (PMS),发送经 server 的 public key 加密的 PMS。
- 由 PMS、client nonce、server nonce 可以计算得到 master key,由 master key 可以得到一系列用于后续加密的 key:client 和 server 各有用于 symmetric key encryption 的 key 和用于 HMAC 的 key,如果使用 CBC 则还有双方的 IV。
- client 发送上面这些 handshake message 的 HMAC(可以和 encrypted PMS 一同发送)。
- server 发送上面这些 handshake message 的 HMAC。
其中,一开始的 nonce 用来防止 replay attack,并且 server nonce 参与 master key 的计算,可以防止 key 完全由 client 决定。而最后的 HMAC 用来防止篡改 handshake message,例如将 supported cipher suites 改为只有 weak algorithm。
TLS 1.3 对 handshake 过程进行了简化。
TLS Data Transfer
在 TLS 中,TCP byte stream 被切分为 records,为每个 record 计算 HMAC,并将 record + HMAC 进行 encrypt。这只保证了每个 record 的 integrity,为了保证整个 byte stream 的 integrity,每个 record 还有一个 sequence number,参与 HMAC 的计算,来防止攻击者对 record 进行 reorder / replay / remove。
TLS record 包含:
- type: handshake / data
- TLS version
- length: 用来标记 record 的结尾
- data + HMAC, encrypted
TLS Connection Closure
为了防止 truncation attack,即伪造 TCP FIN segment,在 TLS 中需要先发送保证了 integrity 的 closure TLS record 再发送 TCP FIN segment 来结束连接。
Network-Layer Security: IPsec and Virtual Private Networks
IPsec and Virtual Private Networks (VPNs)
如果一个 institution 位于多个地理位置而想保证 institution 内通信的私密,一种选择是建立一个 private network,在物理上与 Internet 进行隔离,但这样需要自己搭建整套网络基础设施,开销非常大。
另一种选择是使用 virtual private network。在 VPN 内,通过 Internet 传输数据时会进行加密,具体来说是在内网的 gateway router 或直接连到公网的 host 处(例如学校连到 Internet 的 gateway router / 回家了的学生的设备上;为了叙述方便,下文中都假设是 gateway router 而不是 host)在 payload 前加上 IPsec header。
The AH and ESP Protocols
IPsec 可以使用 Authentication Header (AH) protocol 或者 Encapsulation Security Payload (ESP) protocol。其中 AH 只提供了 source authentication 和 data integrity,ESP 在此基础上还提供了 confidentiality。使用 IPsec 的场景中通常需要保证 confidentiality,所以 ESP 用得更多,书中只讲 ESP。
Security Associations
两个 entity (gateway router) 通过 IPsec 通信时需要建立称作 security association (SA) 的 logical connection。SA 是单向的,如果要互发消息则需要建立两个 SA。
SA 有下列 state information:
- security parameter index (SPI),一个 32-bit identifier
- source & destination IP address
- encryption algorithm, encryption key
- integrity check algorithm, authentication key
一个 IPsec entity 可能同时 maintain 着很多 SA 的 state information,存储在 security association database (SAD) 中。
The IPsec Datagram
IPsec 有两种 packet form,分别用于 tunnel mode 和 transport mode,其中 tunnel mode 更常用,书中只讲 tunnel mode。
一个 IPsec datagram 的结构如下:
- new IP header (source / destination 是 gateway router,protocol 是 ESP)
- “enchilada” (authenticated)
- ESP header
- SPI
- sequence number
- (encrypted)
- original IP header
- original IP payload
- ESP trailer
- padding (for encryption block size requirement)
- padding length
- next header (“4” for “IP Encapsulation within IP” in tunnel mode)3
- ESP header
- ESP MAC (for authentication of the “enchilada”)
gateway router 会维护一个 security policy database (SPD),当其接收到一个待转发的 IP datagram 时,会查询 SPD,根据 source IP address、destination IP address、protocol 来决定是否使用 IPsec 进行处理。
IKE: Key Management in IPsec
IPsec 可以手动配置 key,但大型的 VPN 往往需要使用 Internet Key Exchange (IKE) protocol 来自动建立 SA。
(书中对 IKE 的描述太简陋了,说了跟没说差不多,以后再说吧(
Securing Wireless LANs and 4G/5G Cellular Networks
security 在 wireless network 中更加重要,因为 attacker 只需要将设备置于 sender 的 transmission range 内就可以窃听。
wireless network security 主要需要两个功能:
- mutual authentication: mobile device 和 access point / base station 需要互相认证对方。
- encryption: 通信内容需要加密。一般使用 symmetric key cryptography (AES),需要进行 shared symmetric key derivation。
Authentication and Key Agreement in 802.11 Wireless LANs
802.11 的认证由 authentication server (AS) 进行,AS 可以和 AP 一体,也可以通过网络连接。
802.11 的 security specification 有 WEP、WPA1、WPA2、WPA3,其中 WEP 有严重的漏洞。
总体上的步骤为:
- 在 AP 广播自己的存在时,会附带其支持的 security mechanism,mobile device 连接到 AP 时可以选择要使用哪个。
- mobile device 和 AS 预先有一个 pre-shared key(PSK,也就是 Wi-Fi 密码),会根据这个 PSK 进行 mutual authentication 和 shared symmetric key derivation。
- AS 把 shared symmetric key 告诉 AP。
- 使用 shared symmetric key 进行加密通信。
WPA 的核心是一套 four-way handshake,其中前两步完成 mutual authentication 和 shared symmetric key derivation(后两步用于 group key derivation,书中不涉及):
- AS 生成一个 AS nonce,发给 mobile device。
- mobile device 生成一个 mobile nonce,根据双方的 nonce、双方的 MAC address 以及 PSK 得到 shared symmetric key,然后向 AS 发送 mobile nonce,以及编码了 AS nonce 和 PSK 的 HMAC。
mobile device 和 AS 的通信通过 EAP (extensible authentication protocol) 进行,它在 mobile device 到 AP 使用 EAP over LAN,在 AP 到 AS 使用 RADIUS 或更新的 DIAMETER 协议。
Authentication and Key Agreement in 4G/5G Cellular Networks
cellular network 使用存储在 SIM card 和 HSS 中的 PSK 进行认证。在 4G LTE 中,步骤如下:
-
- mobile device 向 base station 发送 attach message。
- MME 向 HSS 发送 IMSI 以及 visited network information。
-
- HSS 计算出能证明自己身份的 auth token,以及用于证明 mobile device 身份的 expected auth response,将它们发送给 MME。
- MME 将 auth token 发给 mobile device。
-
- mobile device 根据 auth token 认证 HSS。
- mobile device 计算出 auth response,发送给 MME。
-
- MME 比较 HSS 发送的 expected auth response 和 mobile device 发送的 auth response 来认证 mobile device。
- MME 将下一步需要用到的 key 发给 base station。
- base station 和 mobile device 进行 shared symmetric key derivation,会在 control plane 和 data plane 使用不同的 key。
5G 的认证有一些不同:
- authentication decision 从 MME 挪到了 HSS,使得 visited network 的 middleman 作用更小。
- 新增了两种 authentication protocol,一种和 4G 类似但使用了 EAP,一种不需要 PSK 而适用于 IoT。
- 使用了 public key cryptography 来加密 IMSI。
Operational Security: Firewalls and Intrusion Detection Systems
Firewalls
firewall 用来控置哪些流量可以进入 internal network / host,一般要保证所有出入的流量都经过 firewall,并且 firewall 自身不会被攻击者控制。
Traditional Packet Filters
通过 packet header 来控制是否允许 packet 通过。例如根据 IP address、protocol type、port、TCP flags、ICMP message type、router interface 等进行控制。
一些 packet filter 可以实现的 policy 的例子:
- drop outgoing 的对 port 80/443 的访问:禁止访问外部 Web。
- drop incoming TCP SYN segment:禁止从外界创建 TCP connection。
- drop 除了外界 port 是 53 的所有 UDP traffic:禁止其他 UDP traffic,只允许 DNS。
- drop 发向 broadcast address 的 ICMP ping packets:避免遭受 smurf DoS attack。
- drop outgoing ICMP TTL expired packets:避免被 traceroute。
Stateful Packet Filters
stateful packet filter 可以通过记录状态信息来实现更复杂的控制,例如跟踪 TCP connection,从而更加精准地只允许从内部建立的 TCP connection 而拒绝从外部建立的 TCP connection。
Application Gateway
packet filter 只根据 header 中的信息进行控制,而不管 application data。
application gateway 是一个 application-specific server,所有 application data 都需要通过它。一个 host 可以同时运行多个 application gateway。
application gateway 可以根据 application data 进行控制,提供例如 authorization 的高级 filter 功能,还可以提供除了 filter 外的其他功能,例如 proxy。
Intrusion Detection Systems
和 application gateway 类似,intrusion detection system (IDS) 不止查看 header,还会查看 application data,这称作 deep packet inspection。
与 application gateway 不同,IDS 不是 application-specific 的,而是会检测到各种各样的 suspicious packet / series of packets,例如 network mapping、port scan、TCP stack scan、DoS attack、worm / virus、OS / application vulnerability attack。检测到时,IDS 会向管理员发送警告,而 intrustion prevention system (IPS) 则会 filter out 这些 packet。
因为 deep packet inspection 需要一定的算力,当流量过大时,一个 organization 往往需要多个 IDS,分散在网络中,而非只设置一个在整个网络的入口。
IDS 分为 signature-based 和 anomaly-based 两种。
signature 即 packet 的特征,例如 header 的某些项以及 application data 包含某一内容。IDS 维护了一个 signature database 用来进行匹配。signature-based IDS 需要事先知道 attack 的特征,所以无法防范新型 attack。signature 的匹配容易出现 false alarm,而且性能开销较大。
anomaly-based IDS 基于平时的 traffic 来检测 statistically unusual 的 traffic,例如检测到突然增多的 ICMP packets。anomaly-based IDS 不依赖于实现对攻击的了解,所以有可能检测到新型的攻击。但是区分 normal traffic 和 statistically unusual traffic 是困难的,现在的 IDS 通常还是以 signature-based 为主。
Snort 是一款 open-source IDS,有一个活跃的 community 维护着 signature database。
Footnotes
-
P.S. 我有幸在 第一次参加 tunight 时获得了续老师的 signing,当时还完全不懂这些(
现在也不是很懂(↩ -
See Rename OpenSSL to OpenTLS To Comply with RFC7568 · Issue #6384 · openssl/openssl & Celebrating 20 Years of OpenSSL - OpenSSL Blog ↩
-
可以参考 http://www.tcpipguide.com/free/t_IPSecEncapsulatingSecurityPayloadESP-2.htm ↩