LINUX.ORG.RU

Узнать адрес ф-ции ядра из пользовательского пространства

 kernel user space


0

1

Добрый день!
Мне необходимо в пользовательском пространстве узнать адреса в памяти некторых функций ядра. Возможности подсмотреть в System.map нету (прав не хватает на чтение). В /proc/kallsyms , чтение возможно но адреса там не указаны (везде стоит 0000000000000000) . Как быть?

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

Эм, не. Не думаю что подойдёт. Мне не ядро надо отладить, а именно для проги прикладного уровня (своей) написать код, чтоб можно было узнавать адреса некторых функций ядра. Без чтения выше описанных файлов. А адреса узнать через root я и сам могу. Повторюсь, мне нужно именно с проги прикладного уровня узнать эти адреса.

Deleted
()

В /proc/kallsyms , чтение возможно но адреса там не указаны

что-то ты делаешь не так. У меня там нули только у двух функций.

p.s. а нахрена это?

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

Вообще это всё для общего развития меня. Но я хотел сделать чтение адресов, запихнуть их в список на прикладном уровне, затем сравнить с данными уже в модуле ядра. Есть ли различия в получаемых данных в ядре и на прикладном уровне.
Насчёт /proc/kallsysm ещё раз проверил cat /proc/kallsyms везде адреса равны нулям. Система у меня 3.2.0-27-generic #43-Ubuntu

Deleted
()
Ответ на: комментарий от Deleted
0000000000000000 D irq_stack_union
0000000000000000 D __per_cpu_start
ffffffff81000180 T _stext
ffffffff81001000 T hypercall_page
ffffffff81002000 T do_one_initcall

ядро 3.5, с kernel.org

что-то ты делаешь не так. У меня там нули только у двух функций.

metawishmaster ★★★★★
()

Эксплойт пишешь?

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

у рута то же самое будет

я обычно проверяю на локальной машине правильность своего ответа... чего, как бэ, и всем советую ;)

metawishmaster ★★★★★
()

У меня в /proc/kallsyms все есть. Другой вопрос что в целях антикакерства доступа к такой информации быть не должно )

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

значит, скорее всего, это заморочки красношапкового ядра, что они скрывают от простых смертных...

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

cryptonymous
Что это такое?


metawishmaster
Да это понятно что в теории, адреса должны быть одинаковые. Но мне нужно эту проверку сделать (чтоб проверить, скрыты ли какието записи от пользовательских программ и были ли модифицированы функции ядра.)
Какой дистр используете?

ukr_unix_user
Спасибо за ссылку, почитаю.

Народ, большая просьба если не сложно, проверьте вывод команды cat /proc/kallsyms из под обычного пользователя. Выводятся ли адреса функций?
Отпишите свой дистр и версию ядра.

Deleted
()
egrep '^[^0]+' /proc/kallsyms 
# пусто
sudo egrep '^[^0]+' /proc/kallsyms 
# не пусто

Видимо какер просто так не пройдёт на штатном ядре убунты.

P.S.

$ lsb_release -rd
Description:    Ubuntu 12.04 LTS
Release:        12.04

$ uname -ri
3.2.0-26-generic x86_64
(Интересно. как там ситуация для x86 ?)

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

egrep '^[^0]+'

Прошу прощения, конечно же я имел ввиду использовал

egrep '^[^0]{16}'

KennyMinigun ★★★★★
()

костыль, но можно так

gdb /bin/cat

а потом

break нужная_функция

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

Выводятся ли адреса функций?

Отпишите свой дистр и версию ядра.

да. ubuntu, 2.6.32-41-generic-tuxonice

dikiy ★★☆☆☆
()

ну, вообще, видимо в некоторых дистрибных ядрах есть что-то типа

static int kallsyms_proc_show(...)
{
    current_uid_gid(&uid, &gid);
...
    if (uid == 0) {
        addr = get_sym_addr()
    } else
        addr = 0x0;
...
поэтому однозначного ответа на впрос «как быть/что делать?» не будет... ну если только не найти какую-нить дырку в ядре и не повысить себе привилегии %)

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

Поясните если не сложно) каким образом через дырку в ядре себе повысить привилегии? Как обратиться к бажной функции ядра? из пользовательского пространства? разве это процессором не отслеживается?

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

Это будет полезно при написании шелл-кода, допустим, юзающего переполнение буфера. Это позволит исполнить произвольный код в контексте ядра. Но нам же мало этого, нам нужно вызывать его функции для нормально работы (мы же не просто порушить его хотим некорректным кодом). А тут адреса функций будут очень полезны.

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

Arch Linux x86_64. Ядро 3.4.6. Выводится полный список без нулей.

KivApple ★★★★★
()

objdump -D vmlinux > obj.S

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