计算机和网络安全简史:第二期

机核

  ·  

2024-11-26 07:00:00

  ·  

3次阅读

题图:《黑客帝国:重装上阵》剧照:崔尼蒂正在入侵电网系统,2003年

“黑客”到底是什么

从公众认知的狭义的“黑客”的定义——使用技术手段从自动化系统中获取不正当利益或造成破坏的人——来看,早在计算机和网络系统之前就已经有黑客了。时间回到1970年代,当时美国的电话网络普遍使用AT&T公司生产的自动电话交换机,这种交换机使用使用带内信号控制,也就是说,控制信号复用业务线路而非专门的控制线路传输。正常情况下通过专用设备接入线路,在线路中产生特定频率的音频信号来实现管理和调度功能。

具体来说,这个“特定频率”指的是2600赫兹。

起初有人发现,在打长途电话的时候吹口哨,偶尔会让电话掉线。这就是因为口哨的声音频率如果恰好达到2600赫兹,交换机会将其视为空闲信号,从而将电话发起端踢掉,让并对端变为操作员模式。后来John Thomas Draper发现,当时市面上卖的Quaker牌(是的,就是你在超市里能买到的那个做麦片的“桂格”牌)的Cap'n Crunch麦片附带了一个双音塑料哨子玩具,如果堵住其中一个孔就可以吹出2600Hz音调。于是他使用这个办法骇入长途电话网络,实现免费拨打长途电话的目的。这就是最早的“网络黑客”。

John Thomas Draper (John Thomas Draper)

包装背面的宣传画。想不到其中“Use for a secret code”的部分某种程度上还真说中了 (包装背面的宣传画。想不到其中“Use for a secret code”的部分某种程度上还真说中了)

不知道是因为“最早的黑客工具”加持还是老玩具圈子特有的行情,这款哨子在eBay上的行价高达100美元以上 (不知道是因为“最早的黑客工具”加持还是老玩具圈子特有的行情,这款哨子在eBay上的行价高达100美元以上)

今天,由于计算机、信息系统和网络在现代社会承担了相较以前更为重要功能,由于不同的利益驱使,“黑客”也从公众眼中的一群“反抗大公司的技术怪咖”分化成为更复杂的人群。其中有投身安全研究的“白帽子”;有挖掘和贩售漏洞的“漏洞猎人”;有收购和贩卖泄露数据的“数据黑市”;有专门开发远控木马和勒索病毒的“武器贩子”;也有从事黑产业务,专门以破坏、勒索为业的“黑帽子”。

好了,闲篇到此为止,进入正题。

网络攻击基础

网络攻击模型

当今的网络安全业界会将网络攻击按照顺序和步骤进行建模,目前业界普遍使用的模型有两个:洛克希德·马丁公司提出的“网络杀伤链”模型(Cyber Kill Chain,是的,就是你们熟悉的那个军火公司“Lockheed Martin”),以及Mitre公司提出的“ATT&CK”模型。其中我个人更倾向使用ATT&CK模型,从技术角度这个模型的划分更为精细,也更符合实际。ATT&CK模型将网络攻击划分为14个阶段,每个阶段都包含若干攻击者可在该阶段使用的技术并赋予编号。这14个攻击阶段如下:

最新版本的Mitre ATT&CK 模型内容 (最新版本的Mitre ATT&CK 模型内容)

  • Reconnaissance / 侦察(TA0043):攻击者在发起攻击之前收集目标相关的信息;
  • Resource Development / 资源积累(TA0042):根据侦察获得的信息,有针对性地准备攻击资源;
  • Initial Access / 初始攻击(TA0001):尝试突破目标网络系统的边界;
  • Execution / 实施攻击(TA0002):突破边界系统之后获得目标边界系统上的执行权限;
  • Persistence / 权限维持(TA00033):将权限持久化,不会因为系统重启和例行维护等原因丢失;
  • Privilege Escalation / 权限提升(TA0004):获取目标系统更高等级的权限;
  • Defense Evasion / 防御规避(TA0005):使用技术手段躲避检测和防御机制;
  • Credential Access / 凭证获取(TA0006):获取目标系统内部服务的登录凭证;
  • Discovery / 探索发现(TA0007):获取关于目标网络内部状态相关知识,例如网络规模、网络拓扑结构等;
  • Lateral Movement / 横向移动(TA0008):向目标网络内部更多主机发起攻击,扩大战果;
  • Collection / 信息收集(TA0009):截取目标网络内部实时产生的数据信息,如网络流量、键盘输入记录等;
  • Command and Control / 控制(TA0011):在目标网络内部建立通向外部的控制链路;
  • Exfiltration / 数据渗出(TA0010):将获取到的高价值数据以隐匿方式传输到外部;
  • Impact / 实施破坏(TA0040):实施破坏行为,例如加密勒索、发起DDoS攻击、抹除数据等。

