Веб-безопасность/Введение в веб-технологии

Материал из SecSem Wiki
Перейти к навигации Перейти к поиску

ПО, которое необходимо (обязательно!) скачать/установить к семинару (всё работает под Windows/Linux/Mac Os):

  1. Ubuntu Linux 16.04 (виртуальная машина)
  2. Burp Suite Pro Community Edition: https://portswigger.net/burp/communitydownload

Сеть

Сетевая модель OSI

OSI.png Сетевая модель OSI — сетевая модель стека (магазина) сетевых протоколов OSI. Посредством данной модели различные сетевые устройства могут взаимодействовать друг с другом. Модель определяет различные уровни взаимодействия систем. Каждый уровень выполняет определённые функции при таком взаимодействии.

Есть несколько уровней этой модели:

  1. Физический уровень
  2. Канальный уровень
  3. Сетевой уровень
  4. Транспортный уровень
  5. Сеансовый уровень
  6. Уровень представления
  7. Прикладной уровень

Физический уровень

Физический уровень — нижний уровень модели, который определяет метод передачи данных, представленных в двоичном виде, от одного устройства (компьютера) к другому. Физический уровень определяет такие виды сред передачи данных как оптоволокно, витая пара, коаксиальный кабель, спутниковый канал передач данных и т. п. Протоколы физического уровня: IEEE 802.15 (Bluetooth), 802.11 Wi-Fi и т. п.

Канальный уровень

Канальный уровень предназначен для обеспечения взаимодействия сетей на физическом уровне и контроля ошибок, которые могут возникнуть. Полученные с физического уровня данные, представленные в битах, он упаковывает в кадры, проверяет их на целостность и, если нужно, исправляет ошибки (формирует повторный запрос повреждённого кадра) и отправляет на сетевой уровень. На этом уровне работают коммутаторы, мосты и другие устройства. Пример протокола, работающего на этом уровне - IEEE 802.3 (Ethernet).

Сетевой уровень

Сетевой уровень модели предназначен для определения пути передачи данных. Отвечает за трансляцию логических адресов и имён в физические, определение кратчайших маршрутов, коммутацию и маршрутизацию, отслеживание неполадок и «заторов» в сети. Работающие на этом уровне устройства (маршрутизаторы) условно называют устройствами третьего уровня (по номеру уровня в модели OSI). Наиболее важные протоколы данного уровня - IP/IPv4/IPv6, о них мы подробнее поговорим ниже.

Транспортный уровень

Транспортный уровень модели предназначен для обеспечения надёжной передачи данных от отправителя к получателю. Примеры протоколов, работающего на этом уровне - TCP (Transmission Control Protocol), UDP (User Datagram Protocol).

Сеансовый уровень

Сеансовый уровень модели обеспечивает поддержание сеанса связи, позволяя приложениям взаимодействовать между собой длительное время. Примеры протоколов, работающего на этом уровне - PPTP (Point-to-Point Tunneling Protocol), RPC (Remote Procedure Call Protocol).

Уровень представления

Уровень представления обеспечивает преобразование протоколов и кодирование/декодирование данных. Важный протокол данного уровня - SSL и TLS, которые обеспечивают шифрование в протоколе HTTPS (о нём ниже).

Прикладной уровень

Прикладной уровень — верхний уровень модели, обеспечивающий взаимодействие пользовательских приложений с сетью:

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

Важные протоколы данного уровня - HTTP и HTTPS. О них подробно мы поговорим ниже.

Сетевая модель TCP/IP

OSI and TCPIP.png Кроме модели OSI используется так же модель TCP/IP.

TCP/IP — сетевая модель передачи данных, представленных в цифровом виде. Модель TCP/IP и модель OSI являются концептуальными моделями, используемыми для описания всех сетевых коммуникаций, в то время как TCP/IP сама по себе также является важным протоколом, используемым во всех операциях Интернета. Модель TCP/IP широко используется в описании сети и старше модели OSI, у них обоих много слоев.

Стек протоколов TCP/IP делится на 4 уровня:

  1. Уровень сетевого доступа
  2. Сетевой
  3. Транспортный
  4. Прикладной

Прикладной уровень соответствует сеансовый уровень , уровень представления и прикладной уровень, а уровню сетевого доступа - физический и канальный уровни.

Ethernet

Пример протокола уровня сетевого доступа - Ethernet. Это семейство технологий пакетной передачи данных между устройствами. Описывается семейством стандартов 802.3. Каждому устройству присваивается уникальный идентификатор - MAC-адрес. Ethernet Type II Frame format.svg.png

Ip

На сетевом уровне чаще всего используется протокол IP. IP-адрес — уникальный сетевой адрес узла в компьютерной сети, построенной на основе стека протоколов TCP/IP. Используется IPv4 (32 бита ) и IPv6 (128 бит).

Маска подсети — битовая маска для определения по IP-адресу адреса подсети и адреса узла (хоста, компьютера, устройства) этой подсети.

IP-адрес: 11000000 10101000 00000001 00000010 (192.168.1.2)

