ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

信息安全知识地图:从密码学到智能网联汽车安全

信息安全知识地图:从密码学到智能网联汽车安全 信息安全这门学科最折磨人的地方在于它从来不缺知识点缺的是一条能把知识点串起来的线。你随便翻开一本《信息安全概论》或者考试大纲目录结构几乎都一样数学基础、密码学、身份认证、访问控制、网络安全、系统安全、安全工程。单独看每一章都能懂合上书脑子里就只剩下一堆零散的名词——欧拉函数、DES、RSA、TLS、BLP模型、Kerberos、等级保护。做题的时候全靠翻书做项目的时候全靠搜。这套知识点总结就是写给被这堆名词淹没的人的。不管你是准备信息安全工程师方向的认证考试还是计算机专业四级里那个信息安全模块或者是刚进甲方安全岗、乙方测试岗需要快速补齐理论底子甚至只是给毕设选题找方向都可以照着这篇文章的脉络把知识重新排一遍。我不打算把它写成名词词典而是按照为什么要学、它解决什么问题、实际怎么用的顺序来讲重点放在密码学的计算题套路、网络协议安全的薄弱环节以及智能网联汽车这类新场景的安全思路上。先交代一下前提这篇文章假设你有基础的计算机网络概念和一点点编程感觉数学部分我会从零补到够用为止。如果你是纯小白别急着跳过数论那几页RSA那几道计算题的分值往往就藏在你觉得自己看不懂的地方。另外提醒一句英语这件事后面会单独说它对这行的实际影响比大多数人想象的要大。1. 先给信息安全画一张不迷路的知识地图1.1 一切从资产—威胁—脆弱性—风险这条链子开始学信息安全最容易犯的错是一上来就背算法。DES多少位密钥、AES多少轮、MD5多少位摘要背得滚瓜烂熟但被问到为什么要加密的时候答不上来。真正应该先建立的是这条因果链先有资产资产有价值价值引来威胁系统本身存在脆弱性威胁利用脆弱性作用于资产就产生风险。安全工作的本质就是想办法把这个风险降到可接受的水平。这条链子里的每一个词都有明确含义考试里经常拿来出选择题。资产不只是服务器和数据库还包括数据、人员、声誉、业务流程威胁是可能造成损害的潜在因素比如恶意代码、内部人员误操作、自然灾害脆弱性是系统自身的短板比如弱口令、未打补丁的服务、设计缺陷风险则是前几者叠加之后真正落到业务上的损失可能性。很多人把威胁和脆弱性混为一谈记住一句话就能分清威胁是外部的想干坏事的人或事脆弱性是内部的容易被干坏事的地方。由此引出信息安全最经典的目标三元组机密性、完整性、可用性行业里习惯叫CIA。机密性管的是不该看的人看不到加密和访问控制是主要手段完整性管的是不该改的东西没被改哈希校验和数字签名是主要手段可用性管的是该用的时候能用冗余、备份、抗拒绝服务是主要手段。再往外扩展还有可审计性、不可否认性、真实性这几个衍生属性数字签名同时覆盖了完整性和不可否认性这就是它在电子合同、电子发票场景里不可替代的原因。理解这条链子还有一个隐藏好处它能让你的思路从我要用什么技术转成我在防什么、防到什么程度。这两个思路的差别在实际项目里就是堆了一堆安全设备但没人看告警和明确知道哪条业务线是核心资产、围绕它做纵深防御的差别。1.2 四层结构把零散知识点装进四个抽屉我带过几个刚转行的同事他们的共同困扰是知识点太多记不住。我的建议是只准备四个抽屉所有知识点都往这四个抽屉里塞抽屉覆盖内容代表的典型知识点数学基础数论、代数、概率模运算、欧拉函数、有限域、离散对数密码学对称、非对称、哈希、协议AES、RSA、SM3、HMAC、数字签名、PKI系统与网络主机、网络、应用、数据访问控制模型、TCP/IP弱点、TLS、Web安全工程与管理流程、标准、评估风险分析、等级保护、安全开发生命周期这四个抽屉不是随便分的它们之间存在明确的依赖关系。数学是密码学的底座密码学是网络协议安全的底座而工程与管理则是把前三者组织成可持续运转体系的框架。你去看任何一份考纲基本都能映射到这四层上差别只在某些细节的侧重点不同。有了这张地图后面所有具体内容就都能挂上去。比如Kerberos这个知识点它属于第三层身份认证依赖的是对称密码和密钥分发思想RSA计算题属于第二层依赖的是第一层的欧拉定理和扩展欧几里得等级保护定级备案属于第四层。当你能把任何一个名词瞬间定位到某个抽屉里的某个位置复习效率会发生质变。还有一点要强调这四层的考试权重和实际工作权重是反着来的。考试里数学和密码学的计算题占比很高因为它们客观、好判分而实际工作中第三层和第四层的工程能力才是决定你能不能解决问题的关键。所以别因为数学分高就只啃数学也别因为工作里不常用RSA就完全不学两边都要有。2. 数学基础密码学背后那台看不见的发动机2.1 模运算、欧拉函数与扩展欧几里得密码学里绝大部分运算都建立在模运算之上原因很朴素实数运算会溢出模运算在一个有限范围内循环天然适合计算机处理。所谓 a mod n就是 a 除以 n 之后的余数取值范围是 0 到 n-1。两个数如果在模 n 下余数相同就说它们同余记作 a ≡ b (mod n)。这个符号后面会反复出现。接下来是最大公约数。两个数的最大公约数 gcd(a, b)可以用辗转相除法快速求出。但辗转相除法只告诉你最大公约数是几扩展欧几里得算法还能顺带求出两个整数 x、y使得 ax by gcd(a, b)。这个式子看着抽象实际上就是解 RSA 私钥 d 的核心工具。def ext_gcd(a, b): 返回 (g, x, y) 使得 a*x b*y g gcd(a, b) if b 0: return a, 1, 0 g, x1, y1 ext_gcd(b, a % b) return g, y1, x1 - (a // b) * y1 # 求 17 在模 3120 下的乘法逆元 g, x, y ext_gcd(17, 3120) print(g, x) # 输出 1 -367 print(x % 3120) # 输出 2753就是要求的逆元欧拉函数 φ(n)表示 1 到 n 之间与 n 互质的整数个数。如果 n 是两个不同素数的乘积即 n p × q那么 φ(n) (p-1)(q-1)这个结论是 RSA 的命根子。由欧拉函数还能推出欧拉定理如果 gcd(a, n) 1那么 a^φ(n) ≡ 1 (mod n)。当 n 本身是素数 p 时定理退化成费马小定理 a^(p-1) ≡ 1 (mod p)。这三个东西串起来正是 RSA 的完整逻辑链选素数、算 φ(n)、求逆元私钥和公钥就都出来了。很多人学 RSA 时觉得公式是天上掉下来的其实每一环都有数学依据只是教材为了压缩篇幅把它们拆散了讲。我个人建议复习时按欧拉定理 → φ(n) 的计算性质 → 扩展欧几里得求逆这个顺序捋一遍比死记公式稳得多。2.2 有限域与离散对数为什么椭圆曲线能用更短的密钥如果说模运算是密码学的地基那有限域就是承重墙。所谓域通俗说就是一个能自由做加减乘除除零除外而且结果不跑出集合的代数结构。密码学里最常用的两类有限域一类是素域 GF(p)也就是整数在模素数 p 下的运算另一类是二元扩域 GF(2^m)用多项式表示元素常见于 AES 的 S 盒构造。在有限域基础上可以定义离散对数问题给定 g 和 y求满足 g^x y 的 x。在普通整数乘法里这个 x 很容易求但在有限域的循环群上当群足够大时已知的最优算法也需要亚指数时间。Diffie-Hellman 密钥交换和 ElGamal 加密的安全性本质上依赖的就是这个问题的困难性。椭圆曲线把这个思路推广到了另一种代数结构上。在有限域上定义的椭圆曲线其上的点可以构成一个群同样能定义离散对数问题但已知的攻击算法复杂度更高。结果是要维持同等级别的安全强度椭圆曲线所需的密钥长度远小于 RSA。具体对比可以参考下面这张表这也是考试里比较爱考的一个点。对称密钥长度RSA/DH 密钥长度椭圆曲线密钥长度大致安全强度80 位1024 位160 位已不推荐112 位2048 位224 位过渡使用128 位3072 位256 位当前主流192 位7680 位384 位高安全场景256 位15360 位512 位长期保护这张表值得记住的原因是它解释了为什么现在的移动端、物联网设备、智能网联汽车普遍选择椭圆曲线而不是 RSA。算力有限、带宽有限、电量有限的场景里密钥短一半意味着握手快、证书小、功耗低这些都是实打实的工程收益。国密体系里的 SM2 也是基于椭圆曲线的公钥算法SM3 是 256 位摘要算法SM4 是 128 位分组对称算法三件套构成了一套完整的国产密码方案。2.3 数学部分的复习取舍哪些必须会算哪些理解即可数学基础这块内容多、难度跨度大很多人在这里耗掉大量时间却收效甚微。我的经验是按是否会影响计算题来分配精力必须能动手算的是模运算、最大公约数求解、欧拉函数计算、模逆元求解、RSA 加密解密过程、中国剩余定理的基本应用。这些点几乎每年都会以计算题形式出现方法固定、步骤明确练熟之后是稳拿分的地方。理解原理即可的是群环域的定义、有限域的构造细节、椭圆曲线点加法的具体公式、格密码的数学基础。这些属于知道它在干什么的层次除非你专门做密码学研究或者准备高级别竞赛否则不必深挖推导。有个很实用的技巧把 RSA 的完整流程手推三遍每一遍都在纸上写出这一步在算什么、为什么这么算。第一遍可能要靠书第三遍基本就能独立完成。我见过太多人用眼睛看十遍公式结果考场上还是写不出扩展欧几里得的递归过程。数学这东西眼睛会骗人手不会。3. 密码学对称、非对称、哈希三条腿撑起来的体系3.1 对称加密与分组密码的工作模式对称加密的核心特点是加密和解密用同一把密钥所以速度快适合处理大量数据。但它有两个天然难题一是密钥怎么安全地送到对方手里二是 n 个人两两通信需要 n(n-1)/2 把密钥规模一大就管不过来。这两个问题后来都交给非对称加密和密钥管理机制来解决。分组密码是把明文按固定长度切成块逐块加密。DES 的分组长度是 64 位密钥有效长度是 56 位因为密钥里有 8 位是校验位。56 位在今天看来太短了穷举空间只有 2^56专用硬件几天就能暴力破解所以 DES 已经退出历史舞台。3DES 是把 DES 做三次加密、解密、加密密钥长度提升到 112 位或 168 位属于过渡方案。AES 才是当前的主力分组长度固定 128 位密钥支持 128、192、256 位三种对应轮数分别是 10、12、14 轮。AES 的每一轮做四件事字节代换、行移位、列混合、轮密钥加。第一次听说会觉得像在描述一个流水线实际上它就是通过混淆和扩散两种操作反复搅拌数据让明文和密钥之间的关系变得极难反推。列混合用到了前面提到的有限域 GF(2^8) 运算这就是数学基础的实际落点。分组密码本身只能处理固定长度的块要加密任意长度的数据就得靠工作模式。这块内容考试很爱考而且很多人记混我整理了一张表模式是否需要填充能否并行加密是否需要初始向量典型用途ECB需要可以不需要不建议使用相同明文块产生相同密文块CBC需要加密不可、解密可以需要文件加密、TLS 历史版本CFB不需要解密可以需要流式加密场景OFB不需要都不可以需要噪声信道、卫星通信CTR不需要可以需要计数器高性能场景、磁盘加密注意ECB 模式的问题不在于算法弱而在于它没有把前后块关联起来。经典的企鹅图例子就是用它加密位图时轮廓依然清晰可辨。只要你的数据有明显的重复结构就不要用 ECB。这里还涉及一个容易忽略的细节——填充。CBC 这类模式要求明文长度是分组的整数倍不足的部分要补齐。常用的 PKCS#7 填充规则是缺几个字节就填几个几比如缺 3 个字节就填 03 03 03。这个规则看着简单但历史上因为实现不当引发过真实的攻击所以解填充时的错误提示要尽量模糊不要让攻击者通过填充正确与否的差异来反推明文。3.2 非对称加密与 RSA 计算题的完整套路非对称加密用一对密钥公钥公开、私钥保密加密和验证用公钥解密和签名用私钥。它解决了密钥分发问题代价是运算慢通常只用来加密对称密钥或者做签名不直接加密大块数据。RSA 是最经典的非对称算法也是各类考试里出现频率最高的计算题。RSA 的完整流程可以拆成六步我按顺序写清楚每一步都说明为什么第一步选两个大素数 p 和 q。实际应用中它们各自通常是 1024 位以上且不能太接近防止被费马分解法攻击。考试里一般给几个小素数让你算。第二步计算 n p × q。n 就是模数它会作为公钥的一部分公开。n 的长度就是常说的密钥长度2048 位指的就是 n 的位数。第三步计算欧拉函数 φ(n) (p-1)(q-1)。注意这里的减一必须减很多人考试时直接写 p×q那是错的。第四步选定公钥指数 e。要求 1 e φ(n)且 gcd(e, φ(n)) 1。实践中常用 65537因为它二进制只有两个 1做模幂运算快。第五步计算私钥 d使得 e × d ≡ 1 (mod φ(n))。这一步就是用扩展欧几里得求模逆元是整个流程里唯一需要技术活的地方。第六步加密 c m^e mod n解密 m c^d mod n。我用两个例子走一遍。第一个是经典的考试规格p 61q 53e 17。n 61 × 53 3233 φ(n) 60 × 52 3120 求 d 使 17d ≡ 1 (mod 3120)3120 183 × 17 9 17 1 × 9 8 9 1 × 8 1 8 8 × 1 0回代 1 9 - 8 1 9 - (17 - 9) 2 × 9 - 17 1 2 × (3120 - 183 × 17) - 17 2 × 3120 - 367 × 17所以 -367 × 17 ≡ 1 (mod 3120)d -367 mod 3120 2753。验证一下17 × 2753 4680146801 ÷ 3120 15 余 1正确。加密 m 65c 65^17 mod 3233用快速幂算出来是 2790。解密 2790^2753 mod 3233 会回到 65。这个例子给的是小数字实际做题时要注意模幂运算不要硬算用平方-乘法的思路逐步约减。第二个例子更小适合验算p 11q 13e 7。n 143φ(n) 120求 7d ≡ 1 (mod 120)。因为 7 × 103 721 6 × 120 1所以 d 103。加密 m 5c 5^7 mod 143。先算 5^2 255^4 625 mod 143 625 - 572 53那么 5^7 5^4 × 5^2 × 5 53 × 25 × 5 66256625 mod 143 6625 - 6578 47。所以密文是 47解密时 47^103 mod 143 会等于 5。实际系统里还有一个优化叫CRT 加速。因为 n p × q解密者知道 p 和 q可以把一次大模幂拆成两次小模幂用中国剩余定理合并结果速度大约能提升三四倍。做法是预先计算 d_p d mod (p-1) 和 d_q d mod (q-1)解密时分别算 m1 c^d_p mod p 和 m2 c^d_q mod q再合并。这个优化在 OpenSSL 这类库里面是默认开启的考试里偶尔会考到原理。提示RSA 的安全性建立在大整数分解困难之上但前提是参数选得对。如果 p 和 q 太接近、e 选得太小比如 e 3 且明文很短、或者不同用户共用同一个 n都会出问题。考试喜欢在这些地方设陷阱。3.3 哈希函数、消息认证码与数字签名哈希函数把任意长度的输入压缩成固定长度的输出特点是单向从输出推不出输入、抗第二原像给定一个输入找不到另一个输入有相同输出、抗碰撞找不到任意两个不同输入有相同输出。常见的算法参数如下算法输出长度分组长度现状MD5128 位512 位已被破解禁止用于安全场景SHA-1160 位512 位已被破解逐步淘汰SHA-256256 位512 位主流选择SHA-3224/256/384/512 位可变与 SHA-2 结构不同作为备份方案SM3256 位512 位国产标准广泛用于国内密码应用这里有个必考的结论要记牢哈希的抗碰撞强度只有输出长度的一半。原因是生日悖论——在 2^(n/2) 个随机样本里出现碰撞的概率就接近一半了。所以 SHA-1 的 160 位输出实际抗碰撞强度约 80 位SHA-256 约 128 位。这也解释了为什么 MD5 和 SHA-1 必须退出。哈希单独用不足以证明消息来自谁因为任何人都能改数据之后重算哈希。要解决这个问题就要引入密钥。消息认证码MAC用共享密钥参与运算保证完整性和来源真实性HMAC 是最常用的构造方式把哈希函数套在密钥和消息的两次组合里即使底层哈希有某些弱点也能保持安全。数字签名则用私钥运算、公钥验证除了完整性和真实性还能提供不可否认性。流程是发送方先对消息算摘要再用自己的私钥对摘要做签名运算把消息和签名一起发出去接收方用发送方的公钥验证签名同时自己也算一遍摘要比对。RSA 签名、DSA、ECDSA 都是常见方案国密体系里对应 SM2 签名。签名要真正可信还得解决公钥到底是不是他的这个问题这就轮到PKI 和数字证书出场。证书由认证机构签发里面包含主体信息、公钥、有效期、签发者信息以及 CA 自己的签名。验证证书时沿着证书链一路向上直到某个被信任的根证书。CRL 和 OCSP 是检查证书是否被吊销的两种机制前者是定期下载吊销列表后者是实时在线查询各有开销和实时性的取舍。注意哈希加盐是密码存储的正确做法但盐要和哈希值一起存它不是秘密。真正要保密的是每个用户的盐值随机性以及整个数据库的访问权限。用固定盐或者全库共用一个盐等于白做。4. 网络与协议安全从链路层一直看到应用层4.1 分层看弱点每一层都有自己的软肋网络协议安全最好的学习方式是拿 TCP/IP 四层模型当骨架逐层问这里有什么薄弱点。这样做的好处是不容易漏坏处是初次接触会觉得信息量大。我按层整理一下核心内容。链路层和局域网这块最典型的问题是ARP 协议没有认证机制。ARP 的工作方式是广播询问这个 IP 是谁的请告诉我你的 MAC然后对应主机回应。攻击者可以伪造回应把自己的 MAC 地址绑定到网关 IP 上导致流量被牵引。防御手段包括静态 ARP 绑定、动态 ARP 检测、端口安全等。同一层还有 MAC 泛洪攻击塞满交换机 MAC 表让它退化成广播设备和 VLAN 跳跃防御思路是限制每端口可学习的 MAC 数量、关闭不必要的端口。网络层的核心问题是IP 协议本身不提供认证和加密。源地址可以轻易伪造这就是各种反射放大攻击的基础。防御手段是入口过滤也就是在边界路由器上丢弃源地址不属于本网段的包。IPSec 是网络层的安全方案提供 AH认证头和 ESP封装安全载荷两种协议支持传输模式和隧道模式前者只保护载荷后者把整个原始 IP 包封进去适合网关到网关的场景。传输层的经典问题是TCP 三次握手的资源消耗。攻击者发送大量伪造源 IP 的 SYN 包服务器回应 SYN-ACK 并等待确认连接进入半开状态占用资源。防御手段包括 SYN Cookie、缩短超时时间、部署清洗设备。TCP 还有序列号可预测导致的会话劫持风险现代操作系统已经用随机初始序列号大幅缓解。应用层的问题最多因为协议种类繁杂、实现质量参差不齐。DNS 缓存投毒、HTTP 明文传输、邮件伪造、API 越权都属于这一层。防御的基本盘是该加密的加密、该认证的认证、该校验的校验具体到 DNS 有 DNSSECHTTP 有 TLS邮件有 SPF、DKIM、DMARC 三件套。4.2 TLS 握手到底在干什么TLS 是应用层安全里最重要的协议也是考试和面试的高频考点。很多人能背出握手建立安全通道但说不清楚每一步在交换什么。我按 TLS 1.2 的完整握手流程讲一遍然后再对比 1.3 的变化。第一步客户端发ClientHello里面包含客户端支持的 TLS 版本、密码套件列表、一个客户端随机数以及扩展字段比如支持的椭圆曲线、签名算法。第二步服务端回ServerHello从客户端提供的列表里选定一套密码套件和版本给出服务端随机数。随后服务端发送Certificate把自己的证书链发过去如果是使用临时密钥交换ECDHE还会发ServerKeyExchange带上签名后的密钥交换参数最后发ServerHelloDone表示这一轮说完。第三步客户端验证证书。这一步要做的事很多检查证书链能否构建到受信根、检查有效期、检查域名匹配、查询吊销状态、验证服务端对密钥交换参数的签名。验证通过后客户端生成预主密钥用服务端公钥加密发过去ClientKeyExchange双方各自用两个随机数加预主密钥计算出主密钥再派生出会话密钥。第四步双方发ChangeCipherSpec通知对方后面开始用新密钥然后发Finished消息内容是对之前所有握手消息的摘要用来确认握手没被篡改。至此握手完成应用数据开始用对称密钥加密传输。TLS 1.3 做了大幅精简握手从两次往返压缩到一次往返删掉了 RSA 密钥传输、静态 DH 等一批有安全隐患的套件只保留前向安全的密钥交换方式并且默认开启加密连证书部分也加密。所谓前向安全指的是即使长期私钥以后泄露也无法解密之前录下来的通信内容——因为每次会话用的临时密钥用完就丢。这也是为什么现在各类加密通信场景都在往 TLS 1.3 迁移。注意证书验证是 TLS 最容易出问题的地方。移动端应用里常见的错误做法是信任所有证书或者只做域名检查不做链验证这等于把 TLS 的安全性全丢了。自签名证书要单独做固定证书校验而不是简单跳过校验。4.3 防火墙、入侵检测与访问控制模型网络边界的防护设备主要有三类。包过滤防火墙看的是五元组源 IP、目的 IP、源端口、目的端口、协议速度快但粒度粗状态检测防火墙在包过滤基础上维护连接状态表能判断一个包是不是属于已建立的会话安全性更高应用代理防火墙把连接在应用层断开重建能理解协议内容粒度最细但性能开销最大。实际部署中常见的是状态检测加应用层插件的组合。入侵检测系统IDS负责发现异常入侵防御系统IPS负责阻断二者的区别是部署方式IDS 通常旁路部署只镜像流量做分析不会影响业务IPS 串联在链路中发现问题直接丢弃报文但一旦误判就可能影响正常业务。所以 IPS 上线前的规则调优特别重要宁可先当 IDS 跑一段时间观察也不要一上来就串联阻断。访问控制模型是理论部分的重点几个经典模型要能区分清楚模型关注目标核心规则典型场景BLP机密性不上读、不下写军事、涉密系统Biba完整性不下读、不上写关键数据保护Clark-Wilson完整性主体只能通过程序访问客体商业系统、财务系统RBAC管理效率权限授予角色角色授予用户企业信息系统ABAC灵活性基于属性组合动态判定云平台、细粒度授权BLP 和 Biba 的读写下方向最容易记反。我的记法是BLP 保机密所以低级别的人不能读高级别的文件不上读高级别的信息不能流到低级别不下写。Biba 反过来保完整性所以不能读低完整性的东西怕被污染也不能往高完整性的地方写怕污染别人。用防泄密和防污染两个词去套基本不会错。5. 系统与应用安全从主机加固到智能网联汽车5.1 操作系统与主机层的加固要点主机安全的第一道门是身份认证。口令要有复杂度要求和失败锁定策略更重要的是别让口令成为唯一的凭证重要系统应叠加多因素认证比如口令加动态令牌或者口令加生物特征。口令在数据库里必须加盐哈希存储绝对不能用明文或者可逆加密。第二道门是访问控制核心原则是最小权限。操作系统层面通过用户、组、文件权限位、访问控制列表来管数据库层面通过账号权限和视图来管应用层面通过角色和接口鉴权来管。三层的权限要一致经常出现的情况是系统层做了限制但数据库账号是 root等于前功尽弃。第三道门是补丁与配置管理。绝大多数被利用的问题都是已知问题只是没及时修复。实际运维中要建立资产清单、漏洞扫描、补丁评估、灰度上线这一套流程。配置基线同样重要比如关闭不必要的服务和端口、禁用默认账号、修改默认路径、开启日志审计。默认配置最危险的地方不是它配置错了而是攻击者都知道它长什么样。第四道门是恶意代码防护与审计。防病毒、主机入侵检测、日志集中收集是标配。日志的价值在于事后追溯所以时间同步要做日志要防止被篡改保留周期要符合要求。我个人建议日志集中到一个独立平台别放在被监控的主机上否则一旦主机沦陷日志也一起没了。5.2 软件与代码层面的常见问题软件安全的问题可以粗略分成两类一类是实现缺陷一类是设计缺陷。实现缺陷里最经典的是输入验证不足也就是把用户输入当成了可信数据。缓冲区溢出、SQL 注入、跨站脚本、命令注入本质都是这个原因。防御手段也很统一参数化查询、输出编码、白名单校验、最小权限运行。以 SQL 注入为例正确的防御不是去过滤某些关键字而是用参数化查询把数据和语句彻底分开。过滤关键字这件事在编码方式多样化的情况下很容易被绕过而参数化查询是数据库驱动层面的机制从根上就不给注入留空间。同样的道理输出到 HTML 要按上下文做编码输出到 JavaScript、URL、CSS 里各有各的编码规则一套 HTML 编码走天下是不行的。设计缺陷更难发现比如越权访问、业务逻辑绕过、竞态条件。越权分水平越权和垂直越权前者是普通用户能看别人的数据后者是普通用户能用到管理员功能。这类问题的根因往往是把权限校验放在前端或者只在列表接口做校验但详情接口忘了加。防御的核心思路是每个涉及资源的接口都问一遍当前登录者有没有权限访问这个具体资源而不是只问他登录了没有。安全开发生命周期这个概念值得记住它把安全活动嵌入到需求、设计、编码、测试、上线、运维每个阶段。需求阶段做安全需求分析设计阶段做威胁建模编码阶段做安全规范和静态扫描测试阶段做安全测试上线前做安全评审上线后做监控和响应。这套流程的价值在于把问题往前赶因为在需求阶段改一个设计成本远低于上线后打补丁。5.3 智能网联汽车一个新的安全战场智能网联汽车是这几年信息安全领域增长最快的方向之一也是很多竞赛和毕设的热门选题。它的特殊性在于安全问题的后果直接关联人身安全而且车辆的生命周期长达十几年远超一般 IT 设备的更新周期。先看攻击面一辆现代智能汽车的可能入口包括物理接口如 OBD 诊断口和 USB 口短距无线如蓝牙、WiFi、无钥匙进入系统远程通信如蜂窝网络连接的远程信息处理单元车外感知如摄像头、毫米波雷达、超声波传感器以及车内的各种总线和车载以太网。车内网络里最常被讨论的是CAN 总线。它的设计目标是可靠、实时、成本低报文以广播方式发送天然没有认证和加密机制任何接入总线节点理论上都能发送报文。这在功能安全角度是合理的但在信息安全角度就是明显短板。随着车载以太网和 SOME/IP 协议引入情况有所改善但也带来了新的 Web 类问题。针对这类场景的防护思路目前比较成体系的包括在网关处做域隔离把动力、底盘、娱乐、远程通信分到不同域跨域通信要经过网关过滤引入安全车载通信机制对关键报文加消息认证码让接收方能判断报文来源是否可信在车内网络部署入侵检测通过监测报文频率、ID 分布、周期特征来发现异常注入强化诊断接口的访问控制诊断服务要有身份认证和权限分级不能谁接上 OBD 就能刷写固件建立整车 OTA 的安全链路固件包要签名、传输要加密、刷写前要校验版本和完整性并且要能回滚。竞赛里的题目通常围绕这些点展开比如给一段 CAN 报文日志让你分析异常 ID、给一个诊断服务交互记录让你判断安全访问流程哪里有问题、给一份固件让你定位硬编码密钥。这类题目的共同点是考察你能不能把协议规范和实际数据对应起来而不是让你去做破坏性操作。我的建议是从抓包分析入手先把正常的通信流程看明白再看异常在哪。关于渗透测试这个词必须说清楚边界任何测试都必须有明确的书面授权、明确的范围界定、明确的时间窗口并且不能影响生产环境和真实用户数据。车载领域的测试更是如此涉及实车时必须由厂商组织并在受控环境里进行。没有授权就动手性质就完全变了。6. CTF 与实战把知识点用起来的正确方式6.1 CTF 的五大方向与备赛思路CTF 竞赛是检验信息安全知识掌握程度的一种方式题目通常分几个方向每个方向考察的知识点差异很大方向主要考察内容依赖的基础知识Crypto密码算法、编码、数论数学基础、密码学Reverse逆向分析、程序逻辑还原汇编、编译原理、操作系统Pwn内存破坏、漏洞利用C 语言、内存布局、汇编Web注入、越权、逻辑漏洞HTTP、前后端、数据库Misc隐写、取证、杂项编码文件格式、编码常识对刚入门的人来说Crypto 和 Misc 是最容易上手的两个方向因为它们对系统底层知识的要求相对低更多依赖逻辑推理和工具使用。Crypto 里的 RSA 类题目尤其适合练手很多题给出的参数有特殊关系比如共用模数、小公钥指数、p 和 q 太接近只要能识别出是哪类问题就能找到对应的解法。这和前面讲的 RSA 参数选择注意事项是同一套知识只是从防御换到了发现问题的视角。Web 方向适合有开发经验的人因为很多漏洞本质上是对框架和协议理解不透导致的。Reverse 和 Pwn 门槛最高需要补汇编和操作系统但一旦入门在很多岗位上会有明显优势。备赛的方法我总结成三条第一别只刷题不总结每道题做完要写清楚考的是什么知识点、卡在哪一步、下次怎么识别第二工具要熟练但不能依赖基础脚本能力比工具菜单更重要第三跟着知识地图补短板做到哪个方向卡住就回去补对应的理论块而不是盲目刷量。6.2 从知识点到工作能力几个实际的转化路径学完这套理论很多人会问接下来干什么。我按几种常见的职业方向给点建议。如果你走安全运维或甲方安全岗重点是把资产、漏洞、事件三件事管起来。资产要清楚有什么、在哪里、谁负责漏洞要有扫描、评估、跟踪闭环事件要有监测、响应、复盘流程。理论部分最有用的是访问控制模型、密码学应用证书、加密存储、以及风险评估方法。如果你走安全测试或安全服务岗重点是系统化的测试方法论和扎实的协议理解。测试本身有标准流程授权与范围确认、信息收集、威胁建模、测试执行、报告与修复验证。理论部分最有用的是网络协议、Web 安全、密码学应用中的常见误用。这里再次强调测试的合法性来自授权不是来自技术能力。如果你走安全研发或产品岗重点是密码学工程实践、密钥管理、安全架构设计。你会频繁面对用什么算法、密钥怎么存、怎么轮换、怎么兼顾性能这类问题。理论部分最有用的是密码学基础和系统安全设计原则比如最小权限、纵深防御、失效安全。6.3 英语到底要不要好一个绕不开的现实热词里有个问题很真实——信息安全需要英语好吗。我的回答是不需要英语好到能写小说但需要好到能读文档。原因很具体。这个领域的第一手资料基本都是英文的协议规范、算法标准、漏洞公告、厂商安全通告、顶会论文。你可以靠翻译工具解决一部分但涉及精确描述的部分翻译经常失真。比如一个漏洞公告里说improper input validation in the authentication module翻译成认证模块中的不当输入验证之后你可能会以为是输入格式没校验实际可能是认证逻辑可以被绕过两者差别很大。更现实的是很多工具的报错和日志是英文的出问题时能不能读懂报错直接决定你的排查效率。我的建议是把英语学习嵌进日常工作里别单独背单词。每次遇到英文文档先自己读一遍遇到不认识的术语查一下记下来几个月下来常用的那几百个词自然就熟了。RFC 文档不用全读挑你正在用的协议读关键章节就够了。7. 常见问题与排查技巧实录7.1 复习和做题中反复出现的坑下面这些是我自己在复习和带人过程中反复遇到的高频问题整理成速查表遇到卡壳的时候可以对照排查。现象常见原因处理思路RSA 求 d 时算错φ(n) 忘记减一或模逆元符号搞错先验证 e×d mod φ(n) 是否等于 1分组模式分辨不清只记名字没记特性记住是否需要 IV、能否并行、是否需要填充三点BLP 和 Biba 记反记的是结论不是逻辑用防泄密和防污染两个词判断方向TLS 握手步骤混乱按顺序背而不是按目的记按协商参数、验证身份、生成密钥、确认完成四段记哈希抗碰撞强度算错忘记生日悖论抗碰撞强度是输出长度的一半访问控制模型混淆没区分保密性和完整性先判断这个模型保的是什么属性证书链验证出错只验证了签名没验证其他项逐项检查链、有效期、域名、吊销状态数字签名概念不清把私钥公钥的用途搞反记私钥签名、公钥验证再补充几个不是表格能说清的经验点。第一公式要手推不要只看。欧拉定理、扩展欧几里得、RSA 三步计算这些内容看一遍觉得懂了实际动手就会卡。我在复习时会用空白纸默写扩展欧几里得的递归和回代过程连续三天都能写对才算过关。第二协议要画图不要只读文字。TLS 握手、Kerberos 认证、IPSec 处理流程这些内容画成时序图之后理解难度会大幅下降。画的时候把每一步交换的消息、用到的密钥、保护的范围都标出来画完一遍胜过读十遍。第三概念要对比不要孤立记忆。对称和非对称、IDS 和 IPS、BLP 和 Biba、MD5 和 SHA、DAC 和 MAC这些成对出现的概念放在一起对比着记效果远好于单独背。我习惯用一张表把它们的目标、手段、弱点、场景四列填出来填的过程就是理解的过程。第四别忽略安全管理这块。风险评估方法、安全策略层次、业务连续性、应急响应流程这些内容在考试里占分不少在实际工作中更是天天用。技术能力决定你能不能解决问题管理能力决定问题会不会反复发生。7.2 一些实操中踩过的坑说几个具体场景里的经验都是我自己或者身边人踩过的。关于加密存储见过不止一个系统用 MD5 存口令理由是反正哈希了。问题在于 MD5 早就可以用彩虹表反查加固定盐也没用因为攻击者拿到代码就知道盐是什么。正确做法是用专门的口令哈希算法加上每个用户独立的随机盐并且把计算强度参数调到一个合理值让暴力破解的成本高到不划算。关于证书管理证书过期导致线上故障是特别常见的低级问题。解决办法不是靠人记而是把证书到期时间纳入监控提前 30 天告警并且把证书续期流程自动化。另外要维护一份证书清单知道哪个服务用了哪张证书、谁负责续期千万别等出事才发现没人知道这个证书是哪来的。关于日志日志太少查不了问题日志太多没人看。我的经验是先明确几个关键问题比如谁在什么时候从哪里登录了哪个接口被调用了多少次哪个操作失败了围绕这些定义日志字段。敏感信息千万别记进日志比如口令、密钥、身份证号这些一旦落到日志文件里日志就变成了新的风险点。关于权限最容易被忽略的是离职和转岗人员的权限回收。很多系统的权限是加的时候很积极删的时候没人管时间一长就积累一堆僵尸账号。建议做定期权限复核尤其是核心系统的访问权限每季度过一遍把不再需要的权限收回来。关于测试做任何测试之前先确认三件事——有没有书面授权、范围包含哪些资产、出问题找谁。这三件事任何一件不清楚就不要动手。技术能力越强越要守住这条线因为影响范围也越大。关于毕设选题如果打算做信息安全方向的毕业设计我建议选有明确边界、可以独立完成、能拿出可验证结果的题目。比如某个协议的实现与安全分析、某个场景下的检测方案设计与实现、某个系统的安全加固方案与验证。避免选那种依赖特殊环境或者需要大量真实数据才能做的题目否则中期会很痛苦。选题的时候多问自己一句这个题目我做完了能给别人演示什么最后说一个我自己的体会。信息安全的知识点确实碎但它碎得有规律——所有的加密都在解决信任所有的访问控制都在解决边界所有的检测响应都在解决发现。当你能用这几个大问题去统摄那些细碎的名词复习就不再是记忆负担而是不断往一个已经成型的框架里填内容。后续如果想继续扩展可以从两个方向入手一个是往深走挑一个方向比如密码学工程实践或车内网络安全做深另一个是往宽走把云原生安全、数据安全治理这些相邻领域补上它们和传统知识点的衔接点比想象中多。
返回列表