«Джентльменский набор» тестировщика безопасности: можно ли обойтись без навыков программирования?

«Джентльменский набор» тестировщика безопасности: можно ли обойтись без навыков программирования?

Что же нужно знать, какими навыками обладать, чтобы тестировать безопасность?

Анна Андреева, ООО «Технологии качества», бренд A1QA

Сегодня большая часть жизни человека связана с использованием разного рода программного обеспечения. Каждый день пользователи отправляют сотни тысяч запросов с персонального компьютера, планшета или смартфона, не задумываясь, насколько передаваемая информация остается конфиденциальной и безопасной.

С ростом использования веб- и настольных приложений, растет и количество случаев взлома или «кражи» личных данных пользователей. Именно поэтому тестирование безопасности является важным этапом разработки приложения и оно набирает популярность. Что же нужно знать, какими навыками обладать, чтобы тестировать безопасность?

Необходимо понимать, что испытания безопасности включают в себя проверки не только самого приложения, но и его окружения, а также методов передачи и хранения информации. Для инженера равнозначно важны многие навыки и знания, и речь не только о языках программирования.

Безусловно, важной частью процесса тестирования безопасности, является понимание технологии, использующейся в приложениях. Разбираясь в них, инженер заранее может предположить, где «прячутся» уязвимости и как с ними можно работать. Например, приложения написанные на языке ASP.Net по умолчанию используют встроенные механизмы валидации данных, тогда как язык программирования PHP предполагает дополнительное внедрение проверок пользовательского ввода.

В первую очередь нужно принять во внимание, что приложение находится в операционной системе – будь то сервер, компьютер или смартфон. Поэтому для тестирования безопасности необходимы знания из области системного администрирования, причем навыки опытного пользователя. Скажем, если доступ к серверу обеспечен с «низкими» правами, то инженер должен знать возможные пути эскалации прав до пользователя с правами администратора. Здесь пригодятся знания о работе регистра, запусках служб и процессов, системы логирования событий.

Также пригодятся знания из области сетевых технологий. Ведь у злоумышленника зачастую нет необходимости взламывать приложение, если можно «украсть» информацию на этапе ее передачи. Здесь пригодятся знания о модели OSI, структуре пакетов и их маршрутизации в сети.

Тестирование безопасности Firewall включает в себя еще одну важную область знаний – здесь проводятся проверки защиты процессов от завершения, обход «огненной стены» через доверенные процессы и способность тестируемых продуктов к блокировке выполнения неавторизованного кода в режиме ядра.

Одной из самых критичных уязвимостей ПО на сегодняшний день является восприимчивость к SQL-инъекциям. Она «открывает» доступ к информации, которая хранится в базе данных приложения. Поэтому знания языка запросов SQL и его диалектов являются необходимыми для полноценной оценки безопасности приложения. При этом, зачастую для успешного проведения атаки недостаточно простого запроса на выборку.

Для тестирования уязвимости к межсайтовому скриптингу в DOM-разметку или запрос внедряется вредоносный HTML/CSS/Javascript код, с помощью которого злоумышленник перенаправляет жертву на нужный ему ресурс, блокирует работу приложения либо «крадет» значения переменных сессии. Здесь пригодятся знания языка разметки HTML, особенности написания каскадных таблиц стилей (CSS) и собственно языка Javascript.

Слабые алгоритмы шифрования данных также могут стать причиной раскрытия секретной информации. Инженер по тестированию безопасности должен быть знаком с основами криптографии и знать, какие методы шифрования данных действительно защищают информацию, а какие алгоритмы легко поддаются взлому. К примеру криптографический протокол SSL v2, отвечающий за безопасность обмена данными между клиентом и сервером, считается слабым и рекомендуется к замене на более стойкие SSL v3/TLS v1 протоколы.

В целом, тестирование безопасности – это очень широкая область знаний. Здесь необязательно обладать общирными навыками в области программирования, однако, как минимум, необходимо иметь представление о различных технологиях, об их слабых и сильных сторонах. Для того чтобы обойти валидацию данных, нужно понимать как именно тот или иной язык программирования «обрабатывает» пользовательский ввод. Для того, чтобы внедрить SQL-запрос нужно знать, как формируется строка подключения и в каком виде информация передается в базу данных, а также что «возвращается» в ответ и каким образом отображается пользователю.

Язык программирования в контексте тестирования безопасности скорее является инструментом оперирования информацией. Для нахождения уязвимостей необязательно уметь писать алгоритмы шифрования или уметь обфусцировать код во время выполнения программы, но нужно понимать что такое переменная, массив, класс, структура и т.д., а также осознавать, как эти сущности взаимодействуют между собой.

В заключении хочется отметить, что знание языков программирования не является ключевым фактором для проведения успешных исследований безопасности, однако необходимо понимать основные принципы и процессы работы приложения, и влияние на них используемой технологии, операционной системы и ее конфигурации.

Устали от того, что Интернет знает о вас все?

Присоединяйтесь к нам и станьте невидимыми!