
系统安全与恶意学习
本专栏主要介绍系统安全、恶意机器学习与逆向工程中常用的各种工具、方法与思路。涉及的知识点包括编译器构建、代码混淆、符号执行、恶意学习及其他系统安全知识。介绍到的工具包括但不限于:LLVM、angr、Ghidra
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅博主任意付费专栏,享有该博主全部专栏一年阅读权限。
本专栏为虚拟产品,一经付款概不退款,敬请谅解。
白马负金羁
数据挖掘 | 统计分析 | 图像处理 | 程序设计
-
原创 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:2637
0
-
原创 深度学习的黑魔法防御术:恶意样本(Adversarial Example) 的防御策略综述
随着深度学习研究的深入,相关应用已经在许多领域展现出惊人的表现。一方面,深度神经网络(DNN)的强大能力着实吸引着学术界和产业界的眼球。另外一方面,深度学习的安全问题也开始引起广泛地关注。对于一个给定的深度神经网络,经过训练,它可能在具体任务上的表现出甚至超过人类。但是在原本能够被正确分类的图像中引入稍许(人眼不易察觉的)扰动,神经网络就可能被误导,从而导致错误的结果。经过精心调整的能够误导神经网络的输入就被称为是恶意样本(Adversarial Example)2020-12-30 16:47:082734
1
-
原创 深度学习的恶意样本实践(Adversarial Example)
〇、深度学习的恶意样本(Adversarial Example)随着深度学习研究的深入,相关应用已经在许多领域展现出惊人的表现。一方面,深度学习的强大能力着实吸引着学术界和产业界的眼球。另外一方面,深度学习的安全问题也开始引起广泛地关注。对于一个给定的深度神经网络,经过训练,它可能在具体任务上(例如图像识别)表现出较高的准确率。但是在原本能够被正确分类的图像中引入稍许(人眼不易察觉)扰动,神经...2019-05-15 09:40:3110578
4
-
原创 深度学习中的Adversarial Examples(基于Python实现)
随着深度学习研究的深入,相关应用已经在许多领域展现出惊人的表现。一方面,深度学习的强大能力着实吸引着学术界和产业界的眼球。另外一方面,深度学习的安全问题也开始引起广泛地关注。对于一个给定的深度神经网络,经过训练,它可能在具体任务上(例如图像识别)表现出较高的准确率。但是在原本能够被正确分类的图像中引入稍许(人眼不易察觉)扰动,神经网络模型就可能被误导,从而得出错误的分类结果。例如,下图中最左侧的熊...2019-08-21 08:41:422572
1
-
原创 深度学习的恶意样本(Adversarial Example)实践之FoolBox的使用
恶意样本(Adversarial Example)是当前深度神经网络所面临的一个重要安全问题,以图像分类为例,向图像中引入人眼不可见的微小扰动之后,神经网络为基础的图像分类器(CNN、VGG、ResNet等)的准确率将大幅下降。本文是深度学习恶意样本(Adversarial Example)实战系列文章的第三篇。我们将介绍一个比较常见的工具箱FoolBox,在Python中使用该工具箱可以非常方便地生成目前主流的各种AE攻击2014-11-10 21:35:315503
38
-
原创 Ghidra逆向工具入门与应用
逆向工程中涉及到多种多样的工具(例如IDA Pro,Angr等),Ghidra是由美国国家安全局(NSA,National Security Agency)的研究理事会为 NSA 的网络安全任务开发的软件逆向工程(SRE)框架,它有助于分析恶意代码和病毒等恶意软件,并可以让网络安全专业人员更好地了解其网络和系统中的潜在漏洞2020-09-20 15:07:329291
0
-
原创 Linux系统监控与分析工具Sysdig:安装与使用
Sysdig是一个超级有用的系统工具,运行在Linux环境上,比 strace、tcpdump、lsof 加起来还强大。Sysdig可用来捕获系统状态信息,保存数据并进行过滤和分析。本文主要介绍在Linux上安装Sysdig的基本步骤,然后以监控某个特定程序的系统调用(system call)为例来简单演示一下它的使用2020-05-19 10:16:446045
3
-
原创 逆向工具angr的快捷教程(1):安装、排雷、CFG范例
Angr是一个基于Python开发的二进制程序分析(Binary analysis)框架,可以用于开展动态符号执行(Symbolic Execution)和多种静态分析。作为系列文章的第一篇,本文将介绍安装angr的基本步骤,尤其是其中可能遇到的各种坑。然后,我们会利用angr对程序进行静态分析,生成相应的CFG,并以此演示angr的基本用法2020-05-26 15:22:3611028
141
-
原创 逆向工具angr的快捷教程(2):符号执行实战
Angr是一个基于Python开发的二进制程序分析(Binary analysis)框架,可以用于开展动态符号执行(Symbolic Execution)和多种静态分析。本文将通过一个实例来讨论如何利用angr对程序进行基于Symbolic Execution的分析2020-10-14 18:36:042155
0
-
原创 Linux中编写并使用Shared Library
Linux中的shared libraries 文件为共享库,与windows下dll类似,是动态加载的。在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。本文介绍在Linux中用C语言编写动态链接库并在C/C++中调用.so文件的方法2015-04-01 22:52:487897
21
-
原创 代码共享与Linux动态链接:探究PLT、GOT与ld-linux.so.2
Shared Library是现代操作系统中不可或缺的一部分,但其背后的实现机制却并不容易理解。本文将就此话题展开讨论,并试图对程序的动态链接机制一探究竟。很多现代应用都是通过动态编译链接的,当一个需要动态链接的应用被操作系统加载时,系统必须要定位,然后加载它所需要的所有动态库文件。 在Linux环境下,这项工作是由ld-linux.so.2来负责完成的,为了支持动态链接机制,还需要深入理解一下GOT和PLT2020-07-08 13:09:533563
0
-
原创 在Mac OS上Build、配置并使用LLVM
一、引言LLVM这个名字最初的意思是底层虚拟机(Low Level Virtual Machine)的缩写,它是由美国伊利诺伊大学开发的一个开源项目。现在LLVM的意义已经远远超越它最初的意思,所以现在LLVM就是整个项目的名称。具体来说,LLVM是以C++编写而成的编译器(compiler)框架系统,或者说是一个模块化和可重复使用的编译器和工具技术的集合,其核心库提供了与...2017-11-22 06:18:4311117
0
-
原创 在Xcode中导入并使用LLVM
LLVM是一个非常庞大的项目。有时,为了构建自己的编译器或者编写pass,你都可能需要编辑LLVM项目的源码。但是如果只是在命令行+文本编辑器的层面上处理这些任务,工作效率都会大打折扣。要想更加高效的使用或学习LLVM,最好还是将其导入一个IDE。而在mac OS 上,Xcode无疑是最佳选择2017-12-17 05:56:564160
0
-
原创 在LLVM中编写pass的详细教程(1)
LLVM的Pass框架是LLVM系统的一个很重要的部分。LLVM的优化和转换工作就是由很多个Pass来一起完成的。类似流水线操作一样,每个pass完成特定的优化工作。 要想真正发挥LLVM的威力,掌握pass是不可或缺的一环。LLVM中Pass架构的可重用性和可控制性都非常好,这允许我们嵌入自己开发的pass或者关闭一些默认提供的pass2017-11-25 15:49:4011415
8
-
原创 在LLVM中编写pass的详细教程(2)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文将介绍如何通过编写Pass,从而在一个函数中遍历Basic Blocks的方法2017-12-17 17:35:453671
1
-
原创 在LLVM中编写pass的详细教程(3)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文将介绍如何通过编写Pass,从而实现对程序中的操作码(Operation Code, OPCode)进行计数的方法2017-12-17 05:20:463164
0
-
原创 在LLVM中编写pass的详细教程(4)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文将介绍如何通过编写Pass,从而实现基于Use-Def chain以及Def-Use chain的分析2017-12-18 04:11:543359
1
-
原创 在LLVM中编写Backend Pass的详细教程(1)
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文将通过一个具体的例子来介绍如何编写BackEnd Pass2017-12-31 16:35:194409
1
-
原创 在LLVM中编写Backend Pass的详细教程(2)
本质上,LLVM毕竟是围绕编译器展开的一个工具集,或者说编译器本身就是它的核心。因此,在编译原理课程上学到的很多知识在了解或研究LLVM时都能派上用场。在这篇文章中,我们就来演示如何对基本块(Basic Block)的边际加标注。我们还会调用LLVM中的函数来对每个基本块产生一个描述名2020-05-26 15:22:125848
28
-
原创 LLVM编写Pass对程序进行obfuscate
对程序进行obfuscate在软件安全领域有诸多应用,其直接的目的就是对那些试图进行逆向工程的努力带来一些困扰。本文将介绍如何通过在LLVM中加入相关Pass的方法实现对程序的扰乱2018-06-03 15:54:303013
1
-
原创 利用ld.gold将程序编译成llvm中的Bitcode
LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合。本文解释利用ld.gold将程序编译成llvm中的Bitcode的基本方法2017-07-20 13:37:263345
6