Slide 1

Slide 1 text

Стандарты безопасности в Kubernetes Константин Аксёнов Руководитель разработки Deckhouse Kubernetes Platform

Slide 2

Slide 2 text

Все знают про безопасность, но далеко не всегда делают правильно.

Slide 3

Slide 3 text

Почему сегодня все говорят про безопасность в Kubernetes?

Slide 4

Slide 4 text

Распространение Kubernetes За 3 года количество компаний с 50+ кластерами Kubernetes выросло с 15 до 29%. Число действующих кластеров Kubernetes 2022 2021 2020 5 или меньше 6–10 11–25 26–50 Больше чем 50 12% 23% 20% 16% 29% 25% 32% 17% 10% 16% 30% 27% 16% 13% 15% Исследование VMware The State of Kubernetes 2022

Slide 5

Slide 5 text

Нужно больше золота Kubernetes-кластеров 48% респондентов ожидают существенного роста количества кластеров Kubernetes в компании. Ожидаемый рост числа кластеров Kubernetes в компаниях Резко увеличится Существенно увеличится Заметно увеличится (больше чем вдвое) (более чем на 50–100%) (на 20–50%) 13% 35% 28% 48% Исследование VMware The State of Kubernetes 2022

Slide 6

Slide 6 text

Больше кластеров Kubernetes — это же хорошо?..

Slide 7

Slide 7 text

Больше внедрений, больше проблем В организациях, где контейнеры используются практически для всех приложений, безопасность становится главным вызовом. Исследование CNCF Annual Survey 2022 25% 41% 44% 40% 35% 30% ОТСУТСТВИЕ ЭКСПЕРТИЗЫ БЕЗОПАСНОСТЬ Контейнеры используются для большинства или всех приложений Контейнеры используются для некоторых приложений Контейнеры находятся в стадии пилотного проекта или активно оцениваются Вызовы при использовании контейнеров

Slide 8

Slide 8 text

Проблемы точно есть Исследование Red Hat State of Kubernetes security report 2022 Только 7% опрошенных ответили, что не столкнулись с инцидентами связанными с безопасностью при эксплуатации контейнеров и/или Kubernetes. За последние 12 месяцев Проблемы с безопасностью 53% 38% 30% 22% 7% Обнаружена некорректная конфигурация Крупная уязвимость, требующая устранения Инцидент безопасности в runtime Непройденный аудит Нет проблем

Slide 9

Slide 9 text

Новые-старые вызовы, связанные с безопасностью Больше половины опрошенных откладывали или задерживали deploy приложений из-за опасений насчет безопасности в Kubernetes. 45% Нет 55% Да Откладывали ли вы deploy приложений из-за опасений насчет безопасности в Kubernetes? Исследование Red Hat State of Kubernetes security report 2022

Slide 10

Slide 10 text

Как перестать беспокоиться и начать получать удовольствие от Kubernetes?

Slide 11

Slide 11 text

Center for Internet Security Корректность конфигурации проверяется для следующих компонентов: Есть множество реализаций, одна из самых популярных — kube-bench. Kubernetes CIS Benchmark ● Компоненты Control Plane ○ Конфигурационные файлы узлов Control Plane ○ API Server ○ Controller Manager ○ Scheduler ○ etcd ● Конфигурация Control Plane ○ Аутентификация и авторизация ○ Логирование и аудит ● Worker Nodes ○ Конфигурационные файлы worker-узлов ○ Конфигурация kubelet ● Policies (RBAC, Service Accounts, Pod Security Standards, Network Policies)

Slide 12

Slide 12 text

Payment Card Industry Security Standards Council ● Аутентификация и авторизация ● Безопасность приложений ● Сетевая безопасность ● Управление секретами ● Мониторинг и аудит ● Безопасность среды выполнения ● Управление ресурсами ● Управление конфигурацией Guidance for Containers and Container Orchestration Tools Общий стандарт без инструкций для реализации Содержит разделы:

Slide 13

Slide 13 text

