Все мы знаем, что практически невозможно создать большой веб-сайт без одного или двух недостатков.Поэтому я написал небольшой монитор, который проверяет журналы доступа Apache на наличие потенциальных атак SQL-инъекций (среди прочего), и он работает очень хорошо.Я получаю оповещение всякий раз, когда кто-то пытается атаковать, и у меня было так мало ложных срабатываний, что действие по умолчанию теперь состоит в том, чтобы сбросить их в выпадающий список iptables.Это даже помогло мне определить несколько (не связанных с безопасностью) ошибок и удалить их.
Вот мои правила (без учета регистра):
PathInjection = \./\.\./(bin|boot|data|dev|etc|home|lib|lib64|media|mnt|opt|proc|root|sbin|selinux|srv|sys|tmp|usr|var)/
Havij = 0x31303235343830303536
r3dm0v3 = 0x7233646D3076335F68766A5F696E6A656374696F6E
LogicBypass = '.*?(\bor|\band|\bxor|\|\||\&\&).*?--
UnionSelect = union[^a-z-_]+((all|distinct)[^a-z-_]+)?select[^a-z-_]
Что я хотел бы знать, какВы бы обошли эти проверки и все еще производили бы правильную инъекцию?Можете ли вы придумать способ улучшить их, не вводя ложных срабатываний?
Несколько замечаний:
- Чувствительность к регистру отключена.
- Я использую MySQL.
- Записи Havij и r3dm0v3 используются в качестве универсального элемента дляне используйте эти средства автоматизации.
- Я проверяю строки как в необработанном, так и в URL-кодированном виде.
- Я не ищу ответов типа "вместо этого сделайте более безопасный код".
- Я не ищу другой способ сделать это, просто способ улучшить мою текущую логику.
РЕДАКТИРОВАТЬ: Итак, люди, кажется, неправильно поняли мое намерение.Это, наверное, моя вина, так как я не полностью объяснил.Эта функция запрашивается в качестве дополнительной функции для продукта мониторинга и предназначена для обеспечения минимального мониторинга безопасности.В рамках нашего диалога с клиентом и нашей документацией мы подчеркиваем, что это не универсальное решение и не замена надлежащей инфраструктуры безопасности (например, IDS и межсетевого экрана).Это просто информационная служба, которая помогает обеспечить базовое обнаружение угроз и производить статистику о количестве потенциальных атак.Я не пытаюсь написать IDS или брандмауэр.Если бы это зависело от меня, я бы пропустил эту функцию и велел бы им установить полный набор инфраструктуры безопасности с собственными системами мониторинга, но это не мой вызов.В настоящее время я тестирую систему на своем собственном сайте.Сейчас я просто ищу способ улучшить строки регулярных выражений, чтобы сделать это более эффективным.Надеюсь, это немного прояснит ситуацию.