0x01 前言

不理解攻击的来源以及它们多年来如何从科学研究变成成名手段,就不可能知道如何抵御今天和明天的攻击。

不了解网络安全的历史以及安全威胁的演化过程,就很难理解网络安全的未来走向。

0x02 互联网出现

当今的互联网始于 1982 年由美国国防部信息系统局(DISA)和高级研究计划局(ARPA)发布的传输控制协议/互联网协议(TCP/IP)。那时互联网主要由大学和政府机构组成,规模小,而且非常开放。每个运营商负责维护一张互联网上所有节点的表格,必须共享地址信息才能访问网络上其他节点,并且在有变动时发送更新。

互联网早期发展阶段的思维方式遵守 Postel 法则:严于律己,宽以待人

简单来说,对于互相操作的多个网络系统来说,必须对接受的流量表现出宽容性,而在发送流量时则要完全遵守确立的协议。这一法则为之后的各种网络安全事件埋下了伏笔。

0x03 Morris 蠕虫

1988 年 11 月 2 日 Morris 蠕虫的发布极大的改变了互联网的开放性,据估计造成 10% 的节点下线(6000 个节点,当时网络估计有 60000 个节点)。

Morris 蠕虫使用的一些花招现在仍被蠕虫制作者采用,包括 重定向、密码猜解、自动填充和缓冲区溢出攻击 等。

Morris 蠕虫直接导致卡耐基·梅隆大学 CERT 协调中心(CERT/CC)的成立,还推动了第一种网络安全设施——防火墙的发展。

0x04 防火墙

网络防火墙的最早期形式开发于 20 世纪 90 年代末,最初就是在路由器上增加简单的包过滤规则。

网关级别的包过滤使网络运营商可以阻止已知的“坏”流量进入网络,但是对安全性只能提供有限的改进。这些规则难以维护,非常容易出现“误报”(阻止实际上的“好”流量),还需要了解组织中的每个人需要与谁通信、哪些通信对象需要阻止。包过滤在互联网很小、只包含 60000 个节点的时候是理想的手段,但网络的快速增长使其很快就不再实用。

下一代防火墙可以进行状态型包过滤。它的决策不仅根据流量的类型,而且还根据两个主机之间连接的状态。状态型包过滤防火墙可以根据包的状态,基于上下文的方式决定流量的好坏,它实际上是商用网络安全市场的真正发端。

此后,防火墙进入了快速发展阶段,加入了代理、深度包检测、应用程序感知和VPN(虚拟专用网)等功能。

0x05 入侵检测系统

在大部分情况下,管理员必须意识到威胁,才能设置阻止威胁的规则。大部分防火墙不能根据它们不知道的规则发出警报,对于未知的威胁效率低下。

为了应对未知的威胁,大部分网络部署入侵检测系统(IDS)。IDS 可通过流量模式(是否包含与恶意病毒相关的字符)或者异常活动(使用凭据在非常规地点登录系统)来检测威胁。

20 实际 80 年代提出了许多 IDS 的先驱,主要是为了管理日志文件的审计,在此之前,这些过程都是手工进行的——每周打印一大叠日志,然后手工检查。

第一种 IDS 是 Dorothy Denning 在 1987 年的论文《An Intrusion Detection Model》中提出的,在很大程度上成为当今 IDS 的基础。

论文中概述的入侵检测专家系统(IDES)有以下 6 个主要组成部分:

  • 主题

  • 对象

  • 审计记录

  • 轮廓特征

  • 异常记录

  • 活动规则

结合对“谁是网络的用户”(主题)和用户试图访问的资源(对象)以及这些资源的日志(审计记录)的理解,IDES 能构建一个强大的档案文件,说明网络上存在的人,以及他们在网络上所做的事情。

利用第一组数据,IDES 运营者可以自动构建一张表格,描述网络活动的一般模式(轮廓特征)和落在这些模式之外的任何行为(异常记录)。网络管理员可以据此开发特征库,在发生预期之外行为时发出警告(活动规则)。

现代 IDS 解决方案通常是以网络为中心,这意味着失去了原始 IDES 解决方案提出的某种深度。现代 IDS 往往擅长检测恶意的网络活动,但是不一定擅长检测台式机上的恶意活动或者异常活动。多年来,IDS 和 IDS 开发者的焦点是构建更好的特征库,更快的交付特征库,而不是专注于建立对网络的理解,研究通信流量的背景。