Федеральная служба по техническому и экспортному контролю ● Изоляция контейнеров ● Выявление уязвимостей в образах контейнеров ● Контроль целостности контейнеров и их образов ● Регистрация событий безопасности ● Проверка корректности конфигурации контейнеров ● Управление доступом Требования по безопасности информации к средствам контейнеризации В документе говорится о следующих функциях безопасности: Приказ ФСТЭК России от 4 июля 2022 г. № 118

Slide 14

Slide 14 text

И многие другие

Slide 15

Slide 15 text

Модель 4С’s облачной безопасности Разделение безопасности на слои

Slide 16

Slide 16 text

Модель 4С’s облачной безопасности ● Защита приложений и используемых библиотек ● Контроль над запускаемыми контейнерами и защита runtime ● Ограничение доступа к Kubernetes control plane и узлам кластера ● Безопасный доступ к API Cloud и инфраструктуре Cluster Master Node Node Container Runtime Pod Container Control Plane Components kube-apiserver kubelet APP APP

Slide 17

Slide 17 text

5 шагов к безопасности в Kubernetes Корректная конфигурация кластера Kubernetes Сканирование образов Сетевая безопасность Контроль над запускаемыми приложениями Аудит и регистрация событий 1 2 3 4 5

Slide 18

Slide 18 text

Корректная конфигурация кластера Kubernetes Проверить конфигурацию control-plane и узлов кластера, например с помощью kube-bench Ограничить сетевой доступ к Kubernetes API Каждый пользователь/компонент должен уникально идентифицироваться при доступе к Kubernetes API Кажется, что ничего сложного Настроить RBAC и выдавать только необходимые разрешения 1 2 3 4

Slide 19

Slide 19 text

Корректная конфигурация кластера Kubernetes После создания кластера никто не должен аутентифицироваться в Kubernetes API как system:masters. Проверим одного из популярных облачных провайдеров managed Kubernetes. Если такой kubeconfig утечет, то придется перевыпускать CA и сертификаты. cat config | yq '.users[0].user.client-certificate-data' | base64 -d | openssl x509 -subject -noout subject=O = system:masters, CN = kube-admin

Slide 20

Slide 20 text

Сканирование образов ● На этапе конвейера CI/CD ● Registry по расписанию ● В кластере Kubernetes ● Есть множество инструментов как self-hosted, так и SaaS

Slide 21

Slide 21 text

Сканирование образов ● Необходимо разбирать уязвимости. Не каждый Critical несет угрозу, и его можно эксплуатировать ● Использование общих базовых образов упрощает процесс исправления CVE ● Используем образы с необходимым количеством зависимостей ● Собираем артефакт отдельно и копируем в итоговый контейнер, который будет использоваться в кластере apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL FROM $BASE_GOLANG_ALPINE as artifact WORKDIR /go/src/github.com/kubernetes-incubator/descheduler RUN apk add --update git make RUN git clone https://github.com/kubernetes-incubator/descheduler.git . \ && git checkout v0.21.0 RUN make FROM $BASE_ALPINE COPY --from=artifact /go/src/github.com/kubernetes-incubator/descheduler/_output/bin/descheduler /bin/descheduler CMD ["/bin/descheduler", "--help"]

Slide 22

Slide 22 text

Сетевая безопасность ● CNI должен поддерживать сетевые политики ● Ingress- и egress-сетевые политики для всех компонентов кластера ● По умолчанию Deny all, все соединения должны быть явно разрешены Опционально: ● Глобальные политики на весь кластер ● Хостовые политики ● Визуализация сетевых соединений ● Редактор для сетевых политик

Slide 23

Slide 23 text

kubectl exec Сетевая безопасность

Slide 24

Slide 24 text

https://editor.cilium.io/ Сетевая безопасность

Slide 25

Slide 25 text

Сетевая безопасность apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL egress: - toEndpoints: - matchLabels: io.kubernetes.pod.namespace: kube-system k8s-app: kube-dns toPorts: - ports: - port: "53" protocol: UDP rules: dns: - matchPattern: "*" - toEndpoints: - {}

Slide 26

Slide 26 text

