Антивирус на php.

Discussion in 'PHP' started by r0, 13 Apr 2007.

  1. r0

    r0 Elder - Старейшина

    Joined:
    17 Jul 2005
    Messages:
    450
    Likes Received:
    149
    Reputations:
    147
    Идея.
    Скажем, у Вас есть свой проект (пусть тот же хеко-саент) который Вы холите и лелеете.
    Но Вам постоянно докучают злобные хэккеры, ужасающе втыкивающие кавычку в адресную строку и пишущие алерт(/лол/) в Ваших комментах.
    Да мы не идеальны, допустить одну брешь можно и да наверно, скорее, нужно. Писать без ошибок не получается только у тех, кто не пишет ничего. Ну так вот, допустим писали вы свой проект и допустили такую маленькую ошибочку, а злобный хакер применив свой талант втыкивать в нужное место кавычку и хеккерский прием (инто аутфайл) закатал Вам свой шелл.
    А теперь надену галстук и скажу немного серьезнее.
    Вчера мне пришла нетрезвая мысль написать «антивирус» для своего блога. Из всего выше изложенного бреда, можно уяснить, что данный скрипт будет искать гадкие веб шеллы.

    Приступ к алгоритмизации и последующей реализации.
    PHP:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
    <head>
    <title>r0: АнтивирУс f0r pr0j3c7</title>
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
    </head>
    <body>
    <center>
    Ant1v1rus


    <?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>Ахтунг! Подозрительный файл &raquo;&raquo; ".$files."</b></font><br />";
    }
    }
    ?>
    </center>
    </body> 
    </html>


    Поясню.
    Моя логика была такова: имеется массив с названием папок(он же $dir), из которого затем извлекаются имена файлов, у которым делаем обрезание(по расширению) и если этой php-файл заносив его в новый массив, элементы которого проходят проверку на вшивость из уже имеющегося массива заданных файлов.

    P.S Конечно, если хеккер проникает внутрь то он может залить свой шелл как index-файл в любую диру, но это представляет опасность с точки зрения многих искателей приключений, хочется как бы затаиться, поэтому и придумывают имена отличные от index.php =))
    ЗУФСУ !
     
    2 people like this.
  2. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    вообще от такой фигни пользы практически нет.
     
  3. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    А что мешает хакеру, залившему шелл, добавить его в список разрешенных?
    Имхо такую вещь надо реализовывать так: делать скрипт на баше, который раз в Н часов (по крону) проверяет папку на наличие подозрительных файлегов и в случае обнарежения оных отправляет админу письмо.

    Примерно, вот так:
    Code:
    my $dir = '/usr/local/bin/apache/htdocs';
    my @files = qw(index.php guestbook.php forum.php);
    
    foreach my $toCheck(<$dir/*.php>)
    {
      my $valid = 0;
      foreach my $pattern(@files) { $valid = 1 if $toCheck =~ /$pattern/ }
      sendMail(...) unless $valid;
    }
     
    #3 KSURi, 13 Apr 2007
    Last edited: 13 Apr 2007
    1 person likes this.
  4. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    проникнувший на саент хэкка может внедрить злостный код прямо в антивирус и он будет писать чтонибудь матное или работать не так как полагается или просто удалить или он просто ... вот так вот =\
     
  5. r0

    r0 Elder - Старейшина

    Joined:
    17 Jul 2005
    Messages:
    450
    Likes Received:
    149
    Reputations:
    147
    2KSURi:
    Огасики.. Тогда уж сообщение на сотовый =)
    Я не кожу на баше =/

    Может и да =) Мне нравиться мыслить

    к0к0й уж0с.. надо уд0лить пока он не написал моей маме, что меня похекали...
     
  6. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    2r0
    фишка не в мыле, фишка в том, чтобы хакер не имел доступа к скрипту авира.
     
  7. r0

    r0 Elder - Старейшина

    Joined:
    17 Jul 2005
    Messages:
    450
    Likes Received:
    149
    Reputations:
    147
    Ну да, ты прав..
     
  8. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    еще вариант в зенде его зашифровать.
     
  9. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    Я нечто подобное писал, даже где-то сохранилось. Мой скрипт искал новые файлы, и если файл подпадал под критерий опасности посылала мне на мыло информацию.
    + проверял размеры всех существующих файлов с теми же размерами хранящимися в базе. Эта проверка раз в сутки запускалась.
    Отдельно можно было запустить проверку контента новых и измененных файлов на предмет наличия "опасных функций".

    Вещь на самом деле полезна для тех кто любит устраивать на ФТП своего сайта свалку, так что потом в случае чего хрен поймешь что твое а что чужое.
     
  10. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Zend не спасение, Zend платный... Проще уж стандартными средствами
     
  11. Gh0s7

    Gh0s7 Elder - Старейшина

    Joined:
    23 Nov 2006
    Messages:
    160
    Likes Received:
    231
    Reputations:
    242
    Как я понял, скрипт проверяет только определенные диры?
    Что мешает сделать mkdir pohek; echo 'evil c0de here' > pohek/xek.pl ?
     
  12. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    В идеале он должен рекурсивно проверять все диры и файлы из некой корневой точки
     
  13. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    это верно, причем проверять на наличие любых изменений в файлах и отслеживать появление новых, т.к. простой парсинг файлов на предмет наличия "опасных" функций легко можно обойти..
     
  14. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Ненадо такое писать а тем более класть в паблик.
    "Не пили ветку, на которой сидишь."
     
  15. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    А мне идея понравилась... К тому же, я на этой ветке не сижу ;)
     
  16. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    уже писали и выкладывали подобные скриптики..
    кроме того под *nix ведь тоже бывают антивирусы, которые умеют искать и веб-шеллы..
     
  17. flipper

    flipper Elder - Старейшина

    Joined:
    5 Sep 2006
    Messages:
    131
    Likes Received:
    85
    Reputations:
    29
    Подобный скрипт может помочь владельцу сайта, но теперь представьте админа сервера (примерно на 1к сайтов) которого зафлудит мессагами :)
    PS: код php вообще не читаем раскраска ужасна (берите пример с vim)
     
  18. TANZWUT

    TANZWUT Крёстный отец :)

    Joined:
    22 Jun 2005
    Messages:
    1,474
    Likes Received:
    716
    Reputations:
    744
    Вспоминаем сниффер!!!
    к примеру через SQL-inj или PHP-inj заливаем shell.jpg и .htaccess который будет асоциировать картинку с php файлом. ;)
    ну а далее дело техники....
    Квартет (с) Крылов ;)
     
    _________________________
  19. Talisman

    Talisman Elder - Старейшина

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    аффтар жжот)
    нужна рекурсия по дире:
    PHP:
      function scan_dir($dirname
      { 
    //echo ';'.$dirname.'<br />';
        
    GLOBAL $text$retext
        
    $dir opendir($dirname); 
        while ((
    $file readdir($dir)) !== false
        { 
          if(
    $file != "." && $file != ".."
          { 
          if(
    is_file($dirname."/".$file)) 
            { 
    echo 
    '[B]'.$file.'[/B] : '.(filesize($dirname.'/'.$file)/1024/1024).' MB<br />';
            } 
            if(
    is_dir($dirname."/".$file)) 
            { 
    //          scan_dir($dirname."/".$file); 
            

          } 
        } 
        
    closedir($dir); 
      }
      
    scan_dir('C:\Documents and S............');
    код сканера, который я юзал, чтобы названия книжек собрать))
    добавить функцию хеширования файла мд5 и проверять чек-сумму, ведь обычно код встраивают в существующие файлы.
    проверять на всяк дату изменения (если ты параноик) но это просто обойти.
    скрыть сам скрипт антивируса, например в свою домашнюю диру.
    или же сверять файлы с копией в надежном месте.
    + верно отмечено, зырить так же нужно и на спец файлы веб-сервера (.htaccess .htpasswd)
    Конечно, когда серв под 1 проект, или он под хрутом, то лучше всего вырезать все "ненужные" форуму функции пшп машины.

    ЗЫ считаю глупостью рассказывать свои применяемые методы, т.к. это ослабит их защиту)
     
  20. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    эти методы и так не дают никакой защиты, разве что от полных нубов, которым дали ссылку на шелл.