首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 内核控制流完整性

Google 的 Pixel 3 将是第一款在内核中实施 LLVM 前端控制流完整性(CFI)的设备,我们已经实现了 Android 内核版本 4.9 和 4.14 中对 CFI 的支持。...CFI 尝试通过添加额外的检查来确认内核控制流停留在预先设计的版图中,以便缓解这类攻击。...通过链接时优化(LTO)获得完整的程序可见性 为了确定每个间接分支的所有有效调用目标,编译器需要立即查看所有内核代码。传统上,编译器一次处理单个编译单元(源代文件),并将目标文件合并到链接器。...图 2. LTO 在内核中的工作原理的简单概述。所有 LLVM bitcode 在链接时被组合,优化并生成本机代码。 几十年来,Linux 一直使用 GNU 工具链来汇编,编译和链接内核。...内核构建系统还假定 LLVMgold.so 插件在 LD_LIBRARY_PATH 中可用。clang 和 binutils 预构建工具链二进制文件可在 AOSP 获得,也可使用上游二进制文件。

3.4K40

使用jprobe建设镜面层叠的原则和见解

再一次,他没有编译,就像刚才编译的文件…时又无聊的工作阻碍了我对Linux内核的探索进度,直到今天,我依旧对编译内核有相当的恐惧,不怕出错,而是怕磁盘空间不够,initrd的组装拆解之类,太繁琐了。...它能够动态改动内核地址空间代码的二进制指令,然后运行随意你想让它运行的代码段,这或许应该能够称为二进制动态编程!多么黑的技术,全然无视源码的逻辑。...我们须要做的是在steal函数内部阻止掉这个运行流,然而冯.诺依曼机器是串行处理机,且UNIX/Linux的运行流是靠fork分发的。...完整的代码例如以下: #include linux/kernel.h> #include linux/module.h> #include linux/kprobes.h> #include linux...尽管Linux非常难直接通过make config将整个网络协议栈编译成一个模块,可是我们自己能够手工构建一个网络协议栈模块,无非就是把net/ipv4文件夹编译成一个模块。

73020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    学会爱上 systemd

    实际上,完整的引导和启动过程包含三个主要部分: 硬件引导:初始化系统硬件 Linux 引导(boot):加载 Linux 内核和 systemd Linux 启动(startup):systemd 为主机的生产性工作做准备...启动过程按照三步引导流程,使 Linux 计算机进入可进行生产工作的状态。当内核将主机的控制权转移到 systemd 时,启动环节开始。...内核启动 init 程序(这是一个编译后的二进制)后,init 启动 rc.sysinit 脚本,该脚本执行许多系统初始化任务。...架构 这些以及更多的任务通过许多守护程序、控制程序和配置文件来支持。图 1 显示了许多属于 systemd 的组件。这是一个简化的图,旨在提供概要描述,因此它并不包括所有独立的程序或文件。...它也不提供数据流的视角,数据流是如此复杂,因此在本系列文章的背景下没用。 image.png 如果要完整地讲解 systemd 就需要一本书。

    1.2K20

    控制流完整性简介

    CFI防御机制的核心思想是限制程序运行中的控制流转移,使其始终处于原有的控制流图所限定的范围内 (如下图) 。...主要分为两个阶段,一是通过二进制或者源代码程序分析得到控制流图 (CFG),获取转移指令目标地址的列表;二是运行时检验转移指令的目标地址是否与列表中的相对应。...控制流劫持往往会违背原有的控制流图,CFI 则可以检验并阻止这种行为。...首先是 CFG 的构建,控制流图 (Control-Flow Graph) 是基于静态分析的用图的方式来表达程序的执行路径。下图展示了几个普通的 CFG ,分支指令作为边,圆圈则表示普通指令。...构建完CFG后就是动态检测过程,CFI 通过二进制代码重写技术在间接调用前和返回前插入标识符 ID 和 ID_check,通过比对两者的值是否一致判断控制流是否被劫持。

    1.5K20

    攻击溯源-基于因果关系的攻击溯源图构建技术

    (b) 溯源图 图1 BackTracker溯源图构建 攻击溯源图的构建是挖掘不同实体之间的因果依赖关系,通过事先定义的规则来关联不同进程、文件和文件名,本质是一种依赖关系缺少因果语义。...只需要打开操作系统附带的审计工具(如,Linux审计、Windows事件跟踪和DTrace)。如果用户检测到安全事件,只需要向安全运营人员提供系统调用日志和程序二进制文件等。...接着,OmegaLog对二进制文件进行时序分析,以识别LMS之间的时序关系,生成一组在执行期间可能出现在的所有有效的LMS控制流路径。...图5展示了发起者及其传出socket,接收者及其传入socket模式,以及网络流中完整的5元组。...(b)数据流覆盖 图 6 RTAG标签系统 为了追踪文件之间的数据流和不同主机之间的网络流,在现有的溯源图上构建标签模型作为一个覆盖图。

    3.1K20

    Linux 内核裁剪框架初探

    一个内核模块可以有多个选项,每个选项都控制哪些代码将包含在最终的内核二进制文件中。 配置选项控制内核代码的不同粒度,例如由 C 预处理器实现的语句和函数,以及基于 Makefile 实现的对象文件。...云厂商的定制通常是通过直接删除可加载的内核模块来完成的,手工修剪内核模块二进制文件的问题是可能会违反依赖关系。重要的是,基于应用程序需求可以进一步裁剪内核。...这种可组合性能够通过重用应用配置和以前构建的文件(例如内核模块)来增量地构建新内核。如果目标应用程序的配置已知,就可以在几十秒内完成内核裁剪。...内核构建 使用于Linux的KBuild基于组装后的配置选项构建裁剪内核,利用现代make的增量构建可以优化构建时间,也可以缓存以前的构建结果(例如,目标文件和内核模块) ,以避免冗余的编译和链接。...小结 由于操作系统内核的不稳定性、时效性较差、完整性问题以及需要人工干预等原因,Linux内核裁剪技术没有得到广泛的应用。

    2.3K30

    eBPF 概述:第 4 部分:在嵌入式系统运行

    嵌入式系统通常运行不同的 Linux 发行版和不同的处理器架构,与开发人员的计算机相比,有时具有重度修改或上游分歧的内核,在构建配置上也有很大的差异,或还可能使用了只有二进制的模块。...当字节码探测内核函数和数据结构时,问题就开始了,这些函数和数据结构可能与目标设备的内核不同或者会不存在,所以至少目标设备的内核头文件必须存在于构建 eBPF 程序字节码的主机上。...Ply 本身实现了一个 eBPF 编译器,需要根据目标设备的内核头文件进行构建,然后作为一个单一的二进制库和 shell 包装器部署到目标设备上。...特殊的 0xFFFFFFFE 值告诉加载器,这个 eBPF 程序与任何内核版本都是兼容的,因为打开系统调用而破坏用户空间的机会接近于 0。 Makefile:这是上述两个文件的构建逻辑。...“open-example” 和 “open-example.o” ELF 二进制文件可以进一步合并成一个;加载器可以包括 eBPF 二进制文件作为资产,也可以像 tcptracer 那样在其源代码中直接存储为字节数

    52610

    SCA技术进阶系列(三):浅谈二进制SCA在数字供应链安全体系中的应用

    在整个数字供应链的场景下,二进制检测的需求越发重要。SCA的二进制检测可以对源代码检测起到很好的补充:二进制 SCA 检测对象为二进制构建产物,无需源码。...”;ELF格式(Executable and Linkable Format):应用于Unix、Linux系统,包括可执行文件、动态链接库“so”、可重定位文件“o”、内核模块“ko”;Mach-O格式...静态反汇编:涉及在非执行情况下提取二进制文件的指令。静态反汇编的目标是将二进制代码转换为汇编代码的过程。一些反汇编工具可以将二进制文件转换为汇编指令序列,以帮助分析程序的代码结构和控制流。...通过反汇编可以还原程序的指令序列、跳转指令、条件分支等控制结构,从而构建控制流图。源码->编译->二进制程序->反汇编-> 控制流图(CFG)有向图 G(V,E) 。...在生成控制流图后,可以结合语法相似特征,图相似性特征,函数相似特征,以及常量字符串和立即数进行综合分析,计算和开源组件的相似度和排名,来确定引入的成分信息。

    88930

    PTFuzzer:一个基于硬件加速的二进制程序Fuzz工具

    该硬件部件的作用是记录程序执行中的分支信息,从而帮助构建程序运行过程中的控制流图。在默认情况下CPU的PT部件是处于关闭状态,这意味着CPU不会记录程序的分支信息,因此也不会产生任何开销。...PT部件最初被设计用来重构程序的控制流图,目的是为了帮助调试和分析。最早利用PT做fuzz的工具是kAFL,其结果发表在安全领域的四大顶级学术会议之一的USENIX Security上。...但是kAFL是一个针对内核的fuzz工具,而PTFuzzer是针对应用程序的fuzz工具,这两者的设计会有很多不同。...2.2 限制 目前PTFuzzer只支持Linux操作系统,并且要求Linux内核的版本至少是4.13.0. 我们测试过Ubuntu16.04.4和Ubuntu17.10,都是没有问题的。...总结 PTFuzzer采用Intel CPU最新的PT部件来收集分支信息,解决了AFL需要源码支持的问题,能够方面的挖掘Linux中的二进制程序漏洞。

    1.6K30

    Android安全之系统构建解析篇(一)

    此规则最值得注意的例外是 Linux 内核中的更改,这些更改在 GNU GPL V2 许可证下。 ? 图 1.1:Android 软件栈 Linux 内核层。...在 Android 中,Linux 内核负责进程,内存,通信,文件系统管理等。虽然 Android 主要依赖于“vanilla" Linux 内核功能,但是已经做出了系统操作所需的几个自定义更改。...该进程根据init.rc配置文件执行操作。 工具箱包括基本的二进制文件,在 Android [19]中提供shell工具的功能。 Android 还依赖于一些关键的守护进程。...内核通过使用标准 Linux 设施(进程分离,以及通过网络套接字和文件系统的任意访问控制)来强制隔离应用程序和操作系统组件。...图 1.2:Android 内核实施中的两个层级 Linux 内核层提供的强制机制,有效地使用沙箱,将应用程序与其他应用程序和系统组件隔离。

    84320

    Vitis指南 | Xilinx Vitis 系列(一)

    对于嵌入式处理器平台,Vitis核心开发套件执行模型还使用OpenCL API和基于Linux的Xilinx 运行时(XRT),用于调度硬件内核并控制数据移动。...您将使用OpenCL API和基于Linux的Xilinx运行时(XRT)来控制主应用程序和内核之间的数据移动,并计划任务的执行。...Xilinx对象(.xo)文件与硬件平台链接,以创建FPGA二进制文件(.xclbin),该文件已加载到目标平台上的Xilinx设备中。 构建FPGA二进制文件的关键是确定要生成的构建目标。...有关更多信息,请参阅构建目标。 有关构建过程的详细说明,请参见构建FPGA二进制文件。 3.5 建立目标 Vitis编译器生成过程生成主机程序可执行文件和FPGA二进制(.xclbin)。...FPGA二进制文件的性质由构建目标确定。 当构建目标是软件或硬件仿真时,Vitis编译器会生成FPGA二进制文件中内核的仿真模型。这些仿真目标使您可以在相对较快的周期内构建,运行和迭代设计。

    2K20

    QEMU架构浅析

    KVM模块的职责就是打开并初始化VMX功能,提供相应的接口以支持虚拟机的运行。KVM通过调用Linux本身内核功能,实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层。...图 QEMU架构图 如图所示,QEMU由以下几个部分组成: Hypervisor控制仿真 Tiny Code Generator(TCG)在虚拟机器代码和宿主机代码之间进行转换。...KVM基本上是Linux内核中的Hypervisor(虚拟机管理程序)。它可以并行运行多个操作系统。QEMU可以在KVM中启动一个新线程以执行模拟操作系统,然后KVM控制执行。...虚拟机通过仿真硬件与QEMU交互,并将IO执行情况的控制流和数据流交互给QEMU,QEMU代表虚拟机对磁盘镜像文件执行I / O操作。...此外,我们还需要了解每个组成组件之间的相互交互关系,从数据流的角度来看,其主要是控制流和数据流;从IO角度来看,其主要是网络IO和存储IO,从技术实现机制来看,其主要是虚拟化CPU和内存以及存储、网络协议栈的实现

    9.6K52

    顶会论文解读|AEM:Linux内核漏洞跨版本利用可行性评估

    注意,AEM的最终效果是确保迁移后的exploit能够在其他版本内核上实现漏洞利用原语,即控制流劫持或任意内存读写,不包括在实现漏洞利用原语之后的攻击步骤和载荷,如具体的ROP链等。...因此,AEM并没有尝试像AEG一样在PoC的基础上从零构建一个ExP的其余部分,而是以原ExP在能够利用成功的内核版本上的执行流为参考,调整ExP,使之在其他版本内核上的执行流与在参考版本上一致(align...最常见的两类漏洞利用原语是控制流劫持和可控内存访问,AEM的目标是实现这两类漏洞利用原语的迁移,不包括在实现漏洞利用原语之后的攻击步骤和载荷,如具体的ROP链等。...AEM的整个工作流分为两个阶段,如图1所示: 图1 AEM的工作流程 对于阶段1来说,“漏洞利用原语识别”过程对“控制流劫持”和“可控内存访问”两类原语进行识别。...如果想要跨版本自动化迁移一个可用的ExP,还需要考虑实现漏洞利用原语后的迁移工作,如ROP gadgets的迁移等,这部分工作涉及到具体的内核二进制文件中的指令偏移和如何应对诸如KASLR之类的漏洞缓解机制

    1.5K10

    详解Android内核安全

    利用加标记的指针,可以在MTE设备可用之前更轻松地检测并拒绝对指针顶部字节的错误使用。 七、流控完整性(CFI) 从2016年开始,Android上大约86%的漏洞与内存安全相关。...大多数漏洞被攻击者所利用,他们会改变应用的正常控制流,获取遭利用的应用的所有权限来执行任意恶意活动。...控制流完整性 (CFI)是一种安全机制,它不允许更改已编译二进制文件的原始控制流图,因而执行此类攻击变得异常困难。 在Android 8.1媒体堆栈中启用了LLVM的CFI实现。...LTO会一直保留对象文件的LLVM位码表示法直至链接时,以便编译器更好地推断可以执行哪些优化。启用LTO可缩减最终二进制文件的大小并提高性能,但会增加编译时间。...这样可以确保攻击行为(修改常规堆栈上的返回地址)不会对程序控制流造成任何影响。

    1.5K30

    FPGA Xilinx Zynq 系列(三十七)Linux 启动

    24.2.4 内核 第二个阶段引导装载程序把 CPU 的控制权交出之后,一个程序会运行一小段硬件设置,然后再解压内核映像。...这些文件组合起来形成这个引导程序映像的顺序是很重要的,如果需要有可选的位流文件的话,它必须放在 FSBL 文件的后面,在 SSBL 文件的前面。 图 24.4 显示了引导映像文件所需的顺序关系。...图 24.4: 引导镜像文件的顺序 zImage文件里是压缩了的Linux内核,一旦被SSBL装载进内存,它会自动解压。...设备树是用人可读的文本文件定义的,这种文件叫做设备树源文件 (.dts),然后用编译器编译成二进制格式,成为 U-Boot 能懂的设备树 blob。...这个工具在一连串分区之前加上一个头块来组合出引导映像,这一连串分区包括用户 ELF 文件、FPGA 位流和其他二进制文件,每个部分都可以做加密和认证。

    3.8K10

    yocto | 基于Linux的定制系统跑Qt app(第一集)

    与完整的Linux发行版不同,yocto能让你自定义你的映像,你可以决定放哪些功能或者模块到你的映像中,比如说很多设备没有显示屏幕,那么像X11, GTK+, Qt或者SDL之类的组件就能不安装。...大致上,metadata包括了配方(recipes)、共享的class类、配置文件和构建指令相关的信息,以及用来控制构建内容和构建效果的数据。...)│ ├── recipes-graphics(绘图相关的库)│ ├── recipes-kernel (此目录包含内核和具有强内核依赖性的通用应用程序和库)│ ├── recipes-lsb4(支持Linux...(配方说明文件)10、总结>>>yocto项目的简要工作流程Yocto项目的核心组件OpenEmbedded构建系统采用工作流方式来完成映像(Image)和SDK的生成,以下简要概述整个工作流程:>>...创建二进制文件后,构建系统会生成一个二进制包提要,用于创建最终的根文件映像。构建系统同时生成文件系统镜像和定制的可扩展 SDK (eSDK) 用于应用程序开发。

    26910

    操作系统的可扩展访问控制

    策略可以增强访问控制决策,并利用常见的基础设施,例如对象标记,以避免直接内核修改和代码重复。它们能够在广泛的对象类型上执行访问控制,从文件到网络接口,并与内核的并发模型集成。...早期的强制性政策侧重于信息流,要求在内核中实施。多级安全通过标记用户和数据机密性来保护安全性,限制流动。Biba完整性策略是MLS的逻辑对偶,保护其完整性。...2.3.2 内核对象标记 许多访问控制策略为了支持访问控制决策(例如完整性或保密级别)而标记主体和对象。MAC框架为内核对象提供了与策略无关的标记工具、标记管理系统调用以及文件标记的持久化存储。...文档将其标记为潜在的不完整、不稳定或不安全的,因此不受支持。 编程和二进制接口(API、KPI、ABI和KBI)稳定性被放弃,允许不经正式弃用而进行更改。...目标是避免破坏消费者子系统的内核二进制接口,并为策略模块提供类似的二进制兼容性。

    34430

    linux 嵌入式Linux构建方法《Rice linux 学习开发》

    从技术上讲,这两个是独立的项目;然而实践中不需要了解区别。 Yocto 项目的输出大致由三部分组成: 1、目标运行时二进制文件:这些包括引导加载程序、内核、内核模块、根文件系统映像。...以及将 Linux 部署到目标平台所需的任何其他辅助文件。 2、包流:这是可以安装在目标上的软件包集合。您可以根据需要选择软件包格式(例如,deb、rpm、ipk)。...其中一些可能预先安装在目标运行时二进制文件中,但可以构建用于安装到已部署系统的软件包。 3、目标 SDK:这些是安装在目标平台上的软件的库和头文件的集合。...Buildroot输出的主要组成部分: 1、将 Linux 部署到目标平台所需的根文件系统映像和任何其他辅助文件 2、适用于目标硬件的内核,引导加载程序和内核模块 3、用于构建所有目标二进制文件的工具链...个人感想: 我在使用buildroot之前,我在学习嵌入式Linux是没有通过什么构建方法的,只是裸露的uboot,kernel,根文件系统。每一个都要自己去编译,创建。

    7.8K20
    领券