
系统安全与恶意学习
文章平均质量分 94
本专栏主要介绍系统安全、adversarial learning与逆向工程中常用的各种工具、方法与思路。涉及的知识点包括编译器构建、代码混淆、符号执行、恶意学习及其他系统安全知识。介绍到的工具包括但不限于:LLVM、angr、Ghidra
白马负金羁
数据挖掘 | 统计分析 | 图像处理 | 程序设计
展开
-
深度学习的黑魔法防御术:恶意样本(Adversarial Example) 的防御策略综述
随着深度学习研究的深入,相关应用已经在许多领域展现出惊人的表现。一方面,深度神经网络(DNN)的强大能力着实吸引着学术界和产业界的眼球。另外一方面,深度学习的安全问题也开始引起广泛地关注。对于一个给定的深度神经网络,经过训练,它可能在具体任务上的表现出甚至超过人类。但是在原本能够被正确分类的图像中引入稍许(人眼不易察觉的)扰动,神经网络就可能被误导,从而导致错误的结果。经过精心调整的能够误导神经网络的输入就被称为是恶意样本(Adversarial Example)原创 2020-12-30 16:47:08 · 6371 阅读 · 1 评论 -
Ghidra逆向工具之旅与二进制代码分析【4】
Ghidra是一种开源的逆向工具,它是由NSA的研究理事会为其网络安全任务开发的软件逆向工程(SRE)框架,它有助于分析恶意代码和病毒等恶意软件,并可以让网络安全专业人员更好地了解其网络和系统中的潜在漏洞。把Ghidra和Python脚本结合起来,会大大提高工作效率,从而发挥更加强大的功用原创 2024-09-04 08:41:38 · 357 阅读 · 0 评论 -
异常检测(Anomaly Detection)——基于MATLAB的实例(1)
异常检测(anomaly detection)是数据挖掘中的一类常见任务,它是指对“与预期模式或数据集中的项目、事件或观测值不相匹配的”数据点进行识别的过程。因此,它也被称作异常值检测(outlierdetection)。通常,这些异常值的检测会在不同的应用场景中被转变成银行欺诈、结构缺陷、网络攻击等类型的问题原创 2024-03-09 12:15:05 · 804 阅读 · 3 评论 -
计算机英文单词课堂——Shebang, Left of Boom, and Right of Boom
如果脚本文件中包含Shebang,类Unix操作系统的程序载入器会分析Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有Shebang的文件路径作为该解释器的参数原创 2024-01-26 11:44:21 · 808 阅读 · 2 评论 -
软件漏洞发现:基于Transformer分析补丁中的Commit Message
谷歌的研究人员在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取代了在 NLP 任务中常用的 RNN 网络结构。而且实验也证明Transformer在效果上已经完败传统的 RNN 网络。在当下流行的很多LLM中,Transformer也是必不可少的基石。本文主要演示Transformer在软件安全领域的一个应用。我们将通过分析软件补丁中的Commit Message部分,来挖掘出那些未上报的隐秘软件漏洞原创 2024-01-22 08:09:48 · 551 阅读 · 0 评论 -
在Linux、Ubuntu中跨平台编译ARM(AARCH64)平台的binutils
Binutils 是GNU提供的一组二进制工具的集合。通常,在已经安装了Linux操作系统的个人电脑上,系统就已经自带了这个工具集。但在进行嵌入式开发的时候,可能会用到支持ARM64平台的Binutils,这时就需要用到交叉编译原创 2023-07-24 11:08:53 · 1984 阅读 · 0 评论 -
Ghidra逆向工具之旅与二进制代码分析【3】
逆向工程工具Ghidra由NSA的研究理事会为其网络安全任务开发的软件逆向工程(SRE)框架,它有助于分析恶意代码和病毒等恶意软件,并可以让网络安全专业人员更好地了解其网络和系统中的潜在漏洞原创 2022-12-16 11:13:17 · 824 阅读 · 0 评论 -
Linux中使用交叉编译、二进制分析工具链
交叉编译,就是要生成在其它平台上运行的目标代码。例如个人电脑上的CPU都基于X86架构。但很多手机或其它嵌入式设备的处理器则可能是基于ARM架构的。若要在个人电脑上开发嵌入式应用,就要进行交叉编译。本文主要演示在Linux环境下使用交叉编译及二进制分析工具链的基本方法原创 2022-12-16 06:51:41 · 1118 阅读 · 0 评论 -
GNU调试、反编译、二进制分析工具链
GCC是GNU中用于编译的工具,其全称是 GNU Compiler Collection。将C/C++源代码用GCC/G++编译成可执行的二进制文件后,后续还有很多有用的工具可以支持调试、反编译、及二进制代码分析的工作,例如知名的gdb。本文主要介绍GNU工具链中跟调试、反编译、二进制分析相关的应用。例如addr2line和objdump。熟悉和了解这些工具对于逆向工程、系统安全、软件分析等非常有帮助原创 2022-11-19 13:02:23 · 972 阅读 · 0 评论 -
Ghidra逆向工具之旅与二进制代码分析【2】
Ghidra是一种开源的逆向工具,它是由NSA的研究理事会为其网络安全任务开发的软件逆向工程(SRE)框架,它有助于分析恶意代码和病毒等恶意软件,并可以让网络安全专业人员更好地了解其网络和系统中的潜在漏洞。把Ghidra和Python脚本结合起来,会大大提高执行效率,从而发挥更加强大的功用原创 2022-10-30 11:30:12 · 1735 阅读 · 0 评论 -
Ghidra逆向工具之旅与二进制代码分析【1】
本系列文章系统地介绍众多逆向工具中的一种 Ghidra,它是由NSA的研究理事会为其网络安全任务开发的软件逆向工程(SRE)框架,它有助于分析恶意代码和病毒等恶意软件,并可以让网络安全专业人员更好地了解其网络和系统中的潜在漏洞。Ghidra跟IDA Pro用起来很像,但Ghidra是免费的,而且是开源的原创 2022-10-29 13:03:25 · 1166 阅读 · 0 评论 -
软件漏洞检测(Bug Finding):Clang Static Analyzer(进阶与实战)
The Clang Static Analyzeris a source code analysis tool that finds bugs in C, C++, and Objective-C programs. CSA是Clang项目的一部分,而且完全开源。注意这里的静态分析,表示并不需要运行程序,CSA is built on Clang based on symbolic execution technique原创 2021-09-20 14:03:32 · 1090 阅读 · 0 评论 -
在Ubuntu中编译LLVM、clang(以便支持z3的使用)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。其发端源于2000年伊利诺伊大学厄巴纳-香槟分校(UIUC)的Vikram Adve教授与其第一个博士生Chris Lattner的研究。LLVM的命名最早源自于底层虚拟机(Low Level Virtual Machine)的首字母缩写,但现在这个项目的范围早已大大超越其最初的意思。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合原创 2021-09-20 07:11:37 · 984 阅读 · 0 评论 -
在Ubuntu上编译z3:报错与处理
Z3 is a high performance SMT solver developed by Microsoft Research. 通过提供API的方式,它支持多种计算机语言。LLVM中的Clang Static Analyzer(CSA)是在Clang编译器基础上构建的软件源代码分析工具,它可以被用来进行bug finding。CSA中默认使用的constraint solver具有一定的局限性,但可以选择Z3作为CSA中的SMT solver,这样可以扩展CSA的代码分析能力原创 2021-09-20 04:31:20 · 757 阅读 · 0 评论 -
在Ubuntu中安装CodeChecker、Node、NVM:过程与排雷
CodeChecker is a static analysis infrastructure built on the LLVM/Clang Static Analyzer toolchain。本文介绍在Ubuntu上安装它的基本流程,尤其解决过程中可能会遇到的一些问题和麻烦。本文还介绍了如何安装Node.js、npm、NVM等问题。包括一些错误提示的处理方式,例如npm :Depends: node-gyp (>= 0.10.9) but it is not going to be install原创 2021-09-16 07:15:41 · 678 阅读 · 0 评论 -
SAT、SMT、Z3和符号执行(2)
符号执行(symbolic execution)是一种计算机科学领域的程序分析技术,通过采用抽象的符号代替精确值作为程序输入变量,得出每个路径抽象的输出结果。 这一技术在软件测试中有很重要的应用,能够有效地发现程序中的漏洞。本文将通过几个例子来演示一下symbolic execution(或者SMT solver)在软件分析领域的应用原创 2021-07-24 04:48:15 · 1225 阅读 · 0 评论 -
逆向工具angr的快捷教程(3):CTF解题实例
angr是一个基于Python开发的二进制程序分析(Binary analysis)框架,可以用于开展动态符号执行(Symbolic Execution)和多种静态分析。事实上,Symbolic Execution也正是angr的一个代表性功能原创 2021-06-30 09:54:41 · 981 阅读 · 0 评论 -
函数调用栈(Call Stack)
虚拟内存空间中的函数调栈主要用于保存函数的参数,返回值,返回地址,本地变量等。一切的函数调用都要将不同的数据、地址压入或者弹出栈。因此,为了更好地理解函数的调用,我们需要来考察一下函数调栈是怎么工作的原创 2021-06-30 06:35:15 · 665 阅读 · 0 评论 -
SAT、SMT、Z3和符号执行(1)
符号执行(symbolic execution)是一种计算机科学领域的程序分析技术,通过采用抽象的符号代替精确值作为程序输入变量,得出每个路径抽象的输出结果。 这一技术在硬件、底层程序测试中有一定的应用,能够有效的发现程序中的漏洞原创 2021-06-21 06:18:34 · 1609 阅读 · 0 评论 -
Carlini-Wagner的L0攻击(Adversarial Examples)
Nicholas Carlini与其导师David Wagner 在2017年IEEE Symposium on Security & Privacy上发表的论文中提出了后来以他们名字命名的AE生成算法——Carlini-Wagner攻击(或简称为CW攻击),论文也荣获当年度的会议最佳学生论文奖。论文中,作者提出了L0、L2、L_inf三种攻击方式,本文主要以ImageNet数据集为例演示其中L0攻击的效果原创 2021-02-23 13:39:26 · 1738 阅读 · 0 评论 -
逆向工具angr的快捷教程(2):符号执行实战
Angr是一个基于Python开发的二进制程序分析(Binary analysis)框架,可以用于开展动态符号执行(Symbolic Execution)和多种静态分析。本文将通过一个实例来讨论如何利用angr对程序进行基于Symbolic Execution的分析原创 2020-10-14 18:36:04 · 3138 阅读 · 0 评论 -
Ghidra逆向工具入门与应用
逆向工程中涉及到多种多样的工具(例如IDA Pro,Angr等),Ghidra是由美国国家安全局(NSA,National Security Agency)的研究理事会为 NSA 的网络安全任务开发的软件逆向工程(SRE)框架,它有助于分析恶意代码和病毒等恶意软件,并可以让网络安全专业人员更好地了解其网络和系统中的潜在漏洞原创 2020-09-20 15:07:32 · 11582 阅读 · 0 评论 -
代码共享与Linux动态链接:探究PLT、GOT与ld-linux.so.2
Shared Library是现代操作系统中不可或缺的一部分,但其背后的实现机制却并不容易理解。本文将就此话题展开讨论,并试图对程序的动态链接机制一探究竟。很多现代应用都是通过动态编译链接的,当一个需要动态链接的应用被操作系统加载时,系统必须要定位,然后加载它所需要的所有动态库文件。 在Linux环境下,这项工作是由ld-linux.so.2来负责完成的,为了支持动态链接机制,还需要深入理解一下GOT和PLT原创 2020-07-08 13:09:53 · 4073 阅读 · 0 评论 -
逆向工具angr的快捷教程(1):安装、排雷、CFG范例
Angr是一个基于Python开发的二进制程序分析(Binary analysis)框架,可以用于开展动态符号执行(Symbolic Execution)和多种静态分析。作为系列文章的第一篇,本文将介绍安装angr的基本步骤,尤其是其中可能遇到的各种坑。然后,我们会利用angr对程序进行静态分析,生成相应的CFG,并以此演示angr的基本用法原创 2020-05-26 15:22:36 · 12994 阅读 · 141 评论 -
在LLVM中编写Backend Pass的详细教程(2)
本质上,LLVM毕竟是围绕编译器展开的一个工具集,或者说编译器本身就是它的核心。因此,在编译原理课程上学到的很多知识在了解或研究LLVM时都能派上用场。在这篇文章中,我们就来演示如何对基本块(Basic Block)的边际加标注。我们还会调用LLVM中的函数来对每个基本块产生一个描述名原创 2020-05-26 15:22:12 · 6470 阅读 · 28 评论 -
Linux系统监控与分析工具Sysdig:安装与使用
Sysdig是一个超级有用的系统工具,运行在Linux环境上,比 strace、tcpdump、lsof 加起来还强大。Sysdig可用来捕获系统状态信息,保存数据并进行过滤和分析。本文主要介绍在Linux上安装Sysdig的基本步骤,然后以监控某个特定程序的系统调用(system call)为例来简单演示一下它的使用原创 2020-05-19 10:16:44 · 7057 阅读 · 3 评论 -
深度学习中的Adversarial Examples(基于Python实现)
随着深度学习研究的深入,相关应用已经在许多领域展现出惊人的表现。一方面,深度学习的强大能力着实吸引着学术界和产业界的眼球。另外一方面,深度学习的安全问题也开始引起广泛地关注。对于一个给定的深度神经网络,经过训练,它可能在具体任务上(例如图像识别)表现出较高的准确率。但是在原本能够被正确分类的图像中引入稍许(人眼不易察觉)扰动,神经网络模型就可能被误导,从而得出错误的分类结果。例如,下图中最左侧的熊...原创 2019-08-21 08:41:42 · 3900 阅读 · 1 评论 -
深度学习的恶意样本实践(Adversarial Example)
〇、深度学习的恶意样本(Adversarial Example)随着深度学习研究的深入,相关应用已经在许多领域展现出惊人的表现。一方面,深度学习的强大能力着实吸引着学术界和产业界的眼球。另外一方面,深度学习的安全问题也开始引起广泛地关注。对于一个给定的深度神经网络,经过训练,它可能在具体任务上(例如图像识别)表现出较高的准确率。但是在原本能够被正确分类的图像中引入稍许(人眼不易察觉)扰动,神经...原创 2019-05-15 09:40:31 · 11843 阅读 · 4 评论 -
LLVM编写Pass对程序进行obfuscate
对程序进行obfuscate在软件安全领域有诸多应用,其直接的目的就是对那些试图进行逆向工程的努力带来一些困扰。本文将介绍如何通过在LLVM中加入相关Pass的方法实现对程序的扰乱原创 2018-06-03 15:54:30 · 3785 阅读 · 1 评论 -
在LLVM中编写Backend Pass的详细教程(1)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文将通过一个具体的例子来介绍如何编写BackEnd Pass原创 2017-12-31 16:35:19 · 5421 阅读 · 4 评论 -
在LLVM中编写pass的详细教程(4)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文将介绍如何通过编写Pass,从而实现基于Use-Def chain以及Def-Use chain的分析原创 2017-12-18 04:11:54 · 4472 阅读 · 1 评论 -
在LLVM中编写pass的详细教程(2)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文将介绍如何通过编写Pass,从而在一个函数中遍历Basic Blocks的方法原创 2017-12-17 17:35:45 · 4517 阅读 · 1 评论 -
在Xcode中导入并使用LLVM
LLVM是一个非常庞大的项目。有时,为了构建自己的编译器或者编写pass,你都可能需要编辑LLVM项目的源码。但是如果只是在命令行+文本编辑器的层面上处理这些任务,工作效率都会大打折扣。要想更加高效的使用或学习LLVM,最好还是将其导入一个IDE。而在mac OS 上,Xcode无疑是最佳选择原创 2017-12-17 05:56:56 · 5115 阅读 · 0 评论 -
在LLVM中编写pass的详细教程(3)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文将介绍如何通过编写Pass,从而实现对程序中的操作码(Operation Code, OPCode)进行计数的方法原创 2017-12-17 05:20:46 · 4073 阅读 · 0 评论 -
在LLVM中编写pass的详细教程(1)
LLVM的Pass框架是LLVM系统的一个很重要的部分。LLVM的优化和转换工作就是由很多个Pass来一起完成的。类似流水线操作一样,每个pass完成特定的优化工作。 要想真正发挥LLVM的威力,掌握pass是不可或缺的一环。LLVM中Pass架构的可重用性和可控制性都非常好,这允许我们嵌入自己开发的pass或者关闭一些默认提供的pass原创 2017-11-25 15:49:40 · 14886 阅读 · 10 评论 -
在Mac OS上Build、配置并使用LLVM
一、引言LLVM这个名字最初的意思是底层虚拟机(Low Level Virtual Machine)的缩写,它是由美国伊利诺伊大学开发的一个开源项目。现在LLVM的意义已经远远超越它最初的意思,所以现在LLVM就是整个项目的名称。具体来说,LLVM是以C++编写而成的编译器(compiler)框架系统,或者说是一个模块化和可重复使用的编译器和工具技术的集合,其核心库提供了与...原创 2017-11-22 06:18:43 · 13219 阅读 · 0 评论 -
利用ld.gold将程序编译成llvm中的Bitcode
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文解释利用ld.gold将程序编译成llvm中的Bitcode的基本方法原创 2017-07-20 13:37:26 · 4162 阅读 · 6 评论 -
软件漏洞检测(Bug Finding):使用LLVM中的Clang Static Analyzer
LLVM这个名字最初的意思是底层虚拟机(Low Level Virtual Machine)的缩写,它是由UIUC开发的一个开源项目。现在LLVM的意义已经远远超越它最初的意思,所以现在LLVM就是整个项目的名称。Clang是构建在LLVM之上的编译器,而Clang Static Analyzer又是构建在Clang之上的基于Symbolic execution的代码分析工具原创 2015-11-04 19:19:59 · 10509 阅读 · 1 评论 -
深度学习的恶意样本(Adversarial Example)实践之FoolBox的使用
恶意样本(Adversarial Example)是当前深度神经网络所面临的一个重要安全问题,以图像分类为例,向图像中引入人眼不可见的微小扰动之后,神经网络为基础的图像分类器(CNN、VGG、ResNet等)的准确率将大幅下降。本文是深度学习恶意样本(Adversarial Example)实战系列文章的第三篇。我们将介绍一个比较常见的工具箱FoolBox,在Python中使用该工具箱可以非常方便地生成目前主流的各种AE攻击原创 2014-11-10 21:35:31 · 7172 阅读 · 38 评论