博客
关于我
GPU keylogger && GPU Based rootkit(Jellyfish rootkit)
阅读量:407 次
发布时间:2019-03-05

本文共 2162 字,大约阅读时间需要 7 分钟。

OpenCL、Linux DMA、GPU rootkit PoC、GPU keylogger 和 DMA Hack

OpenCL

OpenCL(Open Computing Language)是第一个面向异构系统通用目的并行编程的开放式、免费标准。它为开发人员提供了一种高效的方式来编写并行代码,使得软件能够在多核处理器(如CPU、GPU、Cell架构等)上高效运行。OpenCL广泛应用于游戏、娱乐、科研、医疗等多个领域。

OpenCL的组成要素

  • API平台:定义了宿主机程序发现OpenCL设备的函数以及上下文创建的函数。
  • 运行时API:管理上下文,提交命令队列并执行操作。
  • 编程语言:基于ISO C99标准的扩展子集,主要用于编写内核代码。
  • OpenCL平台的工作原理

  • 平台API:用于发现OpenCL设备并创建上下文。
  • 运行时API:用于管理命令队列和执行操作。
  • Linux DMA(Direct Memory Access)

    DMA(直接内存存取)是一种硬件机制,允许外设直接与主内存进行数据传输,而无需经过系统处理器(CPU)。这种机制显著提高了数据传输效率,减少了内存映射带来的开销。

    DMA的数据传输方式

  • 软件请求数据

    • 通过函数(如read)请求数据。
    • 硬件将数据写入DMA缓冲,并在完成时触发中断。
    • 中断处理确认数据并唤醒进程。
  • 硬件异步推数据

    • 硬件引发中断,通知系统新数据到达。
    • 驱动分配缓冲并将数据传输到硬件。
    • 硬件完成后再次触发中断,分派新数据。
  • 一个简单的PCI DMA示例

    int dad_transfer(struct dad_dev *dev, int write, void *buffer, size_t count) {
    dma_addr_t bus_addr;
    dev->dma_dir = write ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
    dev->dma_size = count;
    bus_addr = dma_map_single(&dev->pci_dev->dev, buffer, count, dev->dma_dir);
    dev->dma_addr = bus_addr;
    writeb(dev->registers.command, DAD_CMD_DISABLEDMA);
    writeb(dev->registers.command, write ? DAD_CMD_WR : DAD_CMD_RD);
    writel(dev->registers.addr, cpu_to_le32(bus_addr));
    writel(dev->registers.len, cpu_to_le32(count));
    writeb(dev->registers.command, DAD_CMD_ENABLEDMA);
    return 0;
    }

    GPU rootkit PoC by Team Jellyfish

    Jellyfish是一个基于Linux的用户态GPU根kit证明-of-concept项目,利用LD_PRELOAD技术通过Jynx(CPU)和OpenCL(GPU)实现。该项目目前支持AMD和NVIDIA显卡,AMDAPPSDK也支持Intel显卡。

    GPU恶意软件的优势

  • GPU恶意软件尚未被广泛分析。
  • 可以通过DMA监听主机CPU内存。
  • GPU提供快速的数学计算能力。
  • 即使关闭,恶意内存仍然存留在GPU内。
  • ###运行条件

  • 安装OpenCL驱动或ICDS。
  • 使用Nvidia或AMD显卡(Intel支持AMD SDK)。
  • 修改kit.c文件的第103行,指定目标IP地址。
  • GPU keylogger

    GPU-based keylogger通过直接监控键盘缓存内存地址,利用DMA实现高效数据捕获。其优势在于无需修改内核代码,仅需通过特征匹配找到键盘缓存地址即可。

    寻找键盘缓存地址的挑战

  • 键盘缓存地址随系统重启或设备插拔而变化。
  • 随机化技术使地址预测难度加大。
  • 必须通过超级用户权限访问内核内存。
  • 导致键盘缓存地址的方法

  • 远程访问内核内存的/dev/mem/dev/kmem文件。
  • 找到struct urb结构中的transfer_buffer内存地址。
  • 捕获键盘数据的实现

  • 在初始化阶段,通过mmap申请内存并重映射键盘缓存地址。
  • GPU通过DMA读取键盘数据并存储在显卡内存中。
  • 修改进程页表以绕过内存映射检测。
  • DMA Hack

    DMA(直接内存存取)是一种硬件机制,允许外设直接与主内存进行数据传输,无需经过CPU控制。这种技术可以通过热补丁(hotpatch)实现对系统内存的直接修改。

    通过DMA实现热补丁

  • 在外设(如硬盘文件)中放置补丁代码。
  • 利用DMA将补丁写入Ring0内存。
  • 调用DMA写函数实现热补丁效果。
  • 结论

    OpenCL为并行计算提供了统一的编程环境,DMA优化了数据传输效率,GPU rootkit和keylogger利用硬件特性实现了高效的恶意行为,而DMA hack则为系统安全带来了新的挑战。

    转载地址:http://tdzkz.baihongyu.com/

    你可能感兴趣的文章
    oracle触发器
    查看>>
    oracle触发器
    查看>>
    Oracle计划将ZGC项目提交给OpenJDK
    查看>>
    oracle账号共享
    查看>>
    Oracle重置序列(不删除重建方式)
    查看>>
    Oracle闪回技术(Flashback)
    查看>>
    oracle隐含参数的查看与修改
    查看>>
    oracle零碎要点---ip地址问题,服务问题,系统默认密码问题
    查看>>
    oracle零碎要点---oracle em的web访问地址忘了
    查看>>
    Oracle零碎要点---多表联合查询,收集数据库基本资料
    查看>>
    Oracle静默安装
    查看>>
    【Bert101】变压器模型背后的复杂数学【02/4】
    查看>>
    Oracle面试题:Oracle中truncate和delete的区别
    查看>>
    ThreadLocal线程内部存储类
    查看>>
    thinkphp 常用SQL执行语句总结
    查看>>
    Oracle:ORA-00911: 无效字符
    查看>>
    Text-to-Image with Diffusion models的巅峰之作:深入解读 DALL·E 2
    查看>>
    Tensorflow.python.framework.errors_impl.ResourceExhaustedError:无法分配内存[操作:AddV2]
    查看>>
    TCP基本入门-简单认识一下什么是TCP
    查看>>
    tableviewcell 中使用autolayout自适应高度
    查看>>