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

本文共 2150 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    plsql学习笔记---plsql相关概念,以及基础结构
    查看>>
    plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
    查看>>
    plsql查询乱码问题解决
    查看>>
    PLSQL的DBMS_GETLINE
    查看>>
    quartz简单demo,教你最快使用quartz
    查看>>
    PlutoSDR学习笔记(一)—函数API手册
    查看>>
    Quartz安装包中的15个example
    查看>>
    Quartz学习总结(2)——定时任务框架Quartz详解
    查看>>
    pm2 start命令中的json格式详解
    查看>>
    pm2启动报错
    查看>>
    pm2通过配置文件部署nodejs代码到服务器
    查看>>
    Unknown character set: 'utf8mb4'
    查看>>
    PML调用PDMS内核命令研究
    查看>>
    PMM安装-第一篇
    查看>>
    PMP知识要点(第九章)
    查看>>
    PNETLab 镜像包官方下载太慢?不急,最新版本PNET_4.2.10分享!
    查看>>
    pnpm : 无法加载文件...
    查看>>
    pnpm 如何安装指定版本
    查看>>
    pnpm的设计与npm的对比
    查看>>
    pocoserver无限重启_Poco::TCPServer框架解析
    查看>>