杀伤链模型和ATT&CK模型的对比,对于网安从业者而言,ATT&CK模型更具实用价值,杀伤链模型更为“古典” (杀伤链模型和ATT&CK模型的对比,对于网安从业者而言,ATT&CK模型更具实用价值,杀伤链模型更为“古典”)

ATT&CK模型很全面,涵盖了一次完整的网络攻击的全部过程以及几乎全部技战术,限于篇幅和内容深度,本文选择其中侦察和初始攻击两部分最常见也是认知度最高的手段进行介绍。

端口扫描和漏洞扫描

现在开始我们终于开始变得像个大众刻板印象里的“黑客”那样,隔着网线,敲敲指令,就能控制网络上别人的电脑。在ATT&CK模型里,端口扫描属于侦察阶段中的主动扫描技战术(Active Scanning,编号T1595)。

一般来说,如果对于目标主机或者网络没有了解,黑客首先要做的就是端口扫描,看看目标网络有哪些主机在线,每台主机开放了什么端口和服务。这部分内容会涉及一些关于TCP/IP协议的知识,@韩大老师写过一系列计算机网络基础知识的科普文章,内容写的很好,如果想详细学习这部分内容可以读一读:

<可以在家学会的网络技术(二):从网页到 TCP/IP>

这里我只大概先提一嘴。在TCP/IP协议(TCP和UDP)中有一个两字节构成的端口号(Port Number)字段,取值范围从0到65535。我们常用的网络服务几乎全都是基于TCP/IP协议的,并且会约定一个相对固定的端口号。服务运行的时候就会“监听”对应的端口号。当客户端向端口发起连接,操作系统就会把发给这个端口的数据转给监听这个端口的网络服务程序。

常用的网络服务都会使用一个相对固定的端口号,比如我们访问网页用的HTTP协议,默认端口是80、加密的HTTPS是443、ssh是22等。目前端口号和对应的服务由互联网号码分配局(Internet Assigned Numbers Authority,IANA)管理,其中前1024个端口号(0到1023号)被称为“知名端口号”(Well-known ports),在UNIX类操作系统里,进程需要具备超级用户权限才能监听知名端口。知名端口包括了今天我们个人用户使用的大多数常用服务。

日常会接触到的常用端口和协议 (日常会接触到的常用端口和协议)

所以如果想知道目标主机开放了什么服务,只需要尝试和主机上对应这个服务的端口号进行连接,看看端口是否开放就行了,如果端口没有开放,连接就会失败。如果想知道自己本机目前有哪些开放端口和已经建立的TCP连接,可以用netstat命令。

netstat -ano命令回显示例,-ano参数组合可以看到每个端口都是由哪个进程在监听。这个命令是Windows和Linux通用的 (netstat -ano命令回显示例,-ano参数组合可以看到每个端口都是由哪个进程在监听。这个命令是Windows和Linux通用的)

这里还能多说一句,写这段的时候我看了一下在IANA注册的全部知名端口号,然后在里面找到了不得了的东西:我居然在这里找到了DooM!1994年,id Software的程序员Dave D. Taylor提交申请,使用TCP和UDP协议的666号端口用于DooM的多人对战通信,这个申请被受理并写入RFC规范(RFC 1700,1994年10月)。这可能是唯一一个被游戏注册的知名端口!

RFC 1700规范,这项规范后来被IANA在线查阅文档替代 (RFC 1700规范,这项规范后来被IANA在线查阅文档替代)

这里还能再多说一句,DooM当年用的多人对战网络服务名为Dwango,这项服务诞生于1994年,最初就是因为其适配DooM而闻名。随着互联网设施的完善和普及,Dwango最终在1998年10月停止服务。虽然它的美国母公司衰落了,但其日本分公司后来却得到了长足发展,成为了现在的Niconico和Spike Chunsoft,万物起源是DooM实锤了。

