Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
caOptics — CA Optics — анализатор пробелов в условном доступе Azure AD | Kitploit
Инструменты/GitHubGitHub/jsa2/caoptics
Оборонительные ИнструментыАудит конфигурацииБезопасность облачных средУправление идентификацией и доступом (IAM)АутентификацияНеправильная КонфигурацияArchived
GitHubjsa2/caoptics

caOptics

CA Optics — анализатор пробелов в условном доступе Azure AD

Репозиторий
337261 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Примечание

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


  • CA Optics - анализатор пробелов условного доступа Azure AD
    • Что такое условный доступ?
    • Примечания для первых тестировщиков
  • Примечания к выпуску
  • Документация
    • Пример пробела
    • Генерация перестановок
    • Предварительные требования
    • Важно
    • Описание — анализатор пробелов условного доступа
      • По сравнению с существующими инструментами
    • Область применения
    • Дизайн с собственными правилами
      • Проектные решения
        • Поиск платформ
        • Различия в поиске
        • Вложенность групп
    • Параметры
      • передача параметров из launch.json (отладка в VSCode)?
    • Запуск инструмента
    • Просмотр отчётов
    • Устранение неполадок
  • Участие в разработке

CA Optics - анализатор пробелов условного доступа Azure AD

Azure AD Conditional Access Gap Analyzer — это решение для выявления пробелов, которые могут существовать в сложных конфигурациях политик условного доступа Azure Active Directory.

Что такое условный доступ?

Если вы новичок в условном доступе, рекомендуем ознакомиться со следующей статьёй Microsoft: https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/overview


Примечания для первых тестировщиков


Однострочная команда для запуска этого инструмента: (если вы планируете прочитать только эту часть и уже завершили установку)

node ./ca/main.js --mapping --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --clearTokenCache --clearMappingCache


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

  1. политики reportOnly не считаются завершающими: Читайте: scope

  2. запускайте каждое сканирование с --clearPolicyCache

  3. запускайте каждое сканирование с --clearMappingCache, если вы вносите изменения в группы/пользователей, связанных с политиками

  4. в область действия попадают только политики, нацеленные на пользователей и приложения (это наиболее распространённая область, но означает, например, что политика регистрации безопасности не оценивается) Читайте: scope

  5. Начните с тестовой среды, чтобы получить опыт и составить представление о механике работы инструмента

  6. если у вас есть известные группы или пользователи, исключённые из политик, определите объекты для исключения из сканирования с помощью --skipObjectIds, если вы не хотите подтвердить исключения

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

    Читайте:параметры

    • если у вас установлен AZ CLI, очистите кэш AZ CLI перед продолжением с помощью az account clear и выполните новый вход в среду, которую планируете сканировать, с помощью az login

Читайте другие важные примечания


Примечания к выпуску

root@kitploit:~
Release notes: 0.7.1
- Updated depedencies and report text outputs 
Release notes: 0.7
- Uses beta endpoint now by default, --expand option now expands the results to report regardless of the use of --allTerminations
Release notes: 0.6.9
- using --expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016 and expand 10 group members to for separate inspection.
Release notes: 0.6.8
- When you update policy with any guest conditions in GUI that policy will be only available from the beta endpoint after the update (during preview). 
- This update brings normalization for policies that are transfered to beta endpoint due to this behavior. 
- The policy will be evaluated like the previous guest conditions, as long as the following conditions are included "internalGuest,b2bCollaborationGuest,b2bCollaborationMember" and no tenants are excluded from the policy. In order to evaluate transferred policies, 
- use '--allowPreviewPolicies' when running CaOptics to account for this behavior

Release notes: 0.6.6-7 beta
- Allow use of different login endpoints for login and graph with params: --altLogin --altGraph
- Allow use of custom filtering for policies (this only recommended, when the policies do not adhere to expected schema)

Release notes: 0.6.5 beta
- Added counter to reporting when high number of permutations is also added to report (default is to add only unterminated)
- Minor code fixes changing <var> to <let> 
- Report filename now includes day, month, year and tenantId e.g. report_day_4_month_9_year_2022-tenant_48f55450-183a-45d6-a9ce-68f3cbc68947.csv

