Когда контекст доступа важен: авторизация в микросервисной платформе на GraphQL / Хабр

Что такое аутентификация

Когда смартфон или планшет на платформе Андроид пытается подключиться к точке доступа WiFi, один из этапов процесса называется аутентификация. Именно на нём чаще всего возникают проблемы.ошибка аутентификации

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

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

Неподтвержденная учетная запись в есаи что это значит

При регистрации на порталах при помощи ЕСАИ открывается уведомлением «Неподтверждённая учётная запись». Что это значит и почему запись неподтверждённая – предстоит разобраться в этом вопросе далее. uchetnaya zapis esia

Почему так происходит и что делать?

С подобной неприятной ситуацией к нам обратился один из наших клиентов. У сотрудников периодически слетала авторизация во время работы на портале «Битрикс». Мало того, что это оказывало негативное влияние на весь рабочий процесс, так еще и пугало. Что первым делом подумает менеджер, которого во время работы выбрасывает из системы?

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

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

Похожее:  Джастлан — личный кабинет Связь-Телеком

Ошибка аутентификации при подключении к wifi на андроид, что делать?

И вот мы перешли к основной части нашей статьи. Ошибка аутентификации при подключении к WiFi на Андроид, что делать? как уже было описано выше проблема может носить разный характер, а соответственно и подходить к её решению следует с разных сторон.

Что же это такое?

Процитируем Википедию:

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

идентифицирован

 (мы должны знать, кто он) и

аутентифицирован

 (подтверждена его идентичность).

Реализация авторизации при разработке корпоративной информационной системы или продукта, ориентированного на корпоративный сектор — очень сложная и ответственная задача, которой часто уделяется недостаточное внимание на этапе проектирования и первичном этапе разработки, что в будущем ведет к «костыльной» реализации.

Что такое есаи?

Единая Система Идентификации – это цифровой аккаунт каждого российского гражданина. При посещении различных сайтов госучреждений он необходим для быстрого входа и определения паспортных данных посетителя. Создаётся она после того, как пользователь регистрируется на Госуслуги. sait gosuslugi

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

Сайт Госуслуги является удобным видом создания записи в реестре ЕСИА. После регистрации некоторые данные требуют подтверждения. В Интернете есть много полезных и полных инструкций, описывающих процесс полностью.

Shared library vs sidecar

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

Для решения этой проблемы мы решили применить архитектурный шаблон «Ambassador» — вынести функционал, который касается авторизации, в отдельный Sidecar и назвали его Security proxy.

Доменный сервис деплоится вместе с Security proxy в одном Pod-е в Kubernetes. Среда настраивается так, чтобы исключить возможность запросов к доменным сервисам не через Security proxy. Сам Security proxy ничего не знает о логике доменного сервиса, ему лишь известно API, выставленное доменным сервисом наружу, он выступает в роли амбассадора.

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

Варианты решений

Разумеется, начали с классического, проверенного подхода — WSDL. Но уже на тот момент технология считалась устаревшей и не очень дружила с .NET Core в части создания сервера. А на тот момент .NET Core стал нашим основным стеком.

Другим вариантом для нас было использование технологии OpenAPI. Это решение оказалось значительно лучше и мы его какое-то время использовали. Но такой подход не прошел проверку временем, т.к. реализации OpenAPI в разных стеках были не совместимы между собой.

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

Сделали описание сервисов в виде документа в формате JSON Schema. В результате стало возможным взаимодействовать с сервисами по внутреннему протоколу на разных платформах. Но, поразмыслив, поняли, что сломаем еще много копий на этом подходе. А также, прикинув, как придется поддерживать это решение и распространять на потенциальные другие платформы, делать то же самое на других языках программирования, приняв во внимание отсутствие какого-либо стандарта и «прекрасную» возможность получить проблемы во всей внутренней шине данных, поняли, что это тупик.

Мы стали подумывать о каком-то гибридном варианте, при котором потребители сами смогут определять, какие данные им нужны от поставщиков (Consumer Driven Contracts). Присматривались к таким технологиям как oData, но примерно в это время на сцене появилась технология GraphQL.

Если быть точным, то сама технология появилась в 2022 году, а в тот момент, как говорят наши архитекторы, она уже зеленела на техрадаре. Наши исследования и эксперименты показали, что технология предоставляет решения к обозначенным выше проблемам «из коробки», хотя и была довольно сыровата на тот момент.

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

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

Реализаций у этого стандарта может быть несколько. На тот момент, когда мы начинали создавать платформу, основной стек разработки на бэке был .Net (сегодня добавилась Java) и в качестве основной имплементации была выбрана библиотека graphql-dotnet.

Вектора атак

Исчерпывающий материал по уязвимостям сериализации можно найти тут. Основных векторов атак, связанных с сериализацией, ровно два:

  1. Нарушения логики работы программы;

  2. Удаленное выполнение кода/команд (в некоторых случаях).

В первую очередь это так называемый Circle of Trust: данные, которые мы сериализуем, мы получаем в каком-нибудь бинарном формате. Из этого могут появляться предположения типа «бинарный формат непонятен, его сложно подделать, значит, это безопасно». Но на деле всё не так, так как сериализация — это всего лишь формат представления данных.

Например, мы сериализовали некоторый объект (здесь — Java-класс). Записав его в файл, скорее всего, мы увидим какие-то бинарные данные, где явно будет ничего не понять. 

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

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

Вернемся к нашему сериализуемому объекту. У нас есть некоторый класс, который отвечает за имя пользователя в системе.

Видеоинструкция

В этом видео продемонстрировано, что необходимо делать в случае, если ваша учётная запись ЕСИА не подтверждена.

Источник

Другие способы подтверждения данных для есиа

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

Открыть её можно через сайт Почта России заказным письмом или заполнением бланка, взятого в отделении. Другой способ предполагает личное посещение одного из отделений МФЦ вашего города. Все эти способы едины как для физического лица, так и для юридического.

И снова про авторизацию

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

Исправление и предотвращение

Основная проблема, которая приводит к возникновению уязвимости — отсутствующие или недостаточные проверки прав доступа.

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

Нельзя полагаться на сложность идентификаторов, например UUID4. Сложность «угадывания» не может являться проверкой авторизации и не гарантирует, что идентификаторы не раскрываются в какой-либо другой функциональности веб-приложения.

Как подтвердить учётную запись есиа

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

Банку уже были предоставлены копии необходимых документов – паспорта и СНИЛС. И сайт банка будет вынужден поделиться ими с порталом Госуслуги. А нам не придётся посещать одно из рекомендуемых учреждения для предоставления копий или оригинала документов.

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

Как предоставить права доступа для еис (еруз) на портале есиа?

При регистрации участника закупок в Единой информационной системе необходима авторизация на портале ЕСИА. Если регистрация производится впервые, и ранее на портале ЕСИА не были предоставлены права на работу с ЕИС (ЕРУЗ), портал выполнит запрос прав в момент регистрации. В некоторых случаях добавить права доступ на портале ЕСИА необходимо самостоятельно по данной инструкции.

Пошаговая инструкция: Как предоставить права доступа для ЕИС (ЕРУЗ) на портале ЕСИА?

Какая разница между подтверждённой и не подтверждённой учётной записью

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

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

Контракты

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

Так что очевидным требованием была автоматическая, структурированная документация. Разработчики не любят писать документацию по разным причинам: кто-то не видит в этом смысла, руководствуясь тем, что такая документация всегда находится в неактуальном состоянии, а кто-то просто не успевает в пылу дедлайнов отражать изменения на странице в wiki.

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

Корректировка настроек маршрутизатора

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

Чтобы внести изменения в настройку маршрутизатора, необходимо организовать подключение. Сделать это можно и по WiFi, но надёжнее, если для этого будет использоваться специальный кабель. Подключаться для внесения корректировок можно с компьютера или ноутбука. Для того чтобы попасть в веб-интерфейс достаточно открыть браузер и прописать Ip-адрес нужной точки доступа. Уточнить последний можно на самом роутере, коробке от маршрутизатора или панели управления доступными сетями.подключаем роутер к ПК

Чтобы узнать IP для доступа через раздел «Управления сетями» нажмите в панели задач на кнопку «Центр управления сетями». В разделе тип подключения найдите беспроводное соединение и, открыв окно, найдите раздел «Сведения». В пункте «Шлюз по умолчанию IPv4» будет прописан нужный адрес.

Мультиплатформенность

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

Насколько сложно все исправить?

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

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

