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三次握手与四次挥手

这个知识点,面试必问,实战也必用。我简单说下:

三次握手(建立连接):

  1. 客户端发SYN包(我想跟你说话)
  2. 服务器回SYN+ACK包(好的,我听到了,你听得到我吗?)
  3. 客户端发ACK包(听到了,咱们开始聊)

四次挥手(断开连接):

  1. 客户端发FIN包(我说完了)
  2. 服务器回ACK包(好的,我知道了)
  3. 服务器发FIN包(我也说完了)
  4. 客户端回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 数据包的结构

一个网络数据包,从外到内依次是:

  1. 以太网帧头:源MAC、目标MAC
  2. IP头部:源IP、目标IP、协议类型(TCP/UDP)
  3. TCP/UDP头部:源端口、目标端口、标志位(SYN、ACK等)
  4. 应用层数据: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、连接数等关键指标

下一章,咱们会开始搭建入侵检测环境,真正动手干起来。嗯,到时候我会分享一些我踩过的坑,保证让你少走弯路。