Универсальная система безопасности сайта

Discussion in 'PHP' started by RomanoFFUA, 30 Sep 2012.

  1. RomanoFFUA

    RomanoFFUA New Member

    Joined:
    29 Sep 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Привет. Возможно, все будет описано непонятно, но я постараюсь подоходчивее.

    Имеется 5 сайтов.
    Часть из них написана мной, часть - нет. Везде стандартная связка PHP + MySQL. Все 5 штук сложные, с большим количеством кода. Естественно в них могут присутствовать дыры. На сайтах встречаются загрузка файлов(не картинок), загрузка картинок, include прямо из get запроса(естественно защищенный, по крайней мере я так думаю).

    Требуется какой-то супермегамодуль, который я смогу внедрить на эти 5 сайтов для защиты от основных уязвимостей и атак:
    - SQL injection
    - LFI/RFI
    - XSS
    - Оповещения о DDoS
    - Любое изменение любого файла
    - Защита форм от брутфорса
    - Защита от заливки плохих файлов или даже тех же jpg с кодом внутри
    Скорее всего я что-то пропустил, среди ночи голова плохо варит.

    Требования, которые, к сожалению, по разным причинам невозможно обойти:
    - В существующий код нельзя вносить изменения. В идеале это должен быть просто include()
    - С базой данных защищаемого приложения тоже никакого взаимодействия
    - Данные о попытках SQL inj и всякого прочего должны сохраняться в удаленную БД MySQL
    Почему такие дурацкие требования? Вот так захотелось заказчику. По каким причинам ему так захотелось и почему это не смогли организовать люди, поддерживающие его эти 5 сайтов, мне неизвестно. Вполне возможно, что они не могут этого сделать, а раз такие кодеры, то и защита дополнительная нужна. В общем не суть, меня это не касается.

    Итак, в общих чертах я понимаю, как это реализовать. Например:
    1. Та же защита от SQL inj может реализоваться хотя бы перебором массивов $_POST и $_GET
    2. АнтиDDoS - проверкой кол-ва запросов с одного IP к определенному скрипту в период времени. Писать защиту от DDoS средствами PHP по моему мнению - грабли, достаточно только оповещения, какого - будет решаться потом(email, sms, звонок на моб. тел., по мне - хоть запуск боеголовки, оповещение - не моя проблема).
    3. LFI/RFI - по принципу п.1
    4. XSS - так же
    5. Слабо представляю себе защиту от брута. Теоретически можно было бы проверить количество отправок формы с одного IP, но как мне узнать что это именно та форма? Код то менять нельзя. Могу проверить запросы к скрипту с одного IP опять же в период времени, но вдруг это будет чат? Тогда запросы могут быть частыми, а брут вполне можно настроить на задержку между попытками. С другой стороны какой же это будет брут, если перебор, например словаря из 10000 паролей займет почти 3 часа..
    6. Проверка файлов на подмену. Мысль хранить в сторонней БД список файлов для каждого сайта с md5 того самого файла. Насколько это будет безопасно - не знаю. Возможно несложно будет найти коллизию, а возможно я сейчас спорол чушь.
    7.Про заливку файлов - тут, вроде все понятно. Перебрал $_FILES. Проверил расширение. Посмотрел в содержимое - вдруг какая гадость там сидит, да и все.

    В общем, не буду тянуть. Чего я, собственно сюда приперся? Хочу попросить людей, хорошо осведомленных в вопросах безопасности дать пару подсказок. Чувствую, что все, что я придумал пока довольно сыро и непродуманно. Акцентирую внимание на том, что я не прошу готовый код или какие-либо другие халявные для меня решения. Мне просто нужны подсказки по нескольким пунктам:
    1. Какие из возможных уязвимостей я пропустил?
    2. Насколько описанные мной методы действенны? Может есть возможность реализовать что-то проще, а что-то по другому? Добавить что-то?
    3. Может, кто-то сталкивался с чем-то подобным?
    4. Ваше общее впечатление. Стоит ли вообще браться за это? Оплата обещана серьезная, да и мне интересно заняться. Опыт бесценен.

    Вообще, вся мало-мальски полезная информация принесет пользу. Обещаю не вякать "это и так понятно" и "ничего нового ты мне не сказал".
    Огромное спасибо за ваши ответы, советы и критику.
     
  2. Teratex

    Teratex New Member

    Joined:
    13 Mar 2012
    Messages:
    28
    Likes Received:
    3
    Reputations:
    5
    А не вариант настроить modsecurity2 на серваке? или там только виртуальный хостинг прокатывает?
    Просто если код написан через ЗД, то даже навешанные защиты в теории можно обойти, так как навешанные защиты обычно это фильтры запросов, а фильтры как известно можно обойти. А если сами сайты написаны довольно не плохо, то можно различные варианты попробовать.
    Про вариант 7 не так все просто, потому как анализ нужно делать очень сложный, как недавно кто-то из больших компаний признал, что любая загрузка опасна.
    Но это все теория, на практике чаще нужно выполнить уравнение целесообразность=сложность, если это не особо сложные сайты, то это одна степень защиты и сложности, если там что серьезное то защита должна быть на разных уровнях.
     
  3. RomanoFFUA

    RomanoFFUA New Member

    Joined:
    29 Sep 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Один из сайтов лежит на VPS, остальные на разных вирт. хостингах, причем парочка из них вызывает сомнение :(
    На сайтах нет переписки президентов и не хранятся секретные документы, однако конфиденциальные данные все-таки есть.
    Поломать можно все, это факт. На данном этапе стоит задача минимизировать уязвимости независимо от кривости рук программиста, писавшего сайт.
     
  4. Teratex

    Teratex New Member

    Joined:
    13 Mar 2012
    Messages:
    28
    Likes Received:
    3
    Reputations:
    5
    RomanoFFUA
    Можно попробовать обойтись хорошо составленными правилами для .htaccess, как практика показывает, часто довольно действенное средство, если конечно написаны не кривыми руками и отлажены под конкретный сайт.
    5 пункт тоже задача довольно смутная, так как брут можно пустить через соксы н-го количества или вообще через Tor, тогда будет в принципе невозможно этому противостоять, но от обычного брута просто ловить кол-во попыток запроса к форме, и если более 4 неудачных то капчу выкидывать
     
  5. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Практика показывает, что "наказаны" будут все. Вопрос лишь в цене. Доверься лучше специалисту и не занимайся безопасностью сам.
     
  6. RomanoFFUA

    RomanoFFUA New Member

    Joined:
    29 Sep 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Как вариант - привязывать кол-во попыток авторизации к логину, например.
    Как сказано выше - есть два варианта: или не делать, или делать только средствами подключения какого-то модуля include-ом, потому до кода, .htaccess, равно как и до прочего добраться я не смогу.

    Естественно, накажут всех ;)
    Довериться специалисту в какой сфере?
     
  7. Teratex

    Teratex New Member

    Joined:
    13 Mar 2012
    Messages:
    28
    Likes Received:
    3
    Reputations:
    5
    spider-intruder
    Наказаны не наказаны, зависит от ситуации и договоренностей)
    Если есть возможность попрактиковаться самому, то почему нет? если это не инет магазин и что-то критичное. А если доверяться только всегда специалистам, коих единицы обычно, а остальные 99% только мнимые спецы, а вот цену все любят винтить в зависимости от того насколько позволяет совесть.
    И самое главное, как определит тот кто не супер спец, что он имеет дело со спецом? эта тема такая что можно мутить воду на каждом шагу и будет ясно что ты имеешь дело не с спецом только тогда, когда либо произойдет взлом, а до тех пор будет ощущение безопасности.
    Так что тут вопрос спорный, да и форумы не для того чтоб посылали к спецам, а чтоб давали советы, а кто там уже за что будет отвечать это за себя берет ответственность ТС
     
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Teratex На правах рекламы - https://audit.antichat.ru

    А вообще - серебряной пули не бывает. То, что вы хотите - решает WAF, причем решает плохо и ненадежно. Без подключения модулей апача/сторонних приложений - не решается вообще.
     
    _________________________