Найти в Дзене
Я, Golang-инженер

#72. Кибербезопасность для разработчика: red-team и blue-team, web-уязвимости, инструменты белого хакера, kill-chain и основы криптографии

Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением. Хой, джедаи и амазонки! Пока разбирался с сетевыми технологиями в предыдущей публикации о модели OSI и Internet, обнаружил проблемы с безопасностью, которые несёт постоянный IP-адрес. Заинтересовался этой темой и решил немного глубже изучить проблемы безопасности для веб-приложений, чтобы научиться эти проблемы выявлять и не допускать в процессе разработки или тестирования ПО. Кроме предупреждения уязвимостей на этапе разработки ПО (да и аппаратной части), существует профессия пентестер для выявления допущенных проблем в информационной безопасности. Белый хакер или пентестер (penetration test - испытание на проникновение) - это IT-специалист, выявляющий возможности несанкционированного доступа к цифровым ресурсам с целью укрепить её информационную безопасность и предотвратить такой несанкционированный доступ. Я больше 12 лет проработал на опасн
Оглавление

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

Хой, джедаи и амазонки!

Пока разбирался с сетевыми технологиями в предыдущей публикации о модели OSI и Internet, обнаружил проблемы с безопасностью, которые несёт постоянный IP-адрес. Заинтересовался этой темой и решил немного глубже изучить проблемы безопасности для веб-приложений, чтобы научиться эти проблемы выявлять и не допускать в процессе разработки или тестирования ПО.

Кроме предупреждения уязвимостей на этапе разработки ПО (да и аппаратной части), существует профессия пентестер для выявления допущенных проблем в информационной безопасности.

Белый хакер или пентестер (penetration test - испытание на проникновение) - это IT-специалист, выявляющий возможности несанкционированного доступа к цифровым ресурсам с целью укрепить её информационную безопасность и предотвратить такой несанкционированный доступ.

1. Техника безопасности для белого хакера

Я больше 12 лет проработал на опасном производстве, где инструкции по технике безопасности написаны кровью. И перед тем, как допустить человека к работе, проводится несколько инструктажей по технике. По одним должностям инструктаж ТБ попроще, по другим - жёстче:

https://ru.freepik.com/free-photo/interior-view-steel-factory_1119680.htm
https://ru.freepik.com/free-photo/interior-view-steel-factory_1119680.htm

Есть такие инструктажи, где просто прочтения правил и подписи в журнале ТБ недостаточно - обязательна нужна практика по закреплению озвученных требований. Это в какой-то степени относится и к белому хакингу.

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

Приведу примеры, которые нашёл в различных источниках, какие могут быть проблемы и опасности при белом хакинге, т.к. кто предупреждён, тот вооружён:

  • Это заблуждение, будто если взломать маленький неизвестный сайт даже в учебных целях, вас не найдут. Находят людей очень хорошо, даже если они взломали не банк, а микросайт с посещением два человека в месяц. Это может быть связано в т.ч. с тем, что с помощью чужой сети, не представляющей видимой ценности, настоящие хакеры могут заметать следы при захвате другой более ценной системы.
  • Считается, что в даркнете при конспирации 100 lvl невозможно найти человека. Находят. Множество историй, например прочитайте про шёлковый путь.
  • Если ты считаешь себя хакером-альтруистом и ищешь уязвимости на чужих сайтах без просьбы владельцев этих сайтов и обещанного вознаграждения; а после обнаружения уязвимости сообщил об этом в техподдержку сайта, ты в лучшем случае не получишь никакого ответа. И даже не вздумай спрашивать о вознаграждении, это может истолковаться, как вымогательство, и хорошо если тебя вежливо предупредят, что если воспользуешься найденной уязвимостью, то ответишь по закону.
  • Если ты пользуешься биржей, на которой компании оставляют заявки на поиск уязвимостей своих ресурсов с оплатой работы (bug bounty), будь готов к следующему: ты нашёл уязвимость, направил доказательства компании, а в ответ получил отказ. При этом неважно - пофиксили найденную тобой уязвимость, или нет: возник конфликт. А биржа при этом конфликте встаёт на сторону организации, а не на твою. Такие случаи описаны в публикациях конкретными людьми. Можно разбираться через суды, собрав доказательную базу, но это траты времени, нервов и денег, а результат не гарантирован. Просто знай о существовании таких ситуаций.
  • Обучайтесь взлому не на реальных сайтах или чьих-то профилях в соцсетях (даже друзей), а на своём компьютере в виде тестовых сценариях, собственном сервере, специальных сайтах по прокачке навыков взлома в тестовой среде и тому подобном.
Иллюстрация: Кинопоиск, х/ф "Кибер", 2015 г.
Иллюстрация: Кинопоиск, х/ф "Кибер", 2015 г.

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

2. Red-team vs Blue-team

Есть два типа специалистов информационной безопасности, к одному из которых относятся и пентестеры:

  • Те, кто обеспечивают информационную безопасность (ИБ) в компании, развивают ИБ и реагирует на атаку информационной среды.
  • Те, кто по запросу компании выявляют уязвимости ИБ этой компании и выполняют комплексную атаку с целью подтвердить реальность опасности и предоставить информацию для закрытия брешей.

Первые - это blue-team. Вторые - red-team. Такая терминология пришла из армии.

Обычно red-team работает, известив blue-team, чтобы в "тепличных" условиях защитники были наготове и могли противопоставить весь инструментарий защиты, следить и адекватно реагировать на сигналы атаки на компьютерную систему.

Blue-team можно сравнить с защитниками крепости, а red-team - ассасины, которых нанял король крепости для проверки надёжности своей стражи:

Иллюстрация: Kandinsky
Иллюстрация: Kandinsky

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

Способов навредить масса: от удаления данных без возможности восстановления до вывода из строя инфраструктуры. А если эта инфраструктура - атомный реактор, то последствия будут не только для компании плачевные, но для всего человечества.

Имитация действий злоумышленников, т.е. red-teaming, выполняется именно комплексно:

  1. Социальная инженерия;
  2. Физическое вторжение;
  3. Тестирование на проникновение (пентестинг).

2.1. Социальная инженерия

Социальная инженерия - это софтскилы и хардскилы, направленные на манипуляции над людьми с целью вызвать у них требуемое поведение.

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

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

Реклама - пример социальной инженерии. Люди, у которых огромные сообщества - хорошие социальные инженеры.

В прошлом году купил и начал читать книгу "Нетворкинг для разведчиков. Как извлечь выгоду из любого знакомства" от бывших разведчиков СССР и РФ под глубоким прикрытием, написанную для улучшения качества жизни всех людей:

Разворот книги Нетворкинг для разведчиков
Разворот книги Нетворкинг для разведчиков

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

На мой взгляд, нетворкинг - это социальная инженерия на микроуровне.

Как с помощью социальной инженерии можно нарушить кибербезопасность?

  • Получение сведений через личные контакты, в т.ч. при живом общении;
  • Фишинг: письма на email с ссылками на поддельные сайты для получения личных данных, по нику в ТГ, телефонные звонки и т.д.
  • Поиск контактов в соцсетях, на корпоративных сайтах.

Пример социальной инженерии / нетворкинга на микроуровне в виде получение сведений через установление личного контакта был в советском фильме про Шерлока Холмса и доктора Ватсана "Король шантажа", где Шерлок в великолепном исполнении Василия Ливанова входит в доверие и обручается с гувернанткой, работающей в коттедже богатого злодея, чтобы узнать об охране коттеджа и его планировке:

Фрагмент фильма "Приключения Шерлока Холмса и доктора Ватсона"
Фрагмент фильма "Приключения Шерлока Холмса и доктора Ватсона"

Когда-то общался с сотрудником blue-team, он рассказал случай во время своей службы во времена СССР. Тогда на промышленное предприятие (не в сфере IT) должна была приехать иностранная делегация. Блю-тимовцев через одного поставили за станки в цехе, где должна была пройти экскурсия, вместо настоящих рабочих, рассказали в двух словах как и что делать за станком, чтобы и не травмироваться и не выдавать себя, будто вы стоите за станком в первый раз. А во время экскурсии один из её делегатов попытался порасспрашивать токаря, но общался с блю-тимовцем и не получил промышленной информации.

2.2. Физическое вторжение

Ситуация: в организации супер-антивирус установлен на каждом компьютере, интернета у рядовых сотрудников нет вовсе - только локальные сети: извне едва ли возможно получить доступ к информационной среде. Злоумышленник проходит в офис под различным предлогом, садиться за компьютер и скачивает нужные данные на флешку. Или даже прихватывает ноутбук сотрудника и уходит с ним через выход или спускается по пожарной лестнице; или аккуратно и скрытно кладёт ноутбук/флешку/съёмный HDD через открытое окно на водоотлив первого этажа, чтобы беспрепятственно пройти проходную с досмотром, зайти с улицы и спокойно забрать устройство.

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

Фрагмент фильма "Приключения Шерлока Холмса и доктора Ватсона", где они проникают в чужой дом с использованием стеклореза на стеклянной двери оранжереи
Фрагмент фильма "Приключения Шерлока Холмса и доктора Ватсона", где они проникают в чужой дом с использованием стеклореза на стеклянной двери оранжереи

Сюда же входят ситуации, при которых подделывают пропуска/бейджи, придумываете законный сценарий входа в закрытую зону - например, занимаются доставкой еды или воды.

2.3. Тестирование на проникновение

Пентестер определяет слабые места системы и пользуется этими слабостями. В сферу ответсвенности пентестера входит определение:

  • Места, куда хакеры направят атаку;
  • Способы, которыми хакеры будут атаковать;
  • Как будет действовать "оборона" - blue-team;
  • Масштаба нанесённого ущерба.

Пентестер анализирует прорехи в информационной безопасности приложений, сетей и сетевых устройств: компьютеров, смартфонов и др.

Этапы работы пентестера:

  1. Планирование - определить цели тестирования: согласование деталей с заказчиком и получение от него разрешения, определение систем и компонентов, которые будут подвергнуты тестированию, выявление юридических/этических ограничений;
  2. Исследование - сбор данных об IT-инфраструктуре и потенциальных уязвимостях исследуемой компании: сканирование сетей, анализ DNS, сбор данных из открытых источников об IT-инфраструктуре или изучение информации, предоставленной заказчиком (если предусмотрено условиями);
  3. Атака - испытания на проникновение: попытки несанкционированного доступа к информационной среде заказчика, работа с правами доступа и т.д.;
  4. Отчётность - написание отчёта о проделанной работе: найденных сведениях, вариантах атак и используемых инструментах, найденных уязвимостях, масштабе потенциального ущерба и рекомендациях к исправлению.

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

Каждый из этих этапов можно разделить на подуровни, но для IT-сферы мне интересны этапы исследования и атаки. Вместе они образуют kill-chain стратегию.

2.4. Kill-chain

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

Этапы модели kill-chain настоящих хакеров включают:

  1. Разведка (Reconnaissance): cбор информации о цели в виде пассивных и/или активных действий. Пассивные действия снижают вероятность обнаружения, активные - повышают. Под пассивными - сбор данных из открытых источников без запросов к сети, - например, изучение корпоративного сайта, соцсетей работников компании, заметок СМИ; записей DNS, в т.ч. контактных данных владельца доменов; элементы социальной инженерии. Под активными понимается взаимодействие с целевой системой: сканирование сети, проверка уязвимостей, интерактивное изучение - прямое взаимодействие стандартными "пользовательскими способами", отправка "недобросовестных запросов" для оценки реакции целевой системы.
  2. Вооружение (Weaponization): подготовка инструментария для атаки: написание вирусов, подготовка сети компьютеров для массовой DDoS-атаки, установка специального ПО на компьютеры хакеров и т.д.
  3. Доставка (Delivery): доставка оружия к цели, например через фишинг, USB-носители или как-то иначе.
  4. Эксплуатация (Exploitation): использование уязвимостей в системе для несанкционированного доступа.
  5. Установка (Installation): установка вредоносного ПО для обеспечения постоянного доступа к информационной среде.
  6. Управление и контроль (Command and Control): установление соединения хакера с информационной средой компании.
  7. Действия по объектам (Actions on Objectives): реализация целей хакера: кража данных, подмена данных, удаление данных и др.

Пентестеры при выполнении исследования и атаки могут следовать по этой же цепочке, документируя каждый шаг.

2.5. Когда нужна Red-team?

Пентестер может быть как частью команды blue-team, так и red-team. Но его работа - только часть комплексных мероприятий red-team.

