Фаззинг: что это такое и как от него защититься?
Если вы разработчик, вы, вероятно, столкнулись с серьезными ошибками, которые испортили ваш код. В результате перед выпуском следует применить подход к тестированию, и фаззинг является одним из таких методов тестирования. Это процесс, при котором вы вводите известные данные в систему, чтобы увидеть, соответствует ли полученный результат ожидаемому. Разработчики программного обеспечения используют этот процесс для тестирования систем на наличие ошибок, которыми впоследствии могут воспользоваться киберпреступники.
В этой статье вы узнаете, что такое фаззинг, как он работает и как вы можете внедрить его в свой код. Во-первых, давайте посмотрим, что такое фаззинг!
Что такое фаззинг?
Fuzz-тестирование — это процесс, который позволяет как разработчикам программного обеспечения, так и киберпреступникам проверять программу или систему на наличие ошибки, которую можно использовать. Чтобы понять фаззинг, вы можете думать о диаграмме черного ящика. Вход будет проходить через лабиринт, спрятанный в коробке, а решение придет с другого конца.
Вы можете разбить свою программу на множество функций и логических процессов. Каждый из них также может иметь свои собственные диаграммы черного тела. Если вы знаете программное обеспечение, вы должны быть в состоянии отобразить его на бумаге. После этого можно понять, что должно происходить с каждым входом.
Однако вложения не всегда дают желаемый результат. На самом деле у программы может быть много недостатков, программист может даже что-то упустить. Кроме того, взаимодействие программы с окружающей средой может создать ошибку. Даже простые программы могут иметь недостатки.
Этот процесс тестирования существует с 1988 года. Первоначально он был направлен на проверку надежности операционных систем в Университете Висконсина путем подачи им случайных данных. К сожалению, при тестировании эти случайные входные данные приводили к сбою университетских систем примерно в трети случаев.
Увидев эти многочисленные сбои, технологическая индустрия стала уделять больше внимания тестированию программного обеспечения. Таким образом, киберпреступникам будет не так легко обнаруживать эксплойты, а программное обеспечение не будет аварийно завершать работу.
С учетом всего сказанного мы можем глубже погрузиться в различные поколения методов фаззинга. Это поможет вам понять, как на самом деле работает фазз-тестирование.
Как работает фаззинг?
Со временем фаззинг превратился в 3 разных поколения. Каждое поколение также является улучшением по сравнению с другим. Пройдемся по каждому поколению.
Поколение 1: Случайный фаззинг
Случайный фаззинг был оригинальной техникой. Он просто загружал в программу рандомизированные данные и искал неожиданные результаты. Например, скажем, вы вводите 2+2 в калькулятор и получаете ответ 5. Понятно, что ответ не должен быть 5, но эта ошибка может возникать по ряду причин, даже для базовых программ-калькуляторов. Например, вы можете использовать переменные с плавающей запятой вместо целых чисел.
Поколение 2: фаззинг на основе грамматики
Фаззинг на основе грамматики — это когда входные данные, поступающие в программу, строятся с использованием правил. Многие различные программы для фаззинга, представленные на рынке, в настоящее время используют этот процесс. Фаззинг на основе грамматики логически проходит каждый маршрут только один раз, в отличие от случайного фаззинга. Но если логика правил слишком ограничивающая, вы можете пропустить большую часть программы.
Поколение 3: инструментальный фаззинг
Фаззинг, управляемый прибором, также называется фаззингом, управляемым искусственным интеллектом (ИИ). Этот метод использует утилиту мониторинга для записи того, куда ушел каждый зонд, а также гарантирует, что маршруты не повторяются. Конечно, вам не нужно использовать ИИ. Но этот выбор становится популярным, так как делает процесс более эффективным. Такие компании, как Google, используют этот процесс третьего поколения для тестирования разрабатываемого ими программного обеспечения. В отличие от фаззинга на основе грамматики или случайного фаззинга, фаззинг с инструментальным управлением имеет меньше шансов пропустить маршруты в программном обеспечении.
Как киберпреступники используют фаззинг
Киберпреступники используют фаззинг, чтобы найти уязвимость в программе. Для веб-сайтов это может быть ввод случайных символов в расширение страницы, чтобы найти Эксплойт базы данных SQL. На самом деле, это обычный процесс, используемый пентестерами. Это помогает им оценить угрозы безопасности или воспользоваться преимуществами компании. У большинства компаний есть какая-то форма вознаграждения за эксплойты нулевого дня, что делает процесс конкурентоспособным между тестировщиками. Кроме того, на этом этапе тестеры на проникновение часто используют инструменты веб-скрейпинга. Таким образом, они получают информацию для добавления к своим фаззинговым запросам.
Агентство национальной безопасности (АНБ) использует форму фаззинга в разработанной ими программе под названием Chimera. Это программное обеспечение существует уже некоторое время. Он может принимать программы, которые были скомпилированы в «нечитаемый» язык построения. Затем он реконструирует их. Многие разные стороны, в том числе киберпреступники, знают об этом программном обеспечении. В итоге АНБ разместило его на своем сайте в помощь пентестерам.
Киберпреступники могут использовать эту технику многими другими способами. Но в основном они стремятся найти ошибки, которые они могут использовать. Там, где это возможно, киберпреступники также будут использовать в своих эксплойтах фаззинг третьего поколения. Автоматизация процесса и использование функции сопоставления могут значительно сократить время или объем вычислений, необходимых для поиска полезного эксплойта.
Как защитить себя от фаззинга
Нечеткое тестирование может быть большой проблемой в зависимости от поверхности атаки. Для веб-сайтов вы можете добавить тайм-аут или задержку для запросов. Это предотвратит сбой платформы автоматическими инструментами. Часто вы также можете использовать демилитаризованную зону (DMZ), чтобы отделить основную бизнес-информацию от прямых запросов к базе данных бизнес-уровня. Даже если киберпреступники получат доступ к демилитаризованной зоне, им придется бороться с зоной нулевого доверия, чтобы получить доступ к внутренней работе компании.
Последние мысли
Всякий раз, когда вы разрабатываете часть программного обеспечения, вы должны протестировать его на наличие ошибок — в идеале, используя решение третьего поколения. Это обеспечит наиболее эффективный и прагматичный подход к поиску ошибок.
Независимо от того, является ли ваше программное обеспечение веб-приложением или создано в решении для автоматизированного построения, вы должны его протестировать. Это важно для того, чтобы вам не пришлось писать чрезмерное количество исправлений после выпуска программного обеспечения. Кроме того, если вы используете SCRUM и выпускаете инкрементально, вам все равно нужно тестировать на каждом этапе.
У вас есть еще вопросы о методах фаззинга? Ознакомьтесь с разделами часто задаваемых вопросов и ресурсов ниже!
Часто задаваемые вопросы
Что такое фаззинг?
Разработчики программного обеспечения и киберпреступники использовать фаззинг для проверки программы или системы на наличие ошибки, которую можно использовать. Чтобы понять это, вы можете думать о программе как о диаграмме черного ящика. По сути, ввод будет проходить через лабиринт, спрятанный в коробке, а решение появится с другой стороны.
Какой метод фаззинга лучше использовать?
Если возможно, используйте новейший метод третьего поколения, называемый инструментальным фаззингом. Этот метод не имеет проблемы с повторением одного и того же пути несколько раз, как случайный фаззинг. Он также не пропустит целые части программы из-за несовершенных правил.
Что такое случайный фаззинг?
Случайный фаззинг — это процесс тестирования программного обеспечения путем ввода случайных данных в систему. Затем вы увидите, какой ввод сломает его или вызовет ошибку. Это отлично подходит для проверки логики и безопасности программы. Однако этот процесс может позволить многократно тестировать одни и те же маршруты, что означает, что это неэффективный метод.
Что такое фаззинг на основе грамматики?
Фаззинг на основе грамматики определяет правила, помогающие гарантировать, что проверенные маршруты не повторяются, в отличие от случайного фаззинга. Однако если правила слишком строгие или несовершенные, то можно пропустить большую часть программы. Если вы хотите использовать фаззинг-тестирование для проверки надежности программного обеспечения, вам лучше использовать фаззинг под управлением прибора.
Что такое инструментальный фаззинг?
Инструментальный фаззинг эффективно отслеживает и отображает входные маршруты во время процесса. Это предотвращает повторное тестирование маршрутов. Таким образом, это очень эффективно и помогает гарантировать, что вы не пропустите части программного обеспечения. Инструментальный фаззинг — это новейший и лучший метод фаззинга вашего программного обеспечения.