Защита SimpleTDS от взлома брутфорсом
Как-то раз, на сайте всем известной Simple TDS, я наткнулся на предупреждение mizhgan-а (автора этого замечательного скрипта) о том, что некоторые сетевые личности активно ищут домены с этой TDS-кой и брутфорсят её админку, дабы поиметь халявного трафика.
В том же предупреждении, автор рекомендует не ставить простых паролей, изменить название файла редиректа go.php (правда, это возможно до пуска трафика через скрипт), закрыть индексацию домена в файле robots.txt и постоянно следить за схемами.
Подпишусь под каждым словом mizhgan-а, но как показывает опыт, и этих предосторожностей не хватает для защиты.
Дело в давно известном факте, что Google все равно ставит в выдачу урлы, через которые постоянно идет траф, даже если домен закрыт robots.txt. А тут, сами понимаете, и до злобных хацкеров с парсилками и брутфорсерами уже недалеко
И так как эта проблема актуальна, то мной была написана простейшая плюха-ренеймер для защиты Simple TDS 1.3beta от брутфорса. При её регулярном применении, злоумышленнику, для того, чтобы начать подбор пароля на админку, придётся сначала найти саму страницу с формой
Вот описание плюхи и оно гораздо длиннее самого скрипта
:
Сама плюха представляет собой файл rename.php и предназначена для изменения на лету имен файлов дистрибутива Simple TDS (и в самих файлах тоже).
Для её установки нужно:
0. Выставить на корневую папку TDS права 777 (для некоторых хостингов понадобится выставить для файлов права 666),
1. Сам файлик rename.php положить в корневую папку TDS-ки,
2. Вставить ренеймер в меню админки: для этого нужно изменить файлы дистрибутива SimpleTDS — header.php и support.html, добавив в их меню строку вида:
<a class="menu" href="rename.php">Rename Files</a>
3. И еще понадобится отключить вывод индекса папки, положив в папку с TDS .htaccess со строкой:
Options -Indexes
Это нужно из-за того, что некоторые хостинги, при отсутствии файлов index.html, index.htm или index.php вместо ошибки «403 Forbidden» запросто вываливают содержимое папки.
После этого в админке появится новый пункт меню “Rename Files”.
Применение простейшее: при нажатии на кнопку [Rename] все php/html/htm-файлы, в корневой папке скрипта, переименуются (кроме go.php и cron.php), так же заменятся их имена в телах файлов. Запускать переименование можно любое количество раз — при каждом запуске плюха заново изменит названия в именах файлов и в их телах. После нажатии на [Restore] всё возвращается в исходный вид, даже после многократных переименований.
Пример: Если до запуска ренеймера файл назывался index.php, то после будет называться, к примеру, index-1f3870be274f6c49b3e31a0c6728957f.php, т.е. в новом имени останется старое и появится рандомная часть. Если же нажата кнопка “Restore”, то файл опять обретёт имя index.php.
Плюха не меняет названия файлов go.php и cron.php, так как их можно менять только при установке TDS, т.е. пока не пущен трафик или пока архивация не поставлена на крон.
В будущем, перед каким-либо изменением кода самой TDS или добавлением аддонов/плагинов и т.д., рекомендуется вернуть файлы к начальному виду через кнопку “Restore”, а после внесений изменений, опять запустить “Rename”.
Если названия файлов дистрибутива уже изменены, до использования этого скрипта, то поправьте в файле ренеймера названия следующих файлов на текущие (в 4-х инклюдах):
include("config.php"); include("functions.php"); include("login.php"); ... include("header.php");
Единственное неудобство использования этой плюхи — в следующий раз, чтобы зайти в админку TDS, нужно глянуть, через FTP, на текущее название файла, через который входите в админку, но безопасность того стоит. Впрочем, если у вас в браузере окно с TDS постоянно открыто или вы после каждого ренейма будете делать закладку, чтобы по ней потом зайти в админку, то вы этого неудобства даже не заметите.
И перед скачкой, самое главное
:
Отречение: Автор сей плюхи, ни за что не отвечает, так что используете вы её «AS IS», т.е. на свой страх и риск. Скрипт тестировался только на SimpleTDS 1.3beta, но думаю, что будет работать и на более ранних версиях. Правильная работа, совместно с другими аддонами к SimpleTDS 1.3beta, не гарантируется, если они зазендены, обфусцированы или хранят названия php/htm/html-файлов дистрибутива TDS, в месте, отличном от корневой папки TDS (например, в другой папке или в базе MySQL).
Добавление от 25.08.2009:
Кстати, нашёл на блоге SEO план Путина
еще одно хорошее и простое решение для осложнения жизни взломщикам TDS-ки: автор предлагает в файле авторизации login.php, после неправильно введённого пароля, ввести задержку в одну секунду, перед повторным выводом формы авторизации и сообщения об ошибке:
if ($pass) { if ($pass == $password) { $loginok = true; $noform = true; setcookie('pwd', md5($pass)); } else { $loginok = false; $noform = false; // если введенный пароль неверен, то перед повторным вводом формы секундная задержка sleep(1); $mess = "Error!!! Wrong password!!! <br>"; } }
Решение хорошее, только правильнее было бы поставить эту задержку непосредственно перед выводом формы, т.к. взломщик может брутфорсить не только через форму, но и посредством передачи поддельных кукисов (cookies), а на неправильный кукис у нас задержки нет, поэтому cделаем так:
if (!$loginok) { sleep(1); echo $mess; ?> <form name="" action="index.php" method="post"> Password: <input name="pass" type="password" value=""><br> <input type="submit" value="Send"> </form>
Задержку можно существенно увеличить, на хозяине TDS это сильно не отзовётся


04 Мар 2009 в 18:25
Привет,
Установил всё как описано, сама TDS 1.3beta (кроме дистрибутива, ничего лишнего не стоит) работает нормально. После нажатия кнопки «Rename» происходит перезагрузка страницы и выдаёт ошибку 404. Делаю обновление страницы — всё нормально. Захожу на сайт по FTP — ничего (все файлы со старыми именами). Что не так?
спасибо за идею и её реализацию. Хочу пожаловаться
05 Мар 2009 в 01:57
Пожаловаться? Это всегда пожалуйста
А за отзыв — спасибо.
Действительно, попробовав плюху на нескольких хостингах, я обнаружил, что функция PHP «rename()», на некоторых из них не работает и выдает «Permission denied», из-за чего плюха на этих хостингах и буксовала. Возможно, эта функция отключена по причине безопасности.
Поэтому я заменил «rename()» на сладкую парочку «copy()» и «unlink()» и поправленную плюху перезалил — качайте
05 Мар 2009 в 12:25
Спасибо за исправления, перезалил, но не работает
Всё равно выдаёт ошибку 404. Может какие-то дополнительные требования нужны? И ещё, у меня хост free’шный. Это имеет значение?
05 Мар 2009 в 13:50
Вот и ответ
Обычно на фрихостингах PHP работает в «safe mode», а в этом режиме невозможно использование целого ряда функций PHP.
Чтобы точнее определить диагноз, вставьте в начало файла плюхи, сразу после комментариев, следующие строки:
И тогда будут видны все ошибки. Если там есть ошибки вида «copy(…) Permission denied…» , «unlink(…) Permission denied…» , то плюха точно работать не будет, из-за ограничений «safe mode».
Честно говоря, не рекомендовал бы ставить тдк-ку на фришный хостинг, во-первых из-за ограничений «safe mode», во-вторых, TDS могут снести в любой момент, и тогда не останется ни TDS-ки ни трафика…
05 Мар 2009 в 17:24
Нет, проверил настройки php — «safe mode» отключён; а вот ini_set() и любые способы просмотра ошибок запрещены.
Ладно, free-хост есть free-хост, не буду докучать — оставлю пока эту «фишку». По поводу рекомендаций согласен, просто на данный момент взять платный хостинг нет возможности.
Может что-нибудь ещё порекомендуешь, чтобы защитить TDS (кроме robots.txt и смены пароля)? Например, ты пишешь в статье: «…изменить название файла редиректа go.php…». Просто переименовать файл или где-то в коде ещё нужно подправить?
05 Мар 2009 в 18:50
Если “safe mode” отключен, то тогда надо проверить из-за чего не работает — написал тебе на мыло, если не трудно, скинь какой фрихостинг, буду разбираться
Насчет защиты: переименовать go.php будет недостаточно, потому что он еще упоминается в файле index.php строке:
Т.е. нужно поменять название самого файла go.php и изменить его название на новое в файле index.php, например, файл редиректа мы переименовали в out.php и изменили вышепредеденную сточку на:
А насчет хостинга — глянь на http://nq4virtual.com/ тариф AL, помоему неплохой выбор за 2 бака в месяц
09 Мар 2009 в 11:55
Друзья, не забывайте закрывать папку с TDS от выдачи индекса файлов, так как на некоторых хостингах, при отсутствии файлов index.html, index.htm или index.php вместо ошибки «403 Forbidden», сервер может выдать список файлов папки, сведя всю защиту к нулю.
Чтобы этого случилось, нужно в папку с Simple TDS положить файлик .htaccess с следующим содержимым:
Это запретит выдачу листинга файлов.
02 Апр 2009 в 22:15
[...] защитить Simple TDS от взлома и угона трафика. Источник: Защита Simple TDS от взлома брутфорсомПочитать по теме:Безопасность прежде всего или как не [...]
13 Апр 2009 в 15:36
а не проще .htaccess закинуть и фильтровать по IP
13 Апр 2009 в 22:08
Поподробнее пожалуйста )
14 Апр 2009 в 14:53
Order Deny,Allow
Deny from all
Allow from my_ip
в .htaccess
и весь брутфорс в попу
14 Апр 2009 в 14:54
Files index.php
Order Deny,Allow
Deny from all
Allow from my_ip
/Files
тупой у вас фильтр
15 Апр 2009 в 09:09
Умно, конечно, .htaccess-ом ) , но для выходящих в инет со статического IP пойдёт.
Только вот, что делать, если нужно заходить на TDS, сидя на разных провах, да еще всех у них динамический IP, а не только сидя дома со статическим IP?
Пытать всех текущих и потенциальных провов на предмет предоставления их диапазонов IP? )
К тому же, большинство новичков любит ставить Simple TDS на фрихостах, а на них нередко нет доступа к .htaccess
11 Июн 2009 в 19:18
Еще вариант — задержка между запросами.
14 Июн 2009 в 20:23
Все проще и удобно реализовано в моде симпла:
jacksoft.biz/category/soft-dlya-seo/simpletds-mod/
16 Июн 2009 в 10:46
Насчет «Всё проще и удобно» — очень даже может быть ) , правда, и сравнивать странно, да и куда уж проще. У jacksoft-а это полноценный мод, за использование которого нужно платить процентом трафика, а тут «узкоспециализированная»
плюшка, которая абсолютно free.
02 Дек 2009 в 17:04
Здравствуйте. Очень пригодился скрипт ваш. Но возникла небольшая проблемка. при переименовании файлов, самому файлу присваивается неверное имя, то есть через меню я не могу заново задействовать переименование. Такое ощущение, что скрипт присваивает рандомную часть имени дважды, через дефис.
02 Дек 2009 в 17:06
Немного поторопился. В общем нормально присваивает имя, но в меню ссылка получается неправильная, вида сайт.ру/rename-4b1565f47649026a184a57db1c632361-896a57542c31d548a0102e28c6da39cd.php при реальном имени файла rename-401f689acef531ef910440078de95dd4.php
02 Дек 2009 в 18:35
Так, попробуем разобраться ) , но сначала несколько вопросов:
0. изменялся ли скрипт, а точнее символ разделителя в строке $delimiter = ‘-’; на какой-нибудь другой?
1. какими становятся имена файлов после нажатия «Restore»?
2. двойными становятся все имена внутри всех php/htm/html-файлов?
Вообще, такая ситуация возможна, если только после переименований кнопкой «Rename», названия файлов TDS были возвращены к начальным не кнопкой «Restore», как нужно, а переименованы вручную, но при этом, в телах файлов, имена не были изменены на исходные. В этом случае, проще перезалить файлы корневой папки симплы, кроме файла config.php и поставить ренеймер по новой.
02 Дек 2009 в 19:25
Ничего не менял, дедал по инструкции всё. В общем причина, в том, что в header.php не все ссылки меняет при ренейме или при отмене. Что-то с сервером походу не то.
02 Дек 2009 в 19:28
Поставил права на запись файлу хедер.пхп — всё норм стало. Спасибо=) Очень приятно читать такие блоги как этот.
02 Дек 2009 в 19:30
Забыл сказать, что отпишу если возникнут какие-то другие проблемы=)
02 Дек 2009 в 22:35
Спасибо ) Рад, что проблема решилась.
03 Дек 2009 в 18:09
В общем пришлось на все файлы, которые должны переименовываться ставить права на запись. Теперь всё работает как часы.=)
03 Дек 2009 в 21:35
так в статье и написано дать права 666 на файлы
04 Дек 2009 в 12:48
Значит пропустил этот момент тупо=)))) Вину полностью признаю, в содеянном каюсь=)
17 Фев 2010 в 13:50
Зачем столько мороки. Не проще задержку поставить в 10-20 сек на ошибку неверного паса? Это сразу отобьет желание брутить тдску.
17 Фев 2010 в 15:16
Какая тут морока? Делов-то на 5 минут с перекуром.
Да и что лучше: чтобы страницу для брута не нашли вовсе и она была не проиндексирова или же ленивый брутфорс, и еще, возможно, не одним взломщиком?
Выбирает каждый сам.
26 Мар 2010 в 06:21
Все супер, все работает без глюков.
Клас, спасибо
27 Июн 2011 в 18:37
Большое спасибо за скрипт, я Вас полюбил
Очень, очень нужная вещь.
28 Июн 2011 в 18:28
надеюсь что «не странною любовью»? ))
05 Окт 2011 в 15:58
Большое спасибо за плюшку, пригодилась
Желаю удачи и развитию Вашему блогу.
31 Янв 2012 в 01:47
Добрый день! нужную вешь написали благодарю, все поменялось как нужно, НО назад не меняется, вернее при обращении к переименованному файлу rename.php или при попытке зайти в админку тдс ничего не происходит))Выручайте друг.
01 Фев 2012 в 12:17
Насколько помню, нужно зайти по ftp, посмотреть текущее название индекса, залогиниться через него и нажать кнопку «Restore».
Если это не поможет, то достаточно перезалить изменённые файлы (php/html) из дистрибутива SimpleTDS