精华内容
下载资源
问答
  • 大数据Hadoop生态圈介绍

    万次阅读 多人点赞 2019-07-12 14:22:47
    大数据Hadoop生态圈-组件介绍 Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。 Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈...

    大数据Hadoop生态圈-组件介绍

        Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。

        Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈结构大致如图所示:

       根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。接下来对Hadoop生态圈中出现的相关组件做一个简要介绍。

        1、HDFS(分布式文件系统)

    HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

    client:切分文件,访问HDFS时,首先与NameNode交互,获取目标文件的位置信息,然后与DataNode交互,读写数据

    NameNode:master节点,每个HDFS集群只有一个,管理HDFS的名称空间和数据块映射信息,配置相关副本信息,处理客户端请求。

    DataNode:slave节点,存储实际数据,并汇报状态信息给NameNode,默认一个文件会备份3份在不同的DataNode中,实现高可靠性和容错性。

    Secondary NameNode:辅助NameNode,实现高可靠性,定期合并fsimage和fsedits,推送给NameNode;紧急情况下辅助和恢复NameNode,但其并非NameNode的热备份。

    Hadoop 2为HDFS引入了两个重要的新功能 ——Federation和高可用(HA):

    • Federation允许集群中出现多个NameNode,之间相互独立且不需要互相协调,各自分工,管理自己的区域。 DataNode 被用作通用的数据块存储设备。每个 DataNode 要向集群中所有NameNode 注册,并发送心跳报告,执行所有 namenode的命令。

    • HDFS中的高可用性消除了Hadoop 1中存在的单点故障,其中,NameNode故障将导致集群中断。HDFS的高可用性提供故障转移功能(备用节点从失败的主NameNode接管工作的过程)以实现自动化。

        2、MapReduce(分布式计算框架)

    MapReduce是一种基于磁盘的分布式并行批处理计算模型,用于处理大数据量的计算。其中Map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,Reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。

    Jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给Tasktracker。

    Tacktracker:slave节点,运行 Map task和Reduce task;并与Jobtracker交互,汇报任务状态。

    Map task:解析每条数据记录,传递给用户编写的map()函数并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。

    Reduce task:从Map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的Reduce()函数执行。

        3、Spark(分布式计算框架)

    Spark是一种基于内存的分布式并行计算框架,不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

    Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器

    Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。

    Driver: 运行Application 的main()函数

    Executor:执行器,是为某个Application运行在worker node上的一个进程

    Spark将数据抽象为RDD(弹性分布式数据集),内部提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。

    Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的

    Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。

    Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据,通过短时批处理实现的伪流处理。

    MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。

    GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作

        4、Flink(分布式计算框架)

    Flink是一个基于内存的分布式并行处理框架,类似于Spark,但在部分设计思想有较大出入。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。

    Flink VS Spark

    Spark中,RDD在运行时是表现为Java Object,而Flink主要表现为logical plan。所以在Flink中使用的类Dataframe api是被作为第一优先级来优化的。但是相对来说在spark RDD中就没有了这块的优化了。

    Spark中,对于批处理有RDD,对于流式有DStream,不过内部实际还是RDD抽象;在Flink中,对于批处理有DataSet,对于流式我们有DataStreams,但是是同一个公用的引擎之上两个独立的抽象,并且Spark是伪流处理,而Flink是真流处理。

        5、Yarn/Mesos(分布式资源管理器)

    YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。

    Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。

        6、Zookeeper(分布式协作服务)

    解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

    Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

        7、Sqoop(数据同步工具)

    Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。

    Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。

        8、Hive/Impala(基于Hadoop的数据仓库)

    Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。

    HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。

    Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与Apache Hive不同,Impala不基于MapReduce算法。 它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此执行效率高于Apache Hive。

        9、HBase(分布式列存储数据库)

    HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。

    HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。

    HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

       10、Flume(日志收集工具)

    Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。

    同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。

    Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM。单个Agent由Source、Sink和Channel三大组件构成

     Source:从客户端收集数据,并传递给Channel。

    Channel:缓存区,将Source传输的数据暂时存放。

    Sink:从Channel收集数据,并写入到指定地址。

    Event:日志文件、avro对象等源文件。

     11、Kafka(分布式消息队列)

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。

    生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。KafKa内部氛围很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming。

       12、Oozie(工作流调度器)

    Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。

    Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。

    Oozie使用hPDL(一种XML流程定义语言)来描述这个图。

    展开全文
  • Spark以及生态圈介绍

    2017-08-17 15:06:17
    **Spark以及生态圈介绍** 一、 Spark简介 官方解释: Apache Spark™ is a fast and general engine for large-scale data processing. 打开官网网站解释一下。 二、 Spark关键词 三、 Spark生态系统 • ...

    **

    Spark以及生态圈介绍

    **
    一、 Spark简介
    官方解释: Apache Spark™ is a fast and general engine for large-scale data processing.
    打开官网网站解释一下。
    二、 Spark关键词
    这里写图片描述

    三、 Spark生态系统
    这里写图片描述

    • Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
    • Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
    • Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据
    • MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
    • GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作

    Spark Core:
    提供了有向无环图(DAG)的分布式并行计算框架,并提供Cache机制来支持多次迭代计算或者数据共享,大大减少迭代计算之间读取数据局的开销,这对于需要进行多次迭代的数据挖掘和分析性能有很大提升

    l 在Spark中引入了RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”对它们进行重建,保证了数据的高容错性;

    l 移动计算而非移动数据,RDD Partition可以就近读取分布式文件系统中的数据块到各个节点内存中进行计算

    l 使用多线程池模型来减少task启动开稍

    l 采用容错的、高可伸缩性的akka作为通讯框架
    SparkStreaming:
    SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kdfka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Reduce和Join等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘。
    计算流程:Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark Core,也就是把Spark Streaming的输入数据按照batch size(如1秒)分成一段一段的数据(Discretized Stream),每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset),然后将Spark Streaming中对DStream的Transformation操作变为针对Spark中对RDD的Transformation操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行叠加或者存储到外部设备。下图显示了Spark Streaming的整个流程。

    l容错性:对于流式计算来说,容错性至关重要。首先我们要明确一下Spark中RDD的容错机制。每一个RDD都是一个不可变的分布式可重算的数据集,其记录着确定性的操作继承关系(lineage),所以只要输入数据是可容错的,那么任意一个RDD的分区(Partition)出错或不可用,都是可以利用原始输入数据通过转换操作而重新算出的。

    对于Spark Streaming来说,其RDD的传承关系如下图所示,图中的每一个椭圆形表示一个RDD,椭圆形中的每个圆形代表一个RDD中的一个Partition,图中的每一列的多个RDD表示一个DStream(图中有三个DStream),而每一行最后一个RDD则表示每一个Batch Size所产生的中间结果RDD。我们可以看到图中的每一个RDD都是通过lineage相连接的,由于Spark Streaming输入数据可以来自于磁盘,例如HDFS(多份拷贝)或是来自于网络的数据流(Spark Streaming会将网络输入数据的每一个数据流拷贝两份到其他的机器)都能保证容错性,所以RDD中任意的Partition出错,都可以并行地在其他机器上将缺失的Partition计算出来。这个容错恢复方式比连续计算模型(如Storm)的效率更高。

    l实时性:对于实时性的讨论,会牵涉到流式处理框架的应用场景。Spark Streaming将流式计算分解成多个Spark Job,对于每一段数据的处理都会经过Spark DAG图分解以及Spark的任务集的调度过程。对于目前版本的Spark Streaming而言,其最小的Batch Size的选取在0.5~2秒钟之间(Storm目前最小的延迟是100ms左右),所以Spark Streaming能够满足除对实时性要求非常高(如高频实时交易)之外的所有流式准实时计算场景。

    l扩展性与吞吐量:Spark目前在EC2上已能够线性扩展到100个节点(每个节点4Core),可以以数秒的延迟处理6GB/s的数据量(60M records/s),其吞吐量也比流行的Storm高2~5倍,图4是Berkeley利用WordCount和Grep两个用例所做的测试,在Grep这个测试中,Spark Streaming中的每个节点的吞吐量是670k records/s,而Storm是115k records/s。
    Spark SQL:
    Spark SQL允许开发人员直接处理RDD,同时也可查询例如在 Apache Hive上存在的外部数据。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行外部查询,同时进行更复杂的数据分析。
    MLlib:
    MLlib是Spark实现一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维以及底层优化,该算法可以进行可扩充; MLRuntime基于Spark计算框架,将Spark的分布式计算应用到机器学习领域。

    GraphX:
    GraphX是Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collaborative Filtering)的API,可以认为是GraphLab(C++)和Pregel(C++)在Spark(Scala)上的重写及优化,跟其他分布式图计算框架相比,GraphX最大的贡献是,在Spark之上提供一栈式数据解决方案,可以方便且高效地完成图计算的一整套流水作业。GraphX最先是伯克利AMPLAB的一个分布式图计算框架项目,后来整合到Spark中成为一个核心组件。

    展开全文
  • 开放的企业生态圈

    千次阅读 2013-08-12 09:39:10
    我们在定义企业生态圈之前,先来看看生物圈是个什么概念。生物圈(Biosphere)是指地球上所有生态系的统合整体,是地球的一个外层圈,其范围大约为海平面上下垂直约10公里。它包括地球上有生命存在和由生命过程变化...

    开放的企业生态圈

    我们在定义企业生态圈之前,先来看看生物圈是个什么概念。生物圈(Biosphere)是指地球上所有生态系的统合整体,是地球的一个外层圈,其范围大约为海平面上下垂直约10公里。它包括地球上有生命存在和由生命过程变化和转变的空气、陆地、岩石圈和水。从地质学的广义角度上来看生物圈是结合所有生物以及它们之间的关系的全球性的生态系统,包括生物与岩石圈、水圈和空气的相互作用。生物圈是一个封闭且能自我调控的系统。地球目前是整个宇宙中唯一已知的有生物生存的地方。一般认为生物圈是从35亿年前生命起源后演化而来的。

    研究机构和商业组织从这个概念中引申到研究领域和工业生产生活环境中,从各自形成的概念中,可以得到一个相同的结论。什么是开放的企业生态圈?企业生态圈是从企业上游需求,到下游生产单位产生相应的产品和服务满足上游单元的需求。很多单位也定义为产业链,商圈,目的都是一样,将产业的上下游企业都统一在一个商业模型中,大家都从这个模型中获取各自的经营回报。产业链中的企业通过这种方式获取了快速地发展,但同时也出现这样一个问题:由于产业链中的企业都是处于产业链条中的某一个环节中,各自产生的数据和商业信息也都封闭在自己的小圈子范围内,某一个企业因处在生态圈的一个重要位置,其封闭的发展会制约整个生态圈的平衡。

    大数据时代的来临,原先已经形成的TB(Terabyte,太字节,或百万兆字节),PB(Petabyte千万亿字节拍字节 =1024TB)级的商业数据信息,通过云计算、分布式等计算技术的广泛应用,逐渐从信息的金矿中得到挖掘和开发。在这个过程中,需要越来越多的组织参与其中,分享各自早前形成的信息源和各自形成的数据处理方式。企业只有共同协作、开放、数据资源共享,形成一个统一的开放生态环境,才能动态去平衡内外部因素引发的冲突和资源短缺。将过去简单的链条生产模式不断升级到新的开放平台中来,自己能从这样一个平台中不断获取生产力的营养元素,成长壮大,同时,要不断地将自己的生产成果贡献出来,相互借鉴受益,相互之间形成一个可以依赖、共生的资源平台。所有这一切的前提,必须参与其中的成员,都是开放的,有意愿和责任去克服各自的不足。

     

    展开全文
  • AFL 生态圈

    千次阅读 2019-04-27 20:58:16
    AFL 生态圈 在本文中,我们将讨论的不是经典AFL本身,而是关于为其设计的实用程序及其修改,我们认为,这些实用程序可以显着提高模糊测试的质量。如果你想知道如何提高AFL以及如何更快地找到更多漏洞 - 继续阅读...

    AFL 生态圈

     

    在本文中,我们将讨论的不是经典AFL本身,而是关于为其设计的实用程序及其修改,我们认为,这些实用程序可以显着提高模糊测试的质量。如果你想知道如何提高AFL以及如何更快地找到更多漏洞 - 继续阅读!

    什么是AFL,它有什么用?

    AFL是一种覆盖引导或基于反馈的模糊器。关于这些概念的更多信息可以在一篇很酷的论文“Fuzzing:Art,Science,and Engineering”中找到。让我们总结一下AFL的一般信息:

    它修改可执行文件以了解它如何影响覆盖范围。

    改变输入数据以最大化覆盖范围。

    重复上一步以找到程序崩溃的位置。

    它非常有效,通过实践证明。

    它非常易于使用。

    这是一个图形表示:

    如果你不知道AFL是什么,这里有一个有用的资源列表供你开始:

    该项目的官方页面

    afl-training - AFL的简短介绍。

    afl-demo - 使用AFL模糊C ++程序的简单演示。

    afl-cve - AFL发现的漏洞集合(自2017年以来尚未更新)。

    在这里,您可以阅读AFL在构建过程中添加到程序中的内容。

    关于模糊网络应用程序的一些有用提示。

    在撰写本文的那一刻,AFL的最新版本为2.52b。模糊器正在积极开发中,随着时间的推移,一些侧面开发正在被纳入主AFL分支并变得无关紧要。今天,我们可以列举几个有用的附件工具,这些工具将在下一章中列出。

     

    Rode0day比赛

    还值得一提的是每月一次的Rode0day竞赛 - 在这里,模糊测试人员试图以更少的时候在预制语料库中比对手找到最大数量的错误,无论是否有源代码。就其本质而言,Rode0day是AFL的不同修改和分叉之间的争斗。

     

    一些AFL用户指出,其作者Michal Zalewski显然已经放弃了自上次修改日期至2017年11月5日的项目。这可能与他离开Google并开展一些新项目有关。因此,用户开始为最新的当前版本2.52b 制作新的补丁

    AFL还有不同的变体和衍生物,允许模糊化Python,Go,Rust,OCaml,GCJ Java,内核系统调用,甚至整个虚拟机。

    AFL用于其他编程语言

     

    python-afl - 用于Python。

    afl.rs - 用于在Rust上编写的模糊程序。

    afl-fuzz-js - 用于javascript的afl-fuzz。

    java-afl - 用于Java的AFL模糊测试。

    kelinci - Java的另一个fuzzer(关于该主题的文章)。

    javan-warty-pig - 用于JVM的AFL式模糊器。

    afl-swift - 用于在swift上编写的模糊程序。

    ocamlopt-afl - 用于OCaml。

    sharpfuzz - 基于afl for .net的模糊器。

     

    附件工具

    在本章中,我们收集了AFL的各种脚本和工具,并将它们分为几类:

     

    崩溃处理

    afl-utils - 一组用于自动处理/分析崩溃并减少测试用例数量的实用程序。

    afl-crash-analyzer - AFL的另一个崩溃分析仪。

    fuzzer-utils - 一组用于分析结果的脚本。

    atriage - 一种简单的分类工具。

    afl-kit - 关于Python的afl-cmin。

    AFLize - 一种自动生成适合AFL的debian包构建的工具。

    afl-fid - 一组用于处理输入数据的工具。

     

    处理代码覆盖率

    afl-cov - 提供有关覆盖范围的人性化数据。

    count-afl-calls - 比率评估。脚本计算二进制中的检测块数。

    afl-sancov - 就像afl-cov一样,但是使用了一种 clang sanitizer.。

    covnavi - Cisco Talos Group负责代码和分析的脚本。

    LAF LLVM - 通过类似于AFL的补丁集合,可以修改代码,使模糊器更容易找到分支。

     

    一些用于最小化测试用例的脚本

    afl-pytmin - afl-tmin的包装器,它试图通过使用许多CPU内核来加速最小化测试用例的过程。

    afl-ddmin-mod - 基于ddmin算法的afl-tmin的变化。

    halfempty - 是Tavis Ormandy基于并行化最小化测试用例的快速实用工具。

     

    分布式执行

    disfuzz-afl - 为AFL分发模糊测试。

    AFLDFF - AFL分布式模糊测试框架。

    afl-launch - 用于执行许多AFL实例的工具。

    afl-motherhip - 在AWS云上管理和执行许多同步AFL模糊器。

    afl-in-the-cloud - 另一个在AWS中运行AFL的脚本。

    VU_BSc_project - 使用libFuzzer和AFL对开源库进行模糊测试。

    最近,已经发表了一篇非常好的文章,论文名称为“Scaling AFL to a 256 thread machine”。

     

    部署,管理,监控,报告

    afl-other-arch - 是一组补丁和脚本,用于轻松添加对AFL的各种非x86体系结构的支持。

    afl-trivia - 一些简化AFL管理的小脚本。

    afl-monitor - 用于监控AFL的脚本。

    afl-manager - 用于管理multi-afl的Python上的Web服务器。

    afl-tools - 具有afl-latest,afl-dyninst和Triforce-afl的码头工具的图像。

    afl-remote - 用于远程管理AFL实例的Web服务器。

    AFL修改

    AFL对脆弱性研究人员和模糊本身产生了非常强烈的影响。一段时间后,人们开始根据原始AFL进行修改,这一点都不足为奇。我们来看看它们。在不同的情况下,与原始AFL相比,这些修改中的每一个都有其自身的优缺点。

     

    几乎所有的mod都可以在hub.docker.com找到。

     

    • 提高速度和/或代码覆盖率
      • 算法
      • 环境
        • OS
        • 硬件
    • 没有源代码工作
      • 代码仿真
      • 代码检测
        • 静态的
        • 动态的

    AFL操作的默认模式

    在继续研究AFL的不同修改和分支之前,我们必须讨论两种重要的模式,这些模式在过去也有过修改但最终被合并。他们是Syzygy和Qemu。

     

    Syzygy模式 - 是在instrument.exe中工作的模式

    1

     instrument.exe --mode=afl --input-image=test.exe --output-image=test.instr.exe

     

    Syzygy允许使用AFL静态重写PE32二进制文件,但需要符号和一个额外的开发人员才能识别WinAFL内核。

    Qemu模式 - 它在QEMU下的工作方式可以在 “Internals of AFL fuzzer — QEMU Instrumentation”.看到。使用QEMU的二进制文件的支持被添加到版本1.31b中的上游AFL。AFL QEMU模式使用二进制检测功能添加到qemu tcg(一个微小的代码生成器)二进制转换引擎中。为此,AFL有一个构建脚本qemu,它提取某个版本的qemu(2.10.0)的源代码,将它们放到几个小的补丁上,并为定义的架构构建。然后,创建一个名为afl-qemu-trace的文件,该文件实际上是一个用户模式仿真文件(仅可模拟可执行ELF文件)qemu-。因此,对于qemu支持的许多不同体系结构,可以使用对elf二进制文件的反馈进行模糊测试。此外,您还可以获得所有酷炫的AFL工具,从显示器上获取有关当前会话的信息,以及afl-analyze等高级内容。但是你也得到了qemu的局限性。此外,如果使用硬件SoC特性构建工具链文件(启动二进制文件,qemu不支持),那么一旦使用了特定的指令或特定的MMIO, fuzzing就会中断。

    这是qemu模式的 另一个有趣的分支,其中速度增加了3-4倍,使用TCG代码插桩和兑现。

     

    分支

    AFL 分支的出现首先与经典AFL算法的变化和改进有关。

     

    pe-afl - 对Windows操作系统中没有源代码的PE文件进行模糊测试的修改。对于其操作,模糊器使用IDA Pro分析目标程序,并生成以下静态检测的信息。然后用AFL插桩版本进行模糊测试。

    afl-cygwin - 尝试使用Cygwin将经典AFL移植到Windows。不幸的是,它有很多错误,它很慢,并且已经放弃了开发。

    AFLFast(使用Power Schedules扩展AFL) - 首批AFL分支之一。它增加了启发式功能,允许它在短时间内通过更多路径。

    FairFuzz - AFL的延伸,针对罕见的分支机构。

    AFLGo - 是AFL的扩展,用于获取代码的某些部分而不是完整的程序覆盖。它可用于测试补丁或新添加的代码片段。

    PerfFuzz - AFL的扩展,用于查找可能显着减慢程序速度的测试用例。

    Pythia - 是AFL的扩展,旨在预测找到新路径的难度。

    Angora - 是最新的模糊器之一,用rust写的。它使用新的策略进行变异并增加覆盖范围。

    Neuzz - 结合神经网络进行fuzzing。

    UnTracer-AFL - 将AFl与UnTracer集成以实现有效跟踪。

    Qsym - 为混合模糊测试量身定制的实用复杂执行引擎。从本质上讲,它是一个符号执行引擎(基本组件被实现为intel引脚的插件),它与AFL一起执行混合模糊测试。这是基于反馈的模糊测试演变的一个阶段,需要单独讨论。它的主要优点是可以相对快速地进行执行。这是由于本机执行命令而没有代码,快照和一些启发式的中间表示。它使用旧的Intel引脚(由于libz3和其他DBT之间的支持问题),目前可以使用elf x86和x86_64架构。

    Superion - Greybox模糊器,其显而易见的优点是,除了插桩程序外,它还使用ANTLR语法获取输入数据的规范,然后在此语法的帮助下执行突变。

    AFLSmart - 另一个Graybox模糊器。作为输入,它以Peach模糊器使用的格式获得输入数据的规范。

    有许多研究论文致力于实现AFL被修改的新方法和模糊测试技术。只有白皮书,所以我们甚至没有提到这些。如果你愿意,你可以谷歌他们。例如,最新的一些是CollAFL: Path Sensitive Fuzzing, EnFuzz, «Efficient approach to fuzzing interpreters», ML 用于AFL。

     

    基于Qemu的修改

    TriforceAFL - AFL / QEMU模糊化系统的完全模拟。由nccgroup提供的一个分支。允许在qemu模式下对整个操作系统进行模糊测试。它是通过一个特殊指令(aflCall(0f 24))实现的,它是在QEMU x64 CPU中添加的。不幸的是,它不再受支持; AFL的最后一个版本是2.06b。

    TriforceLinuxSyscallFuzzer - Linux系统调用的模糊测试。

    afl-qai - QEMU增强插桩(qai)的小型演示项目。

     

    基于KLEE的修改

    kleefl - 用于通过符号执行生成测试用例(在大程序上非常慢)。

     

    基于Unicorn 的修改

    afl-unicorn - 允许通过在Unicorn引擎上模拟代码片段进行模糊测试。我们在实践中成功地使用了AFL的这种变体,在SOC上执行的某个RTOS的代码区域,因此我们无法使用QEMU模式。在我们没有源代码的情况下(我们无法构建用于分析解析器的独立二进制文件)和程序不直接获的输入数据(例如加密数据或者像CGC二进制文件的信号样本),然后我们可以逆向并找到所谓的place-function,其中数据的格式能被模糊器方便的进行处理。这是AFL最普遍/通用的修改,即它允许任何模糊测试。它独立于架构,源,输入数据格式和二进制格式(bare-metal的最引人注目的例子 - 只是来自控制器内存的代码片段)。研究人员首先检查这个二进制文件并编写一个模糊器,它在解析器过程的输入端模拟状态。显然,与AFL不同,这需要对二进制进行一定的检查。对于bare-mete固件,如Wi-FI或基带,您需要记住一些缺点:

     

    1. 我们必须本地化控制和的检查。
    2. 请记住,模糊器的状态是保存在内存转储中的内存状态,这可以防止模糊器进入某些路径。
    3. 没有动态内存调用的sanitation ,但它可以手动实现,它将取决于RTOS(必须进行研究)。
    4. 未模拟Intertask RTOS交互,这也可能阻止查找某些路径。

    使用这种修改的例子 “afl-unicorn: Fuzzing Arbitrary Binary Code” 和 afl-unicorn: Part 2 — Fuzzing the ‘Unfuzzable

     

    在我们继续基于动态二进制检测(DBI)框架进行修改之前,让我们不要忘记这些框架的最高速度由DynamoRIO,Dynlnst以及最终的PIN显示。

     

    基于PIN的修改

    aflpin - 采用英特尔PIN工具的AFL。

    afl_pin_mode - 通过英特尔PIN实现的另一种AFL插桩。

    afl-pin - 带PINtool的AFL。

    NaF1 - AFL 模糊器的克隆(基本核心)。

    PinAFL - 这个工具的作者试图将AFL移植到Windows,以便对已编译的二进制文件进行模糊测试。好像是为了好玩而一夜之间完成的; 该项目从未进一步发展。存储库没有源代码,只有已编译的二进制文件和启动指令。我们不知道它基于哪个版本的AFL,它只支持32位应用程序。

    正如您所看到的,有许多不同的修改,但它们在现实生活中并不是非常有用。

     

    基于Dyninst的修改

    afl-dyninst- American Fuzzy Lop + Dyninst == AFL balckbox模糊。这个版本的特点是首先使用Duninst对一个研究过的程序(没有源代码)进行静态检测(静态二进制插桩,静态二进制重写),然后对经典的AFL进行模糊测试,认为程序是用afl-gcc / afl-g ++ / afl-as)因此,它允许在没有源代码的情况下以非常好的生产率工作 - 与本机编译相比,它曾经是0.25倍速。与QEMU相比,它具有显着优势:它允许动态链接库的检测,而QEMU只能检测与库静态链接的基本可执行文件。不幸的是,现在它只与Linux有关。支持Windows,更改Dyninst本身需要,这正在做

    还有另一个分支 ,具有改进的速度和某些功能(AARCH64和PPC架构的支持)。

     

    基于DynamoRIO的修改

    drAFL - AFl + DynamoRIO - 在Linux上没有源代码的模糊测试。

    afl-dr - 另一种基于DynamoRIO的实现,它在Habr上有很好的描述。

    afl-dynamorio - vanhauser-thc的修改。以下是他所说的:«run AFL with DynamoRIO when normal afl-dyninst is crashing the binary and qemu mode -Q is not an option»。它支持ARM和AARCH64。关于生产力:DynamoRIO比Qemu慢大约10倍,比dyninst慢25倍,但比Pintool快10倍。

    WinAFL - 最着名的在Windows上面的AFL分支。(DynamoRIO,也是syzygy模式)。这个mod出现只是时间问题,因为许多人想在Windows上尝试AFL并将其应用于没有源代码的应用程序。目前,这个工具正在积极改进,无论相对过时的AFL代码库(撰写本文时为2.43b),它都有助于发现多个漏洞(CVE-2016-7212,CVE-2017-0073,CVE- 2017-0190,CVE-2017-11816)。Google Zero Project团队和MSRC漏洞与缓解团队的专家正在参与此项目,因此我们希望进一步发展。开发人员使用动态检测(基于DynamoRIO)而不是编译时间检测,这显着减慢了分析软件的执行速度,但是产生的开销(加倍)与二进制模式下的经典AFL相当。他们还解决了快速启动过程的问题,称其为持续模糊测试模式; 他们选择模糊函数(通过文件内部的偏移量或导出表中存在的函数名称)并对其进行检测,以便可以在循环中调用它,从而启动多个输入数据样本而无需重新启动过程。一个文章最近出版,描述了作者如何使用WinAFL在大约50天内发现大约50个漏洞。在发布之前很短暂,英特尔PT模式已被添加到WinAFL; 在这里可以找到detalis 。

     

    高级读者可以注意到除了Frida之外,所有流行的插桩框架都有修改。唯一提到Frida与AFL的使用是在 «Chizpurfle: A Gray-Box Android Fuzzer for Vendor Service Customizations»中找到的。带Frida的AFL版本非常有用,因为Frida支持多种RISC架构。

     

    许多研究也期待由Capstone,Unicorn和Keystone的创建者发布DBI Scopio框架。基于这个框架,作者已经创建了一个模糊器(Darko),据他们说,成功地使用它来模糊嵌入式设备。有关这方面的更多信息,请参阅 «Digging Deep: Finding 0days in Embedded Systems with Code Coverage Guided Fuzzing»

     

    基于处理器硬件功能的修改

    当涉及到处理器硬件功能支持的AFL修改时,首先,它允许模糊内核代码,其次 - 它允许在没有源代码的情况下更快速地对应用程序进行模糊测试。

    当然,谈到处理器硬件功能,我们最感兴趣的是Intel PT (处理器跟踪)。它可从第6代处理器开始(大约自2015年起)。因此,为了能够使用下面列出的模糊器,您需要一个支持Intel PT的处理器。

    WinAFL-IntelPT - 第三方WinAFL修改,使用Intel PT而不是DynamoRIO。

    kAFL - 是一个学术项目,旨在解决内核的独立于操作系统的模糊测试的覆盖引导问题。问题是通过使用管理程序和英特尔PT来解决。有关它的更多信息可以在白皮书[ «kAFL: Hardware-Assisted Feedback Fuzzing for OS Kernels»。

    ptfuzzer- 它采用了Intel Processor Trace硬件部件来收集程序执行的路径信息,改进了原来AFL通过编译插桩方式获取程序执行路径信息的方法。和AFL相比,硬件收集的路径信息更加丰富,同时可以直接对目标程序进行fuzz,无需源码支持。

    结论

    如您所见,AFL修改的领域正在积极发展。不过,还有实验和创意解决方案的空间; 您可以创建一个有用且有趣的新修改。

    感谢您阅读我们,并祝您好运!

     

    原文链接 : https://habr.com/en/company/dsec/blog/449134

    翻译原文转自看雪论坛翻译板块 https://bbs.pediy.com/thread-251051.htm

    展开全文
  • hadoop生态圈的理解

    千次阅读 2019-02-20 09:25:57
    hadoop部分:hadoop生态圈的理解(HDFS,MapReduce,HBASE,zookeeper,hive,sqoop,flume,kafka,yarn,spark) 一、简介     &...
  • Spark1.0.0 生态圈一览

    千次阅读 2014-06-08 13:45:42
    Spark生态圈,也就是BDAS(伯克利数据分析栈),是伯克利APMLab实验室精心打造的,力图在算法(Algorithms)、机器(Machines)、人(People)之间通过大规模集成,来展现大数据应用的一个平台,其核心引擎就是Spark...
  • 目录 1.Spark概述及特点 2.Spark产生背景 3.Spark与Hadoop的对比 4.Spark与Hadoop的协作性 ...Spark定义:spark是基于内存的,分布式的大数据计算引擎。 有以下特点: Speed Run workloads 100x faster....
  • 说说Java生态圈的那些事儿

    千次阅读 2017-05-23 09:39:41
    1.生态圈概述。 2.说说Java,高级Java,Java生态圈的衍生 3. 说说servlet、servlet容器、比较tomcat、jetty、tomcat、jboss; 1. 哪个项目能离开网络,数据库,操作系统来运行?所以生态圈的应用技术主要在这些...
  • HDR视频生态圈追踪

    2019-01-21 20:42:52
    截止目前,HDR视频生态圈已经产生了巨大的变化。本文将更新旧有的HDR生态圈范围,并更清晰地描述当前HDR视频生态圈。本文译自The HDR video ecosystem tracker,原作者为 Yoeri Geutskens. 由于现在的HDR生态圈更为...
  • Hadoop和Spark生态圈了解

    千次阅读 2016-08-13 14:23:27
    作者简介:Andrew C. Oliver是养猫达人,副业是软件顾问。他是Mammoth Data公司(前身是Open Software Integrators)总裁兼创始人,这家大数据...让我们看看这个火爆生态圈的所有主要部分,以及它们各自具有的意义。
  • hadoop生态圈各组件介绍及关系简析

    千次阅读 2019-11-21 16:46:19
    hadoop生态圈中包含很多组件,比如HDFS、Mapreduce、Hive、Hbase等等,这些组件在构建和使用hadoop平台过程中都是必要的吗?哪些是可选的?它们之间有可替代性吗?本文将以整理各组件间关系为出发点,初步走进hadoop...
  • Hadoop生态圈一览

    千次阅读 2015-04-28 16:52:53
    Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速...简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台
  • hadoop生态圈各个组件简介

    万次阅读 多人点赞 2018-05-22 10:51:28
    Hadoop 是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。 Hadoop 的核心是 HDFS 和 Mapreduce,HDFS  还包括 YARN。   1,HDFS(hadoop分布式文件系统) ...Hadoop生态圈主要应用
  • Hadoop生态圈

    2019-05-22 10:17:10
    四、生态圈 Pig: Hadoop上的数据流执行引擎,由Yahoo开源,基于HDFS和MapReduce,使用Pig Latin语言表达数据流,目的在于让MapReduce用起来更简单。 Sqoop: 主要用于在Hadoop和传统数据库进行数据互导。 ...
  • 云原生生态圈划分

    2019-07-08 22:24:19
    云原生计算基金会(CNCF, Cloud Native Computing Foundation)将云原生生态圈划分为五层,包括应用定义与开发层、编排与治理层、运行时层、供应保障层及云设施层。 应用定义与开发层 应用定义与开发层包括数据库...
  • React 生态圈

    千次阅读 2018-04-15 15:24:40
    前言: React现在在前端领域已经不是什么新鲜的名词了,它的出现,使得前后端...先给大家一览本人在学习React生态的总结概图。想要学好这个React生态,涉及到很多知识点,下面结合自己的学习之路做个总结 ...
  • 走进hadoop生态圈

    千次阅读 2018-04-01 09:58:04
    hadoop介绍: 说白了,hadoop就是一个生态圈,它是HDFS 、MapReduce 、Hive和ZooKeeper等组成,一系列的运行就像一条生态链 1)Pig:一个基于Hadoop的大规模数据分析平台,为海量数据的并行计算,提供了一个简单的...
  • 一图看懂Python生态圈图像格式转换

    千次阅读 多人点赞 2019-11-29 17:57:03
    在Python生态圈里,最常用的图像库是PIL——尽管已经被后来的pillow取代,但因为pillow的API几乎完全继承了PIL,所以大家还是约定俗成地称其为PIL。除PIL之外,越来越的程序员习惯使用openCV来处理图像。另外,在GUI...
  • Hadoop生态圈及其组件介绍 本章目标 Hadoop生态圈组件 1.Hadoop生态圈组件 我们在前面已经概要介绍了Hadoop生态圈,我们本节将就Hadoop生态圈的各种组件进行详细介绍,包括各个组件的构成,其他特点,我们将学习...
  • 第一部分:概述 一、什么是数据仓库 1. 操作型系统和分析型系统 2. ETL 3. 数据需求 4. 多维数据模型基础 二、在Hadoop上实现数据仓库 1. 大数据的定义 ...6. 与传统数据仓库架构对应的Hadoop生态圈工具 第二
  • Hadoop生态圈技术概述

    千次阅读 2019-03-23 22:12:52
    本文对hadoop生态圈技术做一个概要的介绍,文章中的前半部分的信息大多来自于网络,这里只是按照自己的学习思路整理了下。包括如下内容: hadoop诞生记 hadoop生态圈 常见组件简介 组件下载 学习路线 一、...
  • Hadoop生态圈各种组件介绍

    千次阅读 2019-05-06 11:56:14
     分布式协作zookeeper,可以理解为一个小型高性能的数据库,为生态圈中与很多组件提供发布订阅的功能,还可以监测节点是否失效(心跳检测),如HBase、Kafka中利用zookeeper存放了主从节点信息;  Kafka, 是...
  • 大数据Hadoop生态圈-组件介绍 Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。 Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈...
  • Spark及其生态圈

    千次阅读 2018-08-11 11:51:13
    生态系统也称为BDAS,力图在算法(Algorithms)、机器(Machines)和人(People)三者之间通过大规模集成来展现大数据应用的一个开源平台。 Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够...
  • 大数据生态圈概要介绍

    千次阅读 2018-07-09 15:03:23
    1. hadoop 生态概况Hadoop是一个由Apache基金会所开发的分布式系统基础架构。...Hadoop的核心是YARN,HDFS和Mapreduce下图是hadoop生态系统,集成spark生态圈。在未来一段时间内,hadoop将于spark共存,hadoop与spark...
  • 大数据Hadoop生态圈 Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。 Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈...
  • OpenStack商业生态圈分析

    千次阅读 2015-01-04 15:48:17
    接上篇《UnitedStack视角中的OpenStack巴黎峰会》,这会聊聊OpenStack生态圈中的商业公司。 如同往届峰会一样,我会把几乎所有厂商走访一遍,本次赞助厂商近90家,这些公司组成了真实的OpenStack生态圈,由于参加均...
  • 微积分生态圈的核心价值何在

    千次阅读 2018-11-25 23:00:16
    所谓“微积分生态圈”指的就是“知识共享”数学生态圈。这个生态圈存在的核心价值是什么? 问题的答案是,非标准分析。也就是说,没有鲁宾逊的非标准分析,这个数学生态圈就没有实际存在的价值。 大家知道,非标准...
  • Hadoop生态圈介绍

    千次阅读 2016-09-21 08:55:33
    1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 具有可靠、高效
  • spark的生态圈

    2017-04-11 19:49:08
    SparkCore是整个生态圈的核心组件,是一个大数据分布式编程框架,不仅实现了MR的map函数和reduce函数及其计算模型,还提供很多实现其他功能的算子,如filter、join、groupByKey等。Spark将分布式数据抽象为弹性...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,229
精华内容 8,491
关键字:

平台生态圈的定义