端口扫描就是基于这个原理,它会遍历尝试连接目标主机上的常用服务端口,看看是否开放。向一个在线的有效IP地址的端口发起连接请求(发送SYN包),一般会有三种结果:

  • 对方返回SYN-ACK包,即TCP三次握手的第二步,代表端口开放;
  • 对方无应答(超时),可能是请求包被丢弃、传输中丢失或者被防火墙拦截;
  • 对方返回RST包(连接重置),代表端口未开放或者被防火墙阻断。

目前功能最全面也应用最广泛的端口扫描工具叫nmap,这个名字是network mapper的缩写。nmap可以实现很多不同的扫描功能。如全连接扫描、半连接扫描、Ping扫描、端口服务猜测、目标主机操作系统猜测、网络拓扑绘制等,还可以使用插件进行扩展。如果判明目标端口开放,可以进一步使用相应的协议发送探测数据包,获取服务或应用的版本。

NMAP工具是完全免费的,可以从 nmap.org 获取 (NMAP工具是完全免费的,可以从 nmap.org 获取)

这里就不得不提到nmap在电影银幕上的高光时刻:在电影《黑客帝国:重装上阵》中,崔妮蒂为了切断防卫严密的大楼的供电,从一座变电站黑入电网控制系统切断供电。电影在这一幕只给了屏幕显示内容不到两秒的特写,而这两秒了展示了一次完整的攻击过程。我将屏幕显示崔尼蒂输入的部分标注出来:

首先,崔妮蒂使用了nmap工具对目标服务器10.2.2.2进行端口扫描(图中的第一段输入),这是一个常用的内网IP地址。参数组合如下:

  • -v:输出更多过程细节;
  • -sS:TCP SYN半开连接扫描,即使用RST代替ACK回复SYN/ACK包,不建立连接;
  • -O:猜测操作系统。

使用半开连接扫描的意义在于,当时的防火墙只审计已经建立的TCP连接,半开连接扫描不会被记录在日志里。

扫描结果显示目标服务器开放22/TCP端口,即SSH服务端口,操作系统无法猜测。而后使用SSHNUKE工具对目标的SSH端口进行攻击(图中的第二段输入)。利用SSHv1 CRC32溢出漏洞(漏洞编号CVE-2001-0144,之后的内容里我会详细介绍关于漏洞的知识)。这个漏洞是由于错误地采用了16位无符号整数而不是32位变量导致,允许入侵者远程覆盖目标计算机内存任意地址内容。SSHNUKE工具将这个漏洞武器化,重置目标主机的root账户密码。

覆写密码成功之后再使用常规的ssh客户端和刚刚设置的新密码登录目标主机root账号(图中的第三段输入)。

所以为什么我们都喜欢黑客帝国(限老三部曲),因为它真的给予了计算机和黑客技术最大的尊重。不过到底还是弹了一个“ACCESS GRANTED”(准许登录)的提示框给“麻瓜”们看,真实的UNIX或LINUX系统通过SSH登录成功之后只会在控制台里显示该账号上次登录的时间和IP地址。

网络扫描可获得以下情报:

  • 判断目标主机是否在线。使用Ping扫描等方式可以得知目标IP是否存活;
  • 获取目标主机的开放端口和服务。如果可能的话还可以获得服务的具体类别和版本(比如同样是HTTP服务,可通过服务的BANNER判断是Apache HTTPD还是Microsoft IIS);
  • 从本地网络到目标网络之间的网络链路拓扑。 网络扫描是最基础的情报获取方式,攻击者可根据扫描结果有针对性地选择攻击手段。不过由于扫描行为本身有很明显的特征,比如目标网络的防火墙会收到来自同一个IP地址的密集且有规律的TCP数据包,因此也很容易被识别之后封禁IP。扫描器也有规避识别的手段,除了上面介绍过的半开连接扫描,还有慢速扫描、FIN扫描、乱序扫描等。

Web2.0时代:XSS和SQL注入

