2、网络安全基础回顾:TCP/IP协议栈、常见攻击类型、网络流量基础
各位同学,咱们今天聊点实在的。做入侵检测,说白了就是跟网络流量打交道。你连TCP/IP协议栈都搞不清楚,那检测出来的告警基本就是瞎蒙。我当年刚入行时,就吃过这个亏——看到一堆告警,愣是分不清是正常业务还是攻击流量。
所以这一章,咱们把地基打牢。我会结合自己踩过的坑,带你快速过一遍TCP/IP协议栈、常见攻击类型,还有网络流量的基础知识。嗯,准备好了吗?
2.1 TCP/IP协议栈:网络通信的骨架
TCP/IP协议栈,说白了就是互联网的通用语言。它分四层,每一层各司其职。我习惯把它比作一个快递系统:
- 应用层:你下单的商品(HTTP、FTP、SMTP)
- 传输层:快递单号(TCP/UDP,保证包裹送到)
- 网络层:快递路线规划(IP协议,决定走哪条路)
- 网络接口层:快递小哥的交通工具(以太网、Wi-Fi)
你想想看,一个数据包从你的浏览器发出去,要经过这四层层层封装。每一层都会加上自己的头部信息,就像快递包裹上贴的层层标签。
核心要点:入侵检测系统(IDS)主要盯着传输层和网络层看。因为大部分攻击,都会在这两层留下痕迹。比如SYN Flood攻击,就是利用TCP三次握手的漏洞。
2.1.1 TCP三次握手与四次挥手
这个知识点,面试必问,实战也必用。我简单说下:
三次握手(建立连接):
- 客户端发SYN包(我想跟你说话)
- 服务器回SYN+ACK包(好的,我听到了,你听得到我吗?)
- 客户端发ACK包(听到了,咱们开始聊)
四次挥手(断开连接):
- 客户端发FIN包(我说完了)
- 服务器回ACK包(好的,我知道了)
- 服务器发FIN包(我也说完了)
- 客户端回ACK包(好的,再见)
实战小技巧:我在做流量分析时,经常用Wireshark抓包看三次握手。如果发现大量只有SYN包,没有后续的ACK包,那基本可以断定是SYN Flood攻击。嗯,这个套路我用了好多年,屡试不爽。
2.2 常见攻击类型:知己知彼
做入侵检测,你得知道对手长什么样。我见过太多安全工程师,配置了一堆规则,结果连SQL注入和XSS都分不清。这不行。
2.4.1 DDoS攻击:流量洪水的噩梦
DDoS(分布式拒绝服务攻击),说白了就是一群人堵你家门口,让真正想进来的人进不去。我曾在某电商公司经历过一次双十一前的DDoS攻击,那场面,真是惊心动魄。
常见的DDoS类型:
| 攻击类型 | 攻击层 | 攻击方式 | 检测特征 |
|---|---|---|---|
| SYN Flood | 传输层 | 发送大量SYN包,不完成握手 | 半连接数暴增 |
| UDP Flood | 传输层 | 发送大量UDP包到随机端口 | UDP流量异常升高 |
| HTTP Flood | 应用层 | 发送大量看似正常的HTTP请求 | 请求频率异常 |
| DNS Amplification | 应用层 | 利用DNS服务器放大流量 | 源端口53的流量暴增 |
避坑指南:我曾经犯过一个错误——把正常的业务高峰误判为DDoS攻击。后来学乖了,做检测前一定要先建立基线。没有基线,你根本分不清什么是异常。
2.4.2 SQL注入:数据库的致命漏洞
SQL注入,就是攻击者在输入框里塞一段SQL代码,骗过你的数据库。我见过最离谱的一次,某公司的后台登录页面,用户名输入框直接写 ' OR 1=1 -- 就能登录进去。嗯,这代码写得也太随意了。
一个简单的例子:
// 有漏洞的代码
String query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
// 攻击者输入
username: admin' --
password: 随便填
// 实际执行的SQL
SELECT * FROM users WHERE username = 'admin' --' AND password = '随便填'
看到没?-- 把后面的密码验证给注释掉了。这就是典型的SQL注入。
检测思路:在IDS中,我们可以通过正则匹配常见的SQL注入关键字,比如 OR 1=1、UNION SELECT、-- 等。但要注意,攻击者会做编码绕过,所以检测规则要不断更新。
2.4.3 XSS攻击:前端的隐形杀手
XSS(跨站脚本攻击),就是攻击者往网页里注入恶意脚本。你访问了那个页面,脚本就在你的浏览器里执行,偷你的cookie、改你的页面内容。
XSS分三种:
- 反射型XSS:恶意脚本藏在URL里,点击就触发。比如
https://example.com/search?q=<script>alert('XSS')</script> - 存储型XSS:恶意脚本存到服务器上,每个访问者都会中招。比如在评论区写恶意代码。
- DOM型XSS:通过修改页面的DOM结构触发,纯前端问题。
我的经验:检测XSS,不能只看请求参数。因为很多XSS攻击的payload是经过URL编码的。我习惯先做一次URL解码,再匹配特征。另外,<script> 标签只是最基础的,现在攻击者会用 <img src=x onerror=...> 这种更隐蔽的方式。
2.3 网络流量基础:读懂数据包的语言
做入侵检测,你得学会「读包」。就像医生看心电图一样,你得能从一堆数据包里看出问题。
2.3.1 数据包的结构
一个网络数据包,从外到内依次是:
- 以太网帧头:源MAC、目标MAC
- IP头部:源IP、目标IP、协议类型(TCP/UDP)
- TCP/UDP头部:源端口、目标端口、标志位(SYN、ACK等)
- 应用层数据:HTTP请求、SQL语句等
你想想看,一个攻击包,它的源IP可能是伪造的,端口可能是异常的,应用层数据里可能藏着恶意代码。每一层都是线索。
2.3.2 关键流量指标
我平时做流量分析,主要看这几个指标:
| 指标 | 正常范围 | 异常信号 |
|---|---|---|
| 每秒包数(PPS) | 取决于业务,一般<10000 | 突然飙升10倍以上 |
| 每秒字节数(BPS) | 取决于带宽 | 接近带宽上限 |
| TCP连接数 | 稳定或缓慢增长 | 短时间内暴增 |
| SYN包占比 | 通常<10% | 超过50%,可能是SYN Flood |
| 错误包占比 | <1% | 持续升高,可能有扫描行为 |
核心观点:没有绝对的「正常值」。每个业务都有自己的流量特征。我建议你花一周时间,先收集正常流量数据,建立基线。有了基线,异常检测才有依据。
2.3.3 用Wireshark抓个包看看
光说不练假把式。咱们用Wireshark抓个HTTP请求看看:
# 过滤条件:只显示HTTP请求
http.request
# 一个典型的HTTP GET请求包
Frame 1: 342 bytes on wire (2736 bits)
Ethernet II, Src: 00:1a:2b:3c:4d:5e, Dst: 00:5e:4d:3c:2b:1a
Internet Protocol Version 4, Src: 192.168.1.100, Dst: 10.0.0.1
Transmission Control Protocol, Src Port: 54321, Dst Port: 80, Flags: [PSH, ACK]
Hypertext Transfer Protocol
GET /login.php HTTP/1.1\r\n
Host: example.com\r\n
User-Agent: Mozilla/5.0\r\n
...
看到没?每一层的信息都清清楚楚。如果这是一个SQL注入攻击,那 GET /login.php?username=admin' OR 1=1 -- 就会出现在应用层数据里。
我的习惯:做流量分析时,我一般先看「五元组」(源IP、目标IP、源端口、目标端口、协议)。如果五元组异常,再深入看应用层数据。这样效率最高,不会在一堆正常流量里迷失方向。
小结
好了,这一章的内容就这些。咱们回顾一下:
- TCP/IP协议栈是网络通信的基础,入侵检测主要盯着传输层和网络层
- DDoS攻击靠流量特征检测,SQL注入和XSS靠应用层内容检测
- 网络流量分析要建立基线,关注PPS、BPS、连接数等关键指标
下一章,咱们会开始搭建入侵检测环境,真正动手干起来。嗯,到时候我会分享一些我踩过的坑,保证让你少走弯路。