📜  拒绝服务:软件不安全的领跑者

📅  最后修改于: 2021-08-25 10:37:02             🧑  作者: Mango

在本文中,我们将讨论在 C 编程中易受攻击的拒绝服务攻击。此外,我们将通过示例介绍防御策略、攻击者的观点,最后得出结论。让我们一一讨论。

概述 :
在当今世界,技术在我们的生活中发挥着至关重要的作用。您可以看到它如何改变世界,因为所有人都可以轻松地连接到世界任何地方。但是,我们还需要关注安全部分,同时考虑到交易、个人聊天、使用社交帐户等在线活动。为公众使用而开发的软件永远不会远离被利用的威胁。无论是登录系统还是用户会话,这都可能是软件最薄弱的环节,并且是正确的目标,导致应用程序关闭、不良行为或只是窃取客户凭据。

意外创建攻击目标:
作为程序员,程序是从头开始构建的,并且倾向于用户定义数据结构及其大小,用于迎合数据存储和处理。大小是隐式声明的,表明数据结构不能容纳比指示容纳更多字节的数据。

例子 –
例如,让我们分析下面的代码片段如下。

//Example of a login system
#include
  
#include
  
int main(void) {
  char A[15];
  int password = 0;
  
  printf("\n Enter the password \n");
  gets(A);
  
  if (strcmp(A, "p455w0rd")) {
    printf("\n Wrong Password \n");
  } else {
    printf("\n Correct Password \n");
    password = 1;
  }
  if (password) {
    //This branch gives admin privileges to user
    printf("\n Admin privileges are given to user \n");
  }
  return 0;
}

分析程序:
在此,我们将讨论对上述程序的分析。程序员指示数组 A 保存 15 个字节的数据,以满足输入要求。这是出于善意,程序员知道没有人会想在适当的机制上鬼混。他/她不能在道德上负责。普通用户只需遵循指导方针,输入凭据,获得访问权限并继续他们的一天。

理解攻击者的观点:
另一方面,攻击者将无法预先筛选登录系统的源代码,但可以感觉到存在可能被利用的漏洞。这些威胁参与者正在寻找一个小小的窗口,通过它他们可以应用他们的漏洞并使系统比以前更加瘫痪。故意地,密码的输入字段是垃圾邮件,攻击者完全知道它无法容纳这么多字节。这是编译器应该负责的地方。在运行之前,编译器没有适当的缓冲区溢出检查来扫描代码。具有讽刺意味的是,编译器并没有停下来检测易受攻击的数据结构的错误。可以使用 StackGaurd 和 StackSmash 等开源工具来防止发生错误

后期开发:
开发后,可能有以下几种可能性可以观察到。

  • 应用程序关闭-Not 能够处理溢出。
  • 不良行为 – 软件显示的无限循环、无响应和静态状态。
  • 第 2 点中描述的拒绝服务。

它如何影响基于事务的服务:
在此,您将看到攻击者如何利用您的弱点,这是由于您将用于提供服务的有限内存、处理、端口数量等。在服务器级别,您的主要担心应该是通过施加自我保护限制来避免崩溃。例如,设置您知道可以处理的最大连接数,然后拒绝任何其他连接。

防御策略:
全力以赴,使用专门的材料,比如防火墙,可以在一定程度上抵御攻击,但总有办法绕过它们。在这种情况下,我们必须遵循标准做法,例如必须启用帐户安全性以防止用户密码的蛮力发现,如果有人输入错误密码 3 到 5 次,则锁定帐户后无法使用。这意味着即使合法用户提供了他们的有效密码,他们也将无法登录系统,直到他们的帐户被解锁。如果有一种方法可以预测有效的登录帐户,则这种防御机制可以变成针对应用程序的 DoS 攻击。

结论 :
在培训阶段向开发人员传授最佳编码实践,并强烈鼓励将其应用于软件开发,但并非所有这些实践都可以有效并防止我们讨论的攻击方法。这是软件开发的失败之一。如前所述,攻击者会根据您的弱点来扮演您。开发人员有责任使系统更具抗攻击性,同时将弱点从可见性中隐藏起来,并从零日攻击中对其进行补救。