DDOS防御专家-提供超强DDoS高防/CC防护/大流量清洗服务!
当前位置:主页 > 高防服务器 > 正文

cc攻击防御_ddos防御盾_如何防

cc攻击防御_ddos防御盾_如何防

简介:在本文的第一部分中,我讨论了如何理解GrammaTech CodeSonar二进制分析报告所报告的各种信息。在第二部分中,我将讨论警告的执行路径,以及如何解释分析报告以跟踪错误的来源相关:为二进制结果解释CodeSonar第1部分用二进制分析提高质量和安全性二进制码声纳(视频)用二进制分析消除第三方代码中的漏洞警告执行路径好了,现在我们知道如何阅读列表,这个警告到底是怎么回事?注意列表中的阴影区域。CodeSonar通过识别执行路径来操作,在这些路径上可能会出现一些不良状态。阴影区域表示沿着一条路径执行的指令。在我们的示例中,警告报告涉及到从函数return_append_str的入口点开始的执行路径,并在遇到"jz"指令之前依次执行前八条指令。在这种情况下,CodeSonar考虑"jz"指令执行跳转的路径。因此,执行路径在标签"loc iu 4193B8"处继续。从那里,在命中CodeSonar认为有问题的函数调用之前,执行另外9条指令,包括两个函数调用。上一篇文章中的图1再次被收录以供参考。图1:CodeSonar生成的缓冲区溢出警告第一个函数调用涉及两个指令:移动rdi,rsi打电话给史崔伦第一个将rsi寄存器的值复制到rdi寄存器中。第二条指令调用strlen函数。回想一下,在x64上,函数的前两个参数在寄存器rdi和rsi中传递。在这里,寄存器rsi从return_append_str开始就没有改变,所以它仍然具有第二个参数的值。通过复制到rdi寄存器中,全网ddos防御,该值将传递给strlen调用的第一个参数。因此,我们可以推断这个值是一个指向字符串的指针。我们暂时把那根线叫做"s"。x64的另一个约定是函数调用的返回值存储在rax寄存器中。因此,将这两条指令拼接在一起,我们可以看到上面两条指令类似于在高级语言(如C)中可能看到的以下语句:rax=斯特伦;以下三条指令设置对malloc的函数调用:移动rdi,rax移动rbp,rax打电话给马洛克同样,rdi被用作malloc的参数-这里我们将上一次strlen调用的返回值传递给malloc。换句话说,代码在堆上分配一个新的缓冲区,其大小与字符串"s"中的字符数相同。这可能已经引起了怀疑。如果这个分配的缓冲区将用于存储"s"的副本,ddos攻击和防御实验报告,那么它没有足够的空间来存储字符串末尾的加法'\0'字节。把rax的值复制到rbp寄存器的mov指令呢?根据Linux上的x64调用约定,高防cdn504错误,rbx(和其他几个寄存器)的值必须由被调用的函数保留。相反,由于rax被用作每个函数调用的返回值,所以在调用函数时它几乎总是被覆盖。因此,通过将rax中的值复制到rbp中,代码将保存上一次调用strlen的返回值,以便以后可以再次使用它。在呼叫malloc之后,有两个"lea"指令:lea rbx,[rax+1]lea rdx,[rbp+1]"lea"指令的独特之处在于它实际上并不执行内存访问。相反,它计算第二个操作数将访问的地址,并将地址存储到目标操作数中。通常第二个操作数实际上并不是任何实地址;相反,指令只是用来执行算术。这里,第一条指令是计算内存地址,服务器如何防御DDoS攻击,而第二条指令只是执行算术运算。第一条指令向rax寄存器中的值加1,此时该寄存器具有上一次调用malloc的返回值。换句话说,dos和ddos攻击防御,指令将一个字节的地址存储在rbx中,内存块是调用malloc时在堆上分配的。第二条指令将rbp中的值加1。回想一下,寄存器rbp用于保存前面调用strlen时的返回值。因此,指令在rdx中存储1的值加上我们称为"s"的字符串参数的大小最后,我们有第三个函数调用。这个目标是memcpy:移动rsi,r13移动rdi,rbx打电话给你memcpy函数有三个参数。在这里,我们将第一个存储在寄存器rdi中,将rbx中的值复制到其中(从malloc到堆分配的内存块中的地址是1字节)。第二个存储在rsi中。此参数从寄存器r13复制。若我们回顾一下指令跟踪的开头,我们会发现r13有一个输入字符串"s"地址的副本(它是从rsi复制的)。最后,第三个参数在rdx中,它被填充在执行算术的指令中。也就是说,第三个参数是值1加上字符串"s"的大小因此,如果我们将这三个函数调用都提升到更高级别的语言中,它们可能会如下所示:长度=strlen(s);p=malloc(长度);memcpy(p+1,s,长度+1);总而言之,此代码分配了一个缓冲区,该缓冲区只能存储字符串"s"的长度,而不能存储终止的"\0"字节。此外,字符串的复制从1个字节开始进入目标缓冲区。结果是,对memcpy的调用将覆盖分配的缓冲区2个字节,可能会破坏不相关的程序数据。警告的严重性通常很难知道编码错误是否会导致问题。在这种情况下,代码肯定会执行2个字节的缓冲区溢出。但这足以造成严重伤害吗?这里的相关缓冲区是在堆上分配的。堆是一个有趣的野兽。它通常表现为非确定性。一个程序的两次运行被赋予相同的输入,可能经历相同的堆分配,也可能不经历相同的堆分配。它们可能对malloc进行相同的调用,但是malloc可能以不同的顺序或在完全不同的位置返回内存块。所以很难静态地确定这个2字节的溢出究竟会覆盖什么。此外,堆管理器通常会在堆上添加额外的空间。这使堆管理器能够对内存碎片进行计数。根据输入字符串"s"的大小以及堆管理器是否决定填充malloc返回的内存分配,2字节溢出可能只会覆盖这个额外的填充空间,并且无论如何都是良性的。根据上下文,这个特定的编码缺陷可能是无害的,但也可能导致崩溃或数据泄漏。更糟糕的是,即使只对软件的非相关区域进行小的更新,这种行为也可能发生改变。这取决于它运行的系统和堆管理器的操作方式。CodeSonar提供关于缓冲区溢出可能性的警告。这取决于用户的判断,以决定此警告是否值得采取补救措施。进一步阅读这篇文章只提供了一个非常简短的介绍来阅读汇编代码和理解软件如何在二进制级别上工作。网上有很多资源可以提供更深入的治疗。以下是几个例子:://www.cs.virginia.edu/~evans/cs216/guides/x86.htmlhttps://www.nayuki.io/page/a-basical-introduction-to-x86-assembly-programming

版权保护: 本文由 DDOS防御专家 原创,转载请保留链接: /ddos/61062.html

DDoS防御专家简介孤之剑
国内资深白帽子二十人组成员,前BAT资深网络安全工程师,知名网络安全站点板块大神,每年提交Google及微软漏洞,原sina微博负载插件开发者,现在整体防御复合攻击长期接受1-4.7T攻击,CC防护自主开发指纹识别系统,可以做到99.9999%的无敌防御。
  • 文章总数
  • 8140993访问次数
  • 建站天数

    QQ客服

    400-0797-119

    X