Инструменты
Эту и другие уязвимости с OWASP Top 10 можно искать с помощью автоматизированного инструмента. С ним может справиться и Manual QA, достаточно знать, какие есть самые критические уязвимости, и уметь пользоваться инструментами для их поиска.
К инструментарию Penetration Tester можно отнести такие:
Бесплатные:
- OWASP ZAP;
- Nmap;
- Metasploit;
- SQLmap;
- Wireshark;
- Ettercap;
- BeEF.
Платные:
- Burp Suite;
- Acunetix;
- Charles;
- Veracode.
Так как по каждому из них можно рассказывать много чего, я уделил внимание лишь одному. Это будет бесплатный инструмент OWASP ZAP, чтобы вы могли поюзать его и понять всю суть поиска уязвимостей
Как подтвердить запланированные операции
Для выполнения почти всех операций, требуется подтверждение. Это, во-первых, позволяет отслеживать выполненные действия, во-вторых, вы сможете дважды проверить совершенные действия и в случае ошибки, отменить изменения. Нажмите на кнопку «Применить ожидающие операции» на панели инструментов.Откроется окно «Запланированные операции», в нем можно будет просмотреть список запланированных задач. После нажатия кнопки «Продолжить» будет выполнена вся очередь операций. После этого изменения будут необратимы. При попытке выхода из программы, если у вас остались не подтвержденные операции, будет предложено подтвердить их, если этого не сделать, изменения не сохраняться.
Injection
А теперь перейдем к первой уязвимости из рейтинга OWASP Top 10 — к Injection. По статистике, ею заражено 28% компаний… Я рассматриваю ее позднее, так как эта уязвимость с каждым годом становится все менее распространенной, но остается наиболее критичной из всех, потому что с ее помощью можно увести всю вашу базу данных. Эта уязвимость делится на такие векторы для атаки:
- инъекции через запросы SQL, LDAP, XPath;
- инъекции через команды OS command;
- инъекции через синтаксический анализ XML.
С помощью этих векторов атакующий может получить доступ как к одной учетной записи, так и ко всей базе данных клиентов этого ресурса. Для применения атаки используются всего лишь специальные символы и дополнительные операторы в зависимости от типа базы SQL.
Давайте рассмотрим один из векторов Injection — с использованием запроса для страницы авторизации. Если у вас в приложении такая есть, проверьте ее, чтобы с ней не было таких проблем, которые я вам покажу. При входе в систему через эту страницу мы будем искать запись пользователя в нашей базе данных SQL на основе введенного имени и пароля пользователя. Если мы получим какой-то результат, то он авторизует этого человека. Все довольно просто, на самом деле существуют такие страницы входа, которые работают таким же образом, имея такую же уязвимость.
Итак, тут мы видим форму, при заполнении которой введенные данные будут отправлены в SQL-запрос, и он вытянет нам ответ из базы данных. Если такой юзер есть в базе данных, то нас авторизует. Если нет, то нам скажет: сорян, зарегайся. То, что мы будем вводить в поле , передается в переменную , а то, что введут в поле , передается в переменную нашего SQL-запроса. А теперь рассмотрим то, что будет происходить при вводе значений в эти поля.
Давайте введем такие данные:
- в поле — значение Svyat, которое, как мы видим (отмечено красной стрелкой), станет на место переменной ;
- в поле — значение 1234, которое, как мы видим (отмечено синей стрелкой), станет на место переменной .
После запуска этого SQL-запроса будет выполнен поиск в базе данных, где будет найден этот пользователь со всей его информацией, соответственно, мы получим положительный ответ на странице авторизации и успешно авторизуемся.
Давайте теперь рассмотрим, что может сделать злоумышленник в нашем случае…
Тут злоумышленник совершает ход конем и целится в юзера admin. Давайте разберем подробнее, что он ввел:
- в поле — значение , которое, как мы видим, станет на место переменной ;
- в поле — значение , которое, как мы видим, станет на место переменной .
А теперь давайте разберем, что происходит с переменной , когда в нее попадают данные такого рода, и как сервер обработает их.
- Символом кавычки из заданного значения ’ OR 100=100 — мы закрываем дефолтную кавычку данной переменной, оставив пароль незаполненным. Это видно на картинке выше.
- Затем переходим к слову из нашего значения — оно говорит о том, что мы вызываем оператор , который будет выполнять свою функцию в SQL-запросе, так как предыдущей кавычкой мы закрыли нашу переменную.
- А выражение из нашего значения говорит серверу: даже если пароль не подошел, все равно прими за , как будто он подошел для тебя, так как является .
- И напоследок символы из нашего значения закомментируют дефолтную кавычку. То есть весь код, который находится после символов , становится нерабочим. У каждой базы данных вызов операции, чтобы закомментировать код, происходит по-разному: бывает #, бывает —, бывает */.
Исходя из изложенного выше, SQL-запрос получил дополнительное условие, которое диктует серверу новые правила игры, заставляющие его авторизовать нас как пользователя системы, несмотря на то что мы не ввели правильный пароль. А так как это еще и пользователь-админ, мы имеем все привилегии управления приложением. В запрос добавлено значение , которое всегда будет оцениваться как (так как 100 всегда равно 100, чтобы получить true, необязательно писать именно 100=100, можно взять любое значение, которое равно такому же значению). Теперь этот пользователь будет авторизован как администратор, даже если он не знает пароля. Это не прикольно, согласитесь. Но если есть такая уязвимость, то это может дойти и до такого случая, как на картинке ниже…
Если в поле ввести значение , а затем отправить на сервер, то можно вообще лишиться данных юзера в нашей базе, но опять же это если мы не фильтруем в нашем приложении то, что вводит пользователь.
Если подытожить, эта уязвимость нацелена на применение дополнительных команд и операторов в запросах на сервер. И если в ней, как в XSS, нет фильтрации на это дело, то такая дыра будет присутствовать у вас в приложении.
Вступление
Когда я был Manual QA, мне всегда казалось, что искать уязвимости очень трудно, что этим могут заниматься только те люди, которые умеют программировать. Поэтому я выбрал сначала путь автоматизатора, так как зачастую QA развиваются именно в этом направлении. Но после более чем полутора лет в должности автомейшена мне стало скучно… Да-да, стало скучно, так как мне неинтересно было все время писать код и не общаться с командой девелоперов, продактами и другими членами команды, как я делал это, когда был мануальщиком.
Недолго думая, в каком же направлении мне развиваться… Точнее, на это повлияло несколько атак ловцов уязвимостей на наш проект. После атак они предоставили нам репорты, и мне стало обидно: мы же могли предусмотреть эти кейсы своими силами, вроде же было не очень тяжело найти их. Так вот, после ознакомления с репортами, предоставленными этими ловцами, и прослушивания докладов по безопасности я решил двигаться в этом направлении.
Немного о себе: в тестировании я уже больше 7 лет, занимаюсь поиском уязвимостей больше 4 лет. Веду тренинги по тестированию безопасности. Помимо основной работы провожу аудиты по QA. Веду блог.
Начнем с того, с какими трудностями я сталкивался, когда начал изучать тестирование на безопасность. Наверное, с такими же столкнетесь и вы:
- Чтобы вот просто было написано понятным языком без заумных фраз, как любят описывать, чтобы все было структурировано и были примеры, где можно было бы попрактиковаться с прочитанным. При гуглении я получал огромный вброс инфы без разбору, что же надо для начала.
- Проблема с нехваткой времени. Согласитесь, трудно найти время на то, чтобы заставить себя учить что-то новое без надобности срочно применять эти навыки 🙂
А вот и решения:
- С первой проблемой мне помогли… даже не поверите кто — те же самые ловцы уязвимостей, которые атаковали нас и писали нам репорты о наших уязвимостях. Читая эти репорты, я параллельно гуглил и искал в статьях информацию о причинах возникновения и критичности данных уязвимостей. В итоге я составил для себя чек-лист массовости (насколько распространен этот вид уязвимости среди продуктов) и критичности (насколько опасно иметь такую уязвимость в зависимости от того, сколько бед, которые могут привести к потере доверия к бренду, можно натворить с ней на проекте).
- Также решением первой и второй проблем стали мои выступления перед публикой на тему уязвимостей. За время подготовки к тому, чтобы учить кого-то чему-то, вы изучите материал настолько хорошо и настолько быстро, что сами удивитесь 🙂 У вас сразу появляется:
- дедлайн, к которому вы должны успеть подготовиться и хорошо изучить тему;
- стимул учить новое, так как перед вами стоит задача выступить перед публикой, а опозориться не сильно хочется, чтобы не показать, что вы чего-то не знаете в этой области, но что-то там вещаете;
- время. Скажете откуда? Да вы просто под психологическим воздействием, что нужно подготовиться к выступлению, меньше бездействуете (меньше времени уделяете просмотру видосов с котиками и остальными приколясами). Да и после работы вместо просиживания штанишек перед сериальчиком вы готовитесь к своему дебюту на сцене. Нормальный такой лайфхак? 🙂
- И самое главное: после того как вы ознакомились с какой-либо теорией о уязвимости, немедленно идите применять ее на практике, так как теория в голове без практики имеет способность пропадать, не подавая виду, быстро и бесследно. И это будет реально напрасно потраченное время. Попрактиковаться можно у себя на проекте с разрешения руководства — а я думаю, оно по-любому разрешит вам, так как хорошо, когда есть человек, который может проверить хоть на какую-то безопасность. Либо можно прогуглить Broken Web Application и по первой ссылке скачать себе приложение, запустить его на VirtualBox и применять там свои наработанные навыки.
В этом приложении много разных лабораторий с самыми распространенными уязвимостями, так что вам должно хватить этого, чтобы хорошенько набраться опыта пенетрации.
А теперь давайте поговорим о самых распространенных уязвимостях, которые могут встретиться вам на пути, и о том, как их искать…
Создание загрузочной флешки с Acronis Disk Director
Если случилось так, что у вас слетел windows или linux, не спешите переустанавливать систему. В acronis disk director есть специальная утилита которая поможет создать загрузочную live usb флешку или cd носитель. Существует еще несколько причин, по которым может потребоваться запуск данной под программы. Например:
- Если вам понадобилось использовать диск директор в системе отличной от windows, например основанных на дистрибутивах linux.
- В случае если вы редко используете данную программу и не хотите ее хранить на носителе.
- Для создания томов на жестком диске без системы.
- Для случаев, когда выполнить операцию в оперативном режиме не получается, из-за блокировки другими программами или самой системой.
Чтобы запустить программу в меню «Средства» выберите пункт «Мастер создания загрузочных носителей Acronis».Откроется утилита с кнопкой «Далее», нажимаем ее. На следующем экране можно выбрать тип загрузочного носителя и способ представления дисков и томов.Windows-подобное представление будет использовать структуру дисков С: D: E: и тд. Linux-подобное представление будет отображать тома как hda1 и sdb2. С типом загрузочного носителя разберемся чуточку подробнее.
Загрузочный носитель на основе Linux
При выборе данной настройки на выходе вы получите загрузочную версию acronis disk director с ядром Linux. С такой флешкой или cd/dvd диском вы сможете запускать программу на любом компьютере: с установленной, поврежденной или вовсе без системы. Также можно будет указать параметры ядра Linux, которые будут выполнены при запуске носителя, но чаще всего это поле остается пустым. Если вы не указали какой-то параметр сразу, вы всегда сможете нажать F11 в меню загрузки и добавить его. Полный список параметров можно увидеть на картинке снизу.
Загрузочный носитель на основе Windows PE
Загрузочная usb флешка на основе Windows PE содержит минимальную систему Windows, а также модуль Acronis. Данное решение чаще применяется в больших средах выполнения. Преимущества:
- Можно использовать помимо Acronis Disk Director любые сценарии и модули добавленные в WinPE
- Возможность поддерживать только выбранные RAID-контроллеры и RAID-массивы
- Доступна динамическая загрузка требуемых драйверов
Для полноценной работы флешки с акронис диском необходимо будет установить один из дистрибутивов WinPE:
- Windows Vista (PE 2.0)
- Windows Vista SP1 (PE 2.1)
- Windows XP SP2 с обновлением KB926044
- Windows 7 (PE 3.0)
- Windows 8 (PE 4.0)
- Windows 8.1 (PE 5.0)
- Windows 10 (PE 10.0)
Как только вы выбрали тип носителя и способ представления дисков, следует выбрать загружаемые компоненты например Acronis Disk Director x64 или x32.Жмем «Далее», нам будет предложено выбрать вид носителя, на которой будет установлен загрузочный Acronis Disk. Это может быть cd/dvd привод с диском(при условии что данное устройство умеет записывать диски), ISO образ или съемный носитель, например флешка.Если вы выбрали носитель ISO, необходимо будет указать его имя и путь расположения, а после можно будет добавить необходимые драйвера. Останется только нажать «Продолжить» и ваша загрузочная флешка или iso образ с Acronis Disk Director готова.
Подытожим
Теперь вы знаете:
- о двух уязвимостях;
- с помощью какого инструмента можно искать уязвимости;
- где можно практиковаться в поиске уязвимостей.
Теперь ваша задача состоит в том, чтобы, когда сканер найдет новый вид уязвимости, ознакомиться с ним, узнать, как он воспроизводится и какую серьезность несет в себе. Таким образом, встречая все новую и новую уязвимость, обнаруженную сканером или найденную в какой-то статье, вы накопите опыт, с которым можете потом искать эти же дыры в других ваших проектах, дабы сделать продукт безопасным. А также со стороны менеджеров вас заметят и по-любому накинут бабосов за то, что вы такой крутой специалист.
И помните: все показанное выше сделано в целях обучения! Применять на своих проектах можно только с разрешения.