Сетевая безопасность

Slide 27

Slide 27 text

● Внедрение политик необходимо как в «коммунальных кластерах», так и в случае, если у каждого сервиса отдельный кластер ● Очень важно понимать и контролировать, кто/что и куда обращается ● Policy as code ● Внедрять на живую гораздо сложнее, но возможно Сетевая безопасность

Slide 28

Slide 28 text

Контроль над запускаемыми приложениями ● Validating Admission Controller

Slide 29

Slide 29 text

В Kubernetes 1.23 есть Pod Security Admission из коробки. Если требуется кастомизация и недостаточно Pod Security Standards. Варианты: ● Kubewarden ● Kyverno ● OPA Gatekeeper Контроль над запускаемыми приложениями

Slide 30

Slide 30 text

apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL apiVersion: deckhouse.io/v1alpha1 kind: OperationPolicy metadata: name: common spec: policies: allowedRepos: - myregistry.example.com requiredResources: limits: - memory requests: - cpu - memory disallowedImageTags: - latest requiredProbes: - livenessProbe - readinessProbe maxRevisionHistoryLimit: 3 imagePullPolicy: Always priorityClassNames: - production-high checkHostNetworkDNSPolicy: true checkContainerDuplicates: true match: namespaceSelector: labelSelector: matchLabels: operation-policy.deckhouse.io/enabled: "true" Типовые политики для запускаемых приложений

Slide 31

Slide 31 text

Ограничить количество ревизий Обязательно прописывать ресурсы Указывать priorityClass Использовать пробы Разрешить только доверенные registry Запретить использовать тег latest Контроль над запускаемыми приложениями

Slide 32

Slide 32 text

● Runc and CVE-2019-5736 ● Контейнер, запускаемый от root, мог получить доступ к хосту ● Высокий риск, если приложения запускаются из публичных репозиториев ● Больше контроля, меньше пространства для ошибки и возникновения уязвимости Контроль над запускаемыми приложениями

Slide 33

Slide 33 text

Аудит и регистрация событий ● Самый простой аудит в Kubernetes из коробки — это аудит Kubernetes API ● Легко настроить Примеры: https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/#audit-policy ● Логирование в файл или stdout ● Отправляем в систему сбора логов apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL apiVersion: audit.k8s.io/v1 kind: Policy omitStages: - RequestReceived rules: - level: RequestResponse resources: - group: "" resources: ["pods"]

Slide 34

Slide 34 text