随着互联网进入Web 2.0时代,人们可以不止通过邮件、新闻组和TELNET论坛,而是在网页和网站上交流了。随之而来的就是新的针对Web的网络安全问题,其中最典型的莫过于跨站脚本攻击(Cross Site Scripting / XSS,为了区别于层叠样式表而没有缩写成CSS)和SQL注入(SQL Injection)。在ATT&CK中,XSS和SQL注入都属于初始攻击阶段,但属于不同的技战法:XSS属于“间接攻击”(Drive-by Compromise,有时候也被称为水坑攻击,编号T1189),而SQL注入属于“公用应用利用”(Exploit Public-Facing Application,编号T1190)。

在讲解具体原理之前,我想请大家听一段马三立老师的经典单口相声《逗你玩》。

<内嵌内容,请前往机核查看>

(马三立单口相声《逗你玩》)

这个相声讲的大意是这样的:一个偷衣服的贼跟看着衣服的小孩儿说:“我姓豆,叫豆你玩,你记住了别忘了啊”。重复好多遍,小孩把这人叫“豆你玩”记住了。然后贼人开始大摇大摆地拿人家衣服。这时候小孩儿就喊了:“妈妈,他拿咱家褂子!”,在屋里干活儿的妈妈就问:“谁啊?”小孩回答:“逗你玩儿!”结果他妈妈就真以为孩子在逗她玩,骂了他两句,没有出来阻止小偷拿衣服。等忙完活儿出来一看,衣服都被人拿光了。

《逗你玩》的笑点在于,偷衣服的贼预料到了接下来母子俩的对话会是什么样的,故意让小孩记住自己的名字叫“逗你玩”,成功让孩儿他妈以为是孩子在逗她玩,没有及时过来制止,导致东西被偷走。而跨站脚本攻击和SQL注入的思路和这个相声是一样的,二者都是因为服务端没有对客户端提交的内容(数据)由于处理不当,导致这些内容在服务端或其他客户端/浏览器端被当做代码执行了。

讲解SQL注入和XSS攻击之前,同样也可以先读一读韩大老师的科普文章作为背景知识:

<可以在家学会的网络技术(一):HTTP>

先说SQL注入。我们常说的”网址“或者”链接“,它的正式名称叫”统一资源定位符“(Uniform Resource Locator,URL)。以淘宝网的商品URL为例,我们先了解一下URL的结构:

https://item.taobao.com/item.htm?id=615588247373

这条URL的结构如下:

  • https://:协议名(scheme),表明服务端使用何种服务。在本例里是常见的https,该协议默认端口443;
  • item.taobao.com:主机名(host),表明要访问的主机名,可以是域名或者IP地址;
  • /item.htm:路径(path),表明目标资源在主机文件系统里的位置;
  • ?id=615588247373:查询参数(query),以问号开头,表明访问资源所需的附加参数,参数可附加多个,之间使用&号分隔。在本例里附带了1个参数,即id,值为615588247373,在本例里表示商品编号。

在Web 1.0时代,URL往往不带参数部分,服务端页面都是静态文件,访问者只需在路径部分指定要访问的页面,服务端即将指定路径的网页文件返回给浏览器端。

而到了Web 2.0时代,随着Web应用的普及,URL的路径和参数部分往往会作为数据库查询条件,在服务端拼凑成一条完整的SQL查询语句。以刚刚的URL为例,我们可以假设服务端会用以下这样的SQL语句查询指定id的商品信息:

SELECT * FROM items WHERE id = {URL里的id参数值};

结合例子中的URL,实际执行的SQL语句就会是这样:

SELECT * FROM items WHERE id = 615588247373;

正常使用的情况下,这条查询就会返回指定id值的商品信息,然后使用商品信息生成HTML页面返回给浏览器端。现在问题来了,如果我在本应该在URL的id参数里写一些其他东西会怎么样呢?还是以刚刚的URL为例子,如果我对id的内容进行一些修改,让它变成这样:

https://item.taobao.com/item.htm?id=1%20OR%201=1

由于URL规范中不允许直接出现空格字符,所以我使用中”%“进行转义,在URL编码规范中它会连同其后的两个数字一起按十六进制转换成ASCII字符,在本例里”%20“表示的就是十进制第32号ASCII字符,也就是空格。如果服务端没有做防注入过滤,那服务端的查询就会变成这样:

SELECT * FROM items WHERE id = 1 OR 1=1;

