想中的ld_preload伎俩,以及Linux内核的模块,更换某些系统调用一个提供通过你,是否有任何可能性,以拦截系统调用(例如开),因此,它首先通过你的功能,到达之前实际开?

有帮助吗?

解决方案

如果你真的需要一个解决方案,你可能感兴趣的博士攻击,完成了只是这个, http://www.immunityinc.com/downloads/linux_rootkit_source.tbz2 该条约也是在这里 http://www.theregister.co.uk/2008/09/04/linux_rootkit_released/

其他提示

为什么不能你不想使用 中的ld_preload招?

例码在这里:

/*
 * File: soft_atimes.c
 * Author: D.J. Capelis
 *
 * Compile:
 * gcc -fPIC -c -o soft_atimes.o soft_atimes.c
 * gcc -shared -o soft_atimes.so soft_atimes.o -ldl
 *
 * Use:
 * LD_PRELOAD="./soft_atimes.so" command
 *
 * Copyright 2007 Regents of the University of California
 */

#define _GNU_SOURCE
#include <dlfcn.h>
#define _FCNTL_H
#include <bits/fcntl.h>

extern int errorno;

int (*_open)(const char * pathname, int flags, ...);
int (*_open64)(const char * pathname, int flags, ...);

int open(const char * pathname, int flags, mode_t mode)
{
    _open = (int (*)(const char * pathname, int flags, ...)) dlsym(RTLD_NEXT, "open");
    if(flags & O_CREAT)
        return _open(pathname, flags | O_NOATIME, mode);
    else
        return _open(pathname, flags | O_NOATIME, 0);
}

int open64(const char * pathname, int flags, mode_t mode)
{
    _open64 = (int (*)(const char * pathname, int flags, ...)) dlsym(RTLD_NEXT, "open64");
    if(flags & O_CREAT)
        return _open64(pathname, flags | O_NOATIME, mode);
    else
        return _open64(pathname, flags | O_NOATIME, 0);
}

从我的理解...它是很中的ld_preload欺骗或一个核心模块。有没有一个整体很多的中间地带除非你想来运行它在一个仿真程序,它可以捕获到你的功能或执代码重新编写实际的二进制的捕获了你的功能。

假设你可以不修改程序和不能(或不想)修改的核心,该中的ld_preload的办法是最好的之一,假设你的程序是相当标准,实际上并不是一个恶意地试图获取过去你拦截。(在这种情况下你会需要的其他技术。)

可用于拦截任何功能的电话。如果你要拦截系统在呼叫你的成品,那么这将是没有用的。但是,如果你试图拦截在开发期间后,它可以是非常有用的。我经常使用这种技术拦截散列函数所以,我可以控制返回的散列为测试目的。

在情况下你都不知道,才是主要用于寻找记忆的泄漏和其他存储相关的错误。但是潜在的技术基本上是一个x86模拟器。它模仿你的程序和截获电话对malloc/自由等等。好消息是,你不需要重新编译的使用它。

才有的一个特征,他们期 功能包裹, ,这是用来控制的拦截的功能。见第3.2节的 才手册 对于细节。你可以设置功能包的任何功能你喜欢。一旦呼叫拦截可替代的功能提供后援引。

一些应用程序可以欺骗strace/ptrace不运行,所以唯一真正的选择我有的是使用所

所可以拦截了一堆的电话系统,如果需要,由于其野卡匹配。所是不是C,而是一个单独的语言。在基本模式所应该阻止你做愚蠢的事情,但它也可以运行,在"专家的模式",回落到允许开发使用C如果这是必需的。

它不需要你来修补你的核心(或至少不应),并且一旦一个模块已经编制,可以复制它从一个测试/发展框并插入(通过insmod)在一个生产系统。

我还没有找到linux的应用程序,已经发现了一个工作方式约/避免被抓住所.

如果你只是想 怎么打开,你想看看ptrace()功能,或者将源代码的命令行strace实用工具。如果你真的想 拦截 呼叫,也许使它做些别的事情,我认为你的选择列中的ld_preload或一个核心模块-是你唯一的选择。

我没有语法要做到这一优雅与开的副手,但是这篇文章提供了一个很好的概述什么你需要做的: http://www.linuxjournal.com/article/4378

你也可以只是补sys_open功能。它开始在线1084的文件/打开。c为linux-2.6.26.

你可能也看看你能不能使用,,所或如何做到这一切的记录你没有你不必建立一个新的系统。

如果你只是想这样做为调试看到strace,这是建立在顶的ptrace(2)系统调用它可以让你挂钩代码,当一个系统的呼叫完成。看到PTRACE_SYSCALL的一部分人页。

听起来你需要auditd.

Auditd允许全球追踪所有的系统调用,或者访问到的文件,记录。你可以套钥匙用于具体事件你是感兴趣。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top