Мы более 10 лет занимаемся разработкой, доработкой, а также поиском и устранением ошибок в продуктах «Битрикс». У нас большой опыт, можно сказать, что мы знаем систему изнутри, в мельчайших деталях. Более того, мы не прекращаем ни на минуту совершенствовать свои знания о ней — мы развиваемся вместе с ней.

Небольшой пример

GET /mail/message/162974011515471087

В данном примере приложение подгружает письма основываясь на идентификаторе в URL. Для проверки можно указать идентификатор письма другого пользователя.

PUT /api/v1/profile/me

Предположим, что такой запрос отправляется при изменении настроек собственного профиля. Для проверки стоит изменить значение «me» на идентификатор другого пользователя.

Общие рекомендации

Для участия в торгах на электронной площадке ЗАО «Сбербанк — АСТ» требуется должным образом настроить рабочее место. На компьютере нужно устанавливать подходящее программное обеспечение, в том числе криптопровайдер, подключать сертификат усиленной электронной подписи.

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

Требования к ПО следующие:

Кроме того, нужно получить сертификат ЭЦП в одном из удостоверяющих центров, имеющих аккредитацию, и обеспечить его установку на ПК. Вместе с цифровым ключом вы получите плагин КриптоПро, его следует настроить на компьютере (инструкцию по установке и серийный номер лицензии выдают в центре). После нужно пройти регистрацию и аккредитацию на ресурсе Сбербанка, выполнить вход в личный кабинет.

Проверить настройки рабочего места можно на сайте Сбербанк АСТ в разделе «Информация» — «Получение и проверка ЭП». Нужно ввести номер сертификата в специальном поле и нажать кнопку «Проверить».

Особенности конкретных реализаций graphql

Довольно нетривиально оказалось «подружить» GraphQL с Security Proxy, который инкапсулирует в себе логику авторизации.

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

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

В самом стандарте предопределены три директивы: серверная deprecated и клиентские skip и include. Можно было разметить схему дополнительными кастомными директивами, но стандарт не представлял никаких четких указаний по передаче этих директив в интроспекции.

Нам частично пришлось реализовывать это самостоятельно, параллельно убеждая владельцев стандарта легализовать такие изменения. Рабочая группа стандарта ждала, пока кто-нибудь реализует возможность передачи кастомных директив в интроспекции. А разработчики библиотеки graphql-dotnet, которую мы активно используем, ждали, пока это будет явно указано в стандарте.

Долгое время в качестве решения мы использовали форк от официального репозитория, в котором были сделаны необходимые изменения. А именно, были добавлены дополнительные типы, описывающие директивы (__AppliedDirective) и тип ее аргументов (__DirectiveArgument).

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

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

Ошибка в выборе формата

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

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

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

Ошибки в механизмах аутентификации

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

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

Например, если сервис использует Application Service Tomcat, то в некоторых случаях можно зайти на порт 8080 и увидеть панель менеджмента Tomcat и дальше попробовать использовать какую-то учетную запись по умолчанию — например, tomcat/tomcat. Иногда она даже подходит, что дает возможность выполнить произвольный код и скомпрометировать сервис.

С другой стороны, в интернете это распространено крайне редко, потому что огромное количество злоумышленников  24*7 сканируют все диапазоны IP-адресов, ища таких сервисов и подбирая доступ. 

Ошибки с подписанием и сертификатом

Одна из самых распространённых ошибок — Сбербанк АСТ не видит ЭЦП. В таком случае не получается подписывать документы. Обычно это происходит из-за некорректной работы Крипто Про ЭЦП Browser plug-in.

Нужно проверить ряд факторов:

Ошибка 0x8007065b возникает во время подписания данных, и связана она с отсутствием лицензии на программу КриптоПро.

Устранить ошибку можно так:

Если вы видите, что содержимое подписи при заверении акта пустое, причин может быть несколько:

В первом случае нужно выбрать другое время для подписания документа; во втором — через меню «Пуск» в разделе «Служба управления правами Windows» найти «Глобальное администрирование» и внести нужный домен в перечень доверенных; в третьем — запустить нажмите элементы ActiveX Сервис в браузере (раздел «Свойства обозревателя», подраздел «Безопасность»).

Ошибка «неверный формат подписи errorcode 202» — нужно обновить программное обеспечение, в частности, плагин криптографической защиты информации. Также нужен просмотр формата ЭЦП, установленной на компьютере, соотношение его с исходником, полученным в УЦ (проверить название и расширение).