这样我们就完成了一次最基础的SQL注入:我们通过改变查询参数值的方式让SQL查询执行了设计之外的逻辑。在本例里查询条件标识符”WHERE“后边有两个OR关系的表达式:id=1以及1=1。其中1=1永远为真,所以id=1的商品无论是否存在,整个查询条件都永远为真,查询就会返回items表里的所有商品信息。

经典的SQL注入梗图,现在你终于可以看懂它了 (经典的SQL注入梗图,现在你终于可以看懂它了)

SQL注入最直接侵害的就是数据库服务。如果Web前端没有做防注入处理,黑客可以直接通过注入点获取表乃至整个数据库的全部数据,大部分的数据泄露事件都是这么造成的;如果注入点出现在登录页上,还可能借此跳过身份认证,直接获得后台登录权限;如果数据库允许执行外部过程,黑客甚至可以通过注入点上传远控木马,获得整个服务器的权限。

SQL注入漏洞曾引发过非常严重的数据泄露事件,离咱们玩家最近的可能是2011年索尼账号泄露事件。这起事件造成包括7700万个PlayStation账号在内超过一亿个索尼各类服务账号遭到泄露,直接经济损失1.7亿美元,时任索尼PlayStation业务负责人的平井一夫出面道歉。

大众媒体对这起事件的报道主要集中在“泄露内容包括信用卡信息”和“索尼使用明文存储账号密码”这两点上,但对于具体的入侵手段少有关注。这起事件实际上是由于索尼影业官网(sonypicture.com,而非PlayStation)存在一个非常低级的SQL注入漏洞,导致入侵者通过它获得了网站后台权限并进一步向内网渗透,最终获得数据库内容。而这已经不是索尼第一次遭受SQL注入攻击,在更早的2008年,PlayStation官网就曾经受到过SQL注入攻击,导致网站内容被篡改。

XSS和SQL注入原理类似,但作用的对象不同。我们先来梳理一下,当我们在机组发一条动态,这中间大致都经历了哪些步骤。这个过程简化一下大致是这样的:

  • 首先当你点击“发布动态”的时候,浏览器会向服务器提交一个表单,表单的内容就是你刚刚写的动态内容以及附带的图片。
  • 服务端收到之后,会将动态内容和你的用户名一起写入数据库。
  • 其他人刷新页面的时候,服务器会把这条动态从数据库里取出来,嵌入HTML页面代码返回给客户端,出现在所有打开这个页面的浏览器里。 (我知道机组动态都是通过JSON接口异步返回给浏览器端脚本再渲染成页面的,为了方便讲解简化为生成静态页面的流程)

我们知道HTML代码是纯文本的,它会被浏览器解释和执行,最终渲染成我们看到的页面。所以如果我们提交的表单内容不是正常的留言,而是一段HTML代码呢?那它在最后一个步骤里会被WEB服务端嵌入页面的HTML代码发给浏览器,而浏览器会将其当做是页面HTML代码的一部分去执行,这就构成了一次成功的XSS攻击:服务端没有对用户提交的数据进行检查,导致恶意用户提交HTML代码片段嵌入前端页面,并在其他用户的浏览器里执行。

XSS漏洞分为持久型和反射型两种,刚刚介绍的这种就是持久型(也叫存储型),因为注入的内容存在于服务端数据库,任何访问包含该内容的浏览器都会被攻击;而反射型XSS(也叫非存储型)指的是请求的网址的一部分会以未被过滤和转义的形式出现在请求返回的HTML页面里,这样入侵者就可以通过控制URL的内容实现控制返回的HTML页面内容,实现XSS注入。举个最简单的例子,在一些带有搜索功能的页面了,用户搜索的关键词是以参数的形式出现在URL里,而相应的搜索结果页面里也会包含用户输入的关键词全文(比如“搜索到xx条包含关键词oo的内容”)。而如果输入的搜索关键词是一段HTML代码,而且页面又没有做防注入检查,这段代码就会从URL反射到页面内容并执行,这就是反射型XSS。

搜索结果示例,搜索结果经常会将关键词作为URL参数,并且原样出现在查询结果页里 (搜索结果示例,搜索结果经常会将关键词作为URL参数,并且原样出现在查询结果页里)