0x06 计算机病毒

1971 年,BBN 技术公司的程序员 Robert Thomas 开发出了第一种真正意义上的计算机病毒(病毒的概念早在 1949 年就已经提出),被称为“爬行者”,是一种自我复制蠕虫。“爬行者”的出现直接导致第一种防病毒程序 Reaper(该程序从一个系统跳到另一个系统以删除“爬行者”)的出现。

第一种在网络之外创建并广为流传的病毒是 1982 年 2 月的 Elk Cloner,一个感染 Apple Ⅱ 计算机的引导扇区病毒。当机器从受到感染的软盘上启动时,病毒就会被复制到计算机内存并且在计算机上安装,任何插入被感染机器的未感染软盘都会被复制 Elk Cloner 程序,通过软盘在不同机器间传播。

20 世纪 80 年代和 90 年代初,大部分病毒利用软盘传播。在 20 世纪 80 年代的整整 10 年内,创新的传播感染方式也在不断出现,有些技术到现在仍在使用。

1983 年特洛伊木马 ARF-ARF 是已知的第一种通过电子公告牌(BBS)系统传播的病毒。

1986 年的“巴基斯坦流感”(Pakistani Flu)病毒(也称“大脑”[Brain]病毒)是第一个感染 IBM PC 兼容计算机的病毒。

据统计,1982 年 1 月到 1990 年 12 月,估计有 310 种病毒面世。相比之下,2013 年卡巴斯基公司报告每天发现 315000 个新的恶意文件,仅在 2013 年就共计发现了 114957000 个恶意文件。

0x07 防病毒软件

为了对抗网络中与日俱增的病毒和蠕虫威胁,各种组织机构于 20 世纪 80 年代末开始安装防病毒软件。

1984 年Fred Cohen 在发表的一篇论文中最先提到使用“病毒”一词描述“某种可以通过修改其他程序、加入可能经过演化的拷贝、以‘感染’它们的程序”。在这篇论文中,Cohen 概述了计算机病毒的组成、检测这些病毒的有效方法以及对病毒删除方法的建议。论文中还有预见性的指出“预防计算机病毒是可行的”。

Cohen 的工作直接导致了第一代商用防病毒解决方案的开发,这些软件于 20 世纪 80 年代末和 90 年代初发布,现在的大型和小型网络中,这类软件无处不在。

早期的防病毒程序主要依赖特征码检测,这在每年发布数百种新恶意病毒的情况下是可控的,而在每分钟出现数百种病毒时就难以应付了。除了快速增长的数量外,病毒制作者们很快研究出了多态病毒。多态病毒在每次复制时会修改自身,以便避开防病毒软件的检测。尽管其代码的基本功能保持相同,但是封装核心功能的外壳出现了变化。为此,防病毒软件制造商不得不开发启发式检测机制,以专注于代码的行为而非代码本身。

虽然大部分防病毒软件供应商仍然非常依赖基于特征的检测方法,但是几乎所有供应商都同时关注机器上运行的代码行为,从而根据这些行为做出决策。这在大部分恶意软件仅部署于少量机器上便开始变形、寻找下一组病毒时特别关键。

0x08 邮件过滤器和代理

随着互联网的兴起和联网组织数量的增加,诞生了一组新的攻击方式。垃圾邮件、网络欺诈(钓鱼)和恶意网站往往利用压倒性的资源,导致网络中的大量感染。仅监控网络流量已经远远不足,管理员还必须了解流量的内容和背景。

在全新的联网世界中,从一个网络上由嵌入到 Microsoft Word 文档或者 Adobe PDF 文件中的宏启动的网络感染可能会(通常也确实如此)很快的传播到其他网络。

当然,邮件管理员所担心的不仅仅是受感染的文件,垃圾邮件和网络欺诈也很快成为一个大问题。垃圾邮件一度占据了所有电子邮件的 70%。虽然垃圾邮件很多,但是从安全性的角度看,他们相对容易应付。使用合适的工具,可以很快的识别大部分垃圾邮件,并可以阻止他们发往用户手中,产生的少数“误报”也可以通过添加自定义规则更正。

网络欺诈(钓鱼)则大不相同(也将继续如此)。“网络钓鱼”(Phishing)一词于 1996 年在网络新闻组 alt.online-server.america.online 上第一次使用,美国在线服务是第一个遭到大规模钓鱼攻击的邮件系统。钓鱼邮件与垃圾邮件的差别在于,它欺骗人们点击一个恶意链接或者提供敏感信息。

而区分钓鱼邮件和真实邮件往往很困难。

代理服务于一些不同的目的,但是现在主要的目的是屏蔽请求内容的用户身份,避免用户访问已知的不良网站。最初,代理还被用作缓存代理。为了保留网络带宽,以及改善最终用户的速度,代理读取流行网站并保存这些网站的缓存。在每次用户请求更新时,代理不访问该站点,而是提供站点的本地拷贝,同时定期更新缓存。在互联网的早期,站点包括 FTP(文件传输协议)、Gopher 或者网站;而现在站点通常指的就是网站。

第一种 Web 代理服务器实际上是 CERT 的 httpd 服务器,这是 1990 年为 NeXT 平台开发的。NeXT 平台是史蒂夫·乔布斯在被逐出 Apple 公司之后,和他在 NeXT 计算机公司的团队一起开发的。NeXT 最终被 Apple 公司收购,NeXT 操作系统成为 Apple OS X 和 iOS 的基础。CERT httpd 服务器主要是一个 Web 服务器,但是具有有限的代理功能,包括缓存网站的能力。Squid 是 20 世纪 90 年代初期完成的 Harvest Cache Daemon 代码库的发展分支,除了缓存能力外,Squid 还为管理员提供了拦截某些网站,甚至可以根据用户和组建立限制的能力,这种功能现在还存在于最新的代理中。

尽管没有使用“情报”这一术语,但是代理和垃圾邮件过滤器管理员是最先使用情报来加固网络安全的人。为代理收集的“坏”网站列表或者为垃圾邮件过滤器收集的已知垃圾邮件主机列表,是网络安全情报的早期形式之一。

0x09 分布式拒绝服务攻击

网络安全历史的最后一部分是分布式拒绝服务(DDoS)攻击。拒绝服务攻击(DoS)从第一个恶意软件出现时就存在了。DDoS 攻击是从数千甚至数十万台主机发动的对整个网络的攻击。

有记录的第一次 DDoS 攻击发生在 1989 年,此次攻击采用简单的 Ping 洪泛(Defense.net,2014),从多个IP地址(通常是假冒的)发出很大的互联网控制消息协议(ICMP)数据包,吞噬系统资源,使系统无法响应其他请求。

其他著名的 DDoS 战术包括 Smurf 攻击和 Fraggle 攻击,Smurf 攻击发生在攻击者向网络上的广播地址发送仿冒的 ICMP Ping 请求时。这种请求会传播到网络上的所有主机,所有主机都会向被仿冒(受害)机器发送响应。Smurf 这个名称来自于 1997 年 TFreak 发布的工具 smurf.c。这些攻击非常常见,导致了新的 RFC 的推出。1999 年发布的 RFC 2644 强制路由器不能传递广播数据包。因为每个网络都在一台路由器之后,Smurf 攻击的效力大大降低。

Fraggle 攻击在设计上类似于 Smurf,也向广播地址发送仿冒的数据包。但是仿冒的不是 ICMP Ping 数据包,而是发送 UDP(用户数据报协议)端口 7 和 19(chargen[字符发生器协议]端口)。同样,现在已经不再允许路由器传递广播数据包,大部分组织机构在防火墙上拦截所有端口,特别是 UDP 7 和 19 等端口,因此这种攻击也不再被广泛采用。

随着 DDoS 的流行,用于 DDoS 攻击的工具能力及复杂度也在提高。1997 年,这种复杂度的提高催生了 DDoS 专用工具 Trin00。Trin00 驻留在被入侵主机中,由某台主控机器控制。Trin00 主控机器向守护进程发送命令,告诉他们发起攻击。然后,守护进程向指定发 IP 地址发起 UDP 洪泛攻击。

DDoS 攻击的兴起还导致了僵尸网络(Botnet)的兴起。攻击者要提高效率,就必须控制数千甚至数十万台被入侵的主机。当然,控制了这些主机,攻击者可以做的就不仅仅是启动 DDoS 攻击了。利用大型的僵尸网络,攻击者可以发动垃圾邮件和钓鱼活动,向被入侵网络上的其他主机传播恶意软件,收集用户名、密码和其他个人数据。