Маска подсети: 11111111 11111111 11111110 00000000 (255.255.254.0)

Адрес сети: 11000000 10101000 00000000 00000000 (192.168.0.0)

Порт

Порт — натуральное число, заголовках протоколов транспортного уровня модели OSI. Используется для определения процесса-получателя пакета в пределах одного хоста. На прикладном уровне чаще всего используется протокол HTTP(S).

TCP

Протокол, предназначенный для управления передачей данных. Пакеты в TCP называются сегментами.

HTTP/HTTPS

HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных. Так же есть протокол HTTPS (S - Secure) — расширение протокола HTTP для поддержки шифрования в целях повышения безопасности. Каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном порядке: Стартовая строка (англ. Starting line) — определяет тип сообщения; Заголовки (англ. Headers) — характеризуют тело сообщения, параметры передачи и прочие сведения; Тело сообщения (англ. Message Body) — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой.

В стартовой строке могут быть следующие типы сообщений:

в случае запроса:

  • GET - запрашивает представление указанного ресурса.
  • HEAD - запрашивает заголовки, идентичные тем, что возвращаются, если указанный ресурс будет запрошен с помощью HTTP-метода GET
  • OPTIONS - используется для описания параметров соединения с целевым ресурсом.
  • DELETE - удаляет указанный ресурс.
  • PUT - создает новый ресурс или заменяет представление целевого ресурса, данными представленными в теле запроса.
  • PATCH - применяет частичную модификацию к ресурсу.
  • POST - предназначен для отправки данных на сервер. Тип тела запроса указывается в заголовке Content-Type.
  • CONNECT - запускает двустороннюю связь с запрошенным ресурсом.
  • TRACE - выполняет проверку обратной связи по пути к целевому ресурсу, предоставляя полезный механизм отладки.

в случае ответа:

  • 1xx - информирование о процессе передачи.
  • 2xx - информирование о случаях успешного принятия и обработки запроса клиента. В зависимости от статуса, сервер может ещё передать заголовки и тело сообщения.
  • 3xx - сообщает клиенту, что для успешного выполнения операции необходимо сделать другой запрос.
  • 4xx - указание ошибок со стороны клиента.
  • 5xx - информирование о случаях неудачного выполнения операции по вине сервера

