LINUX.ORG.RU

Перехват sys_clone 2.6.32


0

1

Как многим, наверное, известно sys_call_table не экспортируется сейчас ядром и в последних ядрах помечена как rodata. Эта проблема решаема простой пересборкой ядра с небольшими изменениями. После решения этой загвоздки, к примеру перехват sys_open работает отлично, однако же замена sys_clone даже на такой безобидный код

int our_sys_clone(struct pt_regs * pregs)
{
	printk("in our_sys_clone\n");
	return original_call(pregs);
}

приводит к непредсказуемым последствиям: падение ядра, невнятные сообшения в консоли и т.п.

Сразу оговорюсь, что перехват мне нужен не для создания руткитов и других злодеяний.



Последнее исправление: knorr (всего исправлений: 1)

Должен быть более очевидный способ решения задачи.
Значит ее - в студию.

x4DA ★★★★★
()
Ответ на: комментарий от x4DA

Необходимо ограничить число процессов пользователя. но при этом число потоков должно быть больше на 1.

knorr
() автор топика
Ответ на: комментарий от k0l0b0k

Читал, таки нет, не помогает. ulimit позволяет выставить одно ограничение и на число процессов и на число потоков (те поток==процесс).

knorr
() автор топика
Ответ на: комментарий от knorr

Прежде чем задавать вопрос пару дней гуглил и читал маны, потом взялся за LKM и даже реализовал алгоритм, но запустить его не могу и понять, в чем причина сбоев, - тоже (раньше в ядре правил только vid и pid для поддержки устройств).

knorr
() автор топика
Ответ на: комментарий от k0l0b0k

Собственно, вот: At least in Linux 2.6 systems with NPTL, the limit does not really apply to the number of processes, but to the number of threads.

knorr
() автор топика

> ядра с небольшими изменениями.

покажите эти изменения.

а то я вообще не понимаю как это связано с sys_call_table[],
там sys_clone нету (если дело на x86 происходит). у нас там
stub_clone, см arch/x86/kernel/entry_64.S

P.S. и да, зачем все-таки перехватывать - так и не понял.

idle ★★★★★
()
Ответ на: комментарий от idle

Речь идёт о x86_32. Другого решения я не нашёл - поэтому взялся за LKM.

knorr
() автор топика
Ответ на: комментарий от knorr

> + .section .data,«aw»

#include «syscall_table_32.S»


и? дальше-то как делаете?

ладно. у меня закрадывается ужасное подозрение,
что у вас там что-то вроде

original_call = sys_call_table[__NR_clone];
sys_call_table[__NR_clone] = our_sys_clone;

так оно, конечно, работать не будет.

original_call в этом случае не sys_clone(), а ptregs_сlone().
см arch/x86/kernel/entry_32.S:PTREGSCALL(clone).

idle ★★★★★
()
Ответ на: комментарий от idle

Да, Вы абсолютно правы, так я и делаю, но мне так подсказал ltrace -S test. Спасибо за подсказку.

knorr
() автор топика
Ответ на: комментарий от idle

Я извиняюсь, но не совсем понял, ptregs_clone находится в sys_call_table под тем же номером (120), ну подменяем мы вместо sys_clone ptregs_clone, не работает-то почему?? Параметры не совпадают??

knorr
() автор топика
Ответ на: комментарий от knorr

> ну подменяем мы вместо sys_clone ptregs_clone,

не работает-то почему??


ну, даже не знаю, как обьянить ;)

да вы на код-то то ptregs_clone() гляньте.

ну, вот что, по-вашему будет в %eax если ptregs_clone()
будет вызвана из our_sys_clone()? похоже это будет на
регистры задачи?

и, в любом случае, не надо вам этого делать.

idle ★★★★★
()
Ответ на: комментарий от idle

Да, код я смотрел в eax передаётся указатель на стек (прошу простить мне мои жалкие познания ассемблера).

и, в любом случае, не надо вам этого делать.

Если так делать не надо, и если не сложно, поясните, как надо делать??

knorr
() автор топика
Ответ на: комментарий от knorr

> в eax передаётся указатель на стек

вот. а в стеке у нас спрятался искомый pt_regs,
но это только если caller is system_call/etc.

а если вы вызываете ptregs_clone() из вашего
our_sys_clone(), стек фрейм будет уже другой.

мои жалкие познания ассемблера


мои не факт что лучше ;)

поясните, как надо делать??


да хрен его знает, задача уж больно странная.

ну, перехватывайте тогда уж security_ops->task_create(),
все проще и естественней.

или просто добавьте свой хак в copy_process(), все равно
же ядро патчите.

idle ★★★★★
()
Ответ на: комментарий от idle

Действительно: гулять, так гулять. Спасибо за советы.

knorr
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.