LINUX.ORG.RU

Логирование sys call


0

1

Здравствуйте необходимо как то реализовать возможность обнаружения и сохранения системных вызовов к ядру(т.е. процесс к примеру вызывает open или mkdir, а я это дело обнаруживаю и что с этим делаю), при этом важно знать еще и передаваемые параметры.

Есть идея заюзать перехват ф-ий в самом ядре (через модуль), но это не есть красиво по понятным причинам, особенно в ядре 2.6, а если использовать ptrace, то будет сложно отловить sys call'ы ото всех процессов в системе(а надо именно так!), может есть какой то этичный способ? может готовое решение, общее падение производительности в целом не критично (в 2-4 раза можно точно +) )

И еще по поводу перехвата, уже пробовал делать, взял из файла System.map адрес sys_call_table и пробовал там поменять адрес одного вызова на другой, безрезультатно, судя по всему из-за защиты памяти(причем модуль обратно уже НЕ выгружался но и перехвата не было), собсна если чего ткните носом по поводу отключения защиты памяти или что там мне мешает сделать замену :'(

Ответ на: комментарий от anonymous

оно, конечно,замечательно не спорю, но как то не удобно отслеживать ВСЕ процессы одновременно =(, но пока буду в эту сторону идти, огромное спасибо

alexsandrch-ch
() автор топика

Можно подменить вызовы libc на свои в своей библиотеке, но работает понятное дело только с динамическими бинарниками.

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

не совсем, попытка сдать курсач по защите операционных систем =) плюс иногда охота иметь способ проверить какая зараза правит какой нить конфиг, когда не просят, помню долго искал виновника постоянного обновления resolv.conf)

alexsandrch-ch
() автор топика
Ответ на: комментарий от frey

Могу только сказать, что в закрытом sensorpoint это есть и там используется kernel probe, который перехватывает execve. Можешь реализовать аналог на sustemtap.

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

Все, SystemTap то, пошел разбираться, так просто оно не завелось, но думаю разобраться можно! Огромное спасибо всем кто откликнулся!

alexsandrch-ch
() автор топика

1. с ядра 2.6.2x страницы памяти для sys call table имеют флаг ro. можно из ядра самому поменять на rw (код где-то у китайцев есть), потом ставь хуки какие-хошь. 2. есть audit(d), редхатовский, специально созданный для логирования системных вызовов. входит в ванил кернел. логирует системные вызовы, передаваемые параметры, код возврата. собственно именно это тебе и надо. 3. если же хочется по весеннему, то в документации к ядру есть упоминание фреймворка для расстановки хуков внутри ядра (используется для отладки +секурности).

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

LSM(3) нельзя модулем подгружать, убрали после 2.6.18 экспорт нужных функций, теперь только если вместе с ядром собирать.

audit(d)(2) интересная штука, но это похоже только логи, что-то там перехватить или сделать не получится, не?

(1) :)

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

> audit(d)(2) интересная штука, но это похоже только логи, что-то там перехватить или сделать не получится, не? только логи.

LSM(3) нельзя модулем подгружать, убрали после 2.6.18 экспорт нужных функций, теперь только если вместе с ядром собирать.

фреймворк входит в ванила кернел. нашёл как оно называется - kprobe(jprobe/return probe). в документации есть образец установки хука, перехвата данных. файл kprobes.txt. ещё есть какая-то муть аля kernel markers, но не вникал. короче тут походу можно обойтись без велосипеда.

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

systemtap только логирует, изменять поведение обработчика не может.

Системтап ещё и не такое может. Я за его бурным развитием сейчас не слежу, но больше года назад он уже умел даже перехватывать вызов функций в юзерспейсе. Где-то тут на ЛОРе даже пример в сраче приведён был.

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

пользовательских функций или непосредственно сисколлов?

И функций в программе, и сисколлов, и ядерных функций.

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