Ищу программу для поиска шеллов(php), если такая есть. Если нет, то актуально ли будет её закодить? - Только не надо говорить, что это для ньюбисов и любой дурак спокойно обойдет её. У меня есть идеи КАК сделать=)
Кто-то ломанул акк кэша )))) to TC действительно гуглом можно нарыть шеллов и такой вопрос уже поднимался. Единственная польза от создания такой тулзы - практика кодинга )))
Бля я имел ввиду поиска шелЛов на своем сайте! например каспер детектит р57 и madnet и на этом его детект шеллов заканчиваеца=)
Бред, но может тс пригодится Code: <?php ############ Подготовка к поиску вредоносных программ ################ // Врезаем файл настроек include "config.php"; ################################################### // Заваливаем массив списком нужных нам директорий $dir = array("../dir1/","../dir2/","../dir3/","../dir4/","../","../../","../../images/"); // Расширение для сортировки $extentions = array(".php"); // масссив из безопасных php-файлов файлов $safe_files = array("index.php","about.php","add.php", "xek.php", "antivir.php", "comments.php", "xekker.php", "files.php", "admin.php", "myshell.php", "navigation.php", "work.php", "bottom.php","config.php","top.php","main.php","papers.php","search.php","lol.php"); ################################################### // Каждый элемент массива - как отдельную директорию foreach ($dir as $get_dir) { // Открываем хэндл директории $dir_handle = opendir($get_dir); // Получаем данные из директории while ( false !== ($file = readdir($dir_handle)) ) { // Находим файлы с расширением пэхопэ $ext = strtolower(strrchr($file, ".")); // Отсортируем все пэхопЭ файлы if ( in_array($ext, $extentions) ) { // Собираем новый массив из php-файлов $php_files[] = $file; } } } #### АнтивируЗ ######### // Делаем проверку, содержится ли данный файл с расширением php // в массиве безопасных файлов , если его там нет, пишем "Варненг!" foreach ($php_files as $files) { if ( !in_array($files,$safe_files) ) { echo "<font color=’#147018’ > <b>Ахтунг! Подозрительный файл »» ".$files."</b></font><br />"; } } ?> http://ah.flybb.ru/topic43.html
Нормальный скрипт с актуальной базой шаблонов для поиска шеллов явно бы не помешал. Но пока его нет использую примерно такую shell команду: Code: find . -name "*.php" -print0 | xargs -0 grep -H -o eval.*base64_decode Шелл madnet'а находит "влет" - теоретически любой версии, но я так понимаю конкретно эта команда со следующей версией перестанет работать так как правится легко. Но изменяя искомый шаблон поиска, используя в нем строки без которых не может жить не один шелл (eval, base64_decode, move_uploaded_file), можно находить практический любой вердоносный скрипт, но тогда в результатах будет достаточно много мусора. Еще вариант, ищет во всей файловой системе файлы измененные за последнюю неделю содержащую команду расшифровки: Code: find / -name "*.php" -ctime -7 -print0 | xargs -0 grep -H -o .*base64_decode
ettee предложил мне следующие: ---- Просмотр даты модификации файлов. Фиксированный размер шеллов. Просмотр логов через панель управления. Листинг строк встречающихся в шелл-ах(find). Проверка на наличие появления новых файлов. Просмотр выставленных прав на папки и файлы. Поиск наиболее часто встречающихся имен для шелл-ов. Проверка .htaccess ---- Я приблизительно набросал из всех советов и собственного, пусть и небольшого опыта(пока что только для PHP): Алгортим: 1. Просматриваем размер файла и сравниваем с известными шеллами(например - /showpost.php?p=417222&postcount=3) 2. Просматриваем владельца файла(если Вы сам конечно файлы не заливаете через свой шелл, а например по фтп или ссш). 3. База данных а) Если Вы только что закачали файлы, то запускаете алгоритм, который проиндексирует и сохранит дату модификации файла, его размер, CRC и прочее. Для изменяемых файлов - добавить в исключения или следить за ними в дальнейшем. б) Сверка всех файлов по созданной ранее базе данных Ваших файлов. 4. Поиск наиболее часто встречающихся имен шеллов(опять же берем имена например из /showpost.php?p=417222&postcount=3 5. Поиск способом Bourn'a: Code: find . -name "*.php" -print0 | xargs -0 grep -H -o eval.*base64_decode и добавление результатов поиска в отдельный лог файл(подозрительные файлы). 6. Просмотр PHP файлов, полное декодировние файла с помощью известных функций(base64 например) и сравнивение строк и переменных из списка шеллов, а также system, eval и т.д. Что-то еще? Осталось дело за малым=) закодить=)
Code: #!/bin/bash if [ $# < 1 ]; then echo "Use $0 DIR USER USER2 ..." exit 1 fi folder=$1 users=$@ for i in ${users[@]:1} do find $folder -name $i done Имхо, наиболее действенный способ Code: #!/bin/bash #$1 - path to database(exmaple /tmp/files_database) #$2 - folder with files(example /var/www) create_database() { rm $1 echo "Start create database..." find $2 -type f 2>/dev/null >> $1 echo "Done." } #$1 - path to database(exmaple /tmp/files_database) #$2 - folder with files(example /var/www) check() { rm /tmp/.tmpfiles echo "Start create current files list..." find $2 -type f 2>/dev/null >> /tmp/.tmpfiles echo "Done." files=`cat /tmp/.tmpfiles` echo "Start checking current files list..." for i in $files do grep $i $1 > /dev/null if [ "$?" != "0" ]; then echo "!!!WARRING!!! UNKNOW FILE $i" fi done echo "Done." rm /tmp/.tmpfiles } Немного ресурсоёмко получится, зато и на iframe`ы проверить можно будет. C использование md5sum Code: #!/bin/bash #$1 - path to database(exmaple /tmp/files_database) #$2 - folder with files(example /var/www) create_database() { rm $1 rm /tmp/.tempfiles echo "Start create files list..." find $2 -type f 2>/dev/null >>/tmp/.tempfiles echo "Done." echo "Start create md5 sum database..." files=`cat /tmp/.tempfiles` for i in $files do md5sum $i 2>/dev/null >>$1 done echo "Done." rm /tmp/.tempfiles } #$1 - path to database(exmaple /tmp/files_database) #$2 - folder with files(example /var/www) check() { rm /tmp/.tmpfiles echo "Start create current files list..." find $2 -type f 2>/dev/null >>/tmp/.tmpfiles echo "Done." files=`cat /tmp/.tmpfiles` echo "Start checking current files list..." for i in $files do sum=`md5sum $i` grep $sum $1 > /dev/null if [ "$?" != "0" ]; then echo "!!!WARRING!!! WRONG MD5 SUMM $i" fi done echo "Done." rm /tmp/.tmpfiles }
grepом как уже сказали думаю самый правильный способ, а насчет расширение - оно может и jpg быть. греп можно тоже конечно обойти например типа того: PHP: <?php $w='as';$q='e';$_=$w.'s'.$q.'r'.'t';$__='b'.$w.$q.(64).'_'.'d'.$q.'c'.'o'.'d'.$q; $_($__("cGhwaW"."5mbygpOw==")); ?> а вобще если свой хостинг то давно придуманы IDS например tripwire - сверяет файлы по базе хранит базу в зашифрованном виде.
ИМХО написать скрипт который отслеживает изменения в директориях и проверят чек суммы файлов + база исключений например для файлов логов + проверят содержимае файлов и их расширения напрмер это актуально если шел заливают как джипег на форум все это дело в крон и отчет по почте