Release notes: 0.6.4 beta
- Get more groups per single call (less batching)
- Fix race condition detected when generally using for await loops 
- Enclose values with "" between delimitters (CSV)

Release notes: 0.6.3 beta
- Optimizations to way the mapped objects are handled. 
  - Mapped objects are cached. You can recreate the object mapping by using parama 'clearMappingCache'
  - Lookup keys will start from 'user/group/role' conditions always first
  - Added possibility to populate usermap with random UUID's to test for performance impact (this just debug option, and not really something that would be in non-beta versions)

Release notes: 0.6.2 beta
- Separated cache params into separate functions -> (clearTokenCache and ClearPolicyCache)
- Added possibility of running pre-optimized algorithm on permutations with param --aggressive (High memory consumption, only here for A/B testing)
- merge completed.

Release notes: 0.6.1 beta 
- Basic version of CSV reporting added
- Streamlined permutation generation to ensure essential permutations are generated, and some permutations are are terminated earlier on the lookups

Release notes: 0.6 beta (first non "silent" release)
- App displayNames added to MD report. Object type added to the user type

Release notes: 0.5.2,0.5.1,0.5 beta  (see previous branches for release notes)


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

Пример пробела

Пример обнаружения пробелов между политиками

❌ Любая перестановка со значением 0 означает, что для данной конкретной комбинации условий не было завершающих политик.

ПолитикаЗавершенияпоиск
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:GuestsOrExternalUsers
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:Jane Doe

✅ Подробное описание обнаружения читайте в docs/example.md


Генерация перестановок

Перестановки генерируются getPol2.js

  • Как это работает? Выполняется рекурсивный поиск по всем условиям, а затем условия помещаются в уникальные перестановки

Перестановки можно визуализировать с помощью сервиса JSON Crack:

(Визуализация: https://jsoncrack.com/)

Предварительные требования

Среда выполнения

  • Node.JS 14 LTS (Linux) (Установка в Linux)
  • Node.JS 16 LTS (Windows) (Установка в Windows)

Если вы предпочитаете не использовать версию «запустил и забыл»```bash nvm use 16 git clone https://github.com/jsa2/caOptics; cd caOptics; npm install;

root@kitploit:~
**Настройка запуска по принципу «выстрелил и забыл» для Azure Cloud Shell (Bash)**```bash
curl -o- https://raw.githubusercontent.com/jsa2/caOptics/main/init.sh | bash;
# Force reload of NVM
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 
# This loads nvm

The input chunk is empty — there is no content to translate. Please provide the Markdown text for chunk 5 of 19.```bash cd caOptics

Force fresh login (AZ CLI can't use the built-in token for the scope we are looking in here)

az login

root@kitploit:~
**Связанное с Azure AD**
- Роль Azure AD Security Reader включена 
- Если у вас есть Azure CLI и существующая сессия CLI, этот инструмент будет использовать эту [сессию](https://github.com/jsa2/caoptics/blob/HEAD/tokenHandler/getCode.js). 
   - Если у вас не установлен Azure CLI, просто используется clientID Azure CLI для получения токенов с помощью потока device_code, инициируемого HTTP-клиентом Node.js

      >![](https://assets.kitploit.com/production/public/readmes/47865/74e5e9fa7f505e20aecbe9ab86620b749fbecbd246cf233c4826991cda9a493b.png)  


**Используются следующие пакеты с открытым исходным кодом**

Чтобы уменьшить объём кода, для работы и оформления используются следующие зависимости (особая благодарность сопровождающим этих замечательных пакетов. Ссылка на лицензию каждого пакета указана в столбце «Лицензия»)
  
 пакет | оформление|работа|лицензия
  -|-|-|-
  [axios](https://www.npmjs.com/package/axios)||✅ | [MIT](https://github.com/axios/axios/blob/v1.x/LICENSE)
  [yargs](https://www.npmjs.com/package/yargs)||✅ | [MIT](https://github.com/yargs/yargs/blob/main/LICENSE)
  [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken) | |✅|[MIT](https://github.com/auth0/node-jsonwebtoken/blob/master/LICENSE)
  [chalk](https://www.npmjs.com/package/chalk)| ✅ | |[MIT](https://github.com/chalk/chalk/blob/main/license)
   [js-beautify ](https://www.npmjs.com/package/js-beautify) | ✅ | |[MIT](https://github.com/beautify-web/js-beautify/blob/main/LICENSE)

**Какой сетевой доступ нужен для работы?**

1. Для работы необходимы следующие хосты  ```sh
  graph.microsoft.com
  login.microsoftonline.com
  1. Перед началом работы для загрузки зависимостей требуется доступ к github и npmjs.

    Если вы планируете запускать этот инструмент в среде с ограниченным доступом к сети, сначала загрузите зависимости в среде, где разрешён доступ к установке пакетов и github.com. Затем вы можете перенести весь каталог установки в zip-архиве в среду с ограниченным доступом к сети.

Ниже приведён пример трассировки, которую я выполняю при запуске любых сторонних пакетов в своих приложениях Node.js. Он показывает URL-адреса, вызываемые во время выполнения.


Важно

  1. Прочтите Лицензию

  2. ⚠️ Для параметров запуска не выполняется санитизация ввода, так как всегда предполагается, что ввод этих параметров контролируется, и этот инструмент не работает в неконтролируемой среде (или без присмотра). Хотя я не проверил все пути, я считаю, что добиться выполнения шеллкода тривиально. Этот инструмент не предполагает враждебного ввода, поэтому рекомендуется не вставлять аргументы запуска в командную строку, не проверив их предварительно.

  3. Мы рекомендуем запускать этот инструмент только с правами только на чтение (если у вас установлен AZ CLI, удалите кэш AZ CLI перед продолжением az account clear)

  4. Устаревшая аутентификация (Legacy auth) не оценивается, когда оцениваемая политика включает только условия устаревшей аутентификации — Предыстория: Microsoft находится в процессе отказа от базовой аутентификации для Exchange, поэтому большая часть оценки устаревшей аутентификации скоро (конец 2022 года) станет неактуальной.

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

  5. Инструмент хранит локально refresh-токен AZ CLI для сохранения сеанса — токены кэшируются локально в открытом виде (точно так же, как они кэшируются с помощью Azure CLI в BASH, независимо от того, используете ли вы этот инструмент или нет). Хотя кэш токенов может быть зашифрован, в данном случае это не даёт никаких преимуществ для PoC. Шифрование кэша токенов также не сильно поможет, поскольку, возможно, многие другие инструменты/приложения, работающие в системе, хранят непрозрачные refresh-токены в виде открытого текста.

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


Описание — Conditional Access Gap analyzer

Этот инструмент решает проблему поиска пробелов в политиках условного доступа (Conditional Access), даже когда пробел не отображается в журналах входа в систему.

Сравнение с существующими инструментами

Чем этот инструмент отличается от существующих инструментов?

Дополнительно

¹ Анализатор лучших практик

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

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

Охват

В версии 0.5 охватываются следующие условия:

✅Users / Roles /Groups

✅Cloud apps (только политики, которые определяют все приложения или отдельные приложения, входят в область действия)

✅Device platforms (например, user-agents)

✅Locations

✅Client Apps (например, браузерные / настольные и мобильные приложения) ¹

✅Access Controls (Grant / Block) (только политики, в которых включены элементы управления доступом, входят в область действия ²)

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

¹ Учитывая, что Microsoft упраздняет устаревшую аутентификацию (Legacy Auth), устаревшая аутентификация не проверяется. ² Необходимо включить применение политики (политики только для отчёта не оцениваются по умолчанию, но могут быть включены с помощью определённого флага).

Субъективный подход к проектированию

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

Существуют две школы проектирования условного доступа:

  1. На основе включения: применяйте CA только к условиям, которые соответствуют прогнозируемым сценариям использования организации.

  2. На основе исключений: применяйте CA во всех условиях, а затем создавайте узкие исключения для обработки этих исключительных случаев.

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


Этот подход схож с рекомендацией Microsoft «Применяйте политики условного доступа к каждому приложению» с тем отличием, что, помимо всех приложений, политикой или исключением определённого типа должны быть покрыты также все остальные настроенные условия ¹

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

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


Проектные решения


Определение платформы

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

Пример такого условия```json "platforms": { "includePlatforms": ["all"], "excludePlatforms": ["macOS"] },

root@kitploit:~
**Reference** https://learn.microsoft.com/en-us/azure/active-directory/conditional-access/concept-conditional-access-conditions#device-platforms


> **Important** <br> *Корпорация Майкрософт рекомендует иметь политику условного доступа для неподдерживаемых платформ устройств. Например, если вы хотите заблокировать доступ к корпоративным ресурсам с Chrome OS или любых других неподдерживаемых клиентов, следует настроить политику с условием «Платформы устройств», которое включает любое устройство и исключает поддерживаемые платформы устройств, а для элемента управления «Предоставление» задать значение «Блокировать доступ».*

---

#### Различия поиска


1. Поиск по роли
> Когда роли используются в качестве условий, поиск исключений/включений определяется только ролью. Это может привести к ситуации, когда политика корректно срабатывает для роли, но пользователь, входящий в эту роль, всё равно может быть исключён из политики в результатах. В результатах оба условия выделяются (не объединяются). Это чисто проектное решение, так как мы хотим показывать срабатывания ролей отдельно, без контекста пользователя или группы. 

 --- 

    Example:
    userID:0cd1b62d-5ff8-497b-9b56-9bb02bc0ab8c is included from All Apps policy

    There is admin policy, that covers role of Global administrator, but not the userId. 

    Both of following conditions would be shown in results:
    1. Role GA is excluded individually (1)
    2. UserId is not explicitly targeted by group or userId (0)

    All (cross-policy)	policies matched:1	users:Company Administrator
    All (cross-policy)	policies matched:0	users:joosua santasalo
    

---

2. Поиск по группе
> И наоборот, если используются группы, срабатывание политики объединяется, и поэтому исключение пользователя будет показано как завершённое включением группы.

    Example:
    userID:194383eb-6053-4d1e-bc72-f332be6ca2cb is included from All Apps policy

    There is policy which targets the user only by group

    Following conditions would be shown in results:
    1. User is excluded individually 
    2. User is targeted via group.

  
    All (cross-policy)	policies matched:1	users:Vihtori Santasalo (matched via group)


3. Поиск гостевых пользователей
   
>Пользователи не сопоставляются как гости в этой версии. Эта функция будет добавлена позже, что позволит перехватывать включения/исключения гостевых userId для корректного сопоставления со свойством ``GuestsOrExternalUsers``.
В настоящее время гостевые пользователи сопоставляются так же, как и обычные пользователи.
>

#### Вложенность групп

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

    Membership:    
    Group1 -> all members resolved
    --> user is member of Group1
    --> Group2 is member of Group1 -> all members resolved to Group1
      --> Group3 is member of Group1 -> NOT RESOLVED

> Если осмелитесь... вы можете увеличить вложенность прямо в коде... [group.js](https://github.com/jsa2/caoptics/blob/HEAD/ca/mainPlugins/userMappers/group.js)

![](https://assets.kitploit.com/production/public/readmes/47865/59681df621b6d006dbf9ae0a77045e5967665eb4000674c643fcc9a9e74ad856.png)  



## Параметры

Param| Description 
-|-
``mapping`` | По умолчанию исключения на основе пользователей и групп оцениваются по точному идентификатору объекта. Например, если объект исключён одной политикой, он должен быть найден в другой политике по его точному идентификатору. <br> Использование ``--mapping`` вызывает MS Graph для заполнения связи между объектами так, чтобы, например, пользователь мог быть исключён по userId в одной политике, тогда как оценка обнаруживает, что пользователь включён в другую политику по groupId. <br> напр. ``--mapping`` 
``clearMappingCache`` | Очищает сопоставления пользователей/групп, полученные при предыдущем запуске <br> напр. ``--clearMappingCache`` 
``skipObjectId `` | Удаляет ObjectId из перестановок. Это может быть полезно, если вы хотите исключить break-glass учетную запись из результатов <br> напр. ``--skipObjectId=bcd27e9b-8974-42ec-a2a1-ba2498b45674,c7a4a639-00e7-47e0-aa9d-ea502bbbd382`` 
``skip `` | Удаляет целую категорию перестановок. <br> напр. ``--skip=users`` 
``includeReportOnly `` | Позволяет смешивать политики reportOnly с включёнными политиками. Удалите существующие политики перед запуском, удалив файл policies.json в корне, или используйте опцию ``clearPolicyCache`` <br> напр. ``--includeReportOnly`` 
``includeLegacyAuth `` | По умолчанию политики, содержащие только условия устаревшей аутентификации, не оцениваются. Используйте этот флаг, если хотите включить устаревшую аутентификацию в анализ <br> обратите внимание, что включение устаревшей аутентификации приведёт к проверке всех приложений, а не только поддерживаемых рабочих нагрузок (AAD,SPO,EXO) <br> напр. ``--includeLegacyAuth`` 
``clearPolicyCache `` | Удаляет кэши политик <br> напр. ``--clearPolicyCache`` 
``clearTokenCache `` | Удаляет кэши токенов <br> напр. ``--clearTokenCache`` 
``allTerminations`` | Включает также результаты, завершившиеся на политике <br> ``--allTerminations``
``debug`` | Показывает использование памяти и оценку прогресса <br> напр. ``--debug``
``altLogin `` | Позволяет задать альтернативное полное доменное имя конечной точки входа <br> напр. ``--altLogin=login.microsoft.com.alt``
``altGraph `` | Позволяет задать альтернативное полное доменное имя конечной точки Graph <br> напр. ``--altGraph=graph.microsoft.com.alt`` 
``customPolicyFilter `` | Позволяет использовать пользовательскую фильтрацию политик (рекомендуется только в том случае, если политики не соответствуют ожидаемой схеме) <br> напр. ``--customPolicyFilter`` <br> Вы можете изменить фильтр, выбрав [``customPolicyFilter.js``](https://github.com/jsa2/caoptics/blob/HEAD/ca/mainPlugins/customPolicyFilter.js) 
``expand `` | Позволяет задать группу для разворачивания в результатах. По умолчанию группа разворачивается для первых 10 элементов. Количество разворачиваемых элементов можно увеличить, используя совместно опцию ``--expandCount=30``<br> напр. ``--expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016`` <br> Примечание: использование этой опции требует очистки кэша сопоставлений ``--clearMappingCache`` 

### Передача параметров из launch.json (отладка в VSCode)?


скопируйте текущую JSON-схему и создайте файл с именем launch.json в папке ``.vscode/launch.json`````json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "skipFiles": [
                "<node_internals>/**"
            ],
"program": "${workspaceFolder}/ca/main.js",
//"program": "${file}",
            "args":  [
                "--skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f",
               "--mapping",
              "--clearMappingCache",
               "--clearPolicyCache",
               "--clearTokenCache",
               "--customPolicyFilter",
               "--allowPreviewPolicies=beta",
             //  "--altGraph=graph.microsoft.com",
              // "--allPlatforms",
             //   "--includeReportOnly",
                //"--inject",
            //"--clearPolicyCache",
              // "--skipCleaning",
             // "--allTerminations",
             // "--aggressive",
             "--debug",
            ],
            "runtimeArgs": [
                "--max-old-space-size=4096"
            ]
        }
    ]
  }

