几种CC语言安全检测工具介绍
- 格式:doc
- 大小:73.00 KB
- 文档页数:9
安全测试中的安全测试工具比较和选择在安全测试中,选择适当的安全测试工具是至关重要的。
本文将对常见的安全测试工具进行比较和选择,并为读者提供相关建议。
一、安全测试工具的分类安全测试工具通常分为静态测试工具和动态测试工具两大类。
1. 静态测试工具:静态测试工具主要用于对源代码、二进制代码或配置文件进行分析,以发现其中可能存在的安全漏洞。
常见的静态测试工具有:- 静态代码分析工具:通过对源代码的扫描,检测潜在的漏洞和缺陷。
例如,Coverity和Fortify等工具可以对代码进行静态分析,发现其中的安全隐患。
- 配置文件检查工具:用于检查系统的配置文件是否存在问题。
例如,OpenVAS和Nessus等工具可以对服务器的配置文件进行扫描,检测其中的安全配置问题。
2. 动态测试工具:动态测试工具主要通过模拟实际的攻击行为,对目标系统进行测试。
常见的动态测试工具有:- 漏洞扫描工具:通过对目标系统进行扫描,检测其中可能存在的漏洞。
例如,Nikto和OpenVAS等工具可以对Web应用进行扫描,发现其中的漏洞。
- 渗透测试工具:模拟黑客攻击行为,对目标系统进行全面的测试。
例如,Metasploit和Burp Suite等工具可以对系统进行渗透测试,发现其中的弱点和漏洞。
二、安全测试工具的比较和选择在选择安全测试工具时,需要根据实际需求和目标系统的特点进行评估和比较。
下面是一些选择和比较工具的要点:1. 功能特点比较:- 根据实际需求,选择对应的功能特点。
例如,如果需要对Web应用进行测试,可以选择具有漏洞扫描和渗透测试功能的工具。
- 考虑工具的易用性和灵活性。
一些工具具有友好的图形界面和丰富的功能,适合初学者使用;而另一些工具提供了更多的定制和扩展能力,适合有经验的安全测试人员使用。
2. 性能和效果比较:- 考虑工具的性能和效果。
一些工具可能在发现漏洞的准确性和覆盖率方面表现更好,但可能会增加系统的负载;而另一些工具可能对系统的影响较小,但可能会漏报或误报漏洞。
服务器安全检测工具推荐保护系统免受恶意攻击保护服务器免受恶意攻击是每个系统管理员都需要关注的重要任务。
为了实现这一目标,使用高效可靠的服务器安全检测工具是必不可少的。
本文将介绍一些推荐的服务器安全检测工具,帮助管理员保护系统免受恶意攻击的侵害。
一、漏洞扫描工具1. NessusNessus是一款功能强大的漏洞扫描工具,可帮助管理员检测服务器及应用程序中的安全漏洞。
它能够自动化地发现和识别可能被黑客利用的薄弱点,提供详细的报告和建议,帮助管理员及时修复漏洞,提高服务器的安全性。
2. OpenVASOpenVAS是一个开源的漏洞扫描器,以其高度可配置和定制的特点而受到广泛认可。
它提供了一系列的漏洞检测插件,可以全面地检查服务器系统及应用程序中的安全问题。
管理员可以根据自己的需求定制扫描策略,快速发现并修复漏洞,加强服务器的安全性。
二、入侵检测系统(IDS)1. SnortSnort是一款开源的入侵检测系统,用于实时监测和分析网络流量,检测和拦截潜在的入侵行为。
它采用灵活的规则引擎,可以根据管理员的需要进行定制,提供有效的入侵检测和响应机制,保护服务器免受恶意攻击的侵害。
2. SuricataSuricata是另一款强大的开源入侵检测系统,具有高性能和多线程处理能力。
它支持多种协议的实时流量分析,可实现高级威胁检测和入侵预防。
Suricata还提供了可扩展的规则引擎和丰富的协议解析,管理员可以利用这些功能来提高服务器的防护能力。
三、日志分析工具1. ELK StackELK Stack由Elasticsearch、Logstash和Kibana组成,是一套用于日志分析和可视化的工具组合。
Elasticsearch作为搜索和分析引擎,Logstash用于收集和处理各种日志数据,Kibana提供直观的可视化界面。
管理员可以通过ELK Stack实时监控服务器的日志,识别异常行为并采取相应的安全措施。
2. SplunkSplunk是一款强大的商业日志分析工具,可以处理和分析大量的数据,并提供实时的日志搜索与监控功能。
C语言编程准则检查工具 C Checker1 概述C语言编程准则检查工具C Checker是由航天软件评测中心自主研发的、基于C语言开发环境、用于对C 语言编写的程序进行准则检查及安全性分析的软件工具。
C Checker可以为高可靠高安全软件的开发提供有力支持,它面向三个层次的用户,包括开发人员、软件质量管理人员与测试人员,帮助他们发现软件编程方面的安全隐患,避免一些不良的编码风格,从而提高代码的可读性与编程水平,降低出错概率,改进代码质量。
2 功能C Checker当前版本为1.0,支持GCC、CCS、TC等多种开发环境开发的C程序,检查内容及给出的结果符合GJB 5369-2005(C语言安全子集)、Q/WE 905-2005标准。
C Checker的主要功能包括1.检查C语言源代码的安全缺陷2.检查程序的注释度(可读性)3.按一定的编写风格美化源代码程序4.自动生成检查结果报告3 特性C Checker基于先进编译技术、静态编码安全性程序分析技术、基于契约的自下而上分析方法、语言特征信息识别扩展机制等先进技术,经过多个航天项目实际使用验证,确保了准则检查的精确性,为航天型号软件质量保障提供了有力支持。
C Checker针对声明后没有使用、类型不一致、先使用后定义、不可达的代码、忽略返回值、执行路径没有返回、可能的死循环、缓冲区溢出问题和动态内存错误,以及使用了不安全的C库函数等方面,提出安全警示;同时,还能够对软件进行度量,对软件的安全性和可靠性给予指示。
C Checker界面与Visual Studio风格相似,界面友好,易学易用。
图1 C Checker运行界面C Checker根据C语言编程准则(Misra准则、GJB 5369-2005 航天型号软件C语言安全子集、Q/WE 905-2005),所检查的编程准则类型包括声明定义类、分支控制类、指针使用类、跳转控制类等。
用户可以通过设置扫描类型方便地对检查准则进行剪裁。
源代码安全要靠谁?1. 概述随着网络的飞速发展,各种网络应用不断成熟,各种开发技术层出不穷,上网已经成为人们日常生活中的一个重要组成部分。
在享受互联网带来的各种方便之处的同时,安全问题也变得越来越重要。
黑客、病毒、木马等不断攻击着各种网站,如何保证网站的安全成为一个非常热门的话题。
根据IT研究与顾问咨询公司Gartner统计数据显示,75%的黑客攻击发生在应用层。
而由NIST的统计显示92%的漏洞属于应用层而非网络层。
因此,应用软件的自身的安全问题是我们信息安全领域最为关心的问题,也是我们面临的一个新的领域,需要我们所有的在应用软件开发和管理的各个层面的成员共同的努力来完成。
越来越多的安全产品厂商也已经在考虑关注软件开发的整个流程,将安全检测与监测融入需求分析、概要设计、详细设计、编码、测试等各个阶段以全面的保证应用安全。
对于应用安全性的检测目前大多数是通过测试的方式来实现。
测试大体上分为黑盒测试和白盒测试两种。
黑盒测试一般使用的是渗透的方法,这种方法仍然带有明显的黑盒测试本身的不足,需要大量的测试用例来进行覆盖,且测试完成后仍无法保证软件是否仍然存在风险。
现在白盒测试中源代码扫描越来越成为一种流行的技术,使用源代码扫描产品对软件进行代码扫描,一方面可以找出潜在的风险,从内对软件进行检测,提高代码的安全性,另一方面也可以进一步提高代码的质量。
黑盒的渗透测试和白盒的源代码扫描内外结合,可以使得软件的安全性得到很大程度的提高。
源代码分析技术由来已久,Colorado 大学的 Lloyd D. Fosdick 和 Leon J. Osterweil 1976 年的 9 月曾在 ACM Computing Surveys 上发表了著名的 Data Flow Analysis in Software Reliability,其中就提到了数据流分析、状态机系统、边界检测、数据类型验证、控制流分析等技术。
随着计算机语言的不断演进,源代码分析的技术也在日趋完善,在不同的细分领域,出现了很多不错的源代码分析产品,如 Klocwork Insight、Rational Software Analyzer 和 Coverity、Parasoft 等公司的产品。
嵌入式系统测试工具引言在当今的技术环境中,嵌入式系统扮演着至关重要的角色。
从家用电器到工业自动化,再到汽车电子和航空航天,嵌入式系统的应用广泛且关键。
因此,确保这些系统的可靠性和性能至关重要,这就需要使用专门的测试工具进行严格的测试。
本文将介绍几种常用的嵌入式系统测试工具,帮助开发者提高产品质量。
静态代码分析工具CtagsCtags是一个源代码索引和代码高亮工具,它可以为C、C++、Java等多种语言生成标签文件,帮助开发者快速定位函数和变量定义。
CppcheckCppcheck是一个针对C/C++代码的静态分析工具,用于检测内存泄漏、错误的数组边界等问题,有助于提前发现潜在的错误。
动态测试工具ValgrindValgrind是一款强大的动态内存调试工具,它能够检测内存泄漏、内存访问错误等运行时问题,对于维护内存安全非常有帮助。
GDBGNU调试器(GDB)是Linux下的一款功能强大的调试工具,支持多种编程语言,可以对程序进行断点设置、单步执行、查看变量值等操作。
性能分析工具PerfPerf是Linux内核提供的性能分析工具,可以监控系统级别的性能数据,如CPU占用率、缓存命中率等,帮助开发者优化系统性能。
LatteLatte是一个轻量级的性能分析工具,专为嵌入式系统设计,可以在不干扰系统正常运行的情况下收集性能数据。
仿真与模拟工具QEMUQEMU是一款开源的硬件模拟器和虚拟化工具,可以模拟多种处理器架构,用于嵌入式系统的开发和测试。
ProteusProteus是一个电子电路仿真和PCB设计软件,支持模拟微控制器和外围设备,非常适合进行嵌入式系统的原型设计和测试。
结论选择合适的测试工具对于嵌入式系统的开发至关重要。
从静态代码分析到动态测试,再到性能分析和仿真模拟,每一种工具都有其独特的优势和应用场合。
开发者应根据项目需求和系统特点,合理选择和使用这些工具,以确保嵌入式系统的质量和性能。
通过这些工具的综合运用,可以大大提高产品的可靠性,减少后期维护成本,最终实现项目的顺利交付。
C语言中的安全测试与漏洞扫描工具随着信息技术的发展和应用,软件安全性日益成为人们关注的焦点。
在软件开发和维护过程中,安全测试是保障软件安全性的重要环节之一。
而在C语言中,安全测试和漏洞扫描工具的使用能够帮助开发人员及时发现和修复潜在的安全漏洞,从而提高软件的安全性。
一、安全测试的重要性在C语言中进行安全测试的重要性不容忽视。
C语言是一种广泛应用的编程语言,其灵活的特性使得在编程过程中容易引入一些安全隐患,如缓冲区溢出、空指针引用等。
这些安全漏洞容易被黑客利用,造成严重的安全问题,如信息泄露、拒绝服务等。
因此,通过安全测试及时发现这些问题,对软件的安全性具有重要意义。
二、常见的C语言安全测试工具1. CppcheckCppcheck是一款开源的静态代码分析工具,主要用于检查C/C++代码中的错误和潜在的安全漏洞。
它能够检测出常见的错误,如空指针引用、内存泄漏、整数溢出等,并给出相应的建议。
使用Cppcheck进行安全测试,可以大大减少开发人员在安全问题上的盲点。
2. ValgrindValgrind是一款强大的内存调试和性能分析工具,也可以用于C语言的安全测试。
通过Valgrind,开发人员可以检测出内存泄漏、使用未初始化的变量等内存错误,并找到相应的错误位置。
此外,Valgrind 还提供了插件机制,可以根据需要进行扩展,增强工具的功能。
3. FlawfinderFlawfinder是一款简单易用的源代码安全漏洞扫描工具,主要用于检测C/C++代码中的安全问题。
它通过扫描源代码中的函数调用和代码路径,识别出潜在的安全漏洞,并给出相应的警告信息。
Flawfinder 可以帮助开发人员快速发现潜在的安全问题,提高软件的安全性。
4. Clang Static AnalyzerClang Static Analyzer是一款基于LLVM的静态代码分析工具,可以用于C语言和Objective-C语言的安全测试。
软件研发中的代码质量检测工具在软件研发过程中,代码质量是影响软件稳定性、可维护性和可扩展性的重要因素之一。
为了保障软件的质量,开发人员需要借助代码质量检测工具进行自动化检测和分析。
本文将介绍几种常见的代码质量检测工具,并分析它们的特点和优势。
一、静态代码分析工具静态代码分析工具通过对源代码进行静态分析,检测代码中存在的潜在问题和错误,提供代码质量评估和改进建议。
下面介绍几种常用的静态代码分析工具。
1. SonarQubeSonarQube是一个开源的、支持多种编程语言的静态代码分析工具。
它能够检查代码的复杂度、规范性、重复性等多个方面,并提供详细的代码质量报告。
SonarQube还支持集成到持续集成工具中,能够在每次构建时自动进行代码质量检测。
2. CheckstyleCheckstyle是一个基于Java语言的静态代码分析工具。
它主要用于检查Java代码的编码规范性,比如命名规范、代码布局规范等。
Checkstyle提供了丰富的配置选项,可以根据团队的具体需求进行定制化配置。
3. PMDPMD是另一个针对Java代码的静态代码分析工具。
它能够检测代码中的一些常见问题,比如空代码块、未使用的变量等,并给出相应的修复建议。
PMD还支持自定义规则和扩展插件,可以满足不同项目的代码质量检测需求。
二、动态代码分析工具除了静态代码分析工具外,动态代码分析工具也是软件研发中常用的代码质量检测工具之一。
动态代码分析工具通过运行时执行代码,检测代码的运行状况和性能问题。
下面介绍几种常见的动态代码分析工具。
1. JUnitJUnit是一个用于Java程序的单元测试框架,可以帮助开发人员编写和执行测试用例。
通过编写各种测试用例,可以检测代码的运行状况和功能正确性。
JUnit还支持测试覆盖率分析,可以检测测试用例对代码的覆盖程度。
2. ValgrindValgrind是一个开源的C/C++程序的动态分析工具集合。
其中最常用的是Memcheck工具,可以检测内存泄漏、内存访问越界等内存相关问题。
C语言中的防篡改与代码完整性保护在计算机科学中,保护代码的完整性和防止篡改是非常重要的。
特别是在开发C语言程序时,保护代码免受恶意篡改和未经授权的修改至关重要。
本文将探讨C语言中的防篡改技术和代码完整性保护方法。
一、编写安全的C代码编写安全的C代码是保护代码完整性的第一步。
以下是一些要考虑的关键措施:1. 输入验证:在接受用户输入之前,始终进行输入验证。
使用安全的输入函数如fgets()而不是scanf(),可以防止输入字符的溢出。
2. 内存管理:正确地分配和释放内存非常重要。
使用合适的内存管理函数,并确保没有内存泄漏或指针错误的情况。
3. 栈缓冲区溢出保护:栈缓冲区溢出是一种常见的安全漏洞。
为了防止栈缓冲区溢出攻击,可以使用安全的库函数如strcpy_s()和strcat_s()来代替不安全的函数。
二、静态代码分析工具静态代码分析工具可帮助检查C代码中的潜在安全漏洞。
通过对源代码进行全面的扫描,这些工具可以发现可能导致代码篡改的漏洞,并提供修复建议。
1. Splint:Splint是一款免费的静态代码分析工具,用于检测C程序中的类型错误、潜在的缓冲区溢出和未初始化变量等问题。
2. CPPCheck:CPPCheck是另一个强大的静态代码分析工具,可以找出C语言程序中的潜在错误,如内存泄露、不可访问的内存和空指针。
三、使用哈希函数验证代码完整性为了保护C代码免受篡改,可以使用哈希函数来验证代码完整性。
哈希函数将源代码映射到唯一的哈希值,即使进行微小的更改,哈希值也会有显著差异。
以下是使用哈希函数验证代码完整性的步骤:1. 选择合适的哈希函数:选择一个强大的哈希函数,如SHA-256。
2. 计算哈希值:使用选定的哈希函数计算源代码的哈希值。
3. 存储哈希值:将哈希值与源代码存储在安全的位置,以便之后验证。
4. 验证哈希值:在程序运行时,重新计算源代码的哈希值,并与存储的哈希值进行比较。
如果哈希值不匹配,说明代码已被篡改。
C语言中的恶意代码检测与分析在计算机科学领域中,恶意代码指的是那些旨在对计算机系统造成伤害、盗取信息或者进行非法操作的恶意程序。
对于程序员和系统管理员来说,恶意代码可能是一个严重的威胁,因此确保代码的安全性是至关重要的。
在C语言中进行恶意代码检测和分析,可以帮助开发人员识别潜在的安全漏洞和恶意行为,并采取相应的防御措施。
本文将讨论一些常见的C语言恶意代码,并介绍一些用于检测和分析恶意代码的工具和方法。
一、常见的C语言恶意代码1. 缓冲区溢出攻击(Buffer Overflow Attack):这是一种常见的恶意代码技术,攻击者通过向程序输入超出缓冲区边界的数据,覆盖其他内存区域的内容,甚至执行恶意代码。
开发人员可以使用一些技术,如堆栈保护机制和编译器选项来防止这类攻击。
2. 提权漏洞(Privilege Escalation Vulnerabilities):这些漏洞允许攻击者在没有相应权限的情况下提升其访问权限。
通过检查和修复这些漏洞,开发人员可以防止攻击者利用程序漏洞进一步入侵系统。
3. 逆向工程(Reverse Engineering):这是一种分析程序工作原理和破解恶意代码的技术。
通过进行逆向工程,安全专家可以了解恶意代码的功能和行为,并采取相应的对策。
二、C语言恶意代码检测工具和方法1. 静态代码分析工具:这些工具用于分析源代码或二进制代码,以识别潜在的安全问题。
例如,Clang静态分析器是一个强大的工具,它可以检测出诸如缓冲区溢出和空指针解引用等问题。
2. 动态代码分析工具:这些工具在程序运行时监视代码的执行,并检测异常行为或可能的恶意行为。
例如,Valgrind是一个常用的动态代码分析工具,它可以检测内存泄漏、无效指针访问等问题。
3. 模糊测试(Fuzzing):这是一种随机生成输入数据以检测程序漏洞的方法。
通过生成大量的无效或异常数据输入,可以发现潜在的安全问题。
例如,American Fuzzy Lop是一个知名的模糊测试工具。
几种C/C语言安全检测工具介绍
2012-05-11 00:00中国IT实验室佚名
关键字:C语言
针对C/C++语言安全漏洞的分析检测也出现了大量的工具,按照不同的机理主要分为以下几类,如表所示:分析类型
机理
分析工具
备注
静态分析
预处理
FormatGuard
预处理提供的宏功能来对printf函数中的参数个数进行计数
词法分析
Rats、Flawfinder、Its4
见后文介绍
语法分析
Antlr/Gold
见后文介绍
注解分析
Splint/
见后文介绍
语义/值流分析
Cqual
见后文介绍
逆向分析
IDA/ Win32Dasml
反汇编工具
动态分析
拦截库函数的调用
LibFormat
见后文介绍
逆向分析
OllyDbg/ Windbg
动态调试工具,常结合静态反汇编工具对程序进行逆向分析
FormatGuard:Linux下防止格式化字符串攻击的工具,是对glibc的增强。
具体通过预处理提供的宏功能来对类 printf函数中的参数个数进行计数,通过glibc提供的parse_printf_format函数来对转换说明符进行计数。
如果转换说明符的数目大于提供给printf的参数个数,_proteced_printf函数认为可能遭受格式串攻击,发出警告。
但该工具不能分析类vprintf函数(而此类函数却大量存在)
LibFormat:Unix中提供了一个有用的环境变量LD_PRELOAD,它允许我们定义在程序允许前优先加载的动态链接库。
主要思想,通过动态连接器将自己插入到程序中,在程序以后的运行中如果发现了包含%n的格式串出现在可写内存中,则终止程序。
但对读操作却无能为力,而且遇到的任何%n格式串,都会终止程序,误报高。
ANTLR:识别和处理编程语言是 Antlr 的首要任务,编程语言的处理是一项繁重复杂的任务,为了简化处理,一般的编译技术都将语言处理工作分为前端和后端两个部分。
其中前端包括词法分析、语法分析、语义分析、中间代码生成等若干步骤,后端包括目标代码生成和代码优化等步骤。
Antlr 致力于解决编译前端的所有工作。
使用 Anltr 的语法可以定义目标语言的词法记号和语法规则,Antlr 自动生成目标语言的词法分析器和语法分析器;此外,如果在语法规则中指定抽象语法树的规则,在生成语法分析器的同时,Antlr 还能够生成抽象语法树;最终使用树分析器遍历抽象语法树,完成语义分析和中间代码生成。
整个工作在 Anltr 强大的支持下,将变得非常轻松和愉快。
另外,Antlr的词法分析器生成器,可以很容易的完成正则表达式能够完成的所有工作;除此之外使用 Anltr 还可以完成一些正则表达式难以完成的工作,比如识别左括号和右括号的成对匹配等。
GOLD:它是一个较为复杂的分析器,支持很多语言,包括:Assembly –
Intel x86 、ANSI C、C#、D、Delphi、Java、Pascal、Python、Visual Basic、Visual Basic .NET、Visual C++、所有。
NET语言、所有ActiveX语言。
是个免费的软件。
Its4:读取一个或多个C/C++源程序,将每个源程序分割成函数标志流,然后检查生成的标志是否存在于漏洞数据库中,从而得到每个源程序的所有错误警告列表,并带有相关的描述。
其规则库vulns.i4d定义了各种函数的危险等级,描述等,通过规则匹配来报出风险,但它不能理解程序上下文意思,存在很大的误报。
Flawfinder:词法扫描和分析,内嵌了一些漏洞数据库,如缓冲区溢出、格式化串漏洞等,扫描快,按照代码中漏洞的风险等级对漏洞进行划分,可以快速找到存在的问题,误报较高
Rats:扫描C、C++、Perl、PHP和Python开发的源程序中潜在的漏洞,扫描规则比较粗糙
词法分析工具的分析流程:
描述:
(1)输入待扫描的源程序文件或者文件夹,分析输入的文件和文件夹,识别出其中的所有源程序文件,建立一个待扫描文件列表,下一步就可以从待扫描文件列表中有序的读取带扫描文件进行扫描。
(2)当词法分析工具得到一行待分析文件的源代码的同时,从危险函数数据库中提取一个等级的危险函数与该行源代码进行匹配,这就是初步分析。
(3)如果在初步分析中匹配成功,那么词法分析工具将使该行代码进入下一步的分类特征分析,否则,返回继续进行下一行的初步分析。
(4)词法分析工具不断的读取源代码按照设定的危险等级进行分析,直到最后生成报告,以便开发者进行改进。
Cqual:采用语义/值流分析,该工具的功能即是查找格式化字符串缺陷,const数据类型以及结构体的检查等。
其分析流程如下:
(1)用户输入源文件和格配置文件,作为程序的输入。
Cqual内置了常用的分析模式(格配置),在分析常用缺陷时,直接使用其自带的配置文件
(2)Cqual前端对C文件进行词法分析和语法分析,生成抽象语法树
(3)遍历抽象语法树,根据类型推断系统,生成限定子约束关系。
Cqual在分析之初,会为每个变量创建一个同名的限定子变量。
通过遍历语法树,Cqual能够执行高效的流不敏感的类型推断,从而检查推断出剩余的类型限定子并检查一致性。
在执行推断的时候,Cqual会产生限定子和限定子变量之间的一系列约束。
(4)使用约束求解算法对约束不等式组进行求解。
如果不等式组没有解,则Cqual认为发现错误,重新遍历一遍约束图,输出对用户最有用的错误路径信息然后退出。
否则,它认为源程序没有缺陷,直接退出。
Cqual的一个优势在于发现错误时,能够输出合理的错误路径,这有利于用户快速定位错误。
Cqual采用的是覆盖全部路径,因此也存在误报
splint:是一个动态检查C语言程序安全弱点和编写错误的程序。
splint会进行多种常规检查,包括未使用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未返回,无限循环等错误。
Cppcheck
cppcheck是静态的C/C++ 代码分析工具,用以检查内存泄漏,错配的内存分配和释放,缓冲区溢出,以及更多的问题。
Frama-C
是一个用来分析 C 代码的工具,它收集了很多静态统计技术,如代码切片和依赖分析等。
Flexc++
是一个语法扫描器生成工具,基于正则表达式。
与 Flex 和 Flex++ 高度一致。
另外介绍一个商业的源代码静态扫描工具Fortify SCA:该工具是一个静态的、白盒的软件源代码安全测试工具。
它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,分析的过程中与它特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并给予整理报告。
扫描的结果中不但包括详细的安全漏洞的信息,还会有相关的安全知识的说明,以及修复意见的提供。
工作原理:
Foritfy SCA 首先通过调用语言的编译器或者解释器把前端的语言代码(如JAVA,C/C++源代码)转换成一种中间媒体文件NST(Normal Syntax Tree)将其源代码之间的调用关系,执行环境,上下文等分析清楚。
然后再通过上述的五大分析引擎从五个切面来分析这个NST,匹配所有规则库中的漏洞特征,一旦发现漏洞就抓取出来。
最后形成包含详细漏洞信息的结果文件。
目前Fortify SCA可以扫描出约350种漏洞,Fortify将所有安全漏洞整理分类,根据开发语言分项目,再细分为8个大类,约350个子类。
IDA:记录把跟踪事件记录在一个跟踪缓存区中。
跟踪缓存区的大小可以设定为无限大(此时你需要很多内存),或者固定的大小(这种情况下,新的跟踪事件会覆盖老的跟踪事件)。
IDA提供几种不同的跟踪机制:
1、指令跟踪:IDA将会记录每一条指令的执行,并保存寄存器数值,通过使用这些信息,你可以找出应用程序的执行过程,并可找出哪条指令修改了哪个寄存器。
2、函数跟踪:IDA将会记录所有的函数调用和函数返回。
3、读写-写-执行跟踪:IDA将会记录一个对指定地址的所有访问。
这种机制相当于是不停止的断点。
OllyDbg:具体步骤是首先加载启动被分析软件程序的二进制可执行文件,然后根据前一节中静态分析的断点列表信息设置断点,结合函数调用关系图(FCG)和控制流图(CFG)等对程序的执行过程进行跟踪,同时记录程序执行的路径以及数据流信息,接着通过人工经验的分析,找到可疑的漏洞及漏洞可能产生的原因,最后通过注入相应的错误代码来触发漏洞,以是否发生异常去判断该可疑的漏洞是否为真实的漏洞。
MS06-040漏洞的检测即可以通过这个动静结合的检测方案被成功检测出来的。