安全见闻(9)
声明!
学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷羽sec
文章目录
前言
前面,我们了解了量子计算对于安全领域的冲击和影响,那么我们接下来接着了解二进制在安全中的作用和意义。
一、二进制与网络安全的关系:
1.二进制的基本概念:
在二进制中,只有两个数字,即 0 和 1,这两个数字被称为二进制位(bit)。与我们日常使用的十进制不同,十进制是逢十进一,而二进制是逢二进一。
2.二进制在网络安全中的重要性:
权限设置的底层逻辑:在网络系统的访问控制中,权限通常是以二进制位来表示的。例如,一个文件可能有读(4)、写(2)、执行(1)三种权限。在操作系统底层,这些权限可以用一个三位的二进制数来表示,如 111 表示具有读、写、执行全部权限,001 表示只有执行权限。这种二进制表示方式使得系统能够精确地控制用户对资源的访问,通过对二进制权限位的操作,实现灵活的访问控制策略,从而保护网络资源的安全。入侵检测的信号处理:在入侵检测系统(IDS)和入侵防御系统(IPS)中,网络流量等监测数据是以二进制形式收集和处理的。这些系统通过分析二进制网络数据包的内容、包头信息(如源 IP 地址、目的 IP 地址、端口号等,这些信息在网络数据包中也是以二进制形式存在)来检测是否存在异常行为。例如,当检测到大量来自同一个 IP 地址的二进制数据包,且这些数据包试图访问系统的敏感端口,系统可能会判定为潜在的入侵行为,从而采取相应的防御措施,如阻断连接等。数字证书的基础:数字证书是网络安全中用于身份认证的重要工具。它包含了用户的公钥、身份信息等内容,并且这些信息都是以二进制编码存储的。在 SSL/TLS(安全套接层 / 传输层安全)协议用于保障 Web 通信安全时,服务器向客户端发送数字证书,客户端通过验证数字证书中的二进制签名来确认服务器的身份。这个二进制签名是通过证书颁发机构(CA)使用私钥对证书内容进行加密生成的。只有 CA 的公钥才能验证这个签名,从而防止中间人伪造服务器身份,确保用户与真实服务器进行通信。在许多加密算法中,二进制起到了关键作用
二、二进制安全的概念与范畴:
1.二进制安全的定义:
二进制安全主要是指软件或系统在处理二进制数据(如程序代码、文件内容等)时,能够确保数据的完整性、保密性和可用性,不会因为数据的二进制特性而产生安全漏洞。
2.范畴:
程序代码安全:
缓冲区溢出防范:这是二进制安全的一个重要方面。在程序中,当向缓冲区(一段连续的内存区域,用于存储数据)写入数据时,如果没有正确处理写入数据的长度,就可能发生缓冲区溢出。
代码注入防御:包括 SQL 注入(在数据库相关应用中)和 Shell 注入等情况。数据存储安全
文件系统安全:在存储二进制文件时,需要防止文件内容被非法访问、篡改或删除
数据库存储安全:数据库中存储了大量的二进制数据网络传输安全
数据包安全:在网络中传输的二进制数据包需要保证其安全。例如,在传输层安全协议(TLS)的保护下,网络数据包(包含二进制的应用数据、协议头信息等)从客户端传输到服务器端的过程中,能够防止被窃听、篡改和重放。TLS 协议通过加密(如使用 AES 等二进制加密算法)和消息认证码(MAC)来确保数据包的保密性和完整性。
协议安全:各种网络协议在处理二进制数据时也需要保证安全
三、二进制安全的渗透测试方法:
1.静态分析
反汇编工具:
IDA Pro 是一款非常强大的反汇编工具。它能够将二进制文件转换为汇编语言代码,并且提供了交互式的分析环境
Ghidra 是由 NSA(美国国家安全局)开发的开源反汇编工具。它具有反编译功能,可以将汇编代码转换为类似 C 语言的代码,方便分析人员理解程序逻辑。对于一些复杂的二进制文件,这种高级语言表示形式有助于更快地发现潜在的安全问题。分析内容
1.代码结构检查:查看函数的调用层次结构,确定程序的主要执行路径和分支路径,分析数据结构的定义和使用。
2.指令检查:寻找危险的指令序列,如存在能够修改程序执行流程的指令(如 jmp、call 等)。在恶意代码中,这些指令可能被用来劫持程序的控制权。检查特权指令的使用情况。如果一个普通用户级别的程序不当地使用了只有系统管理员权限才能执行的指令,就可能存在权限提升的漏洞。
3.符号和字符串分析:提取二进制文件中的符号信息(如函数名、变量名等),有助于理解程序的功能分析字符串常量,这些字符串可能包含有用的信息,如数据库连接字符串、密码提示信息等。如果在二进制文件中发现明文的密码或者密钥,这显然是一个严重的安全漏洞。同时,字符串也可能是 SQL 注入攻击或命令注入攻击的潜在入口点,
2.动态分析:
主要工具:GDB(GNU Debugger)是一个强大的跨平台调试工具,主要用于 Unix/Linux 系统。它支持多种编程语言,能够帮助分析人员深入了解程序在运行过程中的内部状态。Valgrind 是一个用于内存调试、内存泄漏检测和性能分析的动态分析工具集。对于二进制安全分析来说,它的 Memcheck 工具非常有用。Memcheck 可以检测程序中出现的各种内存错误,如使用未初始化的内存、内存越界访问、内存泄漏等。分析要点
1.内存分析:观察内存的分配和释放过程。确保程序正确地分配内存大小,避免出现缓冲区溢出或内存泄漏。检查内存中的数据完整性。防止程序在运行过程中对内存数据进行非法修改。
2.系统调用分析:
记录程序执行的系统调用,如文件读写、网络通信、进程管理等。异常的系统调用可能暗示着安全问题。
分析系统调用的参数。确保系统调用的参数是合法合理的。
3.输入输出分析:
监控程序的输入源,如用户输入、文件输入、网络输入等。检查对输入数据的处理是否安全。
分析程序的输出行为,如数据显示、文件输出、网络发送等。确保输出数据不会泄露敏感信息。
3.模糊测试:
模糊测试工具
AFL(American Fuzzy Lop):AFL 是一款广泛使用的开源模糊测试工具。它通过对程序的输入进行变异操作来生成测试用例。
Peach Fuzzer:Peach Fuzzer 是一个功能强大的商业模糊测试工具,它提供了更高级的测试模型和更灵活的测试策略。它支持多种协议和文件格式的模糊测试。模糊测试过程
1.确定测试目标和输入接口:首先要明确测试的二进制程序以及它的输入接口。输入接口可以是文件输入、网络端口、命令行参数等。
2.生成初始输入数据:可以从合法的输入数据开始,如一个正常的视频文件、标准的网络协议数据包等。这些数据可以作为基础来进行变异。
3.变异输入数据:运用各种变异技术对初始输入进行修改。这包括位翻转(改变二进制数据中的某一位)、块替换(用其他块的数据替换部分数据)、数据插入或删除等操作
4.执行测试并监控结果:将变异后的输入数据提供给目标程序,同时观察程序的反应。可以通过监控程序的返回值、系统日志、是否崩溃等情况来判断是否发现了漏洞。
4.漏洞利用:
漏洞利用工具:
Metasploit :是一款非常著名的开源漏洞利用框架。它提供了大量的漏洞利用模块,涵盖了各种操作系统、网络服务和应用程序的漏洞。用户可以通过简单的配置和操作,使用这些模块对目标进行攻击。
Exploit - DB :是一个在线的漏洞利用代码数据库。它收集了大量的公开的漏洞利用代码,按照漏洞类型、目标软件等进行分类。对于安全研究人员和攻击者来说,这是一个很好的资源。常见的漏洞利用技术
缓冲区溢出利用:当程序没有正确地验证输入数据长度,导致输入数据超出缓冲区的大小,就会发生缓冲区溢出。攻击者可以通过精心构造的输入数据,将恶意代码填充到溢出的数据部分。
格式化字符串利用:格式化字符串漏洞通常出现在程序使用 printf 等格式化函数时,没有正确地限制用户提供的格式化字符串参数。攻击者可以利用这个漏洞来读取内存内容或者写入任意值到内存中。
代码注入利用:攻击者将自己的恶意代码注入到目标程序的运行环境中,然后通过某种方式使程序执行这些恶意代码。一种常见的情况是通过 SQL 注入或者命令注入。在二进制安全中,也可能通过内存注入等方式。
5.代码审计:
自动化审计工具:
RIPS(Remote Integrity Protection Service)是一款专门用于 PHP 代码安全审计的工具。它可以自动扫描 PHP 代码,发现诸如 SQL 注入、跨站脚本攻击(XSS)等常见的安全漏洞。它通过分析代码的语法结构和执行流程,快速定位可能存在安全问题的代码区域。
FindBugs 是一个用于 Java 代码审计的工具,它能够检测出 Java 代码中的多种潜在错误和安全隐患,如空指针异常、资源泄漏等。它通过对 Java 字节码进行分析,生成详细的审计报告,帮助开发人员和审计人员发现问题。审计内容
输入验证检查:重点关注程序如何处理外部输入,包括用户输入(如来自键盘、鼠标、触摸屏等)、文件输入(如读取文件内容)、网络输入(如接收网络数据包)。查看是否对输入数据的类型、长度、格式等进行了验证
权限管理审计:审查程序中关于权限控制的部分。确保只有授权的用户或进程能够访问和操作特定的资源。查看程序是否存在权限提升的漏洞。
加密和安全通信审查:对于涉及加密的程序,检查加密算法的使用是否正确。审查程序中的安全通信部分,如 SSL/TLS 协议的使用。确保在网络通信过程中,数据的传输是安全的,防止数据被窃取、篡改或者中间人攻击。检查程序是否正确地验证通信对方的身份,
内存管理审计:检查程序对内存的分配、使用和释放过程。检查是否存在缓冲区溢出的隐患。这涉及到对数组、缓冲区等数据结构的操作。
总结
二进制安全渗透测试涵盖多种方法,包括静态分析、动态分析、模糊测试、漏洞利用和代码审计。这些方法从不同角度对二进制程序进行安全性评估和探索,帮助发现潜在安全漏洞并采取相应措施。