Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

网络安全 网络攻击


网络攻击

对网络上托管的协议和应用程序的攻击很多。本课程的另一节将介绍 Web 应用程序。

服务本身可能存在漏洞,允许攻击者利用它们。这些攻击通常涉及通过易受攻击的服务向操作系统发送特殊指令,以控制运行网络服务的进程。缓冲区溢出是此类攻击的一种类型。

网络通常包含许多应用程序,一些应用程序包含简单的登录,另一些应用程序具有复杂的功能。获得攻击面概览并绘制出易于利用的漏洞的一种方法是扫描目标环境中的所有资产,然后对其进行截图。

像 EyeWitness (https://github.com/FortyNorthSecurity/EyeWitness) 这样的工具可以实现此目的。该工具允许我们快速了解网络上表示哪些资产,然后提供每个服务的屏幕截图。通过获得屏幕截图,我们可以轻松快速查看并评估应该仔细查看哪些系统。

利用服务意味着以非预期的方式滥用服务。通常,这种利用活动意味着攻击者能够运行自己的代码,这称为 RCE(“远程代码执行”)。


缓冲区溢出

利用网络服务有时涉及滥用应用程序的内存管理功能。内存管理?是的,应用程序需要在计算机内存中移动数据才能使应用程序正常工作。当编程语言允许开发人员控制内存时,可能会出现缓冲区溢出等问题。存在许多类似的漏洞,在本节中我们将回顾缓冲区溢出。

编程语言 C 和 C++ 允许开发人员非常多地控制内存管理方式。这对于需要开发人员非常靠近硬件进行编程的应用程序来说是理想的,但会打开漏洞。像 Java、JavaScript、C#、Ruby、Python 等编程语言并不容易允许开发人员犯这些错误,这使得在用这些语言编写的应用程序中缓冲区溢出不太可能发生。

缓冲区溢出发生在将未经清理的输入放入变量时。这些变量在操作系统中通过称为堆栈的内存结构表示。然后,攻击者可以覆盖堆栈的一部分,称为返回指针。

注意:堆栈内存结构只是程序存储变量和运行所需信息的地方。堆栈将位于计算机的 RAM(“随机存取存储器”)中。

返回指针决定 CPU(“中央处理器”)接下来应该在何处执行代码。CPU 只是控制系统在任何给定时刻应该执行哪些指令。返回指针只是一个内存地址,应该在那里执行代码。CPU 必须始终被告知在何处执行代码,这就是返回指针允许它执行的操作。

当攻击者能够控制返回指针时,这意味着攻击者可以控制 CPU 应该执行哪些指令!

例如,考虑以下 C 代码示例(别担心,你不必是 C 开发人员,但尽力理解这个简单的应用程序是做什么的)

#include <string.h>
void storeName (char *input) {
  char name[12];
  strcpy(name, input);
}

int main (int argc, char **argv) {
  storeName(argv[1]);
  return 0;
}

在许多编程语言(包括 C)中,应用程序从一个名为 main 的函数开始。这在上面的代码中用 int main (int argc, char **argv) { 指示。在花括号 { 和 } 中,程序只是运行一个名为 storeName(argv[1]); 的函数。这将简单地接受用户键入程序的内容并将其提供给 storeName 函数。

该应用程序有 11 行代码,但请将注意力集中在 strcpy(name, input); 这行。这是一个尝试将文本从 input 复制到名为 name 的变量的函数。Name 最多可以容纳 12 个字符,如 char name[12]; 这行所示。代码中是否有任何地方可以阻止提供的名字超过 12 个字符?name 变量由使用该应用程序的用户提供,并直接传递给 storeName 函数。

在这个应用程序中,没有清理或消毒,无法确保输入的长度是应用程序所期望的。任何运行该程序的人都可以轻松地输入大于 name 变量可以容纳的最大值的输入。name 变量包含 12 个字符,但当 CPU 被告知写入超过 12 个字符时会发生什么?它只会执行被告知的操作,覆盖它需要覆盖的任何内存!

当尝试写入大于预期值的输入时,CPU 仍然会尝试将该值写入内存。这实际上导致 CPU 覆盖内存中的其他内容,例如返回指针,允许攻击者控制 CPU。同样,如果攻击者能够覆盖和控制返回指针,攻击者就可以控制 CPU 应该执行哪些代码。

一个图形示例显示了 Alice 将她的名字写入我们在上面示例中使用的应用程序。

Buffer Overflow

Alice 行为良好,提供了一个名字,导致应用程序按预期运行。她提供了她的名字 Alice,它只是被写入应用程序的内存。

然而,Eve 向应用程序发送了太多字符。然后会发生什么?CPU 实际上获取她的输入并将输入写入内存,也覆盖了其他存在的其他值!

Exploit Buffer Overflow

Eve 的输入导致 CPU 写入比应用程序预期多得多的数据,并且它导致返回指针被覆盖。当 CPU 尝试执行下一条指令时,现在被告知在 AAAAAAA... 的位置执行代码。

如果 Eve 要控制此服务器,她将不得不提供 CPU 可以理解的代码到内存中,而不是写 A。接下来,她将使返回指针具有一个值,告诉 CPU 执行 Eve 自己的 CPU 代码。

注意:简而言之,缓冲区溢出允许攻击者通过仔细覆盖受害者的内存来控制受害者的 CPU。

漏洞扫描程序

漏洞扫描程序会自动查找网络上软件和配置中的常见漏洞。它不是为了查找新类型的漏洞而设计的,而是使用预定义的插件(或模块)列表来扫描服务以查找问题和漏洞。它不一定寻找零日漏洞!零日漏洞是一种全新的漏洞,以前供应商和防御者都不知道;对于零日漏洞,目前还没有已知的解决问题的方法。

扫描程序具有网络映射和端口扫描功能,包括探索和查找其遇到的不同应用程序中的漏洞的方法。

漏洞扫描程序通常支持使用凭据进行配置,允许它登录系统并评估漏洞,而不是从未经身份验证的角度查找漏洞。

注意:漏洞扫描程序主要寻找已知的漏洞和错误配置,而不是零日漏洞!

代码执行

当攻击者找到可以利用的漏洞时,他们需要决定要运行什么有效载荷。有效载荷是攻击者希望通过利用传递的代码。

攻击者可以决定使用许多不同的有效载荷,以下是一些示例

  • 使受害者向 C2(“命令和控制”)服务器注册,接受攻击者的命令
  • 在系统上创建一个新的后门用户帐户,以便攻击者以后可以使用它
  • 使用受害者打开一个 GUI(“图形用户界面”),以便攻击者可以远程控制它
  • 接收一个命令行终端,一个 shell,攻击者可以通过它发送命令

攻击者常用的有效载荷是绑定 shell。它导致受害者在端口上监听,当攻击者连接时,他们会收到一个 shell。

Bind Shell

防火墙有助于阻止攻击者连接到受害者。只要不允许端口,防火墙实际上就会拒绝对受害者的传入连接。只有一个应用程序可以在端口上监听,因此攻击者无法在已在使用的端口上监听,除非他们禁用该服务。

为了规避这种防御措施,攻击者将尝试让受害者连接到攻击者,使受害者提供对有效载荷的访问权限。不幸的是,许多防火墙没有配置为拒绝出站流量,这使得这种攻击对攻击者非常有效。

在这个例子中,我们看到攻击者使用反向 shell 使受害者连接到攻击者。

Reverse Shell

注意:代码执行意味着攻击者可以在受害者的系统上运行他们的代码。他们选择部署什么代码取决于他们,但通常包括攻击者拥有长期在受害者的系统上运行命令的方法。

网络监控

在大多数情况下,攻击者需要网络才能远程控制目标。当攻击者能够远程控制目标时,这是通过命令和控制通道完成的,通常称为 C&C 或 C2。

存在通过预编程了无需 C2 的有效载荷的恶意软件进行的攻击。这种恶意软件能够攻击甚至隔离网络。

检测入侵通常可以通过查找 C2 通道来完成。C2 可以采取任何形式,例如

  • 使用 HTTPS 与攻击者服务器通信。这使得 C2 看起来像网络浏览
  • 使用社交网络自动发布和阅读消息
  • 使用 Google Docs 等系统向受害者添加和编辑命令

Network Monitoring Beacon

只有攻击者的创造力才能限制 C2。在考虑如何阻止使用巧妙的 C2 通道的攻击者时,我们通常必须依靠检测网络上的统计异常和差异。例如,网络监控工具可以检测

  • C2 使用的长时间连接,但这对于所讨论的协议来说是不自然的。HTTP 是这些协议中的一种,长时间连接并不常见,但攻击者可能会将其用于远程控制。
  • C2 使用的信标,用于指示受害者处于活动状态并准备接收命令。信标被多种软件使用,不仅仅是攻击者,但了解哪些信标存在以及哪些是你预期的,是一种良好的做法。
  • 从网络中突然爆发的突发数据。这可能表明应用程序的大量上传,或者攻击者窃取数据。尝试了解哪个应用程序和用户导致了突发数据的发生,并应用上下文。这是正常的还是不正常的?

防御者可以尝试找到异常的方法有很多。这些异常应该进一步与发送数据的源系统的相关数据相关联。

对于网络监控,应该应用上下文以帮助区分噪音和信号。这意味着安全运营中心 (SOC) 应该尝试丰富数据,例如源 IP 地址和目标 IP 地址,以便在上下文中帮助使数据更有价值。

应用上下文可以用以下场景来描述:来自互联网的攻击到达,但它试图利用针对 Windows 服务的 Linux 漏洞。这通常被认为是噪音,可以安全地忽略;除非,如果执行攻击的 IP 地址是你自己网络中的 IP 地址,或者是你信任的提供商的 IP 地址?然后,我们可以应用的上下文可以为我们进一步探索攻击提供宝贵的见解。毕竟,我们不希望我们信任的系统发起任何攻击!


点对点流量

大多数网络都是以客户端到服务器的方式配置的。客户端访问服务器获取信息,当客户端需要相互交互时,它们通常通过服务器进行交互。

但是,攻击者可能希望使用点对点(即客户端到客户端)通信来利用低垂的果实,例如重复使用凭据或利用薄弱或易受攻击的客户端。

例如,端口 445(由 SMB 使用)是用于检测入侵的良好指标。在大多数环境中,客户端不应该通过 SMB 相互通信,但是,在入侵期间,攻击者可能会尝试使用 SMB 进一步入侵系统。

Peer-to-Peer


横向移动和转向

一旦系统遭到入侵,攻击者就可以利用该系统来探索被入侵系统可以访问的其他网络。这在被入侵系统通过防火墙具有更多特权的环境中是可能的,或者该系统通过例如附加的网络卡访问其他网络。

转向是指攻击者使用被入侵的主机进入其他网络。这里有一个示例,Eve 入侵了一台系统,并正在使用它来扫描和发现其他系统

Pivoting Lateral Movement

横向移动是指利用转向并利用另一个系统。现在,这个新系统可以进一步用于进行转向和更多横向移动。在本例中,Eve 使用服务器 X 进一步发现系统 B。

Pivoting Lateral Movement



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.