По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
gRPC — это мощная платформа для работы с удаленными вызовами процедур (Remote Procedure Calls). RPC позволят писать код так, как будто он будет выполняться на локальном компьютере, даже если он может выполняться на другом компьютере. Что такое RPC? RPC — это форма взаимодействия клиент-сервер, в которой используется вызов функции, а не обычный вызов HTTP. Идея в том, что мы можем вызвать и выполнить функцию где-то на удаленной системе, как если бы это была локальная функция. Он использует IDL (Interface Definition Language - язык описания интерфейса) как форму контракта на вызываемые функции и тип данных. RPC — это протокол "запрос-ответ", т.е. он следует модели "клиент-сервер": Клиент делает запрос на выполнение процедуры на удаленном сервере. Как и при синхронном локальном вызове, клиент приостанавливается до тех пор, пока не будут возвращены результаты процедуры. Параметры процедуры передаются по сети на сторону сервера. Процедура выполняется на сервере и, наконец, результаты передаются обратно клиенту. gRPC воспроизводит этот архитектурный стиль взаимодействия клиент-сервер через вызовы функций. Таким образом, gRPC технически не является новой концепцией. Скорее, он был заимствован из этой старой техники и улучшен, что сделало ее очень популярной. Что такое gRPC? В 2015 году Google открыл исходный код своего проекта, который в конечном итоге получил название gRPC. Но что на самом деле означает буква «g» в gRPC? Многие люди могут предположить, что это для Google, потому что Google это сделал, но это не так. Google меняет значение «g» для каждой версии до такой степени, что они даже сделали README, чтобы перечислить все значения. С момента появления gRPC он приобрел довольно большую популярность, и многие компании используют его. Есть много причин, по которым gRPC так популярен: простая абстракция, он поддерживается во многих языках и он очень эффективный. И помимо всех вышеперечисленных причин, gRPC популярен потому, что очень популярны микросервисы и имеется большое количество взаимодействий между ними. Именно здесь gRPC помогает больше всего, предоставляя поддержку и возможности для решения типичных проблем, возникающих в таких ситуациях. А поскольку разные сервисы могут быть написаны на разных языках, gRPC поставляется с несколькими библиотеками для их поддержки. Архитектура gRPC Мы сказали что производительность gRPC очень высока, но что делает ее такой хорошей? Что делает gRPC намного лучше, чем RPC, если их дизайн очень похож? Вот несколько ключевых отличий, которые делают gRPC столь эффективным. HTTP/2 HTTP был с нами очень долго. Сейчас почти все серверные службы используют этот протокол. HTTP/1.1 долгое время оставался актуальным, затем в 2015 году, появился HTTP/2, который фактически заменил HTTP/1.1 как самый популярный транспортный протокол в Интернете. Если вы помните, что 2015 год был также годом выхода gRPC, и это было вовсе не совпадение. HTTP/2 также был создан Google для использования gRPC в его архитектуре. HTTP/2 — одна из важных причин, почему gRPC может работать так хорошо. И в следующем разделе вы поймете, почему. Мультиплексирование запроса/ответа В традиционном протоколе HTTP невозможно отправить несколько запросов или получить несколько ответов вместе в одном соединении. Для каждого из них необходимо создать новое соединение. Такой вид мультиплексирования запроса/ответа стал возможен в HTTP/2 благодаря введению нового уровня HTTP/2, называемого binary framing. Этот двоичный уровень инкапсулирует и кодирует данные. На этом уровне HTTP-запрос/ответ разбивается на кадры (они же фреймы). Фрейм заголовков (HEADERS frame) содержит типичную информацию заголовков HTTP, а фрейм данных (DATA frame) содержит полезные данные. Используя этот механизм, можно получить данные из нескольких запросов в одном соединении. Это позволяет получать полезные данные из нескольких запросов с одним и тем же заголовком, тем самым идентифицируя их как один запрос. Сжатие заголовка Вы могли столкнуться со многими случаями, когда заголовки HTTP даже больше, чем полезная нагрузка. И HTTP/2 имеет очень интересную стратегию под названием HPack для решения этой проблемы. Во-первых, все в HTTP/2 кодируется перед отправкой, включая заголовки. Это помогает повысить производительность, но это не самое важное в сжатии заголовков. HTTP/2 сопоставляет заголовок как на стороне клиента, так и на стороне сервера. Из этого HTTP/2 может узнать, содержит ли заголовок одно и то же значение, и отправляет значение заголовка только в том случае, если оно отличается от предыдущего заголовка. Как видно на картинке выше, запрос № 2 отправит только новый путь, так как другие значения точно такие же как и были. И да, это значительно сокращает размер полезной нагрузки и, в свою очередь, еще больше повышает производительность HTTP/2. Что такое Protocol Buffer (Protobuf)? Protobuf — это наиболее часто используемый IDL для gRPC. Здесь вы храните свои данные и функциональные контракты в виде так называемого прото-файла. По сути это протокол сериализации данных, такой как JSON или XML. Выглядит это так: message Person { required string name = 1; required int32 id = 2; optional string email = 3; } Так мы определили сообщение Person с полями name, id и email Поскольку это форма контракта то и клиент, и сервер должны иметь один и тот же прото-файл. Файл proto действует как промежуточный контракт для клиента, чтобы вызвать любые доступные функции с сервера. Protobuf также имеет собственные механизмы, в отличие от обычного REST API, который просто отправляет строки JSON в виде байтов. Эти механизмы позволяют значительно уменьшить полезную нагрузку и повысить производительность. Что еще может предложить gRPC? Метаданные Вместо обычного заголовка HTTP-запроса в gRPC есть то, что называется метаданными (Metadata). Метаданные — это тип данных «ключ-значение», которые можно установить как на стороне клиента, так и на стороне сервера. Заголовок может быть назначен со стороны клиента, в то время как серверы могут назначать заголовок и трейлеры, если они оба представлены в виде метаданных. Потоковая передача Потоковая передача (Streaming) — это одна из основных концепций gRPC, когда в одном запросе может выполняться несколько действий. Это стало возможным благодаря упомянутой ранее возможности мультиплексирования HTTP/2. Существует несколько видов потоковой передачи: Server Streaming RPC: когда клиент отправляет один запрос, а сервер может отправить несколько ответов. Например, когда клиент отправляет запрос на домашнюю страницу со списком из нескольких элементов, сервер может отправлять ответы по отдельности, позволяя клиенту использовать отложенную загрузку. Client Streaming RPC: когда клиент отправляет несколько запросов, а сервер отправляет обратно только один ответ. Например, zip/chunk, загруженный клиентом. Bidirectional Streaming RPC: клиент и сервер одновременно отправляют сообщения друг другу, не дожидаясь ответа. Перехватчики gRPC поддерживает использование перехватчиков для своего запроса/ответа. Они перехватывают сообщения и позволяют вам изменять их. Это звучит знакомо? Если вы работали с HTTP-процессами в REST API, перехватчики очень похожи на middleware (оно же промежуточное ПО). Библиотеки gRPC обычно поддерживают перехватчики и обеспечивают простую реализацию. Перехватчики обычно используются для: Изменения запроса/ответа перед передачей. Это можно использовать для предоставления обязательной информации перед отправкой на клиент/сервер. Позволяет вам манипулировать каждым вызовом функции, например, добавлять дополнительные логи для отслеживания времени отклика. Балансировки нагрузки Если вы еще не знакомы с балансировкой нагрузки, это механизм, который позволяет распределять клиентские запросы по нескольким серверам. Но балансировка нагрузки обычно делается на уровне прокси (например, nginx). Так причем это здесь? Дело в том, что gRPC поддерживает метод балансировки нагрузки клиентом. Он уже реализован в библиотеке Golang и может быть легко использован. Хотя это может показаться какой-то магией, это не так. Там есть что-то типа преобразователя DNS для получения списка IP-адресов и алгоритм балансировки нагрузки под капотом. Отмена вызова Клиенты gRPC могут отменить вызов gRPC, когда им больше не нужен ответ. Однако откат на стороне сервера невозможен. Эта функция особенно полезна для потоковой передачи на стороне сервера, когда может поступать несколько запросов к серверу. Библиотека gRPC оснащена шаблоном метода наблюдателя, чтобы узнать, отменен ли запрос, и позволить ей отменить несколько соответствующих запросов одновременно.
img
В первой части статей о протоколе Border Gateway Protocol (BGP) мы узнали и разобрали протокол BGP, а затем изучили типы сообщений BGP и состояния соседства. Сегодня, в этой статье, вы узнаете об одном из самых сложных аспектов BGP: как он принимает решение о выборе маршрута. В то время как протоколы маршрутизации, такие как RIP, OSPF и EIGRP, имеют свои собственные метрики, используемые для выбора «лучшего» пути к целевой сети, BGP использует коллекцию атрибутов пути (PAs). Предыдущие статьи цикла про BGP: Основы протокола BGP Видео: Основы BGP за 7 минут BGP- атрибуты пути (Path Attributes) Когда ваш спикер BGP получает BGP префикс, к нему будет прикреплено множество атрибутов пути, и мы знаем, что они будут иметь решающее значение, когда речь заходит о том, чтобы BGP выбрал самый лучший путь к месту назначения. Все атрибуты BGP- маршрута, делятся на четыре основные категории. Well-Known Mandatory Well-Known Discretionary Optional Transitive Optional Non-Transitive Обратите внимание, что две категории начинаются с термина Well-Known. Well-Known означает, что все маршрутизаторы должны распознавать этот атрибут пути. Две другие категории начинаются с термина Optional. Optional означает, что реализация BGP на устройстве вообще не должна распознавать этот атрибут. Тогда у нас есть термины mandatory и discretionary, связанные с термином Well-Known. Mandatory означает, что обновление должно содержать этот атрибут. Если атрибута нет, тогда появится сообщение об ошибке уведомления, и пиринг будет удален. Discretionary, конечно, будет означать, что атрибута не должно быть в обновлении. У необязательных категорий атрибутов есть- транзитивные и нетранзитивные. Если он транзитивен, то устройство должно передать этот атрибут пути своему следующему соседу. Если он не является транзитивным, то может просто игнорировать это значение атрибута. Пример 1 показывает проверку нескольких атрибутов пути для префикса, который был получен маршрутизатором TPA1 от маршрутизатора ATL. Обратите внимание, что мы используем команду show ip bgp для просмотра этой информации, которая хранится в базе данных маршрутизации BGP. В частности, этот вывод показывает атрибуты Next Hop, Metric (MED), LocPrf (Local Preference), Weight, и Path (AS Path). TPA1#show ip bgp BGP table version is 4, local router ID is 10.10.10.1 Status codes: s suppressed, d damped, h history, * valid, > best, i – internal, r RIB-failure, S Stale Origin codes^ I – IGP, e – EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 100.100.100.0/24 10.10.10.2 0 200 i Атрибут Origin Атрибут ORIGIN в BGP-это попытка записать, откуда пришел префикс. Существует три возможности, когда речь заходит о происхождении этого атрибута: IGP, EGP и Incomplete. Как видно из легенды примера 1, коды, используемые Cisco для этих источников, являются i, e, и ?. Для префикса, показанного в примере 1, можно увидеть, что источником является IGP. Это указывает на то, что префикс вошел в эту топологию благодаря сетевой команде внутри конфигурации этого исходного устройства. Далее в этой статье мы рассмотрим сетевую команду во всей ее красе. Термин IGP здесь предполагает, что префикс произошел от записи протокола внутреннего шлюза (Gateway Protocol). Допустим, у нас есть префикс в нашей таблице маршрутизации OSPF, а затем мы используем сетевую команду внутри BGP, чтобы поместить его в экосистему BGP. Конечно, IGP - не единственный источник префиксов, которые могут нести этот атрибут. Например, вы можете создать локальный интерфейс обратной связи на устройстве, а затем использовать сетевую команду для объявления этого локального префикса в BGP. EGP ссылается на ныне устаревший протокол внешнего шлюза (Exterior Gateway Protocol), предшественник BGP. В результате вы не увидите этот исходный код. Incomplete означает, что BGP не уверен в том, как именно префикс был введен в топологию. Наиболее распространенным сценарием здесь является то, что префикс был перераспределен в Border Gateway Protocol из какого-то другого протокола, обычно IGP. Возникает вопрос, почему исходный код имеет такое значение. Ответ заключается в том, что это ключевой фактор, когда BGP использует свой алгоритм для выбора наилучшего пути к месту назначения в сети. Он может разорвать «связи» между несколькими альтернативными путями в сети. Мы также уделяем этому атрибуту большое внимание, потому что это действительно один из хорошо известных, обязательных атрибутов, которые должны существовать в наших обновлениях. Атрибут AS Path AS Path - это well-known mandatory атрибут. Он очень важен для наилучшего поиска пути, а также для предотвращения петель внутри Border Gateway Protocol. Рассматривая нашу топологию, показанную на рисунке 1, рассмотрим префикс, возникший в TPA. Обновление отправляется в TPA1, и TPA не добавляет свой собственный AS 100 в AS Path, так как сосед, которому он отправляет обновление, находится в своем собственном AS в соответствии с пирингом iBGP. Когда TPA1 отправляет обновления на ATL, он добавляет номер 100 в обновления. Следуя этой логике, ATL отправит обновления на ATL2 и не будет добавлять свой собственный номер в качестве AS. Это будет работать до тех пор, пока ATL2 не отправит обновления на какой-то другой AS, предшествующий AS 200. Это означает, что, когда мы рассматриваем образец AS path, как показано в примере 2, крайним правым в пути является AS, который первым создал префикс (100), а крайним левым- AS, который доставил префикс на локальное устройство (342). Пример 2: Пример BGP AS Path Атрибут Next Hop На самом деле нет ничего удивительного в том, что префикс BGP имеет атрибут под названием Next Hop. В конце концов, маршрутизатор должен знать, куда отправлять трафик для этого префикса. Next Hop атрибут удовлетворяет эту потребность. Интересным моментом здесь, однако, является тот факт, что Next Hop в BGP работает не так же, как это происходит в большинстве IGP. Также следует отметить, что правила меняются, когда вы рассматриваете iBGP в сравнении с eBGP. При рассмотрении протокола внутреннего шлюза, когда устройство отправляет обновление своему соседу, значением Next Hop по умолчанию является IP-адрес интерфейса, с которого отправляется обновление. Этот параметр продолжает сбрасываться каждым маршрутизатором по мере прохождения обновления через топологию. Next Hop принимает простую парадигму «hop-by-hop». С помощью BGP, когда у нас есть пиринг eBGP и отправляется префикс, Next Hop действительно будет (по умолчанию) IP-адресом спикера eBGP, отправляющего обновление. Однако IP-адрес этого спикера eBGP будет сохранен в качестве Next Hop, поскольку префикс передается от спикера iBGP к спикеру iBGP. Очень часто мы видим атрибут Next Hop, являющийся IP-адресом, который не является устройством, передавшим нам обновление. Это действительно адрес, который представляет собой соседний AS, который предоставил нам префикс. Таким образом, правильно думать о BGP как о протоколе «AS-to-AS» вместо протокола «hop-to-hop». Это может вызвать определенные проблемы. Основной вывод состоит в том, что вы должны гарантировать, что все ваши спикеры BGP могут достичь значения Next Hop указанного в атрибуте, чтобы путь считался допустимым. Иначе говоря, спикеры BGP будут считать префикс недопустимым, если они не смогут достичь значения Next Hop. К счастью, эту проблему можно обойти. Вы можете взять устройство iBGP и проинструктировать его, установив себя в качестве значения Next Hop всякий раз, когда вам это нужно. Это делается с помощью манипуляции пирингом командой neighbor, как показано в примере 3. ATL (config)# router bgp 200 ATL (config-router)# neighbor 10.10.10.1 next-hop-self Атрибут BGP Weight (веса) Weight (вес) - это очень интересный атрибут BGP, так как он специфичен для Cisco. Хорошая новость заключается в том, что, поскольку Cisco является гигантом в отрасли сетей, то многие другие производители будут поддерживать использование Weight в качестве атрибута. Weight также является одним из самых уникальных атрибутов, поскольку это значение не передается другим маршрутизаторам. Weight - это значение, которое присваивается нашим префиксам как локально значимое значение. Weight - это простое число в диапазоне от 0 до 65535, и чем выше значение веса, тем выше предпочтение этого пути. Когда префикс генерируется локально, он будет иметь вес 32768. В противном случае вес префикса по умолчанию равен 0. Как можно использовать вес? Поначалу это покажется странным, так как он не передается другим спикерам BGP. Однако все просто. Допустим, ваш маршрутизатор получает один и тот же префикс от двух разных автономных систем, с которыми он работает. Если администратор хочет предпочесть один из путей по какой-либо причине, он может манипулировать локальным значением веса на предпочтительном пути и мгновенно влиять на процесс принятия решения о наилучшем пути BGP. BGP Best Path (выбор лучшего пути) Как было сказано ранее, мы знаем, что у IGP есть метрическое значение, которое является ключевым для определения наилучшего пути к месту назначения. В случае с OSPF эта метрика основана на стоимости, которая основана на пропускной способности. У BGP существует множество атрибутов пути, которые может иметь префикс. Все они поддаются алгоритму выбора наилучшего пути BGP. На рисунке 2 показаны шаги (начиная сверху), которые используются в выборе наилучших путей Cisco BGP. Изучая эти критерии выбора пути, вы можете сразу же задаться вопросом, почему он должен быть таким сложным. Помните, когда мы имеем дело с чем-то вроде интернета, мы хотим, чтобы было как можно больше регулировок для политики BGP. Мы хотим иметь возможность контролировать, насколько это возможно, как префиксы используются совместно и предпочтительно в такой большой и сложной сети.
img
Инъекции Инъекция происходит, когда злоумышленник пытается отправить данные в веб-приложение с намерением заставить его выполнить что-то, что не было предусмотрено при разработке приложения. Наиболее распространенным примером этой уязвимости является SQL-запрос, используемый с целью извлечения конфиденциальных данных организаций. Например, злоумышленник может ввести код SQL в форму, которая ожидает имя пользователя с открытым текстом. Если эта форма ввода не защищена должным образом, это приведет к выполнению этого кода базой данных. Таким образом злоумышленник может читать, изменять и удалять информацию базы данных, которая для него не предназначена. Все, что принимает параметры в качестве входных данных потенциально может быть уязвимо для атаки путем внедрения кода. Поскольку формы пользовательского ввода являются главным способом реализации таких атак, то лучшим подходом для предотвращения таких угроз является контроль и проверка пользовательского ввода. Процесс контроля направлен на проверку того, разрешен ли тип входных данных, представленных пользователем. Проверка ввода гарантирует, что это допустимый тип, формат и длинна. Обрабатывается только то значение, которое проходит проверку. Это помогает противодействовать любым командам, вставленным во входную строку. Так же для предотвращения угрозы используется функция экранирования символов для пользовательского ввода. Это делается чтобы СУБД не путала пользовательский запрос с SQL командой. Одним из лучших способов идентификации атак с использованием инъекций SQL является использование брандмауэра веб- приложений (WAF). WAF отслеживает трафик, который приходит на веб-сервер, и определяет шаблоны которые представляют угрозу. Таким образом для предотвращения данной атаки необходимо применять проверку ввода, параметризированные запросы, хранимые процедуры и экранирование в сочетании с надежным брандмауэром. Это повысит шансы успешной защиты от данной атаки. Нарушение системы аутентификации Уязвимости в системах аутентификации (входа в систему) могут предоставить злоумышленникам доступ к учетным записям пользователей и даже возможность компрометировать всю систему с помощью учетной записи администратора, Например, злоумышленник, обладая базой тысяч известных комбинаций имени пользователя и пароля, может, используя ручные или автоматические методы может выполнить атаку грубой силы. Из-за того, что многие пользователи не соблюдают требований к сложности пароля и веб-сервис не ограничивает количество попыток ввода пароля, злоумышленник может без труда получить доступ к интересующей его учетной записи. Для уменьшения вероятности успеха данной атаки рекомендуется применять многофакторную аутентификацию, чтобы предотвратить автоматизированный ввод данных, проверку на сложность пароля, а также ограничение или задержку повторных попыток входа. Практически полностью уменьшить вероятность такой угрозы может применение аутентификации по токенам. Незащищенность конфиденциальных данных Уязвимость конфиденциальных данных является одной из наиболее распространенных уязвимостей в списке OWASP. Уязвимость заключается в доступности критичных данных, которые должны быть защищены. Если веб-приложение не защищают конфиденциальные данные, такие как финансовая информация, медицинская информация и пароли, злоумышленники могут получить доступ к этим данным и использовать их в своих целях. Плохая реализация криптографической защиты информации и использование небезопасных протоколов основные причины популярности данной угрозы. Одним из популярных способов кражи конфиденциальной информации является реализация атаки "человек посередине". Такая атака осуществляется, когда злоумышленник подключается между веб-браузером и веб-сервисом и перехватывает или изменяет соединение. Затем злоумышленник может просматривать весь трафик и собирать информацию или выдавать себя за одну из двух сторон. Например, злоумышленник может находиться между пользователем и веб-сервисом, который пользователь собирается посетить и собирать его данные для входа. Это можно сделать с помощью перехвата HTTP-соединения между пользователем и веб-сервисом. Захват этого соединения позволяет действовать злоумышленнику как прокси-сервер, собирая и изменяя информацию, передаваемую между пользователем и сайтом. Кроме того, злоумышленник может украсть файлы cookie пользователя. Это небольшие фрагменты данных, созданные веб-сайтом и хранящиеся на компьютере пользователя для идентификации и других целей. Такие файлы могут быть использованы для захвата сеанса пользователя, позволяя злоумышленнику выдавать себя за этого пользователя. Отсутствие шифрования конфиденциальных данных является основной причиной, по которой эти атаки все еще широко распространены. Риск несанкционированного получения данных может быть сведен к минимуму путем шифрования всех конфиденциальных данных, а также отключение временного хранения конфиденциальной информации для повторного использования. Одним из способов защиты передаваемых данных является наличие на веб-сервисе сертификата SSL (Secure Sockets Layer). Это стандартная технология безопасности для установления зашифрованного канала связи между веб-сервисом и браузером. Данный сертификат помогает обеспечить целостность передаваемых данных при передаче между веб-сервером и клиентом. Более новой и надежной версией протокола SSL является протокол TLS. Также для защиты от таких атак используют протокол HTTP Strict Transport Security (HSTS), который обеспечивает безопасное соединение SSL/TLS с любым браузером или приложением, блокируя любые незащищенные HTTP соединения, а также предотвращает кражу cookie. Кроме того, администраторы и разработчики веб-сервисов следует не использовать лишнюю конфиденциальную информацию. Нарушение контроля доступа Управление доступом позволяет разграничивать доступ к информации или функциям для разных пользователей. Если управление доступом нарушено, злоумышленник, имеющий доступ к учетной записи, может использовать привилегии, которые не предназначены для этой учетной записи. Это позволяет обычной учетной записи читать и копировать файлы, которые должны быть доступны только администратору. Неправильная настройка элемента управления доступом позволяет злоумышленникам обходить авторизацию и выполнять задачи, которые доступны только привилегированным пользователям, администраторам. Например, веб-приложение может позволить пользователю изменить учетную запись, в которую он вошел, просто изменим часть url-адреса без какой-либо другой проверки. Это происходит из-за неправильной конфигурации или вовсе отсутствия настройки прав на администрирование и управление приложением. Предоставляя глобальный доступ к панели управления хостингом, серверу через FTP/SSH, базе данных или другим приложениям на сервере мы открываем доступ к функциям или просмотру конфиденциальных данных и файлов. Для снижения рисков использования нарушенного контроля доступа рекомендуется предоставление только необходимые функции для выполнения задачи и только в течение времени, необходимого для выполнения указанной задачи, применение многофакторной аутентификации ко всем возможным точкам доступа, аудит веб-сервера, удаление не использующихся служб и учетных записей. Для предотвращения нарушения доступа необходимо запретить глобальный доступ к функциям управления сервером. Каждый пользователь должен иметь доступ только к его информации. Небезопасная конфигурации Наличие безопасной конфигурации всех компонентов инфраструктуры требуется для безопасности веб-сервера. Небезопасные и уязвимые компоненты могут быть представлены в различных формах: фреймворки, веб-серверы, сервер баз данных, сетевые службы и сами приложения. По умолчанию настройки компонентов сервера в своем большинстве небезопасны и это открывает злоумышленникам поле для атаки. Например, использование настроек по умолчанию в серверах баз данных может привести к доступу ка закрытой службе через публичный IP-адрес, что в сумме с использованием установленным производителем по умолчанию паролем чревато очень серьезными проблемами с утечкой или потерей критичных, или конфиденциальных данных. Злоумышленник сможет изменять и читать данные в числе которых могут быть выводимые браузером данные для пользователя или же сессионные cookies, утечка которых может привести к использованию злоумышленником платежных данных пользователей или же другой секретной информации. Ежедневно исследователи находят уязвимости в системах и компонентах. От уязвимостей нулевого дня трудно защититься. Уязвимость нулевого дня является ошибкой при разработке программного обеспечения, которая несет угрозу безопасности программного обеспечения. Термин "нулевой день" относится к недавно обнаруженной уязвимости программного обеспечения. Поскольку разработчик не знает о возможной уязвимости при проектировании ПО то, когда он узнает о найденном недостатке неожиданно, разработчик не имеет возможности сразу исправить эту уязвимость, так как для этого нужно подготовить официальный патч или обновление для исправления проблемы. У разработчика есть "ноль дней" чтобы исправить проблему, которая была обнаружена и возможно уже используется злоумышленниками, чтобы успеть защитить своих пользователей. Использование небезопасных компонентов приводит к краже и широкомасштабным атакам. Когда приложение использует небезопасные компоненты, злоумышленники могут узнать все, что им нужно знать о серверах, компонентах и многом другом. Поэтому необходимо постоянно проверять актуальность программного обеспечения, так как уязвимости могут быть обнаружены в самых разных программных компонентах таких как сервера, базы данных и операционной системе. Для предотвращения угроз, связанных с использованием неправильной конфигурации системы, следует использовать только необходимые компоненты и функции, автоматизировать процесс для проверки эффективности конфигураций и параметров во всех средах, использовать методы сегментации и контейризации для ограничения поверхности атаки. Межсайтовое выполнение сценариев XSS (Cross Site Scripting) Межсайтовое выполнение сценариев это широко распространенная уязвимость, которая затрагивает многие веб-приложения. XSS-атаки состоят из внедрения вредоносных клиентских сценариев на веб-сайт и использование ве-сайта в качестве распространения. Риск XSS заключается в том, что он позволяет злоумышленнику вводить контент на веб-сайт и изменять способ его отображения, заставляя браузер жертвы выполнять код, предоставленный злоумышленником во время загрузки страницы. Такие уязвимости возникают, когда веб-приложение позволяет пользователям добавлять пользовательский код в URL-ссылку или на веб-сайт, который будет виден другим пользователям. Эта уязвимость может быть использована для запуска вредоносного кода JavaScript в браузере жертвы. XSS-атаки не направлены на конкретную цель. Злоумышленник просто использует уязвимость сайта или приложения, внедряя код через случайного пользователя и далее этот сайт или приложение становится центром рассылки вредоносных сценариев для множества других пользователей. Например, злоумышленник может отправить жертве электронное письмо, которые выглядит как официальное письмо от банка с ссылкой на веб-сайт этого банка. Однако эта ссылка может иметь какой-то вредоносный код JavaScript, оставленный в конце URL-адреса. Если сайт банка не будет должным образом защищен от межсайтового выполнения сценариев, то этот вредоносный код будет запущен в веб-браузере жертвы, когда он пройдет по ссылке. Уязвимость XSS дает злоумышленнику почти полный контроль на самым важным программным обеспечением компьютеров в настоящее время браузерами. Существует три типа межсайтовых скриптовых атак: Хранимые XSS (постоянные). Наиболее опасный тип уязвимостей, так как злоумышленник получает доступ к серверу и уже с него может управлять вредоносным кодом. Вредоносный код постоянно хранится на целевом сервере и выполняется каждый раз при обращении к сервису. Это может произойти на любых страницах с вводом данных пользователей, например, в полях комментариев, базе данных и может быть встроен как текст картинки, или рисунки. Отраженные XSS (непостоянные). Отраженная атака происходит, когда вредоносный сценарий не хранится на сервере, а содержится во входных данных, отправленных от пользователя к серверу. Это атака реализуется путем отправки жертве ссылки, содержащей вредоносный сценарий, на электронную почту или другим способом. Проходя по ссылке, жертва отправляет запрос с вредоносным кодом к серверу, который автоматически берет данные из вредоносной строки и отправляет модифицированный ответ жертве. В итоге браузер жертвы распознает запрос как надежный и выполняет вредоносный скрипт. DOM-модели. Третий тип атаки, известный как атака на основе DOM (Document Object Model) не является распространённой, но может произойти. Атака происходит, когда среда DOM изменяется в веб-браузере жертве и приводит к запуску вредоносного кода на стороне клиента. Атаки на основе DOM отличаются тем, что они используют уязвимости на стороне клиента, а не на стороне сервера. Для снижения рисков XSS-атаки используются межсетевые экраны, которые помогают смягчить такие атаки. Также для предотвращения таких атак рекомендуется осуществлять экранирование ненадежных данных HTTP-запроса или же использовать фреймворки, которые автоматически экранируют XSS. Небезопасная дессериализация Эта угроза нацелена на многие веб-приложения, которые часто сериализиуют или дессериализуют данные. Сериализация означает получение объектов из кода приложения и преобразование их в формат, который может использоваться для других целей, таких как хранение данных на диске или их потоковая передача. Дессериализация это обратное действие, преобразование сериализованных данных обратно в объекты, которые может использовать приложение. Когда поток данных преобразуется в объекты, вредоносные или измененные объекты могут вызвать серьезные проблемы безопасности. Небезопасное осуществление десериализации является результатом десериализации данных из ненадежных источников и может привести к серьезным последствиям, таким как DDoS-атака, удаленное выполнение кода и запуска программ. Несмотря на то, что можно предотвратить такие уязвимости используя мониторинг и проверку типов, единственным надежным способом защиты от атак десериализации является запрет десериализации из ненадежных источников. Если же это сделать невозможно, то для предотвращения таких атак также может быть осуществлена проверка целостности, например, при помощи цифровой подписи, применение строгих ограничений типа при создании объектов. Также изолирование и выполнение кода, который десериализуется в средах с низким уровнем привилегий. Использование компонентов с известными уязвимостями Значительная часть веб-сервисов состоит из множества специальных компонентов, такие как библиотеки и фреймворки (англ. - framework), которые поставляются сторонними компаниями. Эти компоненты являются частями программного обеспечения, которые помогают разработчикам сократить время, избежать выполнения избыточной работы и обеспечить необходимую функциональность. Например, популярный фреймворк, применяемый для разработки интерфейсов React или же библиотеки для проведения тестирования. Злоумышленники постоянного ищут уязвимости в таких компонентах и потом используют для организации атак. Обнаружив уязвимость в безопасности одного из компонентов приложения, злоумышленник может сделать уязвимыми сотни тысяч веб-сервисов. Разработчики компонентов часто выпускают обновления для устранения известных уязвимостей, однако администраторы и разработчики не всегда имеют возможность обновить компоненты до последней версии. Чтобы свести к минимуму риск запуска компонентов с известными уязвимостями, разработчикам следует удалять неиспользуемые компоненты из своих проектов, а также проверять актуальность обновлений и получать их от надежных источников. Недостаточный мониторинг и логирование Большинство веб-сервисов не предпринимают достаточных шагов для обнаружения нарушений безопасности данных. Среднее время обнаружения нарушений составляет около 200 дней после того, как оно произошло. Это дает злоумышленникам много времени, чтобы нанести ущерб, прежде чем происходит какая-то реакция. Логирование и мониторинг необходим, чтобы оставаться в курсе любых подозрительных изменений приложения.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59