перехват вызовов библиотечных ф-ций в linux и bsd

Тема в разделе "WASM.UNIX", создана пользователем n2k, 3 апр 2006.

  1. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    как узнать какие функции вызывает подопытная программа? в windows существует целый арсенал шпионских средств, но linux-хакерам весь инструментарий приходится разрабатывать самостоятельно. сейчас мыщъх покажет как осуществляется перехват и подмена (!) системных и библиотечных функций в linux и *BSD



    p.s. критика только приветствуется

    [​IMG] _1240548752__linux.hook.lite.zip
     
  2. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    54 просмотра - а критики как не бывало.

    нэхарошо поступаете, товарищи!
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Почитал. Правда пока не проверял код на правильность. Довольно интересно, я еще не сталкивался с использованием /dev/mem.

    Единственное, что хочу добавить . Много опечаток (надеюсь это именно опечатки, а не что-то другое) .

    И еще - у меня не отображались рисунки.
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Сравнение LIBC с KERNEL32 неуместно, IMHO. LIBC - сишная библиотека (как MSVCRT) и особого отношения к ядру не имеет.



    Про /dev/mem не знал. Очень интересно. Обязательно попробую.
     
  5. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    Quantum

    по поводу LIBC - у всех свои ассоциации ;)

    KERNEL32.DLL к _ядру_ вообще никаким боком.

    у меня LIBC ассоцируется именно с KERNEL32.DLL,

    поскольку в ней реализованы базовые функции,

    необходимые практически любому приложению,

    ИМХО такая аналогия имеет право на сущестование.



    я там еще и с "импортом" намудрил ;)

    там аналогия еще более натянутая,

    можно даже сказать притянутая за уши ;)





    TermoSINteZ

    рисунков там и нету. иначе бы аттач не влез.

    полная версия на ftp в файле zq-linux.hook.zip





    P.S. если есть интерес, могу выложить еще несколько линуховых статей



    P.S2. буду рад, если погоняете код на своих машинах в плане проверки на совместимость

    готовые сорцы в zq-linux.hook.files.zip



    P.S3. всем спасибо ;)
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Интерес к линуксу всегда есть :) И будет. Так что , статьи по системному программированию в линуксе приветствуются - их мало.
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    n2k



    Это и есть ядро для пользовательского уровня, т.е. для прикладного ПО. Софт опирается в большей степени на kernel32, чем на ntdll. Ближайший родственник LIBC, который уже приобрёл в Win32 статус системной библиотеки (короче, MSVCRT), тоже опирается на это "ядро". LIBC - гнутая реализация стандартных сишных функций. Не возникает у меня почему-то ассоциаций между этими двумя библиотеками... Может, у читателей такие ассоциации и возникнут...





    Если про фразу "Библиотеки могут подключаться как на стадии загрузки elf-файла через таблицу символов (аналог таблицы импорта) [...]", то ничего мудрёного в сравнении не вижу. Тут как раз всё правильно, IMHO.
     
  8. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    Quantum

    ладно, ассоциации дело такое...

    у каждого они свои...

    но ты мне скажи, согласен ли ты,

    что задачи, решаемые в NT перехватом KERNEL32.DLL

    в UNIX (обычно) решаются перехватом LIBC?



    если в NT большинство программ юзают CreateFile

    из KERNEL32.DLL, то в UNIX'е - fopen из LIBC

    и таких аналогий можно привести множество...
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    n2k



    Почти всё никсовое ПО использует LIBC. Очень немногие программки юзают облегчённые версии LIBC и совсем немногие осмеливаются обращаться к ядру через syscalls. Да, к сожалению, это так. Но обьясняется этот статус кво тем, что никсоиды обычно пишут своё ПО на C/C++ и компилят его с помощью GNU C++. Результат: почти все юзают GNU C library.
     
  10. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898


    а в винде иначе? Всяко ведь проще использовать заглушки для syscall'ов из libc (или даже дополнительные навороты типа fopen), чем создавать свои заглушки... какой в этом резон? ради того чтобы inline'ить эти заглушки? мне кажется в этом мало смысла. А если чтобы было не перехватить, дык кому надо, в ядро вставит перехват, благо ядро opensource.



    n2k с удовольствием бы почитал, но... меня так ломает ставить что-то, что поймёт .doc... Венды нету, OO огромен до ужаса, а в возможности abiword'а я по старой памяти не верю, да и в депендансах у него весь gnome. Конвёртеры искать лень, да и не факт, что они справятся.

    мож в pdf/ps/djvu/html/txt выложишь?
     
  11. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    r90

    не согласен по поводу перехвата.

    часто выгоднее перехватывать либы, чем ядро,

    тем более что многие функции реализованы

    в либах (типа _dl_open), да и вообще...



    во всяком случае, обнаружив кучу инструментов

    для перехвата системных вызовов и не найдя

    ничего подходящего для перехвата либов,

    я вот ковырнул этот вопрос своим хвостом.



    вот в html. конвертировал word'ом,

    так что качество сами понимаете...

    но лис его перевариает ;)



    [​IMG] _1884794825__nix_h.zip
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    r90



    У MS есть своя LIBC под названием MSVCRT, у Borland - своя. Но Win32 всё-таки не так тесно связана с C/C++ как никсы, поэтому роль стандартной сишной либы в винде сильно отличается от роли LIBC в Линуксе. Вспомните, что когда-то динамическую сишную либу в винде нужно было таскать вместе с приложением :)





    "Проще" или нет зависит от ТЗ и, частично, от разработчика.
     
  13. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    n2k



    спасибо. почитал. надо будет заставить-таки libc собраться с -fomit-stack-frame ;)

    Вот поразвлекаюсь с перехватом, и займусь.



    Замечу, между прочим, что имея права рута, можно подменять библиотеки указанные с абсолютными путями сказав chroot.
     
  14. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    r90

    вариантов много.

    и вариант с подменой либы я вроде бы упоминал...



    -fomit-stack-frame тебя не сильно спасет.

    на многоЦПшных машинах это даже не усложняет перехват.

    а так... как защита от ламеров - сойдет
     
  15. nuker

    nuker Alexander

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    1
    Адрес:
    Kiev
    Да. Прочилал вот и я. Не скажу, что я очень уж навороченный кодер. Но всё-же.
    Упоминается про /dev/mem. Да кто ж её даст читать обычному юзверю?

    Больше всего меня заинтересовала техника трассировки. И по ходу размышлений возник следующий вопрос.
    Есть некоторый executable .ELF файл. У него есть чёткий заголовок, всё расписано, разтолковано.

    Я выполняю следующие действия. Запускаю программу в виде child процесса для трассировки. И далее мне требуется узнать, имея лишь PID процесса, точку входа в программу, расположения стека и global offset library. Как это сделать? Перекопав немало литературы, я узнал, что необходимо найти в памяти таблицу процессов, запись отвечающую за конкретный процесс, и там уже по ней двигаться дальше - т.е. искать всю интересующую информацию. Но какой функцией или чем-нить ещё можно это отрыть?

    Пока гуглю... Но может с этим кто-нить работал?

    Linux ami 2.6.14-gentoo-r5 #17 Sat Jan 28 02:03:43 EET 2006 x86_64 AMD Sempron(tm) Processor 2800+ AuthenticAMD GNU/Linux

    Моя система.
     
  16. int_0dh

    int_0dh New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    стек обычно начинается от 0xc0000000, однако всегда можно получить копию регистров трассируемого процесса с помощью PTRACE_GETREGS (дабы вытащить оттуда esp und ebp). для получения всего остального (точки входа и GOT) достаточно анализа ELF заголовка.

    не хочу быть занудой, но может все-таки man ptrace? по ELF неплохая дока лежит где-то на ресурсе
     
  17. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    PTRACE имеет один досадный недостаток. Он может не быть в ядре.