Сообщение «Невозможно выполнить подписание» связано с неверной установкой корневого сертификата. Нужно проверить его наличие и правильность настроек в КриптоПро.

Ошибка получения сертификата из хранилища «cannot find object or property 0x80092004», или error Сбербанк-АСТ, может возникать из-за неверных настроек браузера, либо неточной работы библиотеки Capicom.

Для устранения ошибки 80092004 её нужно должным образом установить:

При входе в систему могут появиться слова «Данный сертификат не сопоставлен с пользователем системы» — в таком случае для устранения проблемы нужно делать следующее:

Первые шаги по созданию авторизации

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

Субъекты можно было группировать по каналу, из которого они получали доступ. И организовать схему доступа вокруг этого. Когда-то мы именно так и делали. Выглядело это так: множество бэковых систем накрывается неким фасадом — API Gateway, где происходит аутентификация пользователей, которые, в свою очередь, обращаются к нему с фронта.

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

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

Так как на самих сервисах нет никакой аутентификации, любой вызов из нашего сегмента сети может произойти ко всем сервисам и выполнить любую операцию. Мы столкнулись с этой проблемой, когда предоставили доступ нашим коллегам внутри организации, которые занимались развитием других систем. Они начали вызывать совсем не те операции, на которые изначально запросили доступ.

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

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

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

Подробное объяснение проблемы и решение

Как мы уже писали выше, эта ошибка связана с дублированием переменной PHPSESSID в cookie. Она возникает в том случае, когда для установки различных продуктов Битрикс используются поддомены одного домена. В качестве примера рассмотрим установку «1С-Битрикс: Управление сайтом» и «1С-Битрикс24: CRM».

Предыстория, или как мы стали платформой

Несколько лет назад (это были времена, когда логика создания продукта была сосредоточена вокруг его развития в каждом канале) мы сидели небольшой командой разработчиков и «пилили» свой уютный интернет-банк. Вроде бы даженеплохо получалось, но маятник качнулся в другую сторону.

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

Например:

  1. Звонок с предложением услуги из контакт-центра;

  2. Заполнение заявки на сайте или в мобильном приложении;

  3. Заключение сделки в отделении.

Такое развитие CJM обусловило необходимость иметь контекст пользователя и клиента. Для приложения в целом было принято решение сосредоточить логику создания и сопровождения продуктов в едином слое, к которому обращались множество фронтов. Этот слой был назван Digital Platform.

Причины возникновения ошибки

Итак, возникла ошибка аутентификации при подключении к WiFi на Андроид, что делать мы разберём в следующем разделе. Сейчас выясним причины появления такой ошибки.

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

Проблематика

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

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

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

  1. Пользователь, не имеющий отношения к конкретному договору, не должен его видеть в системе
  2. Автор договора должен видеть его на всех этапах.
  3. Создавать договор имеет право пользователь с грейдом не ниже 10.
  4. Визирующий должен видеть договор, начиная с поступления к нему на этап и далее.
  5. Руководители подразделений должны видеть договоры своих подразделений вверх по иерархии.
  6. Автор договора и руководитель подразделения имеют право отозвать договор на любом этапе согласования.
  7. Руководство и секретариат головного офиса должны видеть документы всех филиалов.
  8. Пользователь, создавший договор, не должен иметь права его завизировать.

От безопасности мы могли бы получить следующие требования

  1. Знать, кто имеет доступ к конкретному договору.
  2. Знать, кто имел доступ к конкретному договору в заданный момент времени.
  3. Лишать пользователя доступа к ранее доступным документам при изменении его должностных обязанностей.

Думаю, разработчикам уже стало страшно :). Дополнительную боль доставляет высокая изменчивость этих требований. Кстати, по статистике одного большого франча 1С – дополнительные требования по авторизации — одна из самых частых задач по кастомизации типовых конфигураций.

Итак, обозначим, почему эти требования проблемные:

Проблемы с плагином

Иногда plugin КриптоПро интегрируется в браузер с ошибкой, и при входе на сайт появляется надпись вроде «Сбербанк АСТ плагин недоступен». В таком случае авторизоваться не выйдет, нужно искать причины, почему программа стала недоступной.

Они могут быть такими:

Варианты решения проблемы, если на Сбербанк АСТ плагин перестал быть доступным:

1. В двух последних случаях нужно привести систему в соответствие с полным количеством требований, которые предъявляются к работе на Сбербанк АСТ.

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

3. Исправить настройки браузера Google Chrome, включив NPAPI (в строке адреса написать chrome://flags, нажать Enter, отметить пункт #enable-npapi и перезагрузить).

В Internet Explorer нужно:

Проблемы с регистрацией пользователей в есиа с использованием ис мфц

В случае возникновения проблем с регистрацией пользователей, восстановлением пароля или подтверждением учётной записи до третьего уровня в ЕСИА с использованием ИС МФЦ (например, система сообщает, что пользователь не найден, или не приходит СМС) следует использовать следующий порядок действий:

1. Отправить запрос повторно, проверив корректность введённых данных.

2. Если запрос вновь не успешен — позвонить на горячую линию ЕСИА, подробно описать ситуацию и обязательно уточнить следующие моменты:

а) был ли зарегистрирован в ЕСИА запрос на регистрацию (подтверждение, восстановление пароля) учётной записи для данного заявителя;

б) выяснить результат исполнения запроса (если запрос был зарегистрирован в ЕСИА);

в) не существует ли уже учётной записи для данного пользователя в ЕСИА;

г) до какого уровня доведена учётная запись данного пользователя (если существует).

3. Дальнейшие действия зависят от наличия и состояния учётной записи в ЕСИА:

— если учётная запись в ЕСИА не существует, следует отправить запрос на регистрацию пользователя;

— если учётная запись уже существует, но не подтверждена — выполнить запрос на подтверждение до третьего уровня;

— если учётная запись существует и подтверждена — выполнить запрос на восстановление пароля.

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

4. В случае отсутствия положительного результата от вышеперечисленных действий обратиться в службу технической поддержки ОСЭП.

Источник

Проекции

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

У нас оставалось только два решения:

  1. Создавать такие API, которые возвращали бы сущности целиком со всеми степенями вложенности, а потребители сами решали бы, какие подмножества (проекции) им использовать для своих нужд. Это порождает новую проблему, которая называется overfetching данных. Очевидным минусом такого подхода являются тяжелые DTO, передаваемые по сети;

  2. Создавать такие API, которые возвращали бы только атомарные сущности (только один уровень вложенности). При таком подходе потребителям, чтобы сформировать у себя требуемую проекцию данных, пришлось бы посылать несколько запросов. Эта проблема также известна как underfetching данных.

На самом деле есть и третий путь — проектировать API таким образом, чтобы для каждого потребителя была возможность возвращать свой набор данных. Другими словами, свое API для каждого из потребителей. Но это достаточно трудоемкая задача, даже если вы работаете всего с тремя клиентами.

Пути решения

Решить данную задачу нам помогают разработанные модели управления доступом:

MAC — мандатная модель управления доступом. Доступ субъекта к объекту определяется его уровнем доступа: уровень доступа субъекта должен быть не ниже уровня секретности объекта.

DAC — прямое управление доступом. Доступ субъекта к объекту определяется наличием субъекта в списке доступа (ACL) объекта.

RBAC — ролевая модель управления доступом. Доступ субъекта к объекту определяется наличием у субъекта роли, содержащей полномочия, соответствующие запрашиваемому доступу.

АВАС — атрибутивная модель управления доступом. Доступ субъекта к объекту определяется динамически на основании анализа политик учитывающих значения атрибутов субъекта, объекта и окружения. Сюда же относятся PBAC, RAdAC, CBAC, с некоторыми нюансами (шикарный обзор от CUSTIS).

Их крайне рекомендуется использовать в первозданном виде, не изобретая велосипед. Достаточно часто в сложных информационных системах используется комбинация моделей. Например, популярна комбинация ACL RBAC, когда роль включается в список доступа. Однако, правильное применение готовых моделей — тоже не простая задача.

Для реализации озвученных выше в разделе «Проблематика» требований, на первый взгляд, я бы выбрал комбинацию PBAC ACL. Требования могли бы быть реализованы следующим образом:

Перечисленные требования ИБ без всяких проблем реализуются с использованием ACL, однако бизнес-требования 5 и 7 мы реализуем с помощью PBAC. Так что для реализации требований ИБ 1 и 2 придется добавить к ним журнал или аналогичный механизм, поскольку при всей своей красоте динамические правила плохо аудируются:

Разграничение доступа на уровне отдельных ресурсов (attribute-based access control)

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

Так как мы заранее не знали, какие роли в системе у нас будут, предполагалась их активное добавление и изменение, этот подход показался нам более подходящим, чем первый. Управление уровнями доступа пользователей в одном месте сильно уменьшало стоимость поддержки. Более подробно про RBAC и ABAC можно почитать, например, тут.

Второй подход (разграничение доступа на уровне отдельных ресурсов) с политикой «запрещено все, что не разрешено» показался нам ближе и понятнее в простоте реализации администрирования и поддержки.

Разграничение доступа на уровне роли (role-based access control)

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

За:

Плюсами такого подхода мы считали то, что, во-первых, он был довольно популярен на тот момент и де-факто являлся стандартом, во-вторых, как следствие первого, в ASP .Net MVC функционал был доступен «из коробки» (Identity Framework).

Против:

Главным минусом для нас являлось то, что при добавлении новой роли нужно было в явном виде обозначить в коде все методы, к которым роль должна иметь доступ. Что при активном добавлении ролей постоянно приводило бы к ковровым изменениям в коде. Такая проблема решалась путем создания атомарных ролей (например, в разрезе операций), объединения их в группы и создания из них уже более крупных пользовательских, но все это довольно сложно администрировать и поддерживать.

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

Решение проблемы со стороны андроида

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

  1. Активируйте модуль WiFi на планшете или телефоне и дождитесь пока гаджет найдёт всё доступные подключения.
  2. Среди предложенных вариантов выберите ту сеть, к которой Андроид не может подключиться.
  3. Нажмите на неё и удерживайте до появления контекстного меню.
  4. Выберите пункт «Удалить сеть» или «Забыть сеть», в зависимости от модели гаджета и версии прошивки. Не беспокойтесь, она всё так же будет появляться в списке доступных для подключения, просто, устройство удалит все данные об этой точке доступа и позволит произвести подключение с нуля.
  5. Затем вновь запустите сканер доступных подключений и найдите среди предложенных доступных вариантов нужную сеть.
  6. Чуть ниже формы для ввода пароля поставьте галочку на пункте «Показать пароль». В некоторых смартфонах и планшетах эта команда представлена значком в виде глаза, в зависимости открыт он или нет определяется видимость символов.
  7. Внимательно введите ключ для подключения. Уточнить пароль можно в веб-интерфейсе настроек роутера.подключение к wifi на андроид

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

Сдавайте отчетность из программы 1с!

Отправляйте отчеты и отслеживайте документооборот со всеми контролирующими органами через сервис «1С-Отчетность».

Спасибо!

Наш менеджер уже увидел Ваше обращение и спешит помочь Вам как можно скорее!

В рабочее время (пн – пт с 9:00 до 18:00) наши менеджеры очень активны и общительны и с радостью ответят Вам в течение дня.

В остальное время – дожидайтесь ответа на следующий рабочий день.

А пока предлагаем вам:

Текущая реальность и планы развития

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

  • Независимый от конкретного языка программирования механизм авторизации для компонентов системы (Digital Platform). Следуй стандарту, используй GraphQL, размечай поля директивами – и вперед;

  • Разделили авторизацию и бизнес-логику на уровне архитектуры. Разработчики доменных сервисов сосредоточены на создании бизнес-функционала и не думают о деталях реализации авторизации;

  • Позволили владельцам сервисов сосредоточиться на логике их реализации и не фокусироваться на том, какие именно проекции данных могут потребоваться конкретным потребителям;

  • Удобное управление ролями через внешний сервис, которое не блокируется развитием сервисов и само не блокирует их;

  • Оценить плюсы такого подхода как Sidecar, который позволил независимо релизить различные компоненты системы. Настоятельно рекомендую присмотреться к той части приложения, которую вы распространяете как библиотека, и вынести ее в Sidecar. Это особенно актуально для активно развивающихся систем, которые часто релизятся в процессе непрерывной поставки;

  • Популяризировать внутри организации современную технологию. Что ни говорите, а банки традиционно относят к консервативным структурам, тогда как современные разработчики любят «стильно, модно, молодежно» пробовать новые решения и технологии.

  • Повышение Multitenancy — возможности повторно использовать компоненты системы гораздо шире, чем рамки одного проекта и даже организации. Активность в этом направлении (платформизация) позволяет нам экономить на создании типовых решений при запуске новых продуктов.

Надеемся, что история была интересной и наш опыт будет полезен для вас.

