GNU/Linux >> Belajar Linux >  >> Linux

Apakah mungkin memalsukan jalur tertentu untuk suatu proses?

LD_PRELOAD tidak terlalu sulit, dan Anda tidak perlu menjadi root. Sisipkan rutinitas C Anda sendiri yang dipanggil sebagai pengganti open() yang asli di pustaka C. Rutinitas Anda memeriksa apakah file yang akan dibuka adalah "/tmp/adb.log" dan memanggil file terbuka yang sebenarnya dengan nama file yang berbeda. Ini shim_open.c Anda:

/*
 * capture calls to a routine and replace with your code
 * gcc -Wall -O2 -fpic -shared -ldl -o shim_open.so shim_open.c
 * LD_PRELOAD=/.../shim_open.so cat /tmp/adb.log
 */
#define _FCNTL_H 1 /* hack for open() prototype */
#define _GNU_SOURCE /* needed to get RTLD_NEXT defined in dlfcn.h */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dlfcn.h>
#define OLDNAME "/tmp/adb.log"
#define NEWNAME "/tmp/myadb.log"

int open(const char *pathname, int flags, mode_t mode){
    static int (*real_open)(const char *pathname, int flags, mode_t mode) = NULL;

    if (!real_open) {
        real_open = dlsym(RTLD_NEXT, "open");
        char *error = dlerror();
        if (error != NULL) {
            fprintf(stderr, "%s\n", error);
            exit(1);
        }
    }
    if (strcmp(pathname,OLDNAME)==0) pathname = NEWNAME;
    fprintf(stderr, "opening: %s\n", pathname);
    return real_open(pathname, flags, mode);
}

Kompilasi dengan gcc -Wall -O2 -fpic -shared -ldl -o shim_open.so shim_open.c dan mengujinya dengan memasukkan sesuatu ke dalam /tmp/myadb.log dan menjalankan LD_PRELOAD=/.../shim_open.so cat /tmp/adb.log . Kemudian coba LD_PRELOAD di adb.


Berikut adalah contoh penggunaan util-linux yang sangat sederhana unshare untuk meletakkan proses di ruang nama pemasangan pribadi dan memberinya tampilan berbeda dari sistem file yang sama yang dimiliki induknya saat ini:

{   cd /tmp                      #usually a safe place for this stuff
    echo hey   >file             #some
    echo there >file2            #evidence
    sudo unshare -m sh -c '      #unshare requires root by default
         mount -B file2 file     #bind mount there over hey
         cat file                #show it
         kill -TSTP "$$"         #suspend root shell and switch back to parent
         umount file             #unbind there
         cat file'               #show it
    cat file                     #root shell just suspended
    fg                           #bring it back
    cat file2                    #round it off
}
there                            #root shell
hey                              #root shell suspended
hey                              #root shell restored
there                            #rounded

Anda dapat memberikan proses tampilan pribadi dari sistem filenya dengan unshare utilitas pada sistem linux terkini, meskipun fasilitas mount namespace sendiri sudah cukup matang untuk seluruh seri kernel 3.x. Anda dapat memasukkan semua jenis ruang nama yang sudah ada sebelumnya dengan nsenter utilitas dari paket yang sama, dan Anda dapat mengetahui lebih lanjut dengan man .


Linux
  1. Bagaimana Cara Menggunakan Inotifywait Untuk Menonton Direktori Untuk Pembuatan File Ekstensi Tertentu?

  2. Linux – Apakah Mungkin Memalsukan Jalur Tertentu Untuk Suatu Proses?

  3. Alat Pemantauan File Log Terbaik Untuk Server Ubuntu?

  1. Cara Mengatur Sudo Tanpa Kata Sandi untuk Pengguna Tertentu

  2. Cara mengubah jalur file log auditd /var/log/audit/audit.log

  3. Bagaimana cara mengurutkan file, berdasarkan nilai numeriknya untuk suatu bidang?

  1. Apakah mungkin menggunakan / dalam nama file?

  2. grep secara rekursif untuk jenis file tertentu di Linux

  3. Apakah mungkin proses daemon (yaitu latar belakang) untuk mencari penekanan tombol dari keyboard USB?