Мы все знаем, что практически невозможно создать большой веб-сайт без одного или двух недостатков. Поэтому я написал небольшой монитор, который проверяет журналы доступа 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-_]
Я хотел бы знать, как не могли бы вы обойти эти проверки и при этом произвести действительную инъекцию? Можете ли вы придумать способ улучшить их, не создавая ложных срабатываний?
Несколько примечаний:
РЕДАКТИРОВАТЬ:
Итак, люди, кажется, неправильно поняли мои намерения. Вероятно, это моя вина, поскольку я не объяснил полностью. Это требуется как дополнительная функция к продукту для мониторинга, и она предназначена для обеспечения минимального мониторинга безопасности. В рамках нашего диалога с клиентом и в нашей документации мы подчеркиваем, что это не универсальное решение и не замена надлежащей инфраструктуры безопасности (например, IDS и брандмауэра). Это просто информационная служба, помогающая обеспечить базовое обнаружение угроз и собрать статистику о количестве потенциальных атак. Я не пытаюсь написать IDS или брандмауэр. Если бы это было на мое усмотрение, я бы не стал использовать эту функцию и посоветовал бы им установить полный набор инфраструктуры безопасности со своими собственными системами мониторинга, но это не мое призвание. Текущая ситуация такова, что я тестировал систему на своем собственном сайте. Прямо сейчас я просто ищу способ улучшить строки регулярных выражений, чтобы сделать это более эффективным. Надеюсь, это немного проясняет ситуацию.