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

一种Linuxptrace隐藏注入shellcode技术和防御方法

通过ptrace可以查看和修改被控制进程的内部状态,因此渗透攻击在注入shellcode时也会使用ptrace。...本文介绍一种Linux下使用ptrace隐藏注入shellcode的技术和防御方法。...二、背景 不同版本操作系统有各自实现ptrace系统调用的方式,本文只关注Linux环境,因此先简单说明Linuxptrace系统调用的用法。...步骤3)中tracer可以检查和修改tracee的内存和寄存器内容,给渗透攻击注入shellcode提供了可能,接下来描述利用ptrace隐藏注入shellcode的技术细节。...【图4 Linux内核ptrace访问模式检查算法】 除了在同一个线程组的情况,获得使用ptrace功能的许可必然经过Linux安全模块(LSM)的检查,因此可以配置LSM限制ptrace功能,以Yama

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

linux-沙盒入门,ptrace从0到1

前言 本文是在linux系统角度下,对ptrace反调试进行底层分析,使我们更清楚的看到一些底层原理的实现,更好的理解在逆向工程中的一些突破口,病毒怎么实现代码注入,本文还将列出一些常见的攻防手段...ptracelinux 反调试技术中的地位就如同nc在安全界的地位,瑞士军刀啊!...更进一步可以实现子母进程双线执行动态解密代码等更高级的反分析技术 代码注入,往其他进程里注入代码。...而大多数病毒也是利用到这个特性,实现自用空间注入,rip位置直接注入,text段与data段之间的空隙注入,而且gdb实现单步调试的原理也是在每条指令后面插入一个int3。...另外的选择是使用ELF注入技巧,注入我们的代码,例如在内存中寻找空隙。 4. 最后,我们可以在栈中注入代码,同一般的栈溢出,这是一种安全的方式可以避免破坏原有程序的方式。

3.3K30

如何利用Ptrace拦截和模拟Linux系统调用

在这篇文章中,我将主要讨论x86-64架构下的Linux Ptrace,并且我还会使用到一些特定的Linux扩展。除此之外,我可能会忽略错误检查,但最终发布的完整源码将会解决这些问题。...真实场景下的strace实现还需要设置其他的参数,例如PTRACE_O_TRACEFORK: ptrace(PTRACE_SETOPTIONS,pid, 0, PTRACE_O_EXITKILL); 捕捉系统调用的循环步骤如下...和wait(2),然后利用PTRACE_GETREGS获取结果,结果将存储在rax中: ptrace(PTRACE_GETREGS,pid, 0, ®s); fprintf(stderr," =...XPledging... fopen("/dev/urandom")[2]:Operation not permitted fread("/dev/urandom")[1]= 0x2e1bd1c4 外部系统模拟 Linux...下的Ptrace中有一个非常实用的函数:PTRACE_SYSMU,我们可以利用这个函数来实现系统模拟: for(;;) { ptrace(PTRACE_SYSEMU, pid, 0, 0);

1.8K70

【Android 逆向】ptrace 函数 ( C 标准库 ptrace 函数简介 | ptrace 函数真实作用 )

void *addr, void *data); ptrace 函数参考文档 : https://man7.org/linux/man-pages/man2/ptrace.2.html 注入的原理就是围绕...ptrace 函数进行的一系列操作 ; Linux 系统分为 用户层 和 内核层 , 在用户层调用的方法就是普通调用 , 内核层调用的方法是 系统调用 ; 系统调用 : 如果在用户层需要用到 内核层...函数 , 专门用于系统调用 ; 二、ptrace 函数真实作用 ---- 注入并不是系统 bug , 是系统接口的特殊使用方式 ; 就像 Java 的反射一样 , 都是设计时就设计好的功能 ; 每个操作系统都需要...函数就是为 支持 C 标准库的 Linux / Android 系统提供的这种支持 ; 错误诊断 : 当程序运行出错时 , 系统或开发环境要进行报错 , 错误诊断的依据 需要 ptrace 函数追踪进程运行情况获取...; 开发调试 : Linux 下的 strace , gdb 等工具 , 都要用到 ptrace 函数 ; Android 中使用 ptrace 函数 , 必须有 root 或 system 权限 ;

46710

GDB原理之ptrace实现原理

ptrace系统调用 ptrace() 系统调用是 Linux 提供的一个调试进程的工具,ptrace() 系统调用非常强大,它提供非常多的调试方式让我们去调试某一个进程,下面是 ptrace() 系统调用的定义...ptrace() 系统调用详细的介绍可以参考以下链接:https://man7.org/linux/man-pages/man2/ptrace.2.html ptrace使用示例 下面通过一个简单例子来说明...ptrace实现原理 本文使用的 Linux 2.4.16 版本的内核 看懂本文需要的基础:进程调度,内存管理和信号处理相关知识。...调用 ptrace() 系统函数时会触发调用内核的 sys_ptrace() 函数,由于不同的 CPU 架构有着不同的调试方式,所以 Linux 为每种不同的 CPU 架构实现了不同的 sys_ptrace...ptrace() 支持的所有 request 操作定义在 linux-2.4.16/include/linux/ptrace.h 文件中,如下: #define PTRACE_TRACEME

4K20

Android安全-SO动态库注入

Android是基于Linux内核的操作系统,而在Linux下SO注入基本是基于调试API函数ptrace实现的,同样Android的SO注入也是基于ptrace函数,要完成注入还需获取root权限。...0x04 获取并保存目标进程的堆栈,设置dlopen函数的相关参数,将要注入的SO的绝对路径压栈: 当我们的要执行的函数的某些参数需要压入堆栈的时候,就需要提前保存堆栈状态,调用ptrace_readdata...0x08 恢复目标进程的堆栈,恢复目标进程寄存器值,解除关联,完成SO动态库注入: 调用ptrace_writedata(pid, (uint8_t *)saved_regs.ARM_sp...,完成SO动态库注入。...(pid, ®s); uint32_t r0 = regs.ARM_r0; DPRINTF("[+2]\t注入动态库成功,返回的句柄为: %x\n", r0); ptrace_setregs

2.4K20

iOS逆向之【Anti ptrace】去掉ptrace反调试保护进行lldb调试的方案(内含demo)

,直接返回 2、分析如何调用的ptrace,hook ptrace 3、通过tweak,替换disable_gdb函数 4、修改 PT_DENY_ATTACH I、运行时期,断点ptrace,直接返回...> thread return > c > DONE II、分析如何调用的ptrace,hook ptrace 去掉ptrace的思路 当程序运行后,使用 debugserver *:1234...为验证是否调用了ptrace 可以 debugserver -x backboard *:1234 /BinaryPath(这里是完整路径),然后下符号断点 b ptrace,c 之后看ptrace第一行代码的位置...最后在 IDA 中找到调用ptrace的代码,分析如何调用的ptrace。 开始hook ptrace。...在ptrace上下断点,找到调用ptrace的地方 (lldb) b ptrace Breakpoint 1: no locations (pending).

2.1K10

如何使用dlinject将一个代码库实时注入Linux进程中

关于dlinject  dlinject是一款针对Linux进程安全的注入测试工具,在该工具的帮助下,广大研究人员可以在不使用ptrace的情况下,轻松向正在运行的Linux进程中注入一个共享代码库(...之所以开发该工具,是因为目前社区有非常多的反ptrace技术,而dlinject的功能并不基于ptrace实现,因此渗透测试的效果会更好。  ...mem对部分堆栈数据 以及需要使用Shellcode重写的代码进行备份; 3、生成主要和次要Shellcode缓冲区; 4、工具会通过写入/proc/[pid]/mem将第一部分Shellcode代码注入到...github.com/DavidBuchanan314/dlinject 参考资料 https://github.com/AonCyberLabs/Cexigua https://github.com/gaffe23/linux-inject...https://www.aldeid.com/wiki/Ptrace-anti-debugging 精彩推荐

1K10

Linux Hook 笔记

$hello表示字符串"Hello"的地址; 32位Linux系统通过0x80中断来进行系统调用....更多关于32位和64位汇编指令的区别可以参考stack overflow的总结, 因为我当前环境是64位Linux,所以下文的操作都以64位系统为例....如果要结束追踪,则再调用PTRACE_DETACH即可. 动态注入指令 用过gdb等调试器的人都知道,debugger工具可以给程序打断点和单步运行等....运行完注入的指令之后, 我们再恢复原进程的IR,从而达到改变原程序运行逻辑的目的. talk is cheap, 先写个循环打印的程序: //victim.c int main() { while...这里注入的代码长度只有8个字节, 而且是用shellcode的格式注入, 但实际中我们可以在目标进程中动态加载库文件(.so), 包括标准库文件(如libc.so)和我们自己编译的库文件, 从而可以通过传递函数地址和参数来进行复杂的注入

2.7K60

吃土记之GDB调试原理

目录 ptrace实现原理 本文使用的 Linux 2.4.16 版本的内核 看懂本文需要的基础:进程调度,内存管理和信号处理相关知识。...启动注入代码方式检查死锁 然后这些东西不会融会贯通 吃土记录 像外行一样思考,像专家一样实践: 小王:遇到core怎么办? 老王:gdb调试呀 小王:gdb 为什么可以非侵入调试进程呀。...如果您正在考虑使用复杂的内核编程来完成任务, PTRACE_TRACEME 请三思。Linux 提供了一种优雅的机制来实现所有这些功能: ptrace (进程跟踪)系统调用。...Linux实现系统调用的基本过程是: 应用程序准备参数,发出调用请求; C库封装函数引导。该函数在Linux提供的标准C库,即 glibc 中。.../article/6210 https://cloud.tencent.com/developer/article/1742878 ptrace实现代码注入 原来gdb的底层调试原理这么简单 https

94520

Android 进程注入危害与测试

Android 下的进程注入效果是类似于 Windows 下的 dll 注入,Android 系统使用的是 Linux 内核,因此进程间是弱相互作用,不存在 Windows 下类似于 CreateRemoteThread...作用的函数,可以在其他进程空间内创建线程来加载我们的 .so 文件,所以我们所采用的方法就是依赖于 linux 下的 ptrace() 函数,将目标进程作为我们进程的子进程操作目标进程的寄存器和内存来运行我们加载...0x03 如何防止进程注入 Android 中注入需要调用 ptrace,然后执行注入 so 中的函数。...因此,防止 Android 注入可以通过以下方式: 1、ptrace 附加失败 2、修改 linker 中的 dlopen 函数,防止第三方 so 加载 3、定时检测应用加载的第三方 so 库,如果发现是被注入的...Poison 项目源码 https://github.com/matrixhawk/Poison PTARCE 函数 http://man7.org/linux/man-pages/man2/ptrace

4.4K40
领券