XSS攻击有很多种利用方式,例如直接用注入的HTML代码构造一个假的登录界面,诱使其他用户输入账号和密码从而盗取账号。不过最常见的利用是注入脚本:HTML代码可以使用<script>标签在页面里写javascript代码,利用XSS可以向其他人的浏览器里注入脚本,而这个脚本在客户端浏览器里运行的时候是有这个用户在该网站的登录状态和凭证的。虽然无法通过这个方式直接盗取账号,但可以通过这种方式操控账号执行操作。

XSS漏洞曾经引发过相当广泛的攻击,最早可追溯到2005年的MySpace.com XSS蠕虫事件。一个名叫Samy的安全研究员发现了网站上位于个人信息页面的一个XSS注入点,于是利用它在页面个人页面里嵌入了一个利用该漏洞传播的蠕虫。登录用户只要点击打开他的个人信息页就会被脚本控制,自动添加他为好友,并把注入脚本写入受害者的个人页实现进一步的传播。这是世界上第一个利用XSS漏洞传播的蠕虫,利用的是一个典型的持久型XSS漏洞,它在数小时内就感染了上百万个账号,创造了传播最快的计算机病毒世界纪录,并迫使myspace.com网站停止服务。

这个蠕虫会在受害账户的简介里添加一行:but most of all, samy is my hero (这个蠕虫会在受害账户的简介里添加一行:but most of all, samy is my hero)

离我们比较近的一次是2011年6月28日新浪微博爆发的XSS蠕虫事件。攻击者找到了新浪微博某个页面上的反射型XSS漏洞,于是先利用拿下的另一个域名上传恶意JS脚本,再利用XSS漏洞构造包含上传的恶意JS脚本的URL,最后利用短域名服务将这个恶意URL传播出去。和Myspace那次XSS类似,新浪微博这次XSS攻击同样也是控制受害账号关注某个特定账号,再利用受害账号发布带有骗点击内容的包含恶意URL的微博内容和私信引发继续传播。截止该漏洞修复,已有三万多个账号受到影响。有意思的是新浪微博这次XSS事件里被脚本操控的账号关注的那个账号叫“hellosamy”——这次攻击的作者向当年第一个XSS蠕虫的作者致敬。

2012年我大四毕业之前曾经在新浪短暂实习过,实习期间的一项任务就是给新浪的短URL服务t.cn开发URL检测过滤器,在生成短链接之前先判断用户提交的URL是否为安全URL。2011年那次XSS攻击能够成立的原因之一就是t.cn没有对用户提交的URL进行检查,导致包含XSS内容的URL被转换成了短域名,助推了蠕虫的传播。

XSS攻击这种技术被发现之初曾经被业界轻视,被认为“攻击者只能用它黑掉自己的浏览器”。但后来的攻击事件证明,无论是存储型还是反射型XSS漏洞,都有可能造成大范围的攻击和蠕虫传播。而且,现在大量的内容最终是通过HTML网页的形式,网页暂且不提,邮件和移动端应用显示的内容实际也是HTML,XSS通过嵌入HTML的形式实现的攻击甚至可以借此进一步实现对终端的渗透和数据采集。在2022年美国国家安全局对我国西北工业大学的APT攻击中就使用了XSS手段实现对终端设备的攻击和信息收集。

XSS和SQL注入能够成立的根源都是服务端没有做好用户输入和过滤,造成意外的代码注入,也有部分原因是浏览器未经过检查就运行不安全的JS脚本。目前主流的WEB框架都已经实现了完善的防注入功能,主流的浏览器,如Chrome、FireFox和Edge也都集成了相应的安全能力,这两类攻击在近几年也逐渐减少了,大范围传播的恶性XSS攻击更是几乎不再出现了。

针对Web的攻击还有很多种,比如恶意文件上传、恶意文件包含、跨站请求伪造(CSRF)、点击劫持(Click Hijack,当年微博也爆发过一次点击劫持攻击)、HTTP拖延攻击(HTTP Stall)等,这里就不展开介绍了,感兴趣的朋友可自己搜索相关的定义和知识。

传统网络防御体系

防火墙、WAF、IDS、IPS

