二进制与网络安全的关系
二进制与网络安全的关系
声明!
学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷羽sec
一、二进制的基本概念
三进制是计算技术中广泛采用的一种数制。它只有两个数码:0和1,采用逢二进一的进位规则。计算机中的所有数据都是以二进制形式存储和处理的。
二、二进制在网络安全中的重要性
底层安全基础:网络系统的安全性很大程度上依赖于底层二进制代码的正确性和安全性。恶意软件、漏洞利用等往往针对二进制代码进行攻击。
漏洞分析:通过分析二进制代码可以发现潜在的安全漏洞,如缓冲区溢出、代码注入等。
加密与解密:二进制代码在加密和解密算法中起着关键作用,对二进制的理解有助于分析和破解加密机制。
三、二进制安全的概念与范畴
1.二进制安全的定义
二进制安全是指在处理二进制数据时,确保数据的完整性、保密性和可用性,防止恶意攻击和数据篡改。
2.范畴
内存安全:防止内存泄漏、缓冲区溢出等问题,确保程序在内存中的正确运行。
代码安全:分析和检测二进制代码中的漏洞,如逻辑错误、安全漏洞等。
数据安全:保护二进制数据的机密性和完整性,防止数据被窃取或篡改。
逆向工程:通过对二进制代码的分析,了解程序的功能和结构,以便发现潜在的安全问题。
漏洞修复:针对发现的二进制安全漏洞,进行及时的修复和加固。
四、二进制安全的渗透测试方法
1.静态分析
a.工具介绍:
常用的反汇编工具 OIlyDbg 和 Immunity Debugger 可以将二进制文件反汇编成汇编代码,便于分析。此外,Hopper Disassembler 也是一款功能强大的反汇编工具,尤其在分析 macOS 和 iOS 平台的二进制文件时表现出色。
b.分析流程:
识别关键函数和代码段:通过对程序的入口点、导出函数等进行分析,确定可能存在安全问题的关键代码区域。
检查代码中的潜在漏洞:如缓冲区溢出、整数溢出、格式化字符串漏洞等。可以通过检查函数调用、内存操作等方式来发现这些漏洞。
分析控制流和数据流:了解程序的执行流程和数据的流向,查找可能存在的攻击路径。例如通过分析条件跳转、循环等控制结构、以及变量的赋值和传递,确定是否存在可以被利用的漏洞。
符号执行:使用KLEE等符号执行工具对二进制代码进行分析,可以在不实际执行程序的情况需啊,探索程序的所有可能执行路径,从而发现潜在的安全漏洞。
什么是符号执行
符号执行(Symbolic Execution)是一种先进的程序分析技术,它在软件测试、安全验证和自动化测试等领域中发挥着重要作用。以下是对符号执行的详细解释:
一、定义与目的
符号执行是一种通过收集程序路径上的约束条件,并利用约束求解器生成高覆盖率的测试用例的技术。它的目的是在给定的时间内,通过生成的测试用例尽可能多地探索程序的执行路径,以发现潜在的错误或漏洞。
二、工作原理
符号化输入:
- 符号执行使用符号值(而非具体值)作为程序的输入。这些符号值代表了一组可能的输入值,使得程序能够在不同的输入条件下进行执行。
符号翻译:
- 程序变量、表达式和语句被翻译成符号表达式。这些表达式包含了符号值以及程序逻辑中的运算和条件判断。
路径探索:
- 符号执行引擎沿着程序路径执行,并在遇到状态分支时,分叉探索每支路径状态。对于每个条件语句,符号执行会创建多个执行实例,每个实例对应一个可能的路径约束。
约束收集 :
- 在执行过程中,符号执行引擎会收集每支路径上的约束条件。这些约束条件表示了程序执行到当前点时,输入值必须满足的条件。
约束求解 :
- 使用约束求解器对收集到的路径约束进行求解。如果约束是可满足的,则说明该路径是可达的,并生成相应的测试用例。如果约束是不可满足的,则说明路径不可达,终止对该路径的分析。
三、关键概念
执行路径 :
- 执行路径是程序执行过程中经过的一系列条件语句的真假序列。每个条件语句的取值(true或false)决定了程序执行的方向。
符号状态 :
- 符号状态是符号执行过程中维护的一个映射,将程序变量映射到符号表达式上。这个映射表示了在当前执行点上,程序变量的符号值。
符号路径约束:
- 符号路径约束是符号表达式上无量词的一阶公式,表示了程序执行到当前点时,输入值必须满足的条件。
四、应用场景
软件测试 :
- 符号执行可以生成高覆盖率的测试用例,帮助测试人员发现程序中的错误和漏洞。
安全验证:
- 通过符号执行,可以检测程序中的潜在安全漏洞,如缓冲区溢出、注入攻击等。
自动化测试 :
- 符号执行可以自动化地生成测试用例,减轻测试人员的工作负担,提高测试效率。
五、优势与挑战
优势:
- 能够以尽可能少的测试用例达到高测试覆盖率。
- 能够探索程序的多种可能路径,发现潜在的错误或漏洞。
挑战:
- 路径爆炸问题:随着程序规模的增大,可能的执行路径数量呈指数级增长,导致符号执行难以在有限的时间内完成。
- 约束求解困难:某些复杂的约束条件可能难以被现有的约束求解器有效求解。
- 内存建模问题:符号执行需要对程序的内存状态进行建模,但内存状态的复杂性可能使得建模过程变得困难。
六、相关工具与框架
- KLEE:基于LLVM的符号执行引擎,支持多种编程语言,具有高性能和可扩展性。
- S2E:系统级符号执行框架,能够分析大型复杂的软件,如设备驱动器等。
- Angr、Triton、Manticore:用户级动态二进制分析和符号执行框架,支持多种二进制架构。
综上所述,符号执行是一种强大的程序分析技术,它在软件测试、安全验证和自动化测试等领域中具有广泛的应用前景。然而,在实际应用中,还需要克服路径爆炸、约束求解困难和内存建模等挑战。
2.动态分析
a.工具介绍
GDB(GNU Debugger)是一款强大的调试器,可对运行中的程序进行调试,观察程序的行为和内存状态。此外,WinDbg 在 Windows 平台上也被广泛使用。
b.分析流程
设置断点:在关键代码位置设置断点,以便在程序执行到该位置时暂停,观察程序的状态。
跟踪程序的执行流程:通过单步执行、继续执行等操作,跟踪程序的执行流程,了解程序的行为。
观察内存中的数据变化:检查程序在运行过程中内存中的数据变化,检测是否存在异常行为。例如,观察变量的值是否被意外修改,或者是否存在内在泄漏等问题。
分析程序的输入输出:监测程序的输入和输,查找可能的漏洞利用点。例如,检查程序是否对输入数据进行了正确的验证,或者是否存在输出敏感信息的情况。
3.模糊测试
a.工具介绍
Amer i can Fuzzy LOP(AFL)是一款非常流行的模樹测试工暴,它能够效地生成大量的随机输入数据,对程序进行测试。Peach Fuzzer 也是一款功能强大的模糊测试工具,支持多种平台和协议。
b.分析流程:
确定输入接口和目标程序:确定程序的输入接口,例如命令行参数、文件输入、网络输入等。然后选择要进行模糊测试的目标程序。
生成随机输入数据:使用模糊测试工具生成大量的随机输入数据,这些数据可以是各种类型的,如字符串、整数、文件内容等。
将输入数据输入到程序中:将生成的随机输入数据输入到目标程序中,观察程序的行为。
监测程序的行为:弯找可能的崩溃或异常情况。如果程序出现崩溃或异常行为,分析原因,确定是否存在安全漏洞。
优化模糊测试策略: 根据测试结果,不断优化模糊测试策略,提高测试的效率和
覆盖率。
模糊测试和渗透测试中抓包爆破密码原理类似
4.漏洞利用
a.工具介绍
Metasploit 是一款广泛使用的漏洞利用框架,它提供了大量的漏洞利用模块和辅助工具,万便开发和执行涌洞利用代码。此外,Exploit-DB 是一个漏洞利用代码库,可以从中查找和参考已有的漏洞利用代码。
b .分析流程:
确定目标系统中的漏洞:通过漏洞扫描、渗透测试等方式,确定目标系统中存在的安全漏洞。
开发漏洞利用代码:根据漏洞的类型和特点,开发相应的漏洞利用代码。漏洞利用代码可使用各种编程语言编写,如Python、C等
利用漏洞获取系统权限:将漏洞利用代码发送到目标系统,触发漏洞,获取系统权限。
验证漏洞利用的有效性:验证漏洞利用是否成功,以及获取的系统权限是否符合预期
进行后续的渗透测试:在获取系统权限后,可以进行进一步的渗透测试,如提取敏感信息、安装后门等。
5.代码审计
a.工具介绍
Checkmarx 和 Fortify 是两款常用的代码审计工具,它们能够对源代码进行分析,查找潜在的安全漏洞。此外,SonarQube 也可以用于代码质量和安全审计。
b.分析流程
选择要审计的代码:确定要进行代码审计的源代码文件或项目。
配置审计工具根据项目的特点和需求,配置代码审计工具的规则和参数。
运行代码审计工具:启动代码审计工具,对源代码进行分析。
分析审计结果:查看代码审计工具生成的报告,分析基中的安全漏洞和问题。
修复安全漏洞:根据审计结果,对发现的安全漏洞进行修复和加固。
五、总结
二进制安全是网络安全的重要组成部分,掌握二进制安全的渗透测试方法对于保护网络系统的安全至关重要。通过静态分析、动态分析、模糊测试、漏洞利用和代码审计等方法,可以有效的检测和防范二进制代码中的安全漏洞,提高网络系统的安全性。在实际应用中,应结合多种方法进行综合分析,以确保网络系统的安全稳定运行。同时,随着技术的不断发展,二进制安全领域也在不断演进,需要持续学习和研究新的技术和方法,以应对不断变化的安全挑战。
相关文章:

二进制与网络安全的关系
二进制与网络安全的关系 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以…...

【计算机网络】网段划分
一、为什么有网段划分 IP地址 网络号(目标网络) 主机号(目标主机) 网络号: 保证相互连接的两个网段具有不同的标识 主机号: 同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号 互联网中的每一台主机,都要隶属于某一个子网 -&…...

VB、VBS、VBA的区别及作用
VB、VBS 和 VBA 是三种与微软 Visual Basic 相关的编程语言或环境,它们在功能和用途上有所不同: # Visual Basic (VB) Visual Basic 是一种面向对象的编程语言,最初由微软公司开发。它是一种高级编程语言,旨在简化开发过程&…...

深度学习中的循环神经网络(RNN)与时间序列预测
一、循环神经网络(RNN)简介 循环神经网络(Recurrent Neural Networks,简称RNN)是一种专门用于处理序列数据的神经网络架构。与传统神经网络不同,RNN具有内部记忆能力,能够捕捉数据中的时间依赖…...

Unity 设计模式-原型模式(Prototype Pattern)详解
原型模式 (Prototype Pattern) 原型模式 (Prototype Pattern) 是一种创建型设计模式,它允许通过复制现有的对象来创建新对象,而不是通过直接实例化类。这意味着你可以通过克隆原型对象来生成新的实例,而不必依赖类的构造函数。该模式的核心思…...