Смысл организовывать "ред-тиминг" есть, если в компании налажена базовая информационная безопасность и проведён пентестинг. И компания хочет, чтобы их защита прошла проверку боем в условиях, когда оппонент будет взламывать защиту любым способом.

Red-team действует скрытно, не привлекая внимания, как действовали бы настоящие злоумышленники.

Отдельный пентестер вне red-team не скрывает своих намерений и открыто исследуя уязвимости, не заботясь о том, чтобы остаться в тени; а blue-team может получать тревожные сигналы но игнорировать их, т.к. понимают, кто взламывает их систему.

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

При получении целевых данных, атака red-team считается выполненной. Целевые данные как правило определяются на этапе согласования, когда компания, которая хочет проверить свою информационную безопасность, ставит задачи red-team.

Для разработчика ПО важно понимать, как его ПО могут тестировать, и не допускать уязвимостей на этапе разработки кода. Чтобы минимизировать риски успешной кибератаки или даже случайных действий добросовестных пользователей при наличии уязвимостей.

3. Инструменты пентестера

Меня интересуют в первую очередь IT-сфера, поэтому разбираю как действует пентестер: что использует, как можно разработчику ПО протестировать свои приложения. Начнём с дистрибутива Linux Kali, который считается хакерским, т.к. имеет большой инструментарий предустановленного ПО для анализа информационной безопасности.

Будем устанавливать Kali не на ОС, а воспользуемся виртуальной машиной, чтобы повысить свою собственную безопасность.

Также рассмотрим консольную утилиту Nmap для анализа сети и ПО BurpSuite для анализа веб-приложений.

А для опытов будем использовать докер-образ веб-приложения с наличием в нём уязвимостей, а именно - интернет-магазин соков.

Также есть старые добрые инструменты разработчика в каждом браузере.

Итого, рассмотренные инструменты в этом разделе:

  1. Виртуальная машина;
  2. Linux Kali;
  3. Nmap;
  4. BurpSuite;
  5. Докер-образ интернет-магазина соков;
  6. Инструменты разработчика в браузере.
https://ru.freepik.com/free-photo/top-view-different-types-tools_7049514.htm
https://ru.freepik.com/free-photo/top-view-different-types-tools_7049514.htm

3.1. Виртуальная машина

Виртуальная машина (ВМ) - это ПО, которое моделирует поведение аппаратной части компьютера, позволяя запускать разные ОС на одном устройстве.

Виртуальную машину можно установить непосредственно на аппаратную часть компьютера (используя гипервизор 1 уровня), так и установить на существующую ОС (используя гипервизор 2 уровня).

Гипервизор - это низкоуровневое ПО, которое позволяет создавать и управлять ВМ.

Гипервизоры 1 уровня (голые гипервизоры) устанавливают на крупные корпоративные сервера или облачные дата-центры. Это обеспечивает более эффективное управление ресурсами и производительность.

Я выделил две причины, почему белому хакеру виртуальная машина может быть полезна:

  • Изолировать тестовую среду для экспериментов с вредоносным ПО с минимизацией рисков повреждения основной ОС.
  • Практиковать поиск уязвимостей в разных ОС. Если я работаю только на Windows, то как я смогу искать уязвимости на MacOS, тем более если у меня нет макбука? Только через ВМ.
  • Сразу получить набор установленных инструментов для пентестера.

Установил виртуальную машину VirtualBox на своей Linux Manjaro через пакетный менеджер с GUI через поиск по названию программы:

Раздел "Сведения" в пакетном менеджере с GUI о виртуальной машине
Раздел "Сведения" в пакетном менеджере с GUI о виртуальной машине

После установки запустил ПО:

GUI VirtualBox
GUI VirtualBox

Работает, всё в порядке. Поехали устанавливать Kali.

3.2. Linux Kali

3.2.1. Скачиваем Linux Kali

Заходим на сайт Kali. Нас интересует раздел для виртуальной машины с готовыми настройками ОС Kali:

https://www.kali.org/get-kali/#kali-platforms
https://www.kali.org/get-kali/#kali-platforms

Вот раздел для виртуальных машин, есть образ для VirtualBox и других ВМ.

https://www.kali.org/get-kali/#kali-virtual-machines
https://www.kali.org/get-kali/#kali-virtual-machines

Образ для VirtualBox весит 3.3 ГБ, скачивался со скоростью ~7 МБ/с.

3.2.2. Распаковываем архив

Создам каталог, в котором будут все мои виртуальные ОС. Действовать будем как настоящие белые хакеры - через терминал:

Работа в терминале
Работа в терминале

Флаг -p (parent) в команде mkdir позволяет создавать промежуточный каталог, если его нет.

Командой tree я посмотрел содержимое каталога.

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

/home/ev/Загрузки/kali-linux-2024.4-virtualbox-amd64.7z

Тогда команда в терминале будет такой:

Работа в терминале
Работа в терминале

Точка в конце команды mv указывает, что перемещаем в каталог в котором находимся.

Выполняем разархивирование командой 7z:

7z x kali-linux-2024.4-virtualbox-amd64.7z
Работа в терминале
Работа в терминале

Разархивирование выполнено. Проверим наличие и размер разархивированного каталога и удалим архив:

Работа в терминале
Работа в терминале

3.2.3. Монтируем образ в ВМ

Через кнопку "Добавить" открываем разархивированный образ в ВМ. После добавления кнопка изменилась на "Запустить":

Работа с VirtualBox
Работа с VirtualBox

3.3. Запуск образа

При запуске образа у меня возникла ошибка:

Ошибка
Ошибка

Эта ошибка говорит, что драйверы VirtualBox не установлены или не загружены в ОС. Также сообщается, что возможна ошибка при наличии опции безопасной загрузки модулей ядра в BIOS.

Опция Security Boot влияет на предотвращение загрузки программ без цифровой подписи при загрузке ядра ОС.

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

Проверил я свой BIOS:

Проверка BIOS
Проверка BIOS

Уже оказывается стояла Disabled, т.е. отключена безопасная загрузка модулей драйверов.

Что делать?

Поискал, для моей ОС есть отдельный раздел документации конкретно для VirtualBox:

https://wiki.manjaro.org/index.php/VirtualBox/ru
https://wiki.manjaro.org/index.php/VirtualBox/ru

Выполним установку по этой документации.

3.4. Установка VirtualBox по документации разработчиков ОС