Тестирование

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

 Далее нужно попробовать получить права администратора и протестировать административные функции:

Устранение незапланированных проблем с авторизацией в битрикс24

Это означает, что у вас есть аккаунт в

Битрикс24.Нетворк

и вы авторизованы по нему, однако этот аккаунт не привязан к порталу, в который вы пытаетесь войти.

То есть, вы используете неверные данные для входа – это может быть либо другая почта, либо социальная сеть.

Администратор портала всегда может проверить логин на странице редактирования профиля в Битрикс24 и подсказать вам, по какому логину нужно заходить.

Однако может быть так, что ваш e-mail на портале и логин, по которому вы безуспешно пытаетесь войти, совпадают, но войти в портал не получается.
В этом случае почти наверняка при первом входе в Битрикс24 вы не довели до конца регистрацию и Битрикс24.Нетворк запомнил вас по какой-либо социальной сети.
Чтобы довести регистрацию до конца и в дальнейшем без лишних заморочек входить в свой Битрикс24 с любого устройства, вам нужно пройти следующие несколько этапов.

Уязвимости авторизации и аутентификации

Начнем пожалуй с самой простой и наглядной для понимания уязвимости –  Insecure Direct Object References (IDOR, небезопасные прямые ссылки на объекты) возникает, когда  приложение предоставляет прямой доступ к объектам, основываясь на пользовательском вводе, при этом не проверяя права доступа пользователя к данному объекту. Ну или делая это некорректно.

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

Уязвимости сериализации

Сериализация известна уже очень давно. Это процесс, который позволяет преобразовать объект в поток байтов. Обратный процесс — десериализация — восстанавливает первоначальную структуру объекта без создания отдельного текстового файла ввода/вывода. 

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

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

Иногда можно встретить сериализованные данные:

Форматы представления объекта могут быть абсолютно разными:

  • Бинарный: Java Serialization, Ruby Marshal, Protobuf, Thrift, Avro, MS-NRBF, Android Binder/Parcel, HOP

  • Смешанный: PHP Serialization, Python pickle, Binary XML/JSON

  • «Читаемый»: XML, JSON, YAML – мы сами можем посмотреть, что там содержится внутри

Но сама по себе сериализация не несет угроз. Как обычно, проблемы возникают, когда приложение обменивается потоками с небезопасным источником — когда мы пытаемся десериализовать какие-то недоверенные данные.

Часто используемые пароли

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

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

Так же частенько некоторые пользователи используют пароли, которые как-то связаны с сервисом, компанией, датами и «другими памятными вещами». Возможно кто-то из сотрудников компании MegaBurgerBank (любые совпадения случайны) мог бы использовать пароль для своей учетной записи MegaBurgerBank!@#(любые совпадения случайны) или MegaBurgerBank2020 (любые совпадения случайны).

Чтобы этого избежать, неплохо бы иметь под рукой список запрещенных паролей. Или наоборот, можно было бы сгенерировать такой список для осуществления атаки password spraying с помощью различных инструментов — например, этого.

Шаг 2. настройка прав доступа

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

Рис. 4. Настройки организации

Перейдите в раздел «Доступы к системам».

Рис. 5. Настройка доступа к системам

Далее выберите по списку:

a. Организация – Федеральное казначейство;

b. Система – Единая информационная система в сфере закупок;

c. Группа доступа – Все.

Затем нажмите «Присоединить нового сотрудника» в разделе «Уполномоченные администраторы».

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

Рис. 7. Добавление пользователя в группу

Источник

Итого

Авторизация — незаслуженно обойденная вниманием тема, как в публикациях, так и непосредственно в процессе разработки. Двухфакторную аутентификацию по СМС к сайту прикрутит и ребенок. Правильно реализовать авторизацию в корпоративной системе, не наделав костылей — сложнейшая задача, о которую ломают копья сеньоры и архитекторы, а множество популярных коммерческих продуктов (к примеру, Atlassian Jira) стоят на костылях благодаря сложности требований.

Мы планируем серию статей, посвященных моделям авторизации и предмету в целом. Будем рады вопросам и предложениям по темам для рассмотрения.

Заключение

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

11-12 октября весь цвет российского фронтенда соберётся на FrontendConf 2021. Впервые за два года офлайн. Расписание, программа и билеты. Присоединяйтесь и до встречи вживую!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *