Я пытаюсь написать сканер бэкдор-брандмауэр, который может вызвать функцию fopen в pam_sm_authenticate (обычный файл не будет вызывать fopen в этой функции), чтобы сохранить имя пользователя и пароль, но я не могу использовать внешнюю команду, такую как «nm, readelf "или что-то в этом роде, так что единственный способ, по-видимому, сканировать функцию pam_sm_authenticate и найти все инструкции вызова и запросить адрес, чтобы проверить, вызван ли он fopen, но это слишком хлопотно, и я не очень хорошо знаком с файлом ELF (I даже не знаю, как найти смещение pam_sm_authenticate, я использую dlopen и dlsym, чтобы получить адрес ..), поэтому я задаюсь вопросом, есть ли лучший или простой способ его обнаружить? Спасибо.Как определить функцию, называемую fopen или нет?
1
A
ответ
0
TL; DR: создание надежного «сканера бэкдор-брандмауэра» теоретически невозможно, поэтому теперь вы должны отказаться и подумать о других способах решения вашей проблемы.
Ваш вопрос очень запутанным, но я думаю, что то, что вы спрашиваете, «я могу определить программно ли pam_sm_authenticate
fopen
вызовы».
Это неправильно вопрос задать, по нескольким причинам:
- если
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 (т.е. невозможно).
Смежные вопросы
- 1. Скрыть функцию, не называемую
- 2. Как проверить рекурсивно называемую функцию в NodeJS?
- 3. Как использовать функцию CakePHP, называемую generatetreelist?
- 4. Как остановить функцию setTimeout(), называемую self-called?
- 5. Как определить функцию ARM написано большим пальцем или нет
- 6. PHP: fopen: Нет такого файла или каталога
- 7. CodeIgniter познай контроллер, который называемую функцию
- 8. fopen() работает, dio_open() нет?
- 9. Как реализовать лямбду как функцию, называемую лямбдой в Clojure?
- 10. Как обрабатывать функцию javascript, называемую onload в фоновом режиме?
- 11. Определить функцию, определенную как выражение или декларацию как функцию
- 12. Как определить функцию «или» в Haskell?
- 13. Определить приложение, установленное или нет?
- 14. Как определить, установлена или нет переменная?
- 15. Как определить sql-запрос выполняется или нет?
- 16. Как определить браузер Firefox 3.6+ или нет
- 17. Как определить, существует ли кадр или нет
- 18. Как определить изображение graycscale или нет
- 19. Как определить кодированный формат base64 или нет
- 20. Определить пользовательский класс как DataContract или нет
- 21. Как определить, нажата ли кнопка или нет
- 22. C, как определить функции существуют или нет
- 23. Как определить селектор NSTimer, вызванный или нет
- 24. AngularJS: Как определить модель отключена или нет
- 25. Как определить переменную PHP массив или нет
- 26. Как определить, подключен ли сокет или нет?
- 27. «fopen» возвращает NULL - «нет такого файла или каталога»
- 28. FOPEN возвращается Нет такого файла или каталога, файл существует
- 29. Как тянуть ветку, называемую «тегом»
- 30. Как определить, является ли файл файлом javascript или нет?
Большое спасибо! Я уже отказался от этой идеи .... – tester017
Ваша программа могла бы также выполнять функции 'dlsym()' или искать их непосредственно в процессе, итерации по таблицам символов ELF и т. Д. – ysdx