Запуск инструмента

Перед первым запуском инструмента```sh #Navigate to the cloned folder cd caOptics; #Install depedencies npm install

root@kitploit:~
Каждый запуск инициирует вход в систему, если сеанс не сохранён. Если у вас есть сеанс в Azure CLI и вы хотите использовать другой сеанс, то в Azure CLI выполните ``Az Account Clear`` 

1. Статический запуск (без [mapping](#parameters) )
>``node ./ca/main.js `` 
2. Статический запуск (с [mapping](#parameters) )
>``node ./ca/main.js --mapping`` 
3. Указание ``skipObjectId=yourID`` для исключения группы Break glass 
>``node ./ca/main.js --mapping  --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f`` 

Кроме того, если вы экспериментируете с инструментом, рекомендуется добавить параметр ``--clearPolicyCache --clearTokencache``. Это удалит существующие токены сеанса и файл policy.json (кэш)

>удалите policies.json из папки проекта, если вы не хотите удалять сеанс из кэша, а просто хотите, чтобы политики были удалены

**Ожидаемый результат (на основе примера данных)**

Policy | Permutation | Terminations | lookup 
 -|-|-|- 
All (cross-policy)| 33a51ecbcc58466a90b6bea66b239c74|  0| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS -> clientAppTypes:mobileAppsAndDesktopClients -> users:All 
All (cross-policy)| 4194a5e64e054764bd8774d4992887b9|  0| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS -> clientAppTypes:mobileAppsAndDesktopClients 
All (cross-policy)| 24f38821ea8e4331aeae7c078a727236|  1| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS 


## Просмотр отчётов
Все успешные запуски выводят ``crosstable.md`` (таблицу Markdown) и csv ``report.csv`` 
- Каждый новый запуск инструмента стирает предыдущий отчёт

**Пример отчёта .csv**```
users                 Applications clientAppTypes              Platforms locations terminations  
-----                 ------------ --------------              --------- --------- ----------
GuestsOrExternalUsers All          browser                     macOS     finland   0
user-Joosua Santasalo All          browser                     macOS     finland   0
user-Joosua Santasalo All          mobileAppsAndDesktopClients macOS     finland   0
All                   All          browser                     macOS     finland   0