Первым этапом установки, разработчики документации на ОС предлагают убедиться, что виртуализация включена в BIOS. Чтобы это сделать, в документации Manjaro предлагается ознакомиться с документацией поставщика компьютера.

3.4.1. Виртуализация в BIOS

Проверяю в BIOS виртуализацию. Нашёл опцию SVM Mode, в описании указывает на виртуализацию CPU. Думаю, она:

Работа в BIOS
Работа в BIOS

3.4.2. Пакет virtualbox

Чтобы установить VirtualBox, необходимо установить пакеты virtualbox и linux*-virtualbox-host-modules. Последний должен соответствовать версии ядра, которое загрузил для работы мой компьютер.

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

mhwd-kernel -l
Работа в терминале
Работа в терминале

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

uname -r
Работа в терминале
Работа в терминале

Эта информация нужна, чтобы запустить установку VirtualBox командой:

sudo pacman -Syu virtualbox ВЕРСИЯ_LINUX-virtualbox-host-modules

Как я понял, нужно взять используемое ядро 6.11.11-1-MANJARO но без лишних знаков символов, сопоставив со всеми доступными ядрами. На мой взгляд это может быть linux61, хотя визуально подходят и другие варианты. Устанавливаю 61-й:

sudo pacman -Syu virtualbox linux61-virtualbox-host-modules

Процесс пошёл:

Работа в терминале
Работа в терминале

Процесс завершился 10/10, будем считать что всё идёт как нужно:

Работа в терминале
Работа в терминале

После завершения установки, нужно добавить загруженную программу в ядро ОС. Это можно сделать перезагрузкой или командой в терминал:

sudo vboxreload
Работа в терминале
Работа в терминале

Вновь ошибка. Она может говорить о том, что я установил пакет VirtualBox для другого ядра, а не того, что использую.

Установлю пакет VirtualBox для другого ядра, а именно 611 - возможно нужно ориентироваться на три цифры версии ядра из команды uname при сопоставлении с результатами из команде mgvd:

sudo pacman -Syu virtualbox linux611-virtualbox-host-modules

Вывод уже отличается:

Работа в терминале
Работа в терминале

Загружаем пакет VirtualBox:

sudo vboxreload
Работа в терминале
Работа в терминале

Команда выполнилась корректно. Проверяю версию VirtualBox:

vboxmanage --version
Работа в терминале
Работа в терминале

Версия есть, запустим наше приложение VirtualBox с графическим интерфейсом и запустим образ. Результат:

Работа с GUI
Работа с GUI

Отлично, виртуальная машина запустила образ и предлагает ввести имя пользователя и пароль. По-умолчанию, это kali. Пароль лучше поменять, конечно.

Какой я делаю вывод. Вероятно, при установке VirtualBox через пакетный менеджер с GUI, было предложено выбрать одно из ядер, и я выбрал не то, которое используется.

Ввёл данные, у меня появилось в отдельном окне рабочее пространство с ОС Kali:

Работа в GUI
Работа в GUI

Запустил терминал и попробовал пингануть тестовый хост для проверки работоспособности сети из Kali:

Работа с терминалом
Работа с терминалом

Всё работает, пинг достигает цели.

На этом пока всё. У меня есть полноценная ОС для тестирования сети на безопасность.

Установим отдельно от Kali Linux небольшую утилиту для сканирования сетей, чтобы можно было ей пользоваться без ВМ при разработке кода в основной ОС.

3.5. Консольная утилита nmap

Утилита nmap (Network Mapper) - инструмент для сканирования сетей. Она часто используется системными администраторами для своих целей, далёких от пентестинга и тем более хакинга.

3.5.1. Установка nmap

На моей Linux Manjaro она не установлена по-умолчанию. С менеджером пакетов pacman установил командой:

sudo pacman -S nmap
Установка nmap
Установка nmap

Программа незнакомая, почитаем раздел помощи:

Работа в терминале
Работа в терминале

Этот раздел не очень большой но и не особенно понятный.

Можем почитать расширенную справку об утилите через другую утилиту man, которая обычно предустановлена во всех bash-оболочках. Вот начало справки, она довольно большая:

Работа в терминале
Работа в терминале

Чтобы прочитать и понять эту документацию, потребуется очень много времени. Я разберу несколько сценариев использования nmap.

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

3.5.2. Определяем IP своего маршрутизатора

Введём в терминал команду для поиска IP-адреса устройства по-умолчанию, к которому мой компьютер направляет запросы для выхода в интернет:

ip route | grep default
Работа в терминале
Работа в терминале
  • default - ключевое слово, обозначающее маршрут по-умолчанию;
  • via 192.168.0.1 - IP-адрес сетевого устройства, которое связывает локальную сеть с интернетом;
  • dev wlo1 - обозначение сетевого интерфейса, связывающего маршрутизатор и компьютер-источник запроса. Указывает на беспроводную связь (Wi-Fi);
  • proto dhcp - информация сохранена в таблицу маршрутизации маршрутизатора через dhcp-протокол.
  • src 192.168.0.13 - IP-адрес устройства источника запроса, т.е. моего компьютера.
  • metric 600 - метрика маршрута.

О протоколе DHCP и таблице маршрутизации можно почитать в публикации о сетях: *клик*.

Эти адреса, что я здесь привёл - локальные. По ним не выйдет обратиться к моему компьютеру или маршрутизатору из интернета. У маршрутизатора есть внешний IP-адрес, который регулярно обновляется вышестоящим DHCP-сервером провайдера.

3.5.3. Сканируем TCP-порты сетевого устройства

С помощью Nmap можно обнаружить активные порты сетевого устройства. Т.е. те порты, которые постоянно прослушиваются сетевым устройством и воспринимают информацию, поступающую на них. К этим портам могут быть привязаны какие-то процессы, т.е. работающие программы.

И хотя маршрутизатор работает на сетевом уровне сетевой модели Internet, а порты работают уровнем выше - на транспортном уровне, в маршрутизаторе их также можно просмотреть. Связано это в том числе с тем, что в маршрутизаторах встроена реализация протокола NAT и брандмауэры для фильтрации и управления трафиков на основе портов, для которых предназначен этот трафик.

Воспользуемся командой nmap с IP-адресом маршрутизатора:

nmap 192.168.0.1
Работа с терминалом
Работа с терминалом
  • Строка Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-06 20:53 +10 показывает версию утилиты Nmap и начало времени сканирования;
  • Nmap scan report for 192.168.0.1 сообщает, что сканируется устройство с IP-адресом 192.168.0.1;
  • Host is up (0.0071s latency) - хост доступен по указанному IP-адресу и задержка составляет 0.0071 секунды. Задержка - это время передачи пакета (данных) к целевому устройству и обратно.
  • Not shown: 992 closed tcp ports (conn-refused) - не показано состояние 992 TCP-портов, т.к. они закрыты.
  • Далее таблица со столбцами PORT, STATE, SERVICE (порт, состояние, служба этого порта). Сами порты, протоколы и предполагаемые службы на них.
  • filtered - не удалось определить статус порта. Вероятная причина - настройки или фильтрация пакетов.
  • Строка Nmap done: 1 IP address (1 host up) scanned in 1.24 seconds - просканирован 1 IP-адрес за 1,24 секунды.

3.5.4. Сканируем UDP-порты сетевого устройства

Процесс похож, но добавляем флаг -sU. Сканирование требует намного больше времени, т.к. UDP-порты могут не всегда давать ответы. Так, моё сканирование заняло 18 минут.

Флаг s означает "scan/сканирование" и следом ожидает тип протокола.

Флаг U указывает на протокол для сканирования UDP. В предыдущем пункте мы не указывали флагов, т.к. по-умолчанию сканируются TCP-порты.

Работа в терминале
Работа в терминале

Собственно, всё похоже. Но появился ещё MAC-адрес с производителем сетевого адаптера.

Из сервисов можно выделить: domain для DNS-запросов, dhcps для протокола DHCP, tftp - протокол TFTP, netbios-ns - для NetBIOS Name Service, netbios-dgm для NetBIOS Datagram Service, isakmp для Internet Security Association and Key Management Protocol, upnp для Simple Service Discovery Protocol и т.д.

3.5.5. Определяем ОС сетевого устройства

Команда определит приблизительную версию ОС, а не гарантированную:

nmap -O 192.168.0.1
Работа в терминале
Работа в терминале
  • Первая часть аналогична предыдущему разбору.
  • Device type: general purpose - сетевое устройство классифицируется как устройство общего назначения.
  • Running: Linux 2.6.X - предположительно на целевом хосте установлена Linux 2.6...
  • Network Distance: 1 hop - целевой хост находится на расстоянии 1 перехода от моего устройства.

Знание конкретной версии OS может сказать пентестеру, каким она подвержена уязвимостям, т.к. уязвимости для старых ОС считаются общеизвестными.

А ещё интересно поисследовать хопы.

3.5.6. Список хопов

Смотрим хопы командой:

nmap --traceroute 192.168.0.1
Работа в терминале
Работа в терминале

Как и ожидалось, один хоп. Попробуем посмотреть, сколько хопов до DNS-сервера гугл с IP 8.8.8.8:

Работа в терминале
Работа в терминале

18 хопов. Т.е. до какого-то далёкого сервера от моего компьютера, чтобы прошёл интернет-трафик, потребовалось 18 сетевых устройств. И каждое перенаправляло куда-то трафик.

Посмотрим на IP Nasa:

Работа в терминале
Работа в терминале

Уже всего 6 хопов, может потому что между нами всего-то Тихий океан:

https://ipmap.info/ip/nasa.gov.html
https://ipmap.info/ip/nasa.gov.html

3.5.7. Поиск активных сетевых устройств

Поищем активные устройства в локальной сети в диапазоне IP-адресов:

nmap -sn 192.168.0.1/24
Работа в терминале
Работа в терминале

Нашлось два активных устройства. Соответственно, одно из них - сам маршрутизатор, а другое - мой ноутбук.

Вообще, локальный (частные) IP-адреса находятся в определённых диапазонах. Для IPv4, это следующие диапазоны:

  1. 10.0.0.0 – 10.255.255.255 (CIDR 10.0.0.0/8) обеспечивает создание гигантской локальной сети размером до ~16 млн уникальных адресов (устройств);
  2. 172.16.0.0 – 172.31.255.255 (CIDR 172.16.0.0/12) - обеспечивает создание огромной локальной сети размером до ~1 млн адресов (устройств);
  3. 192.168.0.0 – 192.168.255.255 (CIDR 192.168.0.0/16) обеспечивает создание локальной сети размером до 65536 адресов (устройств).

Эти адреса не могут использоваться в интернете и предназначены для локальных сетей. Устройства с частными IP-адресами могут взаимодействовать друг с другом в локальной сети, а для доступа к интернету используют протокол NAT через маршрутизатор, у которого есть публичный IP-адрес, предоставленный DHCP-сервером провайдера.

3.5.8. Поиск уязвимостей

Можно воспользоваться встроенными в утилиту сценариями для поиска известных уязвимостей. Запрос к маршрутизатору выполнялся почти 3 минуты:

nmap --script vuln 192.168.0.1
Работа в терминале
Работа в терминале

Там ещё полторы страницы продолжения.

Вывод какой: обнаружены две уязвимости:

  • CSRF - Cross-Site Request Forgery - на нескольких веб-страницах. Из этого я делаю вывод, что в маршрутизаторе есть небольшой сервер, который может отвечать веб-страницами.
  • SMBv2 - CVE-2009-3103 - уязвимость к атаке, позволяющей выполнить непредусмотренный код.

Н-да, неожиданное явление.

3.6. BurpSuite

3.6.1. Установка BurpSuite

BurpSuite - ПО для тестирования веб-приложений автоматически на основе встроенных сценариев или вручную.

Под ручным тестированием я понимаю это ПО, как прокси-сервер, который будет перехватывать мои запросы на пути к целевому хосту и позволять их редактировать перед отправкой по назначенному пути.

BurtSuite есть по-умолчанию в Kali Linux, но в целях экспериментов, установлю её на свою Linux Manjaro. Воспользуюсь пакетным менеджером с GUI:

Менедеж пакетов
Менедеж пакетов

Если лицензии нет, нужна обычная версия, а не pro.

После установки при запуске появится окно для конфигурирования:

Burp Suite
Burp Suite

Я использовал настройки по-умолчанию. Далее запустилась сама программа:

GUI Burp Suite
GUI Burp Suite

Программа готова к работе. Есть бесплатная академия веб-безопасности от разработчиков этого ПО с постоянно пополняющимися материалами: *клик*

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

Рассмотрим один из множества модулей BurpSuite - Proxy.

3.6.2. Proxy в BurpSuite

Перейдём во вкладку Proxy, нажмём Intersept Off для старта прослушивания данных веб-приложений и нажмём кнопку Open Browser для взаимодействия с веб-приложениями:

Работа в BurpSuite
Работа в BurpSuite

В браузере введём сайт и нажмём Enter:

Работа в встроенном браузере BurpSuite
Работа в встроенном браузере BurpSuite

Переходим в BurpSuite, видим что появился запрос:

Работа в BurpSuite
Работа в BurpSuite

Добавим этот запрос в модули "Intruder" и "Repeater". Сделать это можно, выбрав запрос через ПКМ (правую кнопку мыши), либо быстрыми клавишами Ctrl+I и Ctrl+R.

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

Repeater (повторитель) — это инструмент, который позволяет вручную отправлять и изменять HTTP-запросы.

Вот пример отображения информации Повторителя:

Работа в BurpSuite
Работа в BurpSuite

Мы видим HTTP-заголовок, можем внести в него какие-либо правки и отправить. Пока на этом всё.

3.7. Docker и интернет-магазин соков

3.7.1. Введение

Docker - это ещё один инструмент пентестера. В частности, его можно использовать для создания тестовой среды для практики атаки не на реальные приложения, а на свои собственные.

Пример такой тестовой среды - докер-образ веб-приложения. Пример такого сложного веб-приложения со множеством проблем в безопасности - OWASP Juice Shop. У этого репозитория 10к+ звёзд. По легенде это интернет-магазин соков, который позволяет входить в учётную запись и совершать покупки:

https://github.com/juice-shop/juice-shop/blob/master/README.md
https://github.com/juice-shop/juice-shop/blob/master/README.md

Взаимодействие с сайтом выполнено через REST API. Почитать о создании сервиса на REST API: *клик*

Для работы с OWASP Juice Shop можно воспользоваться докером, хотя это не единственная возможность установки веб-приложения:

https://github.com/juice-shop/juice-shop/blob/master/README.md
https://github.com/juice-shop/juice-shop/blob/master/README.md

Команда:

docker pull bkimminich/juice-shop

загружает с Docker Hub образ с именем bkimminich/juice-shop и сохраняет его на локальный компьютер в каталог, управляемый Docker.

Команда:

docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop

Запускает контейнер. Флаг -rm указывает Docker удалить контейнер после его завершения. Это во-первых позволит избежать накопления неактивных контейнеров в системе, но в данном случае это полезно тем, что наши действия внутри контейнера не будут сохраняться.

Флаг -p связывает IP-адрес хоста с портом (первые 3000), который привязывается к этому процессу, т.е. к конкретному контейнеру. Вторые 3000 - это виртуальный порт докер-контейнера, который не имеет отношения к портам компьютера, по этому порту внутри контейнера веб-приложение Juice Shop слушает входящие запросы. Этот второй порт должен быть неизменным, т.к. при разработке веб-приложения, код ссылается именно на этот порт.

Сам Docker в Linux Kali не установлен, поэтому нужно сделать это самому. В документации Kali об этом есть раздел: *клик*

3.7.2. Устанавливаем Docker на Linux Kali

Запускаем Linux Kali через виртуальную машину, запускаем терминал. Далее руководствуемся документацией. Фрагмент документации:

Документация Linux Kali
Документация Linux Kali

Результат работы:

Работа в терминале Linux Kali через ВМ
Работа в терминале Linux Kali через ВМ

3.8. Инструменты разработчика в браузере

Инструменты разработчика позволяют просматривать код веб-страницы, сетевую активность и некоторые другие параметры:

Веб-страница
Веб-страница

В правой части интерфейс модуля "Инструменты разработчика" в браузере. Вызываются разными комбинациями клавиш, в моём Яндекс-браузере это Ctrl+Shift+I.

Например, до сих пор ответы на некоторые онлайн-тесты можно узнать, изучив код веб-страницы через штатные средства браузера. Такие данные не должны храниться на стороне фронтенда, а только на стороне сервера. А если хранятся во фронте - это уязвимость.

Таким образом, опытный пентестер даже без хакерской Linux Kali и её инструментов может найти некоторые уязвимости.

4. Тест на проникновение интернет-магазина

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

4.1. Запускаем сервер интернет-магазина

Запускаем скачанный ранее образ интернет магазина (см. выше) командой:

sudo docker run --rm -p 127.0.0.1:8080:3000 bkimminich/juice-shop
Работа в Kali Linux
Работа в Kali Linux

Единственно, чтобы не запутаться, я ввёл порт процесса докер-контейнера 8080, а виртуальный порт внутри контейнера - 3000, а не сделал их 3000 оба, как предлагается в документации интернет-магазина на гитхабе.

Теперь можно зайти в браузере на сайт и посмотреть, ввести как он работает:

Работа в Kali Linux через ВМ
Работа в Kali Linux через ВМ

Отлично, веб-приложение, запущенное из докера - работает. Посмотрим, как он работает.

Ну и IP-адрес 127.0.0.1 имеет алиас localhost, для информации, так что это идентичные значения.

4.2. Знакомимся с работой сайта

При тестировании на проникновение нужно сперва разобраться, какова штатная работа с веб-приложением. Мы не можем взломать сайт, не зная, как с ним предполагается взаимодействовать добропорядочным пользователям и что вообще сайт из себя представляет.

Первое, что я сделал - сменил язык на русский.

Затем открыл окно входа в учётную запись (которую не создавал ранее, да и интерфейс для создания учётной записи отсутствует):

Вход в учётную запись
Вход в учётную запись

Нажимаем "Войти в систему", появляется сообщение о неверном логине или пароле:

Вход в учётную запись
Вход в учётную запись

Протестировал штатную работу части функционала сайта. Теперь перейдём в BurpSuite и будем тестировать сценарии со входом в браузер.

4.3. Запускаем BurpSuite

Запускаем BurpSuite, переходим во вкладку Proxy. Открываем браузер BurpSuite через Open Browset, переходим в интернет-магазин командой:

localhost:8080
Работа в Kali Linux через ВМ
Работа в Kali Linux через ВМ

Возвращаемся в BurpSuite, запускаем Intersept и вновь возвращаемся в браузер: пробуем войти в систему, пишем произвольные логин и пароль и нажимаем "войти в систему".

Возвращаемся в BurpSuite, находим появившийся запрос. Intersept можно отключить. Отправляем HTTP-запрос в Intruder и Repeater.

С Repeater'ом всё просто: можем менять данные и отправлять запросы. Читать ответы:

Запрос-ответ
Запрос-ответ

В ответе в 15й строке видим информацию о некорректном email или пароле. По контексту понятно, что интернет-магазин сопоставил переданные в json-объекте запроса данные (строка 20 запроса), и не нашёл соответствия.

Наша задача через запросы проверить, можем ли мы получить подсказку от сервера интернет-магазина, какая у него там логика происходит. Нас будут интересовать в первую очередь ответы со статусом 5xx, например 500 - т.е., запрос корректный, доставлен до сервера, но он не смог обработать. Т.к. ответы 4xx вряд ли принесут полезную информацию.

4.4. Цель - получить HTTP-ответ со статусом 5xx

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

Чтобы постараться получить HTTP-ответ со статусом 500, воспользуемся SQL-инъекциями. Т.е. если на стороне сервера не позаботились о безопасности при обращении к БД с возможностью SQL-инъекций, то это уязвимость.

Переходим в Intruder - это намного более сложный модуль, чем Repeater. Здесь находим тело запроса, выделяем то, что в кавычках и нажимаем кнопку Add в верху - так мы указываем какие именно параметры будут подвергнуты атаке. Так поступаем и с содержимым поля email и с содержимым поля password.

Далее в правой области выбираем раздел Payloads, в типе указываем Simple list.

Загружаем подготовленный список sql-инъекций по стандартному пути:

Работа в BurpSuite
Работа в BurpSuite

После всех манипуляций окно должно выглядеть примерно так:

Работа в BurpSuite
Работа в BurpSuite

Тип Simple list означает, что подставляться инъекции буду в выбранные два параметра в теле запроса последовательно только в поле email, затем только в поле password. Не комбинируя их.

И начинаем атаку кнопкой "Start atack".

Работа в BurpSuite
Работа в BurpSuite

BurpSuite делает множество запросов. Можно посмотреть ответы:

Работа в BurpSuite
Работа в BurpSuite

В ответе виден SQL-запрос к БД. Это полезная информация для пентестера, т.к. у него уже складывается понимание, как устроен веб-сервер, а кроме того в ошибке мы видим тип СУБД - SQLite:

"code": "SQLITE_ERROR",
"sql": "SELECT * FROM Users WHERE email = ''%20or%20'x'%3d'x' AND password = 'd8578edf8458ce06fbc5bb76a58c5ca4' AND deletedAt IS NULL"

Зная тип СУБД, можно уже целенаправленно искать характерные для неё уязвимости. Об SQLite и отличии БД от СУБД можно почитать в этой публикации: *клик*

Далее мы можем скопировать полученный запрос и начать работать персонально с ним.

4.5. Взлом по SQL-запросу

У нас есть структура запроса к БД, используемая при входе в учётную запись:

SELECT * FROM Users WHERE email = 'какой-то эмейл' AND password = 'какой-то пароль'

Запрос возвращает все строки в которых есть заданный эмейл и заданный пароль.

Что произойдёт, если в проверяемом поле появится, скажем, одинарная кавычка?

В СУБД прописано, что значение прописано между двумя одинарными кавычками.

СУБД посмотрела, что поле email пустое, а дальше вновь одинарная кавычка:

SELECT * FROM Users WHERE email = ''' ...

Всё, запрос не соответствует синтаксису СУБД, запрос завершился с ошибкой. Нужно каким-то образом отбросить оставшуюся часть запроса.

Для этого можно воспользоваться лайфхаком, чтобы первая часть запроса оказалась истиной, а всё что правее нам не важно.

Таким лайфхаком может быть комбинация из трёх элементов:

  • Ключевое слово OR;
  • Простое математическое истинное сравнение, например 10=10;
  • комментирование части SQL-запроса через двойной минус --.

Другими словами, SQL-запрос должен выглядеть так:

SELECT * FROM Users WHERE email = '' OR 10=10 --любой текст, для СУБД это не важно.

Соответственно, при входе в учётную запись мы можем указать любой пароль, а вот email должны указать таким: ' OR 10=10 --

Проверяем: переходим в Repeater и изменяем тело запроса:

Работа в BurpSuite
Работа в BurpSuite

Отправляем запрос, смотрим ответ:

Работа в BurpSuite
Работа в BurpSuite

Ого, да ведь это успешный вход в систему! Да ещё судя по всему, под админом. СУБД просто вернула первую запись из таблицы и отдала её нам тёпленькой.

Перейдём в браузер и введём запрос там, чтобы в браузере войти в аккаунт.

А перейдя на сайт я увидел окна, что я успешно нашёл две уязвимости на сайте - так разработчики этого сайта помогают в тренировках: первая была о найденном sql-запросе в теле ответа со статусом 500, ну а вторая - успешный вход в систему:

Пентестинг сайта
Пентестинг сайта

Пока на этом остановимся в поиске уязвимостей. Посмотрим, какие они бывают в принципе.

5. Топ 10 уязвимостей

Организация, разработавшая учебный интернет-магазинов соков для тестирования на проникновения, составляет список самых опасных типов уязвимостей веб-среды. Называется он OWASP Top 10.

Предыдущий такой список был разработан в 2021 г., следующий планируют в начале 2025. Вот этот список:

  1. Broken Access Control (Ошибка контроля доступа) - когда система неверно ограничивает доступ пользователей к ресурсам.
  2. Cryptographic Failures (Ошибки криптографии) - неверная реализация алгоритмов криптографии или их использование - может привести к раскрытию конфиденциальной информации или её изменениям.
  3. Injection (Инъекции) - инъекции sql (разобрали выше), no-sql, xss и др.
  4. Insecure Design (Небезопасный дизайн) - небезопасная структура приложения облегчает злоумышленникам проникновение.
  5. Security Misconfiguration (Неправильная конфигурация безопасности) - избыточные открытые порты, отсутствие защиты и т.д.
  6. Vulnerable and Outdated Components (Уязвимые и устаревшие компоненты) - использование библиотек или программ с известными уязвимостями.
  7. Identification and Authentication Failures (Ошибки идентификации и аутентификации) - недостаточная защита механизмов аутентификации.
  8. Software and Data Integrity Failures (Ошибки целостности программного обеспечения и данных) - недостаточная защита данных и ПО, позволяющая их подделывать.
  9. Security Logging and Monitoring Failures (Ошибки журналирования и мониторинга безопасности) - когда злоумышленники атакуют, это создаёт определённые сигналы. Недостаточность анализа и адекватного реагирования на такие сигналы даёт больше времени злоумышленникам на их действия.
  10. Server-Side Request Forgery (SSRF) (Подделка запросов на стороне сервера) - когда злоумышленник заставляет сервер выполнять несвойственный запрос и раскрывает какие-то данные, в т.ч. о конфигурации и принципе работы сервера.

В предыдущем параграфе мы воспользовались двумя уязвимостями:

  1. Сервер в ответе с кодом статуса 500 давал информацию об sql-запросе;
  2. Использовали SQL-инъекцию для входа в учётную запись.
Первую ошибку можно отнести к уязвимость №5 OWASP Top 10 - неправильная конфигурация безопасности.
Вторую - уязвимость №3 по OWASP Top 10 - инъекции.

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

6. Криптография

6.1. Введение

Начнём с интернет-мема:

Мем
Мем

В Российской Федерации действует предварительный стандарт на термины и определения криптографии: ПНСТ 799-2022 "Информационные технологии. Криптографическая защита информации". Приведу три первых термина:

Криптография (cryptography) - область теоретических и прикладных исследований и практической деятельности, которая связана с разработкой и применением методов криптографической защиты информации.

Определение через определение. Не очень хорошо, но что поделать.

Криптографическая система; криптосистема (cryptograthic system; cryptosystem) - структурированная совокупность конкретных способов решения поставленной задачи защиты информации на основе применения методов криптографической защиты информации.

Криптографическая защита информации - защита информации с помощью её криптографического преобразования.

С определениями закончили.

Криптография в целом предназначена для сохранения данных: конфиденциальность, их целостность, подтверждения подлинности данных.

Конфиденциальность - механизмы, позволяющие получить доступ к данным только для тех лиц, кому они предназначены.

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

Подлинность делится на механизм подтверждения подлинности сторон от кого и к кому идёт информация, а также невозможность сменить или присвоить авторство создания информации; и второй механизм подлинности - подлинность самой информации.

Как в объектно-ориентированном программировании есть три столпа ООП (почитать об этом: *клик*), так в криптографии есть свои столпы или принципы, и их четыре. Такой, столик о четырёх ножках получается:

  • Шифрование;
  • Хеширование;
  • Электронная подпись;
  • Имитовставка - дополнительная информация фиксированного размера, создаваемая на основе передаваемых данных и секретного ключа, добавляемая в сами данные. Используется для контроля целостности данных.

Разберём только шифрование далее. Если кратко об остальных принципах, то можно сказать следующее:

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

Электронная подпись - механизм, позволяющий однозначно определить автора данных и целостность данных.

6.2. Шифрование

Шифрование обеспечивает конфиденциальность данных.

Шифр - это криптографические алгоритмы для зашифровывания данных, их расшифровывания и генерации ключей.

Шифротекст - зашифрованные шифром данные.

Зашифровывание - преобразование открытых данных в шифротекст.

Расшифровывание - преобразование шифротекста в исходные данные с помощью секретного ключа.

Ключ - это элемент данных криптосистемы.

Дешифровывание - преобразование шифротекста в исходные данные без секретного ключа.

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

6.2.1. Симметричное шифрование

При симметричной криптосистеме секретный ключ один для зашифровывания и расшифровывания. Типичный пример - архивирование в WinRAR с помощью пароля. Этот пароль должен быть известен только автору шифротекста и тем людям, для которых данные предназначены.

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

Современная криптография выделяет два вида шифров в симметричной криптосистеме:

  • Блочное;
  • Потоковое.

Блочные шифры работают с блоками данных минимальной длины двух типов - 64 бит (пример - алгоритм DES) или 128 бит (пример - алгоритм AES), в зависимости от алгоритма.

Потоковые шифры работают с каждым битом или байтом.

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

Более стойкое к криптоанализу (в т.ч. дешифровке) - блочное шифрование.

Пример использования AES-шифра в Golang:

Код 1/3
Код 1/3
Код 2/3
Код 2/3
Код 3/3
Код 3/3

В строке 53 происходит проверка минимального размера блока, т.е. меньше 16 байт (128 бит) или нет.

Здесь в коде мы для зашифровывания и расшифровывания используем один ключ.

Пример вывода в терминал:

Вывод в терминал
Вывод в терминал

6.1.2. Ассиметричное шифрование

Для ассиметричного шифрования нужна ключевая пара: открытый и закрытый ключ.

Открытый ключ безопасно предоставлять всем желающим. Закрытый ключ хранится в тайне и известен только одной стороне.

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

Ассиметричная криптография - трудозатратная для ЭВМ процедура.

Пример кода на Go, где используем ассиметричный алгоритм шифрования RSA:

Код 1/2
Код 1/2
Код 2/2
Код 2/2

В коде мы зашифровали данные открытым ключом, а расшифровываем закрытым ключом.

Пример вывода терминала:

Терминал
Терминал

На этом с шифрованием пока всё.

7. Выводы

Итак, в этой публикации мы познакомились с основами веб-безопасности, взглянули на веб-среду глазами хакеров, и это позволит нам стать более опытными программистами.

Для развития навыков могу порекомендовать запись вебинара Практикума на тему "Как веб-пентестеру правильно провести разведку": *клик*

Это всё основы основ тестирования на проникновения и информационной защиты. Но если мы будем хотя бы в общих чертах представлять себе эту сферу, то можем при желании развиваться в этом направлении или развиваться, оставаясь разработчиком, проектируя надёжные приложения.

Спасибо, что дочитали эту публикацию до конца. Успехов вам, верных друзей и крепкого здоровья. Будем на связи.

https://ru.freepik.com/free-photo/volunteers-team-young-volunteers-red-tshirt_20880222.htm
https://ru.freepik.com/free-photo/volunteers-team-young-volunteers-red-tshirt_20880222.htm

Бро, ты уже здесь? 👉 Подпишись на канал для начинающих IT-специалистов «Войти в IT» в Telegram, будем изучать IT вместе 👨‍💻👩‍💻👨‍💻