声明
学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负
一、二进制和网络安全的关系
1、二进制的基本概念
二进制是一种基数为2的数制系统,由0和1两个数字组成。它是计算机内部最基本的表示方式,因为计算机只能使用开关来表示0和1两个状态。
在二进制中,每一位的值都是2的幂次方,从右到左依次是1、2、4、8、16等等。
二进制系统中的数字可以用来表示各种信息,比如整数、小数和字符。整数是二进制系统中最常见的数据类型,可以用固定位数的二进制数表示。小数则是使用小数点的二进制数表示,需要使用一种叫做浮点数的表示方式。字符则是使用特定的编码系统将字符映射成二进制数表示,其中最常见的是ASCII码和Unicode编码。
2、二进制在网络安全中的重要性
底层安全基础
网络系统的安全性很大程度上依赖于底层二进制代码的正确性和安全性。恶意软件、漏洞利用等往往针对二进制代码进行攻击。因此,对二进制代码的理解和分析是确保网络安全的关键。
加密与解密
二进制代码在加密和解密算法中起着关键作用。对二进制的理解有助于分析和破解加密机制。例如,对称加密算法(如DES、AES)和非对称加密算法(如RSA)都依赖于二进制操作来保证数据的安全传输。
了解二进制加密算法的工作原理对于设计安全的通信协议和保护数据不被未授权访问至关重要。
二、二进制安全的概念与范畴
1、二进制安全的定义
二进制安全是指在处理二进制数据时,确保数据的完整性、保密性和可用性,防止恶意攻击和数据篡改。
它涉及到在计算机系统中处理二进制数据时,确保数据不会受到破坏、篡改或损坏的一系列安全措施,这包括在存储、传输和处理二进制数据的过程中保持数据的完整性和准确性。
二进制安全还包括密码学的一些东西,比如加解密、签名等,以确保数据传输的安全。在网络安全领域,二进制安全是至关重要的,因为它涉及到软件漏洞挖掘、逆向工程、病毒木马分析等工作,这些都是与二进制数据打交道的安全技术领域。
2、范畴
内存安全
内存安全是指防止内存泄漏、缓冲区溢出等问题,确保程序在内存中的正确运行。这包括对程序的内存访问进行监控和管理,以防止恶意攻击者利用这些漏洞执行任意代码或破坏系统稳定性。
代码安全
代码安全涉及分析和检测二进制代码中的漏洞,如逻辑错误、安全漏洞等。这可以通过静态分析工具来实现,这些工具能够识别代码中的潜在风险点,帮助开发者在软件发布前修复这些安全问题。
数据安全
数据安全关注保护二进制数据的机密性和完整性,防止数据被窃取或篡改。这包括使用加密技术来保护数据传输的安全,以及确保存储的数据不被未授权访问
逆向工程
逆向工程是指通过对二进制代码的分析,了解程序的功能和结构,以便发现潜在的安全问题。这通常包括反汇编、动态调试等技术,目的是揭示软件的内部工作原理,以及可能存在的安全漏洞
逆向工程说白了,就是把二进制0、1换成汇编语言,换成人能够读懂的语言。
漏洞修复
漏洞修复是指针对发现的二进制安全漏洞,进行及时的修复和加固。这可能涉及到对程序代码的添加、删除或修改,以消除漏洞并增强系统的安全性。例如,对于缓冲区溢出漏洞,可以通过添加输入验证、使用更安全的编程实践或应用补丁来修复
三、二进制安全的渗透测试方法
1、静态分析
静态分析是指在不运行程序的情况下,通过分析程序的源代码或二进制文件来发现潜在的安全漏洞
工具介绍:
静态分析是指在不运行程序的情况下,通过分析程序的源代码或二进制文件来发现潜在的安全漏洞。以下是一些常用的静态分析工具:
Ghidra:由美国国家安全局(NSA)开发的逆向工程工具,支持多种文件格式,包括二进制文件,能够进行代码反编译和分析。
IDA Pro:一款商业逆向工程工具,提供强大的静态分析功能,能够生成高质量的伪代码。
Binary Ninja:一款交互式的二进制分析工具,支持多种架构和平台,提供代码反编译、静态分析等功能。
Radare2:一个开源的逆向工程框架,支持多种文件格式和架构,提供命令行界面,功能强大但使用较为复杂。
SonarQube:一个持续代码质量检查平台,可以集成到CI/CD流程中,支持多种编程语言的静态代码分析。
分析流程:
准备阶段:收集目标二进制文件,确定分析目标和范围。
反编译:使用逆向工程工具对二进制文件进行反编译,生成伪代码。
代码审查:人工或自动检查伪代码,寻找常见的安全漏洞模式,如缓冲区溢出、格式化字符串漏洞等。
控制流分析:分析程序的控制流图,识别潜在的逻辑错误或不安全的代码路径。
数据流分析:追踪数据在程序中的流动,识别潜在的数据泄露或不安全的数据处理。
报告生成:将发现的安全问题整理成报告,提供修复建议。
2、动态分析
动态分析是在程序运行时进行的分析,通过监控程序的行为来发现安全漏洞
工具介绍
GDB:GNU调试器,一个功能强大的命令行调试工具,可以用于动态分析程序的运行时行为。
Valgrind:一个程序分析框架,提供内存调试、内存泄漏检测等功能。
Pin:一个动态二进制插桩框架,可以用于监控程序的运行时行为,进行性能分析和安全测试。
DynamoRIO:一个动态二进制插桩工具,类似于Pin,但提供了更多的功能和更好的性能。
Frida:一个动态代码插桩工具,支持多种平台和语言,可以用于动态分析和修改程序行为。
分析流程:
环境搭建:配置分析环境,包括安装必要的工具和依赖。
运行监控:运行目标程序,并使用动态分析工具监控其行为。
异常检测:分析程序运行时产生的异常,如内存访问错误、异常分支等。
性能分析:评估程序的性能,识别性能瓶颈和资源泄露。
安全检查:检查程序的安全性,如缓冲区溢出、代码注入等。
结果分析:分析动态分析的结果,确定是否存在安全漏洞。
3、模糊测试
模糊测试是一种自动化的软件测试技术,通过向程序输入大量随机或半随机的数据,以发现程序的异常行为或崩溃。
工具介绍
AFL(American Fuzzy Lop):一个高效的模糊测试工具,使用编译时插桩技术来发现程序中的潜在漏洞。
这个工具确实还不错,说白了就是写成程序,然后给出测试用例
libFuzzer:由Google开发的模糊测试库,集成在LLVM/Clang编译器中,支持快速的模糊测试。
有一说一,这个工具实在是强大,可以法宣CVE-2014-0160漏洞,用来搞自动化、模糊测试很好用,工具都是一样,了解一个即会使用全部,本质相通。
Honggfuzz:一个基于动态二进制插桩的模糊测试框架,支持多种操作系统和架构。
Radamsa:一个模糊测试工具,能够生成各种类型的测试输入,包括文件、网络协议等。
Peach Fuzzer:一个商业模糊测试工具,支持多种协议和文件格式的模糊测试。
分析流程:
目标选择:确定需要进行模糊测试的程序或组件。
输入生成:生成或收集用于模糊测试的输入数据集。
测试执行:使用模糊测试工具对目标程序进行测试,监控其行为。
异常捕获:捕获程序的异常行为,如崩溃、死锁等。
结果分析:分析异常行为,确定是否为安全漏洞。
漏洞验证:对发现的潜在漏洞进行验证,确认其可利用性。
报告和修复:将发现的漏洞整理成报告,并提供修复建议。
四、漏洞利用
工具介绍:
漏洞利用是指利用软件中的安全漏洞来执行未授权操作的过程。以下是一些常用的漏洞利用工具:
Metasploit Framework:一个开源的漏洞利用和渗透测试框架,提供了大量的漏洞利用代码和payload。
好家伙,为了了解这个工具,我去看了docker容易导入镜像搭建一个PHP后门反弹相关的内容,docker容器这个东西,虽然我知道,但是还没有使用过,先玩玩vm虚拟机,等后面熟悉了就可以搭建自己的靶场玩,复现常见的高危破坏性强的cve漏洞了,哈哈哈
Exploit Database:一个公开的漏洞和exploit数据库,用户可以搜索和下载各种已知漏洞的exploit代码。
Searchsploit:一个命令行工具,用于搜索Exploit Database中的exploit,方便快速获取漏洞利用代码。
Immunity Debugger:一个调试器,可以用来分析和修改exploit代码,以适应特定的目标环境。
ROPgadget:一个工具,用于生成和查找返回导向编程(ROP)链中的gadgets。
分析流程:
漏洞确认:确认目标软件中存在的已知或未知漏洞。
信息收集:收集目标系统的详细信息,包括操作系统、应用程序版本等。
漏洞分析:分析漏洞的工作原理和利用条件。
exploit开发:根据漏洞特性,开发或修改现有的exploit代码。
测试:在受控环境中测试exploit代码,确保其有效性并避免意外损害。
权限维持:如果成功利用漏洞,可能会部署后门或维持访问权限的工具。
报告和修复:记录利用过程并提供修复建议给目标系统管理员。
五、代码审计
SonarQube:一个持续代码质量检查平台,支持多种编程语言的静态代码分析。
Fortify:一个商业代码审计工具,提供静态代码分析和漏洞扫描功能。
Checkmarx:一个自动化的代码审计工具,支持多种编程语言和框架。
Coverity Scan:一个静态代码分析工具,能够识别和修复代码中的安全漏洞。
审计这里的流程我想不必了解了,因为没有代码可以审计,主打一个黑盒测试,但是呢,虽然现在很多自动化的工具,但是渗透测试本质上还得手动,思维进攻思路,实践中才会学会,这完全是不可复制性的,所以,咱还是的多打靶场,多实践才行啊。
总之,了解这些工具就当科普,漏洞利用这些工具就很常用了,以及漏洞烧苗,当然模糊测试也很常用,可以写python跑脚本,也可以用工具跑自动化,总之,有轮子就用轮子,没有轮子就手动写轮子用,快速完成测试和拿到权限才是最重要的。该说不说,我想也该说一句话了: