A Survey on Automated Driving System Testing-Landscapes and Trends(二)[系统级ADS测试技术]
系统级ADS测试技术与模块级测试不同,系统级测试侧重于模块之间的协作而威胁整车安全的故障。
针对模块级的测试技术大部分的测试工作都是在模拟环境中完成的,由各种软件模拟器实现。
基于仿真的测试+混合现实测试(在测试循环中引入了真实硬件)
使用仿真器进行系统级测试测试方法+测试预期+测试充分性
测试方法基于搜索的测试+自适应压力测试+基于采样的方法+对抗攻击
基于搜索的测试(fuzz)
Compositional falsification of cyber-physical systems with machine learning components提出了一个组合的基于搜索的测试框架,并将其应用于具有机器学习组件(即主要是感知)的ADS的测试。他们的工作的基本思想是协同使用感知输入空间和整个系统输入空间:一个空间上的约束可以减少另一个空间上的搜索代价。这样,他们提高了寻找反例的效率。
Testing autonomous cars for feature interaction failures using many-objective search提出了一种多目标搜索算法,用于检测 ...
gdb常用调试命令
gdb常用调试命令gdb是GNU项目的一个强大的调试器,可以帮助检查和修改程序的运行状态,发现和修复错误。本文将介绍一些gdb的常用调试命令,以及它们的全称和简写方式。
启动和退出gdb
gdb <program>:启动gdb,并加载指定的可执行文件<program>。
gdb <program> <core>:启动gdb,并加载指定的可执行文件<program>和核心转储文件<core>,用于分析程序崩溃时的状态。
gdb <program> <pid>:启动gdb,并加载指定的可执行文件<program>和进程号为<pid>的正在运行的进程,用于动态调试。
quit或q:退出gdb。
设置和删除断点
break <location>或b <location>:在指定的位置设置一个断点,可以是函数名、文件名:行号、或者内存地址。例如:
break main:在main函数的开始处设置断点。
break test.c:10:在test.c文 ...
NSFuzz-Towards Efficient and State-Aware Network Service Fuzzing-论文阅读
NSFuzz: Towards Efficient and State-Aware Network Service Fuzzing-论文阅读Introduction前作在nsfuzz之前的一些工作是如何对有状态的网络应用的灰盒模糊测试的。
AFLNet原理:
aflnet通过从响应消息中提取响应码来表示服务状态,并使用响应码序列推断协议实现的状态模型,进一步利用推断的模型指导模糊测试过程。
利用推断的状态模型指导模糊测试:aflnet根据协议实现的状态模型,在模糊测试过程中指导生成的输入,以更好地探索协议实现的代码路径和增加代码覆盖率。
不足:
状态表示的挑战:aflnet提出的响应码方案假设协议会在响应消息中嵌入特殊的编码,这在实际情况下并不总是成立。因此,这种基于响应码的状态表示方案可能不适用于所有的网络服务。
测试效率的挑战:由于没有明确的信号指示被测试的网络服务是否已经完成对一个消息的处理,aflnet使用一个固定的定时器来控制模糊测试器发送消息给被测试的网络服务。然而,定时器的时间窗口要么太短(这样被测试的网络服务可能会错过模糊测试器发送的消息),要么太长(这样模糊测试 ...
AFLNet 复现
AFLNet 复现AFLNet官方Github仓库
1. 环境配置(AFL安装)1.1. 系统环境官方推荐Ubuntu 18.04和16.04 64位系统,本次实验使用的是Ubuntu 18.04。
需要clang和llvm,以及一些其他依赖项(graphviz-dev libcap-dev)
1234# Install clang (as required by AFL/AFLNet to enable llvm_mode)sudo apt-get install clang# Install graphviz developmentsudo apt-get install graphviz-dev libcap-dev
1.2. 安装AFLNet123456789101112131415161718192021# 从aflnet仓库中拉取源代码git clone https://github.com/aflnet/aflnet.git aflnet# 进入aflnet目录cd aflnet# 编译aflnetmake clean all# 进入llvm_mode目录cd llvm_ ...
AFLNET:一种用于网络协议的灰盒模糊器-论文笔记
AFLNET:一种用于网络协议的灰盒模糊器-论文笔记现有服务器模糊测试的困难性:
服务器具有庞大的状态空间
服务器的响应依赖于当前消息和内部服务器状态
现有模糊测试方法在处理服务器模糊测试时的局限性
协议规范和实际协议实现之间的不匹配
AFLNet的创新(解决问题):
变异方法:AFLNet采用了变异方法,通过对初始语料库中的原始消息序列进行变异来构建测试输入。这样可以生成多个变体,用以增加代码或状态空间覆盖率,进一步提高测试效果。
利用状态反馈:AFLNet利用服务器的响应代码作为状态反馈来指导模糊测试过程。通过分析反馈信息,AFLNet能够确定模糊测试中所涵盖的服务器状态,从而实现针对状态空间的引导和优化,提高测试效率和发现潜在漏洞的几率。
无需协议规范或消息语法:与现有协议模糊测试器不同,AFLNet不需要手动提供协议规范或消息语法。它以实际客户端与服务器之间记录的消息交换作为初始语料库,减少了对规范的依赖,并能更好地捕捉到实际协议实现中可能存在的差异。
现有模糊器无法有效地检测协议漏洞的原因:
协议具有状态:协议通常涉及到服务器和客户端之间的消息传递和状态转换。服务器 ...
论文阅读-Fuzzing of Embedded Systems A Survey
论文阅读-Fuzzing of Embedded Systems: A Survey1. Introduction
Fuzzing(即模糊测试)是“一种自动测试方法,它使用随机数据(来自文件、网络协议、API调用等)作为软件输入来生成大量测试用例,以发现可利用漏洞的存在”。
尽管模糊测试是一种自动检测软件漏洞的有效技术,但将这种技术直接应用于不太明显且具有很强硬件依赖性的嵌入式设备具有挑战性。
尽管由于这些原因,嵌入式系统模糊器的数量少于传统模糊器,但迄今为止已经开发了几种特定于嵌入式系统的模糊器(即模糊器),我们将在本文中对其进行分析和讨论。
1.1 Motivation
许多嵌入式系统模糊测试工具(例如,Firm-AFL、Avatar2, 和 IoTFuzzer) 已被提议用于识别嵌入式设备中的错误。但是,没有安全分析师模糊嵌入 式系统或分析固件的综合指南。
没有系统评价过嵌入式系统模糊测试 (ESF)「针对嵌入式系统和其固件的模糊测试」
2. SURVEY METHOD2.1 研究问题
本文的目标是回答以下问题:
RQ1: 传统fuzzing和ESF的区别是什么?
RQ2: ...
ROP初探之ret2shellcode
ret2shellcode之前提到的ret2text中,利用了程序中已有的sys函数中的恶意代码来进行getshell,而实际情况中很可能没有这种代码,我们就需要自己拼接或构造恶意代码。这篇文章就讲另一种方式,使用填充shellcode的方法构造恶意代码。
ret2shellcode和ret2text的区别
ret2shellcode是通过栈溢出,将shellcode写入到栈中,然后通过ret指令跳转到栈中的shellcode
ret2text是将返回地址覆盖为程序.text段中已有的代码的地址,从而执行程序本身的代码。一般情况下,当程序开启了NX保护(禁止栈和堆执行代码)时,ret2shellcode就无法成功,因为shellcode所在的内存区域不可执行。这时候可以使用ret2text来绕过NX保护,利用程序已有的可执行代码来实现攻击目的。当然,ret2text也有一些限制,比如需要知道gadget的地址,需要找到合适的gadget来控制寄存器或变量的值,需要考虑程序是否开启了其他保护机制(如ASLR、PIE、RELRO等)。
ret2shellcode的原理ret2shellc ...
ROP初探之ret2text
ROP什么是ROPROP即返回导向编程是一种计算机安全利用技术,它允许攻击者在存在诸如可执行空间保护和代码签名等安全防御的情况下执行代码。在这种技术中,攻击者通过控制调用栈来劫持程序控制流,并执行机器内存中已存在的精心选择的机器指令序列,称为“gadgets”。每个gadgets通常以返回指令结束,并位于现有程序和/或共享库代码中的子程序内。这些gadgets串联在一起,允许攻击者在使用阻止更简单攻击的防御的机器上执行任意操作。
ROP的原理ROP的原理是利用程序内存中已存在的以返回指令结尾的指令序列(gadgets)来控制程序执行流程。攻击者通过缓冲区溢出或其他方式在栈上布置数据,覆盖返回地址为gadgets的地址,从而实现代码注入。ROP可以绕过NX保护,因为它不需要在栈上执行任何新的代码,只需要利用现有的代码。ROP需要精心选择和拼接gadgets,以实现所需的功能。
ROP的前置条件
需要程序存在缓冲区溢出漏洞。
需要在程序内存中找到合适的gadgets,即以返回指令结尾的指令序列,可以实现所需的功能。
需要能够在栈上布置数据,以控制gadgets的执行流程。
RO ...
深入理解Pytorch中模型保存文件pth
一、Pytorch中模型保存和加载方法本文在介绍Pytorch中模型保存文件pth之前,将先探讨如模型的保存/加载的方法。三个核心函数:
torch.save:把序列化的对象保存到硬盘。利用Python的pickle来实现序列化。模型、tensor以及字典都可以用该函数进行保存;
torch.load:采用 pickle 将反序列化的对象从存储中加载进来。
torch.nn.Module.load_state_dict:采用一个反序列化的state_dict加载一个模型的参数字典。
保存/加载模型在Pytorch中,模型的保存和加载主要有两种方法,一种是保存/加载整个模型,另一种是只保存/加载模型参数。
1. 保存整个模型这种方法保存和加载模型都是采用最简单的语法。这种方法将是采用Python的pickle模块来保存整个模型,它的缺点就是序列化后的数据是属于特定的类和指定的字典结构,原因就是pickle并没有保存模型类别,而是保存一个包含该类的文件路径,因此,当在其他项目或者在 refactors 后采用都可能出现错误。
示例方法:
1234 ...
论文阅读-Live Trojan Attacks on Deep Neural Networks
一、总体框架对象:深度学习模型目的:通过修改深度学习模型在内存中对应的数据逻辑、参数来在特定的输入集上实现预定义的恶意行为。优化:减少patches的大小和数量,以此减少网络通信和内存覆盖的数量,使木马能够更有效地进行隐藏。实现:在Windows和Linux上完成了对TensorFlow模型参数的实时攻击。先进性:可以绕过STRIP的实时木马检测技术。
二、研究背景已有的研究背景
本文提出的方法思想利用经典的软件漏洞,通过操纵其在内存中的数据实现对机器学习系统的实时攻击(白盒)。
前提攻击者已经通过社会工程学或0day漏洞等技术在生产系统上获得了特权访问权限,能够在其上运行指定的代码。
理论机器学习系统的输出由其经过训练的参数决定,这些参数提供对输入的转换以产生输出。通过在运行时更改这些网络参数,网络的行为将相应地发生变化,从而使攻击者能够控制系统——无需显式修改控制流或对系统进行持久更改。
优势深度神经网络依赖无法解释的权重和偏差参数(黑盒特性),可以更好地隐藏攻击手段。
对比上述已有的研究表明,神经网络的后门攻击是可行的,但不能进行实时攻击,因为其需要修改大量的模型参数,这在实时条 ...