Пример .json дампа```json [ { "policy": "all", "lineage": "Platforms:macOS -> clientAppTypes:browser -> users:All -> Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> ", "lookup": "Locations:10a25087-9bf6-479b-a2a1-37e814310c90", "terminated": [] }, { "policy": "all", "lineage": "Platforms:macOS -> clientAppTypes:browser -> users:GuestsOrExternalUsers -> Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> ", "lookup": "Locations:10a25087-9bf6-479b-a2a1-37e814310c90", "terminated": [] } ]

root@kitploit:~
## Устранение неполадок

- Если вы используете AZ CLI для входа в сеанс, начните с ``az account clear`` 
- При запуске инструмента добавьте ``--clearPolicyCache --clearTokencache`` для очистки кэшей (токенов, политик и расположений)
- удалите существующие policies.json и namedLocations.json из корня проекта вручную (если вы не используете опцию ``--clearPolicyCache --clearTokencache``  )
- Если включения групп, похоже, не работают, убедитесь, что выбрано ``--mapping``, и что у вас нет вложенности глубже двух групп

--- 

**Тестирование в Azure Cloud Shell**

Если вы тестируете это решение в более крупной среде. Включите ``--debug`` в параметрах и, если возможно, увеличьте размер кучи node `` --max-old-space-size=4096 `` 
  - Опыт тестирования показал, что количество перестановок может достигать довольно больших значений в крупных средах. Запуск в режиме отладки может помочь указать, где может возникнуть проблема. В таких сценариях использование Cloud Shell может оказаться неприемлемым (хотя алгоритм перестановок теперь значительно снизил использование памяти, я не смог подтвердить, что Cloud Shell будет работать в крупных средах)

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

``node --max-old-space-size=4096 ./ca/main.js --mapping  --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --debug`` 


---

- В политиках CA могут быть пустые ссылки, и поэтому при поиске будет отображаться незавершённое условие

  >![](https://assets.kitploit.com/production/public/readmes/47865/7820044fc6c547017bca097b6a0306b341e689241ceea64b245f8a204c3269b4.png)  


# Внесение вклада

Откройте pull request или создайте issue в зависимости от масштаба запроса.
Скачать инструмент
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:John Doe
ИнструментBPA ¹Анализ пробеловДополнительные требования
Microsoft Azure AD Assessment✅- только касательно BPAрегистрация нового приложения
Conditional access gap analyzer workbook -² Только когда пробел можно связать с событием входажурналы экспортируются в рабочую область Log Analytics
CA Optics-✅³ Доступ к Azure Cloud Shell и разрешения на чтение политик CA через MS Graph API