网络防御体系由边界和纵深两部分,这很好理解:边界防御用于抵挡大部分来自外界的已知的攻击,纵深防御用来检测绕过边界从内部发起的攻击。边界防御的典型设备就是之前介绍的防火墙(Firewall)。Web服务(或者其他使用HTTP协议的服务)成为互联网主流业务之后又有了专门检测和防御针对Web攻击的Web应用防火墙(Web Application Firewall,即WAF)。刚刚介绍的SQL注入和XSS等就属于WAF的防御范围。目前主流的云服务供应商都会提供基础的WAF功能,比如机核使用的云服务就带有WAF功能。在本文编写期间利用机核的搜索功能测试反射型XSS时就触发了WAF告警阻断。

编写本文期间,使用机核的搜索功能测试反射型XSS攻击触发了阿里云WAF的拦截,地址栏里标注的部分就是试图注入的XSS代码 (编写本文期间,使用机核的搜索功能测试反射型XSS攻击触发了阿里云WAF的拦截,地址栏里标注的部分就是试图注入的XSS代码)

只有边界防御是不够的,在IT架构中,边界是对于对外业务而言的,在内网也有可能出现攻击事件,例如员工不慎在办公内网打开了恶意投递的带有木马的邮件,造成内网攻击和传播。这时候就需要NIDS出场了。NIDS是Network Intrusion Detection System的缩写,即网络入侵检测系统,有时候也简写为IDS。它一般部署在交换机旁路,接收交换机镜像复制的全部内网流量,并对流量进行检查。

防火墙和网络入侵检测系统在企业网络中的部署位置 (防火墙和网络入侵检测系统在企业网络中的部署位置)

和防火墙不同,由于NIDS的流量是镜像复制来的,所以在时效性上没有防火墙那么高的要求,可以使用更多的特征规则(或者叫“特征签名”)来检查数据包的内容,但无法直接实施阻断。一旦发现匹配特征的数据包,NIDS就会发出告警,提醒安全运维人员进行检查和处置。一般来说,一个成熟的IDS产品的规则库规模一般在五千条左右,覆盖从古至今出现过的绝大部分漏洞利用流量特征、蠕虫、病毒和远控木马流量特征以及常见的网络攻击流量特征。

而如果IDS从旁路部署改为串联部署,并且在检测到可疑流量的时候临时封禁这个流量的来源主机,我们就得到了IPS:Intrusion Prevention System,即入侵防御系统。一般来说,为了减少对正常流量和业务的干扰,IPS使用的规则集会比IDS更为谨慎,只阻断那些发送带有明显恶意特征流量的主机。

IPS在企业网络中的部署位置示例 (IPS在企业网络中的部署位置示例)

用办公大楼打比方的话,防火墙相当于大楼门口的门禁,只有符合要求的数据包才能进入;WAF相当于办事大厅里的保安,负责维持服务秩序,防止有人干扰窗口服务人员;IDS相当于大楼内的摄像监控,当发现可疑人员时会发出告警;而IPS则是大楼内部的保安,有能力对发生在内部的安全事件进行处置。

传统的计算机网络安全分层防御架构 (传统的计算机网络安全分层防御架构)

WAF+防火墙+IDS+IPS,再加上服务器和终端系统安装的防病毒软件、终端检测和响应软件(Endpoint Detection and Response,EDR)和主机入侵检测系统(Host Intrusion Detection System,HIDS),共同构成了传统网络安全防御体系。

传统防御体系成立的前提很理想化:网络管理员熟知所管辖的网络的所有细节,包括网络拓扑、主机数量、主机开放服务和业务;所有网络安防设备版本和检测规则都是最新版本,可检测所有已知的恶意流量特征;所有主机操作系统都是最新版本,不存在已知的安全漏洞;所有终端都按规定部署了终端防护措施。只有这样,这套安防体系才能发挥它最大的价值。

这套体系在以前其实是有效的,早期的互联网和企业网络规模远远没有现在这般庞大,网络攻击手段也比较单一,网络管理员一般都兼任安防运维。然而随着企业的网络规模日益扩张,软件和服务日趋复杂化以及流量加密技术的普及,使得网络攻击——尤其是内网渗透和横向移动——变得越来越难以检测,以及由规模膨胀引发的管理滞后,传统的安全体系越来越难以应对。

下期预告

本期介绍了传统安防体系,下一期那当然就是新时代的网络安全挑战及其解决办法。感兴趣的朋友可关注我的计算机和网络安全简史作品集。

参考资料