Comments 28
UFO just landed and posted this here
Метод можно и доработать. К примеру — сохранять md5 файла, потом по крону запускать проверки и бить тревогу, если содержимое (а не только дата модификации файла) изменилось.
Ну и в дополнение, выдать разработчикам «кнопочку» для пересчета сумм после завершения работы.
Ну а в идеале — прикрутить все это на кои-то системе контроля версий…
Ну и в дополнение, выдать разработчикам «кнопочку» для пересчета сумм после завершения работы.
Ну а в идеале — прикрутить все это на кои-то системе контроля версий…
У вас на скрипты права 777 чтоли?
1) Большинство шеллов при внедреннии изменяют дату редактирования файла, тем более это очень несложно сделать средствами самого пхп.
2) Вы опять изобрели велосипед, при чем очень кривой. Есть готовые тулзы. Если хотите сканер, то тогда лучше сверять хеш-суммы файлов, которые хранятся отдельно.
2) Вы опять изобрели велосипед, при чем очень кривой. Есть готовые тулзы. Если хотите сканер, то тогда лучше сверять хеш-суммы файлов, которые хранятся отдельно.
Чтобы выставить желаемую дату изменения файла используют функцию touch(), поэтому если скрипт-кидди воспользуются скриптом получше, Ваш способ не сработает.
ИМХО, такой алгоритм получше будет:
1) до заражения проходимся по всем файлам и собираем ихние md5 хеши в файл,
2) после атаки взломщиков опять проходитесь по всем файлам, собирая хеши,
3) сравниваете «чистые» хеши с хешами после заражения — где они разные — файл был изменен
ИМХО, такой алгоритм получше будет:
1) до заражения проходимся по всем файлам и собираем ихние md5 хеши в файл,
2) после атаки взломщиков опять проходитесь по всем файлам, собирая хеши,
3) сравниваете «чистые» хеши с хешами после заражения — где они разные — файл был изменен
Согласен что что топик мало поможет. Но если есть возможность пройтись до заражения, то имхо лучше уж сделать git init && git commit -a -m «Initial code» && tar -czf /backup/mysite.tar.gz .git, впоследствие можно будет не только проверить что что-то изменилось, но и увидеть что именно и мгновенно отменить (git reset --hard HEAD)
Самый простой сканер с примерно такой же логикой (изменённые за последние 30 дней):
find -name "*.php" -mtime -30 -ls
Можно при желании добавить игнор каких-то папок, а так же слать результат кроном на почтовый ящик.Друзья, спасибо за конструктивную критику. Мой пост бесполезен для гуру, главная задача поста — задать направление мысли для новичков, которые сталкиваются с проблемами и не могут их решить.
Алгоритм, предложенный мной прост, и его можно улучшать до бесконечности, а совместив мой пост и изучив ваши комментарии можно придумать свой «велосипед» для борьбы с внедрением.
Алгоритм, предложенный мной прост, и его можно улучшать до бесконечности, а совместив мой пост и изучив ваши комментарии можно придумать свой «велосипед» для борьбы с внедрением.
А что мешает просто проверить (?:git|svn|cvs) diff?
Может, просто искать ключевые слова в файлах?
Например,
Например,
find . -name "*.php" -exec grep -q "<iframe" {} \; -print
find . -name "*.ht*" -exec grep -q "<iframe" {} \; -print
Намного более действенный вариант — список файлов + их контрольная сумма md5, полученные при начальном развертывании системы. Генератор этой информации, равно как и проверяльщик изменений пишутся элементарно, в том числе удаленно по ftp или ssh.
Да не надо ничего писать, всё уже написано давно.
Сохраняем себе контрольные суммы:
Сохраняем себе контрольные суммы:
ssh myserver.com 'find path/to/site -exec md5sum {} \;' > sum_control.txt
а потом таким же образом получаем текущие суммы в sum.txt и смотрим разницуdiff sum.txt sum_control.txt
Файл хранится локально на машине разработчика, злоумышленник к нему никак не доберётся.А почему не просто chmod -w? Админ из меня никакой, сильно не бейте… но все равно не понимаю.
Я бы просто раздел с скриптами в R/O смонтировал.
просто оставлю, а то код словно с прошлого тысячелетия www.php.net/manual/ru/recursivedirectoryiterator.construct.php
Вы помоему сам недавно программируете? Вы меня простите, но ставте комментарии к коду НАД строкой кода, а не после.
И научитесь уже называть методы по-человечески. Что вообще значит scan_tree? Отсканировать_Дерево. Вы словно пишите код, который установлен на ваших сайтах (старый и дерьмовый).
Называйте так, чтобы другой человек понял о чем идет речь.
get_changed_files() какой-нибудь, но никак не scan_tree.
И научитесь уже называть методы по-человечески. Что вообще значит scan_tree? Отсканировать_Дерево. Вы словно пишите код, который установлен на ваших сайтах (старый и дерьмовый).
Называйте так, чтобы другой человек понял о чем идет речь.
get_changed_files() какой-нибудь, но никак не scan_tree.
Вы правы, я программирую не так давно и часто выдумываю велосипеды, от чего и страдаю.
Данный скрипт не использую в реальной жизни.
Доступа по SSH у меня к серверу нет и я ещё не силен в системах контроля версий.
Для себя я нашел, как мне кажется самый простой способ:
Работаю я в PHP Storm, которая имеет возможность сравнивать текущие локальные файлы и файлы на FTP сервере, сравнивает именно по содержимому файла. На мой взгляд это самый простой способ слежения за изменениями для начинающего разработчика (вроде меня) не имеющего опыта работы с SHH или системами контроля версий.
Данный скрипт не использую в реальной жизни.
Доступа по SSH у меня к серверу нет и я ещё не силен в системах контроля версий.
Для себя я нашел, как мне кажется самый простой способ:
Работаю я в PHP Storm, которая имеет возможность сравнивать текущие локальные файлы и файлы на FTP сервере, сравнивает именно по содержимому файла. На мой взгляд это самый простой способ слежения за изменениями для начинающего разработчика (вроде меня) не имеющего опыта работы с SHH или системами контроля версий.
Sign up to leave a comment.
Простой сканер внедрения кода на PHP