# Knowledge graph и аналитика

> Как knowledge graph связывает хосты, сервисы, уязвимости и доступ, его два бэкенда и построенная на его основе панель attack-chain.

Запись в PostgreSQL отвечает на вопрос *что вывела команда*. [Knowledge graph](https://pentagi.com/ru/docs/glossary/#knowledge-graph) отвечает на вопрос *как связаны две [findings](https://pentagi.com/ru/docs/glossary/#finding)* — на каком хосте запущена какая служба, какая уязвимость привела к какому доступу.

## [Два бэкенда](https://pentagi.com/ru/docs/enterprise/knowledge-graph/#two-backends)

|                                                             | graphstore                  | graphiti                            |
| ----------------------------------------------------------- | --------------------------- | ----------------------------------- |
| Работает как                                                | в бэкенде, граф в Neo4j     | отдельный сервис на Neo4j           |
| Включается через                                            | `GRAPHSTORE_INGEST_ENABLED` | `GRAPHITI_ENABLED` + `GRAPHITI_URL` |
| [Agent](https://pentagi.com/ru/docs/glossary/#agent) [tool](https://pentagi.com/ru/docs/glossary/#tool) | `graphstore_search`         | `graphiti_search`                   |
| Статус                                                      | замена graphiti             | устаревший, оставлен для сравнения  |

Оба ограничены одним [flow](https://pentagi.com/ru/docs/glossary/#flow): каждое чтение фильтруется по нему, поэтому один flow никогда не видит граф другого flow.

Оба бэкенда по умолчанию отключены. При `GRAPHSTORE_INGEST_ENABLED=true` для работы graphstore требуются `GRAPHSTORE_NEO4J_URI` и `GRAPHSTORE_NEO4J_DATABASE`, и PentAGI не запустится без них.

При включённом Graphiti два бэкенда хранят активы по-разному, поэтому PentAGI отказывается запускаться, если оба записывают базу данных с одинаковым именем на одном сервере или на любом сервере, пока не задан `NEO4J_URI` для Graphiti, кроме случая, когда `GRAPHSTORE_ALLOW_SHARED_NEO4J_DATABASE=true`. Поставляемый Neo4j — это версия Community, и он обслуживает только базу данных `neo4j`: при использовании обоих бэкендов на нём сохраните `neo4j` и разрешите совместное использование, что снизит качество knowledge graph, поскольку порты и службы сохраняются дважды, а некоторые записи Graphiti могут быть отклонены. Чтобы разделить knowledge graph, выделите для graphstore отдельный сервер Neo4j или отдельную базу данных в Neo4j Enterprise: PentAGI создаст эту базу данных при её отсутствии, если учётная запись Neo4j для graphstore может создавать базы данных; в противном случае создайте её заранее.

## [Дашборд attack chain](https://pentagi.com/ru/docs/enterprise/knowledge-graph/#attack-chain-dashboard)

![Основная attack chain: хосты, порты, службы, уязвимости, подтверждённый доступ и учётные записи](https://pentagi.com/images/product/attack-chain.webp)

При включённом knowledge graph вкладка **Dashboard → Analytics** flow визуализирует граф по мере его роста:

* **Main Attack Chain** — хосты, порты, службы, уязвимости, подтверждённый доступ и учётные записи.
* Представления **Action Chain**, **Infrastructure**, **Access Chain** и **Priv Esc Chain**.
* Полоса прокрутки временной шкалы для воспроизведения того, как формировалась картина, а также таблицы открытых портов, обнаруженных CVE и статуса учётных данных.

![Представление цепочки доступа](https://pentagi.com/images/product/access-chain.webp)

![Сводка по поверхности атаки и подтверждённому доступу](https://pentagi.com/images/product/analytics-stats.webp)