Hacker 101: видеокурс-введение в веб-безопасность + практические задания
Интересуетесь веб-безопасностью? Тогда вы по адресу. Вы можете просмотреть видеокурс, который постепенно объясняет основные понятия, или же разобрать отдельные уязвимости в соответствующем разделе. Если вы новичок в веб-безопасности, то рекомендуется первый вариант. Кроме того, здесь вы найдёте разные задания, которые сможете выполнять по ходу изучения тем и применять на практике полученные знания.
Прим. перев. Видео на английском языке, некоторые из них дублируются между разделами.
Видеокурс для новичков
ВведениеВ этом видео мы заглянем в мозг хакера, поговорим о курсе и о том, как вы сможете применить полученные знания к реальным ситуациям.
- Необходимые инструменты;
- Думаем как хакер;
- Дисбаланс атакующего-защитника;
- Упрощённая оценка угрозы и установление приоритетов;
- Как писать хорошие баг-репорты;
- Отражённый XSS (Cross-Site Scripting — «межсайтовый скриптинг»).
В этом видео мы поговорим о том, как работает веб с точки зрения безопасности.
- Основы HTTP;
- Защита cookie;
- Парсинг HTML;
- MIME-сниффинг;
- Сниффинг кодировки;
- Правило ограничения домена;
- CSRF (Межсайтовая подделка запроса).
В этом видео мы обсудим XSS (межсайтовый скриптинг) — чрезвычайно распространенную уязвимость, а также ошибки авторизации.
- XSS (Межсайтовый скриптинг):
- Виды XSS:
- Хранимые;
- Отражённые;
- DOM;
- Обнаружение;
- Эксплуатация;
- Предотвращение.
В этом видео речь пойдет о нескольких важных уязвимостях: SQL-инъекции, обходе каталога и командной инъекции.
- SQLi (SQL-инъекция):
- Как она работает;
- Базовая эксплуатация;
- Предотвращение;
- Что это такое;
- Виды слепых SQLi;
- Эксплуатация;
- Что это такое;
- Эксплуатация;
- Предотвращение.
- Что она из себя представляет
- Возможная ситуация
- Эксплуатация
- Предовтращение
В этом видео мы обсудим атаки фиксации сессии, которые позволяют злоумышленнику перехватить сесиию жертвы и получить доступ к её учётной записи.
- Фиксация сессии:
- Что это такое;
- Обнаружение;
- Предотвращение.
В этом видео мы поговорим о кликджекинге — атаке, которая может обманом заставить вас что-либо сделать. Что вы изучите:
- Кликджекинг:
- Что это такое;
- Как это работает;
- Как от этого защититься.
В этом видео речь пойдёт о локальном и удалённом внедрении файлов.
- Внедрение файлов:
- LFI (Локальное внедрение файлов);
- RFI (Удалённое внедрение файлов);
- Обнаружение;
- Эксплуатация;
- Предотвращение.
В этом видео мы поговорим об ошибках, связанных с загрузкой файлов, широкой, но критичной категорией уязвимостей. Что вы изучите:
- Загрузка файлов:
- Как работают многокомпонентные POST-запросы;
- Атаки на основе имён файлов;
- Атаки MIME;
- Прячем данные в PNG-файлах;
- Предотвращение.
В этом видео мы поговорим об уязвимостях нуль-терминаторов. Этот тип уязвимости не всегда понятен, но недооценивать его не стоит. Что вы изучите:
- Нуль-терминаторы:
- Чем являются;
- Каким образом относятся к сетевой безопасности;
- Как проверить наличие таких уязвимостей;
- Как их эксплуатировать
В этом видео мы обсудим непроверенные перенаправления. Они упрощают маскировку попыток фишинга и даже могут помочь обойти авторизацию.
- Непроверенные перенаправления:
- Что это такое;
- Обнаружение;
- Эксплуатация;
- Предотвращение.
В этом видео мы обсудим методы безопасного хранения паролей и то, на что стоит обратить внимание.
- Использование Bcrypt (или Scrypt);
- Цели обеспечения безопасности паролей;
- Почему не стоит использовать такие алгоритмы, как MD5 и SHA1;
- Что использовать взамен.
В этом видео речь пойдёт о ключевых понятиях в криптографии.
- XOR и его важность в криптографии;
- Шифр Вернама;
- Виды шифров:
- Симметричный:
- Потоковый;
- Блочный;
- ECB (Electronic Codebook, режим электронной кодовой книги);
- CBC (Cipher block chaining, режим сцепления блоков шифротекста);
- HMAC (Hash-based MAC).
В этом видео мы поговорим о ряде атак, которые вы можете применять на криптосистемах в реальной жизни.
- Повторное использование ключа потокового шифра;
- Перестановка блоков ECB;
- Расшифровка ECB;
- Дополнение (padding) и атака, связанная с дополнением (padding oracle attack);
- Атака удлинением сообщения.
Это последнее видео из серии о криптографии. В нём мы дадим некоторые советы и рекомендации.
- Режим ECB:
- Обнаружение;
- Определение размера блока;
- Определение смещения данных;
Подробнее об уязвимостях
КликджекингВидеоурок по теме:
ОписаниеКликджекинг происходит, когда страница может быть встроена в iframe, с которой пользователь может тайно взаимодействовать. Это чаще всего происходит таким образом: iframe делают прозрачным и помещают его выше ложных элементов интерфейса, заставляя пользователя щелкнуть внутри iframe без их ведома.
Для проверки на кликджекинг можно попробовать встроить целевую страницу в iframe следующим образом:
Влияние на безопасностьКликджекинг можно использовать, чтобы заставить пользователей сделать что-либо без их ведома, например принять запрос или удалить данные. В редких случаях кликджекинг даже использовался для компрометации локальных файлов с помощью встраивания файлового менеджера.
Как защититьсяВсе страницы приложений должны устанавливать заголовок X-Frame-Options , который определяет, как можно встраивать страницу в iframe. SAMEORIGIN позволит встраивать только страницы одного источника; DENY полностью запретит встраивание. Это позволит предотвратить кликджекинг во всех современных веб-браузерах.
Более того, вы также можете настроить политику безопасности контента с директивой frame-ancestors , указывающей на разрешённые хосты, чтобы предотвратить кликджекинг. Настройка frame-ancestors: none , например, полностью запрещает встраивать страницу.
Командная инъекцияВидеоурок по теме:
ОписаниеТакие атаки происходят, когда пользовательский ввод используется для создания команд для выполнения.
Влияние на безопасностьС помощью этой уязвимости злоумышленник может выполнять любые произвольные команды на веб-сервере, что зачастую приводит к полному контролю над ним.
Как защититьсяПо возможности пользовательский ввод не должен допускаться для построения команд. Если без этого никак, то необходимо избегать специальных символов, таких как кавычки и обратные слеши.
Межсайтовая подделка запроса (CSRF)Видеоурок по теме:
ОписаниеCSRF-токены — уникальные для сессии значения, которые отправляются вместе с запросами. Они предотвращают CSRF-атаки, когда злоумышленник может заставить браузер жертвы выполнить какое-либо действие. Основная функциональная часть CSRF может выглядеть так:
Форма отправляет POST-запрос на http://example.com/new-password , содержащий логин жертвы, и устанавливает новый пароль для этой учетной записи. Функциональная часть скрыта и выполняется автоматически при просмотре страницы.
Влияние на безопасностьЕсли злоумышленник заставит жертву перейти по URL-адресу, который им контролируется, то он сможет выполнять действия, несущие угрозу конфиденциальности данных жертвы. Любое действие, не требующее токенов CSRF, сможет быть выполнено злоумышленником.
Как защититьсяПри создании сессий для пользователей следует генерировать случайную строку (CSRF-токен) и связывать её с этим сеансом. При выполнении пользователем действий этот токен должен отправляться на сервер вместе с другими данными запроса и сравниваться с токеном, расположенным на сервере. Если выявлено несоответствие, то запрос должен быть отклонён.
Обход каталогаВидеоурок по теме:
ОписаниеАтаки обхода каталога происходят, когда данные, доступные атакующему, используются для составления путей каталога без проверки. Чаще всего это происходит, когда ../ (переход в родительский каталог) разрешено использовать в качестве компонента пути (например, https://example.com/?path=../../../file ). Объединив эти компоненты, часто можно получить доступ к каждому файлу в системе.
Влияние на безопасностьС помощью этой атаки злоумышленники могут читать или записывать произвольные файлы, уничтожать данные или подтверждать существование данных.
Как защититьсяПо возможности пользовательский ввод не должен использоваться при составлении путей. Однако, если это необходимо, пользовательский ввод быть профильтрован; никакие разделители ( \ в Windows, / в большинстве других систем) не должны допускаться для пользовательского ввода.
Локальное / удалённое внедрение файловВидеоурок по теме:
ОписаниеУязвимости внедрения файлов возникают, когда веб-приложение создаёт путь к исполняемому коду с использованием управляемой злоумышленником переменной, что позволяет ему решать, какой код будет выполняться. Такие уязвимости свойственны динамическим языкам вроде PHP.
Влияние на безопасностьВ зависимости от типа атаки, злоумышленник может запустить код на сервере из локального или удалённого файла. Если уязвимость локальна, злоумышленник не сможет запустить собственный код.
Как защититьсяНаиболее эффективным решением для устранения уязвимостей внедрения файлов является предотвращение передачи пользовательского ввода в любой API файловой системы/фреймворка. Если без этого никак, можно создать приложению белый список файлов, которые могут быть внедрены, а затем использовать идентификатор для доступа к выбранному файлу. Любые запросы, содержащие недопустимый идентификатор, должны быть отклонены, таким образом злоумышленники лишатся возможности провести свою атаку.
Некорректная обработка авторизацииВидеоурок по теме:
ОписаниеПри неправильной авторизации приложение не проверяет правильность доступа пользователей к функциям, предоставляя им доступ к данным.
Влияние на безопасностьЗлоумышленник может получить доступ, изменить или удалить данные без должной авторизации. Это может быть как относительно безобидным (например, возможность видеть целевую страницу консоли администратора, но не видеть какие-либо данные), так и весьма критично (полная видимость данных пользователей).
Как защититьсяПриложение должно строго проверять авторизацию пользователя до предоставления доступа к каждой функции. Это включает в себя не только уровни доступа (например, обычный пользователь или администратор), но и доступ к конкретным данным.
Небезопасное хранение паролейВидеоурок по теме:
ОписаниеДля хранения паролей учетных записей пользователей должны использоваться алгоритмы одностороннего хеширования, которые будут соответствовать следующим требованиям:
- Уникален для каждой задачи. Даже при использовании одного и того же пароля хеши не должны повторяться. Это предотвращает компрометацию одного хеша пароля от компрометации всех остальных экземпляров того же пароля;
- Медленное создание / проверка — это предотвращает или сильно ограничивает атаки на пароли методом полного перебора;
- Неприступен для радужных таблиц — это отнимает у атакующих возможность всё вычислить и быстро взломать пароль.
Без соблюдения всех этих требований пароли уязвимы для атаки. Не стоит использовать хеш-функции, такие как MD5 и семейство SHA, для хеширования паролей — они быстрые и могут быть легко взломаны с помощью инструментов вроде hashcat.
Влияние на безопасностьАтакующие с доступом к хешам паролей пользователей могут вычислить используемые пароли. Это может привести не только к компрометации учетных записей пользователей в этой системе, но и в любом другом месте, где пользователь использовал тот же пароль.
Как защититьсяИспользование надёжного алгоритма хранения паролей (алгоритм генерации ключа), таких как bcrypt, PBKDF2 и Argon2, является оптимальным решением этой проблемы, поскольку они медленные и потому требуют большей вычислительной мощности для взлома, чем алгоритм быстрого хеширования (например, MD5). Имейте в виду, что для PBKDF2 рекомендуется устанавливать большое количество циклов.
Другим преимуществом использования функций генерации ключа, таких как bcrypt, является тот факт, что у них есть встроенная соль. Соль генерируется случайным образом для каждого пароля, а затем включается в процесс хеширования.
Неправильная обработка нуль-терминаторовВидеоурок по теме:
ОписаниеУязвимости, связанные с нуль-терминаторами, возникают, когда программное обеспечение позволяет их использовать в пользовательских данных, не гарантируя, что они удаляются/обрабатываются до передачи данных на низкоуровневые функции. Например, большинство функций в PHP, связанных с файловой системой, перестают искать имена файлов после нулевого терминатора, что может привести к потере критических данных.
Влияние на безопасностьТакая уязвимость может позволить злоумышленнику получить доступ к данным без должной авторизации, манипулировать данными или даже в некоторых случаях выполнять код.
Как защититьсяЕсли они не имеют решающего значения для функциональности приложения, нуль-терминаторы должны удаляться из пользовательского ввода или при их обнаружении должна выбиваться ошибка.
Уязвимость padding oracleВидеоурок по теме:
ОписаниеТакие уязвимости возникают, когда сервер при дешифровке данных по-разному реагирует на действительные и недействительные данные. Зачастую эта уязвимость эксплуатируется в тех случаях, когда данные зашифровываются с помощью режима сцепления блоков шифротекста (CBC), управляемого злоумышленником, и не требуют аутентификацию (например, через HMAC).
Влияние на безопасностьЗнания факта, получается ли при расшифровке шифротекста открытый текст с корректным дополнением, достаточно атакующему для проведения успешной атаки на шифрование в режиме CBC. Если злоумышленник может подавать какому-то сервису шифротексты, а тот будет возвращать ему информацию, корректно ли дополнение, — он сможет вскрыть любой шифротекст.
Как защититьсяСервер должен всегда отправлять одинаковую ошибку, вне зависимости от того, что её вызвало. Кроме того, все зашифрованные данные должны содержать механизм проверки целостности вроде HMAC. Это предотвратит любые уязвимости, связанные с подделкой шифротекста.
Отражённый XSSВидеоурок по теме:
ОписаниеОтражённый XSS происходит, когда пользовательский ввод проверяется ненадлежащим образом или не очищается перед вставкой на страницу.
Влияние на безопасностьЕсли злоумышленник может заставить жертву перейти по определенному URL-адресу (например, https://example.com/?param= <script> alert (1) </ script> ), он, возможно, сможет выполнить произвольный JavaScript на странице. Это позволяет злоумышленнику выполнять любые действия в качестве пользователя, выкачивать данные и многое другое.
Как защититьсяПользовательский ввод всегда должен быть закодирован перед выводом. Если пользовательский ввод вставляется в тег скрипта, он должен быть в экранированной строковой форме, а < и > не должны включаться напрямую. Если ввод происходит в другом месте на странице, все символы должны быть преобразованы в соответствующие HTML-сущности.
Фиксация сессииВидеоурок по теме:
ОписаниеФиксация сессии происходит, когда злоумышленник может управлять идентификатором сеанса, который используется пользователем при аутентификации. После аутентификации пользователя злоумышленник получает действительный идентификатор сеанса для учетной записи этого пользователя.
Влияние на безопасностьС помощью атаки фиксации сессии злоумышленник может получить полный контроль над учётной записью пользователя через его идентификатор сеанса без необходимости компрометации учётных данных.
Как защититьсяКогда пользователь входит в приложение или выходит из него, он должен получать новый идентификатор сеанса. Это предотвратит атаки фиксации сеанса, а также несколько других менее распространённых атак. Кроме того, идентификаторы сеансов никогда не должны передаваться или использоваться в строках запросов; это предотвращает утечку сеанса и помогает избежать его фиксации.
Хранимый XSSВидеоурок по теме:
ОписаниеХранимый XSS происходит, когда пользовательский ввод хранится в базе данных, файле или в другом месте и затем отправляется в браузер без надлежащей проверки и очистки.
Влияние на безопасностьХранимый XSS позволяет злоумышленнику выполнять произвольный JavaScript на странице. Это даёт ему возможность выполнять любые действия в качестве пользователя, выкачивать данные и многое другое.
Как защититьсяПользовательский ввод всегда должен быть закодирован перед выводом. Если пользовательский ввод вставляется в тег скрипта, он должен быть в экранированной строковой форме, а < и > не должны включаться напрямую. Если ввод происходит в другом месте на странице, все символы должны быть преобразованы в соответствующие HTML-сущности.
Крайне важно, чтобы это выполнялось для всех данных, извлекаемых из базы. Это делается для того, чтобы XSS не возникал в будущем, если какая-нибудь ошибка позволит манипулировать этими данными.
Повторное использование ключа потокового шифраВидеоурок по теме:
ОписаниеИспользование одного и того же ключа для потокового шифрования без использования специального одноразового кода может привести к раскрытию конфиденциальных данных. Это связано с тем, что в потоковых шифрах на исходном тексте и ключе шифрования применяется XOR для создания соответствующего зашифрованного текста. Если у вас есть два текста, зашифрованных одним и тем же ключом, применение XOR на них устранит ключ, оставив вам XOR исходных текстов. Например:
Зашифрованное сообщение 1
Зашифрованное сообщение 2
После применения XOR на обоих зашифрованных сообщениях
Влияние на безопасностьЗлоумышленник может скомпрометировать конфиденциальные данные или нарушить целостность зашифрованного текста. Критичность ситуации зависит от того, насколько легко атакующий может получить доступ к ключам, а также от важности зашифрованных данных.
Как защититьсяНе используйте ключи для шифрования повторно, если можете без этого обойтись. Однако в тех случаях, когда вам это необходимо, для обеспечения безопасности нужно использовать специальный одноразовый код. Для алгоритмов, которые его не поддерживают (например, RC4), рекомендуется применять XOR на коде и ключе перед использованием последнего.
Захват поддомена ОписаниеУязвимости захвата поддомена возникают, когда поддомен (subdomain.example.com) указывает на страницу сервиса (например, страницы GitHub, Heroku и т.д.), которая была удалена или перемещена. Например, если subdomain.example.com указывал на GitHub-страницу и пользователь решил удалить свою страницу, злоумышленник может создать свою страницу, добавить файл CNAME, содержащий subdomain.example.com, и завладеть этим поддоменом.
Хакеры обычно используют такие инструменты, как Sublist3r, чтобы найти все поддомены цели. Затем они проверяют записи DNS и/или ищут уязвимые поддомены. Поддомен, указывающий на страницу GitHub, возвращающую ошибку 404, может быть индикатором того, что его можно захватить.
Влияние на безопасностьУспешный захват поддомента позволяет злоумышленнику перенаправлять вас с поддомена на свой сайт. Кроме того, если поддомен является дочерним доменом базового имени сервиса, то злоумышленник может читать и устанавливать файлы cookie и для базового имени, например subdomain.example.com может устанавливать cookie для example.com.
Как защититьсяВсегда удаляйте записи DNS в поддомене, указывающем на удалённые службы, чтобы исключить возможность захвата.
- Симметричный:
- Виды XSS: