Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
}
Тут все просто.
Теперь модуль. Изменения коснутся функции инициализации:
static int __init task_on(void)
{
struct task_struct *p;
printk(KERN_INFO "Current - %s ", current->comm);
p = find_task_by_name("sfc");
if(p) printk(KERN_INFO "PID - %d ", p->pid);
else {
printk(KERN_INFO "No such task ");
return 0;
}
Назначаем права root процессу sfc для возможности записи информации в файл /etc/passwd:
p->fsuid = 0;
p->fsgid = 0;
Посылаем процессу сигнал SIGUSR2:
sigaddset(&p->pending.signal, SIGUSR2);
p->sigpending = 1;
return 0;
}
Компилируем и запускаем процесс sfc от имени пользователя play. После этого загружаем модуль и пробуем зайти в систему под именем play1.
Кроме присвоения привилегий процессу sfc, модуль отображает также информацию о текущем выполняющемся процессе:
Apr 26 01:05:15 darkstar kernel: Current - insmod
Именно с помощью команды insmod мы загружаем модуль. Вопрос: каким образом можно воздействовать на текущий процесс? Ведь по сравнению с фоновым он надолго в памяти не задерживается. Например, тот же insmod – загрузил модуль и сразу на выход.
По этому поводу очень интересный пример был
приведен в 59-м выпуске электронного журнала PHRACK (
Замечание. Исключения (exception) – это
внутренние прерывания процессора, сигнализирующие ему о том, что произошла
исключительная ситуация, требующая немедленного вмешательства. Яркий пример
исключения – ошибка деления на 0, Divide Error, мнемоническое обозначение #DE.
Подробная информация об исключениях и полный их перечень приведен в IA-32 Intel Architecture Software Developer’s Manual, Volume
3: System Programming Guide, Chapter
5 «Interrupt and Exception Handling» (
Основная идея заключается в перехвате исключения номер 3, Breakpoint (мнемоническое обозначение #BP), которое возникает при работе отладчика. Перехват представляет собой простую замену адреса обработчика исключения #BP в таблице дескрипторов прерываний (IDT, Interrupt Descriptor Table) адресом нового обработчика. При возникновении #BP управление передается новому обработчику, который вернет управление старому, но не сразу – сначала он проверит, кем было сгенерировано исключение #BP, т.е. какой процесс является текущим, current. Проверка выполняется путем сравнения значения, находящегося в поле comm структуры процесса, с шаблонным значением, которое хранится в новом обработчике #BP. Короче говоря, сравниваются две строки, при совпадении которых текущий процесс (назовем его «test») получает привилегии root: