2015-07-30 3 views
1

Я пытаюсь написать сканер бэкдор-брандмауэр, который может вызвать функцию fopen в pam_sm_authenticate (обычный файл не будет вызывать fopen в этой функции), чтобы сохранить имя пользователя и пароль, но я не могу использовать внешнюю команду, такую ​​как «nm, readelf "или что-то в этом роде, так что единственный способ, по-видимому, сканировать функцию pam_sm_authenticate и найти все инструкции вызова и запросить адрес, чтобы проверить, вызван ли он fopen, но это слишком хлопотно, и я не очень хорошо знаком с файлом ELF (I даже не знаю, как найти смещение pam_sm_authenticate, я использую dlopen и dlsym, чтобы получить адрес ..), поэтому я задаюсь вопросом, есть ли лучший или простой способ его обнаружить? Спасибо.Как определить функцию, называемую fopen или нет?

ответ

0

TL; DR: создание надежного «сканера бэкдор-брандмауэра» теоретически невозможно, поэтому теперь вы должны отказаться и подумать о других способах решения вашей проблемы.

Ваш вопрос очень запутанным, но я думаю, что то, что вы спрашиваете, «я могу определить программно ли pam_sm_authenticatefopen вызовы».

Это неправильно вопрос задать, по нескольким причинам:

  • если pam_sm_authenticate вызовы foo и foo звонки fopen, то вы все еще есть проблемы, так что вы действительно должны сканировать pam_sm_authenticateи каждая функция, которую он называет (рекурсивно),
  • fopen is far с пути записи файлов: вы также можете использовать open, или system (как в system("echo $secret > /tmp/backdoor"), или непосредственно sys_open syscall, или множество других хаков.
  • наконец, pam_sm_authenticate можно использовать just-in-time compilation методы для построения произвольного кода (включая код вызывающего fopen) во время выполнения, и отвечая, делает ли он, рассматривая ее код эквивалентен решению halting problem (т.е. невозможно).
+0

Большое спасибо! Я уже отказался от этой идеи .... – tester017

+0

Ваша программа могла бы также выполнять функции 'dlsym()' или искать их непосредственно в процессе, итерации по таблицам символов ELF и т. Д. – ysdx

Смежные вопросы