如何在 RK3568 Android 11 系统上排查以太网问题
1. 硬件连接检查 在进行软件诊断之前,首先确保所有硬件连接正常: 确认网线可靠插入设备的以太网端口。交换机、路由器中与设备连接的端口是否正常工作。若有可能,尝试更换网线或使用其他端口。2. 使用命令行工具进行基本检查 检查网络接口状态 连接设备并使用 ADB 或终端…...

如何在WPF中嵌入其它程序
在WPF中嵌入其它程序,这里提供两种方案 一、使用WindowsFormHost 使用步骤如下 1、添加WindowsFormsIntegration和System.Windows.Forms引用 2、在界面上放置WindowsFormHost和System.Windows.Forms.Panel 1 <Grid> 2 <WindowsFormsHost> 3…...

大模型呼入系统是什么?
大模型呼入系统是什么? 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 在呼叫中心领域,大模型呼入是指利用大型语言模型(如GPT等)处理客户呼入的电话请求&a…...

Flutter:SlideTransition位移动画,Interval动画延迟
配置vsync,需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationControllerlate AnimationController _controller;overridevoid initState() {super.…...

【Elasticsearch入门到落地】2、正向索引和倒排索引
接上篇《1、初识Elasticsearch》 上一篇我们学习了什么是Elasticsearch,以及Elastic stack(ELK)技术栈介绍。本篇我们来什么是正向索引和倒排索引,这是了解Elasticsearch底层架构的核心。 上一篇我们学习到,Elasticsearch的底层是由Lucene实…...

网络安全概论
一、 网络安全是一个综合性的技术。在Internet这样的环境中,其本身的目的就是为了提供一种开放式的交互环境,但是为了保护一些秘密信息,网络安全成为了在开放网络环境中必要的技术之一。网络安全技术是随着网络技术的进步逐步发展的。 网络安…...

后端开发如何高效使用 Apifox?
对于后端开发者来说,日常工作中少不了接口的设计、调试和文档编写。你是否也曾因接口文档更新不及时、测试工具分散而头疼不已?Apifox,这款全能型工具,或许能成为你的效率神器! Apifox究竟有哪些功能能帮助后端开发者…...

实现List接口的三类-ArrayList -Vector -LinkedList
一、ArrayList 数据结构与存储原理 ArrayList是基于动态数组实现的。它在内存中是一块连续的存储空间。当创建一个ArrayList时,会初始化一个默认大小(通常为10)的数组。随着元素的不断添加,如果数组容量不够,会进行扩…...

LeetCode 904.水果成篮
LeetCode 904.水果成篮 思路🧐: 求水果的最大数目,也就是求最大长度,我们是单调的向前求解,则能够想到使用滑动窗口进行解答,可以用hash表统计每个种类的个数,kinds变量统计当前种类,…...

GitHub 开源项目 Puter :云端互联操作系统
每天面对着各种云盘和在线应用,我们常常会遇到这样的困扰。 文件分散在不同平台很难统一管理,付费订阅的软件越来越多,更不用说那些烦人的存储空间限制了。 最近在 GitHub 上发现的一个开源项目 Puter 彻底改变了我的在线办公方式。 让人惊…...

美创科技入选2024数字政府解决方案提供商TOP100!
11月19日,国内专业咨询机构DBC德本咨询发布“2024数字政府解决方案提供商TOP100”榜单。美创科技凭借在政府数据安全领域多年的项目经验、技术优势与创新能力,入选收录。 作为专业数据安全产品与服务提供商,美创科技一直致力于为政府、金融、…...

七天掌握SQL--->第五天:数据库安全与权限管理
1.1 用户权限管理 用户权限管理是指控制用户对数据库的访问和操作权限。在MySQL中,可以使用GRANT和REVOKE命令来管理用户权限。 GRANT命令用于授予用户权限。语法如下: GRANT privileges ON database.table TO userhost IDENTIFIED BY password;其中&…...

数学建模学习(138):基于 Python 的 AdaBoost 分类模型
1. AdaBoost算法简介 AdaBoost(Adaptive Boosting)是一种经典的集成学习算法,由Yoav Freund和Robert Schapire提出。它通过迭代训练一系列的弱分类器,并将这些弱分类器组合成一个强分类器。算法的核心思想是:对于被错误分类的样本,在下一轮训练中增加其权重;对于正确分类…...

丹摩|丹摩智算平台深度评测
1. 丹摩智算平台介绍 随着人工智能和大数据技术的快速发展,越来越多的智能计算平台涌现,为科研工作者和开发者提供高性能计算资源。丹摩智算平台作为其中的一员,定位于智能计算服务的提供者,支持从数据处理到模型训练的全流程操作…...

『VUE』34. 异步组件(详细图文注释)
目录 加载速度的优化示例代码总结 欢迎关注 『VUE』 专栏,持续更新中 欢迎关注 『VUE』 专栏,持续更新中 加载速度的优化 实际项目中你可能会有几十个组件,如果一开始就加载了全部组件(哪怕其中有些组件你暂时用不到)这无疑大大增加了响应时间,用户体验…...

深入解析自校正控制(STC)算法及python实现
目录 深入解析自校正控制(STC)算法第一部分:自校正控制算法概述1.1 什么是自校正控制1.2 自校正控制的核心思想1.3 STC 的应用场景1.4 STC 的分类第二部分:自校正控制算法的数学基础2.1 动态系统模型2.2 参数辨识方法2.3 控制器设计2.4 稳定性分析第三部分:Python 实现自校…...

《macOS 开发环境配置与应用开发》
一、引言 macOS 作为一款强大而流行的操作系统,为开发者提供了丰富的开发机会和优秀的开发环境。无论是开发原生的 macOS 应用,还是进行跨平台开发,了解和掌握 macOS 开发环境的配置以及应用开发的方法至关重要。本文将详细介绍 macOS 开发环…...

WebSocket 常见问题及解决方案
什么是 WebSocket? WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行双向通信,而不需要像传统 HTTP 那样每次请求都需要建立新的连接。WebSocket 协议在 2011 年被 IETF 定义为 RFC 6455 标准。 特点 双向通信&…...

如何在 .gitignore 中仅保留特定文件:以忽略文件夹中的所有文件为例
在日常的开发工作中,使用 Git 来管理项目是不可或缺的一部分。项目中的某些文件夹可能包含大量的临时文件、生成文件或不需要版本控制的文件。在这种情况下,我们通常会使用 .gitignore 文件来忽略这些文件夹。然而,有时我们可能希望在忽略整个…...

详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)
文章目录 前言1.插入排序(InsertSort)1.1 核心思路1.2 实现代码 2.选择排序(SelectSort)2.1 核心思路2.2 实现代码 3.冒泡排序(BubbleSort)3.1 核心思路3.2 实现代码 4.希尔排序(ShellSort&…...

Linux虚拟机空间扩容(新增磁盘并分区挂载)
1、命令shutdown -h now关闭虚拟机(要关机后再进行新增磁盘操作) 云平台进入虚拟机管理,新增磁盘 成功添加一块100G的磁盘 3、在Linux终端下执行该命令:lsblk 发现有新添加的磁盘。 也新增了/dev/vdb 3、分区 输入命令࿱…...

数据结构 ——— 直接选择排序算法的实现
目录 直接选择排序算法的思想 优化直接选择排序算法的思想 代码实现(默认升序) 直接选择排序算法的思想 直接选择排序算法的思想类似与直接插入排序 区别在于从大到小选择最小的元素或者最大的元素直接放在元素应该停留的位置每次从待排序的元素中选…...

MySQL中的ROW_NUMBER窗口函数简单了解下
ROW_NUMBER() 是 MySQL8引入的窗口函数之一,它为查询结果集中的每一行分配一个唯一的顺序号(行号)。这个顺序号是基于窗口函数的 ORDER BY 子句进行排序的,可以根据指定的排序顺序生成连续的整数值。 ROW_NUMBER() 在分页、去重、…...

day24|leetCode 93.复原IP地址 , 78.子集 , 90.子集II
8.复原ip地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和"192.168.1.1" 是 有效 IP 地址,但是 "…...

RocketMQ: Broker 使用指南
Broker 配置参数 获取 Broker 的默认配置 $ sh mqbroker -m Broker 启劢时,如何加载配置 ### 第一步生成 Broker 默认配置模版 sh mqbroker -m > broker.p ### 第二步修改配置文件, broker.p ### 第三步加载修改过的配置文件 nohup sh mqbroker -c broker.pBrok…...