В общем, нужно запретить запуск некоторых процессов, которые занесены в черный список. Нашел 2 варианта:
- Цеплять к каждому процессу ptrace.
- Подменить sys_execve().
Решил реализовать второй вариант, т.к. первый показался мне уж слишком ужасным.
В общем, реализовал некий LKM, который находил адрес таблицы системных вызовов и подменял там адрес sys_execve() на адрес моей функции (которая вызывала системную функцию для разрешенных процессов или выходила бы, если процесс в списке запрещенных). Так вот, сначала проверил модуль на вызове sys_open() и все нормально заработало. Я обрадовался, однако моя радость продлилась недолго, ибо когда я подменил sys_execve() и внутри своей функции просто выводил первый аргумент (путь и имя бинарника) и запускал стандартный обработчик - комп ребутнулся. После того как я убрал вывод в консоль, просто перестали запускаться процессы. Ну и вот сегодня я прочел, что с подменой именно этого системного вызова не все так просто, однако дальнейшие поиски ничего не дали, поэтому я обратился сюда. Думаю, приводить мой код нет смысла, т.к. проблема явно не в реализации.
Версия ядра - 3.11
Буду благодарен хоть за какие-то подсказки.
Перемещено beastie из security