Аудит и регистрация событий Пример лога apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL { "kind": "Event", "apiVersion": "audit.k8s.io/v1", "level": "RequestResponse", "auditID": "28eff2fc-2e81-41c1-980b-35d446480e77", "stage": "ResponseComplete", "requestURI": "/api/v1/namespaces/default/pods/nginx-6799fc88d8-5p7x5", "verb": "delete", "user": { "username": "system:serviceaccount:d8-service-accounts:gitlab-runner-deploy", "uid": "fd5a6209-c893-4b77-adf7-90500ecd2723", "groups": [ "system:serviceaccounts", "system:serviceaccounts:d8-service-accounts", "system:authenticated" ] }, …

Slide 35

Slide 35 text

Аудит и регистрация событий Необходимо анализировать события аудита Kubernetes API: ● Изменения политик безопасности ● Создание/изменение/удаление объектов пользователями Необходимо регистрировать события, которые происходят без участия API: ● События в хостовой ОС на узлах кластера ● События внутри контейнера Для решения этих вопросов есть приложения, которые реализуют runtime security. В Deckhouse используется Falco, который содержит следующие функции: ● Разбор системных вызовов на хосте ● Получение аудит-лога от Kubernetes API через Webhook backend ● Проверка потока событий с помощью сконфигурированных правил ● Отправка алертов в случае нарушения правил

Slide 36

Slide 36 text

Аудит и регистрация событий Необходимо анализировать события аудита Kubernetes API: ● Изменения политик безопасности ● Создание/изменение/удаление объектов пользователями Необходимо регистрировать события, которые происходят без участия API: ● События в хостовой ОС на узлах кластера ● События внутри контейнера Для решения этих вопросов есть приложения, которые реализуют runtime security. В Deckhouse используется Falco, который содержит следующие функции: ● Разбор системных вызовов на хосте ● Получение аудит-лога от Kubernetes API через Webhook backend ● Проверка потока событий с помощью сконфигурированных правил ● Отправка алертов в случае нарушения правил

Slide 37

Slide 37 text

Аудит и регистрация событий Необходимо анализировать события аудита Kubernetes API: ● Изменения политик безопасности ● Создание/изменение/удаление объектов пользователями Необходимо регистрировать события, которые происходят без участия API: ● События в хостовой ОС на узлах кластера ● События внутри контейнера Для решения этих вопросов есть приложения, которые реализуют runtime security. В Deckhouse используется Falco, который содержит следующие функции: ● Разбор системных вызовов на хосте ● Получение аудит-лога от Kubernetes API через Webhook backend ● Проверка потока событий с помощью сконфигурированных правил ● Отправка алертов в случае нарушения правил

Slide 38

Slide 38 text

Аудит и регистрация событий

Slide 39

Slide 39 text

Аудит и регистрация событий

Slide 40

Slide 40 text

Аудит и регистрация событий

Slide 41

Slide 41 text

Аудит и регистрация событий falco-driver-loader — init-контейнер, который собирает eBPF-программу и сохраняет ее в общую папку для дальнейшего использования системой Falco

Slide 42

Slide 42 text

Аудит и регистрация событий falco — собирает события, обогащает их метаданными и отправляет в лог

Slide 43

Slide 43 text

Аудит и регистрация событий rules-loader — собирает custom resourcе’ы (FalcoAuditRules) из Kubernetes и сохраняет их в общую папку

Slide 44

Slide 44 text

Аудит и регистрация событий falcosidekick — экспортирует события как метрики, по которым потом можно настроить алерты

Slide 45

Slide 45 text

Аудит и регистрация событий kube-rbac-proxy — защищает endpoint метрик falcosidekick (запрещает неавторизованный доступ)

Slide 46

Slide 46 text

Аудит и регистрация событий apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL apiVersion: deckhouse.io/v1alpha1 kind: FalcoAuditRules metadata: name: host-audit-custom spec: rules: - list: name: cli_proc_names items: [crictl, docker] - macro: name: spawned_process condition: (evt.type in (execve, execveat) and evt.dir=<) - rule: name: Crictl or docker cli are executed desc: Detect ctl or docker are executed in cluster condition: spawned_process and proc.name in (crictl, docker) output: Crictl or docker are executed (user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline pid=%proc.pid parent_process=%proc.pname) priority: Warning tags: [host] Пример FalcoAuditRules

Slide 47

Slide 47 text

Аудит и регистрация событий apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL - items: - crictl - docker list: cli_proc_names - condition: (evt.type in (execve, execveat) and evt.dir=<) macro: spawned_process - condition: spawned_process and proc.name in (cli_proc_names) desc: Detect crictl or docker are executed in cluster enabled: true output: Crictl or docker are executed (user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline pid=%proc.pid parent_process=%proc.pname) priority: Warning rule: Crictl or docker cli are executed source: syscall tags: - host Сгенерированный Falco Rule

Slide 48

Slide 48 text

Аудит и регистрация событий apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL {"hostname":"demo-master-0","output":"14:17:03.188306224: Warning Crictl or docker are executed (user= user_loginuid=1000 command=crictl ps pid=273049 parent_process=bash) k8s.ns= k8s.pod= container=host","priority":"Warning","rule":"Crictl or docker cli are executed","source":"syscall","tags":["host"],"time":"2023-03-14T14:17:03.188306224Z", "output_fields": {"container.id":"host","evt.time":1678803423188306224,"k8s.ns.name":null,"k8s.pod.name ":null,"proc.cmdline":"crictl ps","proc.pid":273049,"proc.pname":"bash","user.loginuid":1000,"user.name":""}} {"hostname":"demo-master-0","output":"14:43:34.760338878: Warning Crictl or docker are executed (user= user_loginuid=1000 command=crictl stop 067bd732737af pid=307453 parent_process=bash) k8s.ns= k8s.pod= container=host","priority":"Warning","rule":"Crictl or docker cli are executed","source":"syscall","tags":["host"],"time":"2023-03-14T14:43:34.760338878Z", "output_fields": {"container.id":"host","evt.time":1678805014760338878,"k8s.ns.name":null,"k8s.pod.name ":null,"proc.cmdline":"crictl stop 067bd732737af","proc.pid":307453,"proc.pname":"bash","user.loginuid":1000,"user.name": ""}} Вывод Falco

Slide 49

Slide 49 text

Аудит и регистрация событий apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL - required_plugin_versions: - name: k8saudit version: 0.1.0 - macro: kevt_started condition: (jevt.value[/stage]=ResponseStarted) - macro: pod_subresource condition: ka.target.resource=pods and ka.target.subresource exists - macro: kcreate condition: ka.verb=create - rule: Attach/Exec Pod desc: > Detect any attempt to attach/exec to a pod condition: kevt_started and pod_subresource and kcreate and ka.target.subresource in (exec,attach) output: Attach/Exec to pod (user=%ka.user.name pod=%ka.target.name resource=%ka.target.resource ns=%ka.target.namespace action=%ka.target.subresource command=%ka.uri.param[command]) priority: NOTICE source: k8s_audit tags: [k8s] Пример правил с аудитом Kubernetes API

Slide 50

Slide 50 text

Аудит и регистрация событий apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL {"hostname":"demo-master-0","output":"18:27:29.160641000: Notice Attach/Exec to pod ([email protected] pod=deckhouse-77f868d554-8zpt4 resource=pods ns=d8-system action=exec command=mkdir)","priority":"Notice","rule":"Attach/Exec Pod","source":"k8s_audit","tags":["k8s"],"time":"2023-03-14T18:27:29.160641000Z", "output_fields": {"evt.time":1678818449160641000,"ka.target.name":"deckhouse-77f868d554-8zpt4","ka.target.names pace":"d8-system","ka.target.resource":"pods","ka.target.subresource":"exec","ka.uri.param[com mand]":"mkdir","ka.user.name":"[email protected]"}} Вывод Falco

Slide 51

Slide 51 text

Аудит и регистрация событий apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mtls-on namespace: myns spec: host: *.myns.svc trafficPolicy: tls: mode: ISTIO-MUTUAL apiVersion: deckhouse.io/v1 kind: CustomPrometheusRules metadata: name: runtime-audit-pod-exec spec: groups: - name: runtime-audit-pod-exec rules: - alert: RuntimeAuditPodExecAlerts annotations: description: | There are suspicious attach/exec operations. Check your events journal for more details. summary: Falco detected a security incident expr: | sum(rate(falco_events{rule="Attach/Exec Pod"}[5m])) > 0 Пример правил для Prometheus

Slide 52

Slide 52 text

Аудит и регистрация событий ● Правила Deckhouse для системных вызовов https://github.com/deckhouse/deckhouse/blob/main/ee/modules/650-runtime-audit-engine/rules/falco_rules.yaml ● Правила Deckhouse для Kubernetes аудита https://github.com/deckhouse/deckhouse/blob/main/ee/modules/650-runtime-audit-engine/rules/k8s_audit_rules.yaml ● Правила организации Falcosecurity https://github.com/falcosecurity/rules ● Пример правила для закрытия CVE от Sysdig https://sysdig.com/blog/detecting-mitigating-cve-2022-0492-sysdig/

Slide 53

Slide 53 text

Аудит и регистрация событий ● Прохождения сертификаций и аттестаций ● Разбор случившихся инцидентов ● Реагирование на угрозы

Slide 54

Slide 54 text

Идем дальше? Kubernetes — это прекрасный инструмент с большим количеством возможностей Естественно, есть другие важные аспекты безопасности: ● Аутентификация и авторизация ● Аудит RBAC ● Управление секретами ● Защита цепочки поставки ○ Запрет запуска образов с уязвимостями ○ Запуск только подписанных образов, использование cosign ● Режим обучения для генерации политик ● Автоматическое реагирование на события аудита

Slide 55

Slide 55 text

Итоги Вопрос безопасности в Kubernetes не решен. Есть многофункциональный конструктор. Kubernetes DIY. Обязательно выделяйте время на организацию безопасности. Если нет времени, то стоит посмотреть в сторону готовых решений: ● Kubesec, NeuVector, Kubescape, Luntry и др. ● платформы OKD, Rancher, Deckhouse Kubernetes Platform и др. 1 2 3

Slide 56

Slide 56 text

Спасибо за внимание Константин Аксёнов, руководитель разработки Deckhouse Kubernetes Platform QR код t.me/konstantin_aksenov konstantin.aksenov@flant.com

Slide 57

Slide 57 text

Сканирование образов Таблица сравнения от Aqua Security Сканер OS Работает в закрытых окружениях Сертифицирован ФСТЭК Количество звезд на Github Clair Да Да Нет 9,4 К Trivy Да Да Нет 16,5 К

Slide 58

Slide 58 text

Корректная конфигурация кластера Kubernetes Проверка CIS Benchmark на worker-узле: Проверим одного из популярных облачных провайдеров managed Kubernetes. Следует анализировать каждый FAIL. Есть инструменты, например kubeletctl, которые позволяют найти и использовать уязвимые kubelet’ы. [FAIL] 4.2.1 Ensure that the --anonymous-auth argument is set to false (Automated) [FAIL] 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) [FAIL] 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated) [FAIL] 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated) Хорошо, что это оказался просто баг в kube-bench

Slide 59

Slide 59 text

Сканирование образов Исходник dashboard

Slide 60

Slide 60 text

Проблема становится только острее Исследование Fairwinds Kubernetes Benchmark Report 2023 По сравнению с 2022 годом в 2023 количество организаций, которые запускает более 90% приложений с небезопасными настройками, выросло до 33%. Процент организаций Небезопасные настройки 2022 2023 0–10% 11–20% Затронутые приложения 21–30% 31–40% 41–50% 51–60% 61–70% 71–80% 81–90% 91–100% 42% 10% 5% 4% 0% 1% 1% 2% 3% 3% 3% 10% 9% 11% 6% 8% 8% 24% 33% 17%

Slide 61

Slide 61 text

Контроль над запускаемыми приложениями Пример dashboard

Slide 62

Slide 62 text

О чём будем говорить? Подзаголовок Текст Текст Текст с акцентом Текст с акцентом лого

Slide 63

Slide 63 text

Заголовок лого

Slide 64

Slide 64 text

Заголовок Подзаголовок Текст Текст Текст с акцентом Текст с акцентом лого

Slide 65

Slide 65 text

Буллет Буллет Заголовок Подзаголовок Буллет Буллет лого

Slide 66

Slide 66 text

Заголовок Описание Заголовок Описание Заголовок Описание Заголовок Описание Заголовок лого

Slide 67

Slide 67 text

Текст Текст Текст Заголовок лого

Slide 68

Slide 68 text

Текст Текст Текст Заголовок лого

Slide 69

Slide 69 text

Текст Текст Текст Текст Текст Текст Заголовок лого

Slide 70

Slide 70 text

Текст Текст Текст Текст Текст Текст Текст Текст Заголовок лого

Slide 71

Slide 71 text

Текст Текст Текст Текст Текст Текст Текст Текст Текст Подзаголовок Заголовок лого

Slide 72

Slide 72 text

Текст лого

Slide 73

Slide 73 text

Спасибо за внимание Имя Фамилия, должность Фото QR код Имя Фамилия, должность Фото

Slide 74

Slide 74 text

Спасибо за внимание Имя Фамилия, должность Фото Имя Фамилия, должность Фото Имя Фамилия, должность Фото QR код Имя Фамилия, должность Фото Имя Фамилия, должность Фото