Symbolic Execution:从思维上理解符号执行 符号执行作为软件分析、漏洞发掘领域经常出现的技术,国内已经有不少文章总结讨论。但新手直接翻阅学习这些总结性质的文章时碰到的诸如“符号路径约束”、“约束求解”、“执行状态”等专有名词会难以理解,思维逻辑与理论概念不易同轨。本文从国外的一些热门教程入手, 将符号执行从思维上捋一遍, 诠才末学,仅做抛砖引玉之用。
1. 引子:1.0 一个样例 从一段经典的代码入手,解释符号执行的核心思路。
分析目标:对于任意可能的输入组合(a,b),找到使得断言assert语句失败的所有输入。
(论文复现)How Machine Learning Is Solving the Binary Function Similarity Problem
【论文复现】How Machine Learning Is Solving the Binary Function Similarity Problem一、模糊哈希(Fuzzy Hashing)1. Bytes fuzzy hashing——Catalog1
出处:
1. xorpd | FCatalog
2. binary_function_similarity/Models/Catalog1 at main · Cisco-Talos/binary_function_similarity (github.com)
“FCatalog allows you to keep a database of all your named functions, and find similarities from this database efficiently.”
前置知识:
binary blob:一串bytes;
S(a):字节串a的四字截取集合,例如:
\mathbf{S(a)}= \{123x,23xy,3xy1\},a=123xy1 \\
\mathbf{S(b)}= \{1111\},b=111111111 \\
Jaccard Similarity:计算两个集合相似性:
J(S(a),S(b))=\frac {S(a)\cap S(b)}{S(a)\cup S(b)}
minhash:文本相似度比较算法,用于快速估算两个集合的相似度。
Catalog1算法利用minhash,使用哈希近似替代两个S集合,以此来估算其Jaccard系数,从而达到高效率地比较两个集合。
Comparing One with Many — Solving Binary2source Function Matching Under Function Inlining
【论文阅读】Comparing One with Many — Solving Binary2source Function Matching Under Function Inlining一、ABSTRACT为了在函数内联下施行b2s函数匹配,我们提出了一个叫O2NMatcher的方法,通过其生成的Source function Sets (SFSs)作为匹配结果。
我们首先提出了一个模型EOOCJ48来预测内联的位置, 为了训练这个模型,我们利用可编译的开源软件(Open Source Software)生成一个带有标记的调用点(内联或不内联)的数据集,从调用点中提取几个特征,并通过检查不同编译之间的内联相关性来设计一个基于编译器-选项的多标签分类器。
然后,我们使用这个模型来预测不可编译的开源项目,得到带标记的函数调用图。接下来,我们将SFSs的构建视为一个子树生成问题,并设计根节点选择和边缘扩展规则来自动构建SFSs。最后,这些SFSs将被添加到源函数的语料库中,并与有内联的二进制函数进行比较。
我们对OSNMatcher进行了一些实验测试,结果表明我们的方法超过所有state-of-the-art,将结果提升了6%。
How Machine Learning Is Solving the Binary Function Similarity Problem
【论文阅读】How Machine Learning Is Solving the Binary Function Similarity Problem
时间:2022.8
作者:Andrea Marcelli, Mariano Graziano , Xabier Ugarte-Pedrero, Yanick Fratantonio , Mohamad Mansouri and Davide Balzarotti(思科,欧洲电信学院)
会议:usenix 2022
ABSTRACT人们会期望到现在为止,对于二进制相似性问题的研究,其有可能回答一些研究问题,这些问题超出了论文中提出的非常具体的技术,可以推广到整个研究领域。不幸的是,这个目标受到许多挑战,从可重复性问题到研究结果的不透明性,阻碍了研究有意义和有效地进展。
在本文,我们开始着手于对state-of-the-art做这个领域的第一个测试性研究。
首先,我们系统化了现存的研究成果;
我们选定了一些相关方法,这些方法代表了三个不同研究社区最近提出的各种解决方案;
针对现有的方案,我们重构了方法并构建了新的数据集,以便实现更为公平的对比效果。
强化学习之ConnectX四子棋游戏
Connect X
Time: 2022.11.14
Author: Shaw
Connect X | Kaggle
ConnectX Getting Started | Kaggle
一、任务简介:
任务:强化学习任务,类似五子棋的规则(但每一步只能下某一列的最底端的空位),每人一步,先于对手横竖或斜角连成4个即可获胜。
Facial Keypoints Detection
Facial Keypoints Detection
Time: 2022.11.11
Author: Shaw
Facial Keypoints Detection | Kaggle
一、任务简介:
任务:正确标注所给图片的人脸关键位置;
IFAttn-Binary code similarity analysis based on interpretable features with attention
【论文阅读】IFAttn-Binary code similarity analysis based on interpretable features with attention
时间:2021
作者:Shuai Jianga , Cai Fua , Yekui Qian(华科)
期刊:Computers & Security(中科院三区)
1.ABSTRACT二进制代码相似性分析(Binary code similarity analysis ,BCSA)是一项有意义的软件安全分析技术,包括漏洞挖掘、代码克隆检测和恶意代码检测。
尽管近年来出现了很多基于神经网络的很多BCSA研究成果,仍有一些问题未被解决。首先,大多数方法更聚焦于function pair similarity detection task (FPSDT),而忽略了function search task (FST),后者对漏洞挖掘更为重要。还有,现有方法为了提高FPSDT的准确率使用了一些无法解释的神经网络;最后,大多数现有方法无法抵抗BCSA中的交叉优化和交叉混淆。
为了解决这些问题,我们首次提出了一个结合了可解释特征工程和可学习注意力机制的适应性BCSA架构。我们设计了一个具有适应性的、富有可解释性特征的模型。测试结果表明对于FPSDT和FST的效果比state-of-the-art效果更好。
另外,我们还发现注意机制在功能语义表达方面具有突出的优势。
评估表明我们的方法可以显著提升FST在cross-architecture, cross-optimization, cross-obfuscation and cross-compiler binaries上的表现。
Function-level obfuscation detection method based on Graph Convolutional Networks
【论文阅读】Function-level obfuscation detection method based on Graph Convolutional Networks
时间:2021
作者:Shuai Jiang , Yao Hong, Cai Fu(华科)
期刊:Journal of Information Security and Applications(中科院三区)
1.ABSTRACT 在恶意样本检测中代码混淆检测技术是一个重要的辅助手段,对于安全从业者来说,其可以在人工逆向分析前来实施自动化混淆检测,这有助于逆向工程师更具体地进行逆向分析。
目前存在的混淆检测方法主要作用于Android应用,并基于传统的机器学习方法。其检测颗粒度很差,总体效果不佳。为了解决这些问题,在本篇文章,我们提出了一个应用于X86汇编和Android应用的、function level的、基于GCN的混淆检测方法。
1. 首先,我们的方法是function-level的。我们提取每个函数的CFG作为其特征(包括邻接矩阵和基本代码块的特征矩阵);
2. 我们构建一个GCN-LSTM神经网络作为混淆检测模型;
3. 最后,对于function-level的检测我们的方法准确率是94.7575%(X86汇编)和98.9457%(安卓应用),比baseline方法好。实验证明我们的方法不论是在function-levle还是APK-level上的检测准确率都好于baseline。
Planning at Decision Time(决策时规划)
参考资料:
Reinforcement Learining. Second Edition. Sutton.Page 180-193
白板推导—强化学习.shuhuai008.Bilibili
Easy RL.Qi Wang.Yang Yiyuan.Ji Jiang
Planning at Decision Time(决策时规划)规划(Planning)至少有两种使用方式。
①一种在DP和Dyna中已经讨论过,通过从一个model(不论是sample model或是distribution model )中获取模拟经验(simulated experience)的基础上来使用规划来逐渐提升一个policy或一个value function。
然后,选择动作是一个比较当前状态的动作value问题,该value是在之前优化的表格中获取的;或者通过使用书中Part 2中考虑的近似方法来评估数学表达式。
对于任意状态S~t~,在为其选择一个动作之前,其整个表格条目(例如Dyna-Q中的Q表)已经通过规划来优化过了。使用这种方式,规划并不是仅仅聚焦于当前的状态,我们称这种规划为background planning,后台规划。
②另一种使用规划的方法就是在遇到每个新的状态S~t~后再开始一个完整的规划过程,其为每个当前状态选择一个动作A~t~,到下一个状态S~t+1~就选择一个动作A~t+1~,以此类推。
一个使用这种规划最简单的例子:当state values可用时,通过比较当前model对执行每个动作后到达的新状态的value来选择一个动作。
当然,更普遍的说,这种规划的用法可以比仅仅往后看一步(上面的例子就是)看得更深,评估动作的选择导致许多不同预测状态和奖励轨迹。
不同于第一种用法,在这里,规划聚焦于一个特定的状态,我们称之为decision-time planning,决策时规划。
这两种规划的方式可以用一种自然而有趣的方式结合在一起,不过一般二者被分开研究。
如同background planning,我们仍可以将决策时规划看作一个从模拟经验中更新values,最后到更新policy的过程。只是基于当前状态所生成的values和policy会在做完动作选择决策后被丢弃,在很多应用场景中这么做并不算一个很大的损失,因为有非常多的状态存在,且不太可能在短时间内回到同一个状态,故重复计算导致的资源浪费会很少。
一般来说,人们可能希望将两者结合起来:规划当前状态,并将规划的结果存储起来,以便在以后回到相同的状态时能走得更远。
Decision-time Planning,(决策时规划)在不需要快速反应的应用场景中作用最为显著。
决策时规划的常用算法有Heuristic Search(启发式搜索)、Rollout Algorithms(Rollout 算法)和Monte Carlo Tree Search(MCTS 蒙特卡洛树搜索)三种。
A Survey of Defense Mechanisms Against Distributed Denial of Service (DDoS) Flooding Attacks
A Survey of Defense Mechanisms Against Distributed Denial of Service (DDoS) Flooding Attacks
时间:2013
作者:Saman Taghavi Zargar,James Joshi, David Tipper
期刊:IEEE COMMUNICATIONS SURVEYS & TUTORIALS(中科院一区)
ABSTRACT DDoS攻击是安全专业人员最关心的问题之一,其通常是为了扰乱合法用户对服务的访问而进行的显式尝试。攻击者通常通过攻击漏洞来获取到一大批电脑,以此来组建一个网络攻击军队(也就是僵尸网络),一旦组建了攻击部队,攻击者就可以对一个或多个目标发起协调一致、大规模的攻击。开发针对已识别和预期的DDoS泛洪攻击的综合防御机制,是入侵检测和预防研究界所期望的目标。然而,这种机制的发展需要对问题和迄今为止在预防、检测和应对各种DDoS洪泛攻击方面所采用的技术有一个全面的了解。
在本文,我们对DDoS洪泛攻击进行分类,并根据它们在何时何地预防、检测和应对DDoS洪泛攻击对现有的对策进行分类。
此外,我们强调需要一种全面的分布式协同防御方法。我们的主要目的是激发研究人员开发出创造性的、有效的、高效的、综合的预防、检测和响应机制来解决实际攻击前、中和后的DDoS泛洪问题。