Заголовки HTTP (англ. HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару имя-значение. Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.

Один из самых важных заголовков - cookie.

Cookie — небольшой фрагмент данных, отправленный веб-сервером и хранимый на компьютере пользователя. Необходимо для: аутентификации пользователя; хранения персональных предпочтений и настроек пользователя; отслеживания состояния сеанса доступа пользователя; ведения статистики о пользователях; Вот выглядит запрос по URL https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 (Красным цветом выделена стартовая строка, синим - заголовки, фиолетовым - тело запроса)

GET /wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 HTTP/1.1

Host: ru.wikipedia.org

User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Connection: close

Cookie: WMF-Last-Access=14-Oct-2019; WMF-Last-Access-Global=14-Oct-2019; mwPhp7Seed=f2e; VEE=wikitext; PHP_ENGINE=php7; GeoIP=RU:MOW:Moscow:55.75:37.62:v4

Upgrade-Insecure-Requests: 1

If-Modified-Since: Mon, 14 Oct 2019 13:19:08 GMT


и вот как выглядит ответ на него:

HTTP/1.1 200 OK

Date: Mon, 14 Oct 2019 14:09:06 GMT

Content-Type: text/html; charset=UTF-8

Content-Length: 127493

...


<!DOCTYPE html>

<html class="client-nojs" lang="ru" dir="ltr">

<head>

<meta charset="UTF-8"/>

<title>Википедия — свободная энциклопедия</title>

...

HTML

HTML - стандартизированный язык разметки документов в интернете. Большинство веб-страниц имеют содержание разметки на языке HTML. Например, зайдём на сайт http://example.org/ Example org.png посмотрим её HTML разметку: Html example org.png Важное, что сейчас нужно знать про HTML - теги. Вот примеры тега:

<strong>Текст между двумя тегами — открывающим и закрывающим.</strong>
<a href="http://www.example.com">Здесь элемент содержит атрибут href, то есть гиперссылку.</a>
</br>

Обычно используются парные теги — открывающий, или начальный (, <a href="http://www.example.com">), и закрывающий, или конечный (, </a>). Возможно также применение одиночного тега (
).

DNS

DNS.png Для получения IP адреса сайта используется DNS. DNS - компьютерная распределённая система для получения информации о доменах. Доме́н — узел в дереве имён, вместе со всеми подчинёнными ему узлами (если таковые имеются), то есть именованная ветвь или поддерево в дереве имён. Структура доменного имени отражает порядок следования узлов в иерархии; доменное имя читается слева направо от младших доменов к доменам высшего уровня (в порядке повышения значимости): вверху находится корневой домен (имеющий идентификатор «.»(точка)), ниже идут домены первого уровня (доменные зоны), затем — домены второго уровня, третьего и т. д. (например, для адреса ru.wikipedia.org. домен первого уровня — org, второго — wikipedia, третьего — ru). DNS позволяет не указывать точку корневого домена. Поддомен — подчинённый домен (например, wikipedia.org — поддомен домена org, а ru.wikipedia.org — домена wikipedia.org). Теоретически такое деление может достигать глубины 127 уровней, а каждая метка может содержать до 63 символов, пока общая длина вместе с точками не достигнет 254 символов. Но на практике регистраторы доменных имён используют более строгие ограничения. Например, если у вас есть домен вида mydomain.ru, вы можете создать для него различные поддомены вида mysite1.mydomain.ru, mysite2.mydomain.ru и т. д.

Proxy

Прокси-сервер, иначе - сервер-посредник — промежуточный сервер (комплекс программ) в компьютерных сетях, выполняющий роль посредника между пользователем и целевым сервером (при этом о посредничестве могут как знать, так и не знать обе стороны), позволяющий клиентам как выполнять косвенные запросы (принимая и передавая их через прокси-сервер) к другим сетевым службам, так и получать ответы. Последнее определение, которое нам понадобится в дальнейшем - proxy-сервер. Прокси-сервер, иначе - сервер-посредник — промежуточный сервер (комплекс программ) в компьютерных сетях, выполняющий роль посредника между пользователем и целевым сервером (при этом о посредничестве могут как знать, так и не знать обе стороны), позволяющий клиентам как выполнять косвенные запросы (принимая и передавая их через прокси-сервер) к другим сетевым службам, так и получать ответы.

Инструменты

В данном курсе нам понадобятся следующие инструменты:

cURL

cURL — кроссплатформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL. cURL делает только GET запрос. пример запроса:

curl http://www.google.com/

netcat

netcat — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Можно делать как GET, так и POST запросы. пример запроса:

$ nc www.google.com 80
GET / HTTP/1.1
Host: www.google.com

ping

Утилита для проверки целостности и качества соединений в сетях на основе TCP/IP, а также обиходное наименование самого запроса.

home:~$ ping -i 5 -c 3 example.org

traceroute

Служебная компьютерная программа, предназначенная для определения маршрутов следования данных в сетях TCP/IP.

home:~$ traceroute example.org

Host

Утилита в UNIX-системах, предназначенная для обращения и получения информации DNS-серверов.

home:~$ host example.org

Burp Suit - Для анализа HTTP-взаимодействия между клиентом и сервером, а также для вмешательства в него удобен Burp Suite. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам ("вручную").

Burp

Рекомендуется использовать Burp Suite в связке с браузером Firefox. Для полноценной работы прокси-сервера с браузером нужно настроить следующее: включить и настроить сам прокси-сервер; перенаправить весь трафика браузера на прокси-сервер; добавить корневой сертификат прокси-сервера в список доверенных для возможности перехвата HTTPS-траффика. Настройка прокси-сервера В первую очередь нужно запустить Burp Suite, прокликав несколько раз кнопку "Next" и ей подобные. Во вкладке Proxy/Options убедиться в том, что стандартный слушающий порт активен (отметка в столбце Running) или выбрать новый (Add). Burp guide1.png Во вкладке Proxy/Intercept убедиться в том, что активный перехват трафика выключен (Intercept is off), в противном случае нажать на кнопку "Intercept is on". Burp guide2.png Настройка браузера Для добавления прокси-сервера в настройках браузера Firefox нужно поискать по ключевому слову "proxy" или "прокси", а затем добавить прокси-сервер http://localhost:8080 (или любой другой свободный порт, его можно настроить в Burp Suite, 8080 - стандартный). Burp guide3.png Затем в браузере перейти по ссылке на главную страницу самого прокси-сервера (работает только при перенаправлении трафика через прокси-сервер). Burp guide4.png И скачать корневой сертификат неких любителей портвейна (PortSwigger). После этого нужно добавить этот сертификат в браузер (для Firefox: поиск в настройках по "certificate" или "сертификат" и кнопка "Import" в Менеджере сертификатов). А потом убедиться, что PortSwigger CA появился в списке сертификатов. Burp guide5.png Иструкция по применению Теперь все готово для тестирования любого веб-приложения. Для нашего курса нам понадобятся только 2 инструмента из набора Burp Suite: Proxy; Repeater. Вкладка Proxy/Intercept позволяет изменять запросы, отправляемые бразуером "на лету", а затем наблюдать за отображением ответа на модифицированный запрос в браузере. В этой вкладке можно редактировать запросы как тест, а затем пересылать их дальше кнопкой "Forward". Вкладка Proxy/HTTP history отображает историю всех HTTP(s)-запросов, отправленных браузером, и ответов на них. Для того, чтобы можно было отредактировать и послать на сервер какой-то запрос из истории, нужно кликнуть правой кнопкой мыши на нужный запрос и выбрать пункт "Send to Repeater". Burp guide6.png После этого можно перейти во вкладку Repeater, редактировать выбранный запрос как тест и посылать его на сервер кнопкой "Go". В правой половине вкладки будет отображаться ответ от сервера на этот запрос. Burp guide7.png

Ссылки