MVP
Version-1.0
cr.yandex/sol/osquery-ds:mvp
cr.yandex/sol/osquery-ds-yc:0.1.0
Использовать osquery и kubequery в k8s кластере и отправлять результаты в SIEM (ELK, Splunk)
<img src="https://engineering.fb.com/wp-content/uploads/2014/10/1_XC-k2QigREIwZnBpFZ4StA@2x.png"
alt="Kubernetes logo" title="Kubernetes" height="50" width="150" />
Osquery - инструмент, который позволяет получать информацию об ОС в формате SQL запросов. Решаемые задачи:
<img src="https://repository-images.githubusercontent.com/330738883/21226100-5c12-11eb-9223-9a51942d504e"
alt="Kubernetes logo" title="Kubernetes" height="50" width="90" />
Kubequery - инструмент от создателей osquery, который позволяет получать информацию из кластера k8s о действующей конфигурации:
Подробнее с default sql запросами можно ознакомиться по ссылке
source of image - https://github.com/Uptycs/kubequery
<img src="https://engineering.fb.com/wp-content/uploads/2014/10/1_XC-k2QigREIwZnBpFZ4StA@2x.png"
alt="Kubernetes logo" title="Kubernetes" height="50" width="150" />
Особенности установки в k8s:
Установка компонентов osquery в k8s
Развернуть для просмотра..........⬇️
Подготовленная конфигурация включает:
Прериквизиты:
Установка с помощью helm:
helm inspect values oci://cr.yandex/sol/osquery-ds-yc --version 0.1.0 > values.yaml
helm install osquery-ds-yc \
oci://cr.yandex/sol/osquery-ds-yc --version 0.1.0 \
--namespace osquery \
--create-namespace \
-f values.yaml \
--set osqueryArgs="--verbose --disable_events=false --enable_file_events=true --disable_audit=false --audit_allow_config=true --audit_persist=true --audit_allow_process_events=true"
Установка с помощью kubectl apply:
git clone https://github.com/yandex-cloud/yc-solution-library-for-security.git
cd /yc-solution-library-for-security/kubernetes-security/osquery-kubequery/osquery-install-daemonset/
выполните команду
kubectl apply -f ./ns.yaml
kubectl apply -f ./
TBD: создание helm chart
Отправка результатов в SIEM выполняется по схеме Using a node logging agent
<img src="https://oracle-patches.com/images/2020/03/05/estc-logo-vvedenie_large.jpg"
alt="Kubernetes logo" title="Kubernetes" height="50" width="90" />
Развернуть для просмотра..........⬇️
Для отправки в ELK используется filebeat. Filebeat имеет встроенный модуль osquery. Устанавливается с помощью helm-chart.
Прериквизиты:
Установка компонентов в k8s
cd /yc-solution-library-for-security/kubernetes-security/osquery-kubequery/filebeat-helm/
mkdir ~/.elasticsearch && \
wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O ~/.elasticsearch/root.crt && \
chmod 0600 ~/.elasticsearch/root.crt
cp ~/.elasticsearch/root.crt ./elastic-certificate.pem
kubectl create secret generic elastic-certificate-pem --from-file=./elastic-certificate.pem
kubectl create secret generic security-master-credentials --from-literal=username=admin --from-literal=password=P@ssword
helm install filebeat elastic/filebeat -f values.yaml
- проверить наличие записей в базе ELK в индексе filebeat-osquery (создать index pattern)
- в elastic появится index "filebeat-osquery"
- **TBD: создание отделього dashboard в ELK для osquery (установленные пакеты, шел команды, открытые порты, версии ос и нод и т.д.)**
</details>
##### Отправка результатов в Splunk
<a href="https://kubernetes.io/">
<img src="https://cdn.f1ne.ws/userfiles/brown/142781.jpg"
alt="Kubernetes logo" title="Kubernetes" height="50" width="90" />
</a></br>
<details>
<summary>Развернуть для просмотра..........⬇️</summary>
![image](https://user-images.githubusercontent.com/85429798/143606623-1d3630aa-53e8-44dd-a619-a7b19d9dc925.png)
Для отправки в Splunk используется [fluentd splunk hec plugin](https://github.com/splunk/fluent-plugin-splunk-hec). Устанавливается с помощью [helm-chart](https://github.com/splunk/splunk-connect-for-kubernetes/tree/develop/helm-chart/splunk-connect-for-kubernetes/charts/splunk-kubernetes-logging
).
**Прериквизиты**:
- развернутый Splunk
- настроенный [HTTP Event Collector](https://docs.splunk.com/Documentation/SplunkCloud/8.2.2105/Data/UsetheHTTPEventCollector#Configure_HTTP_Event_Collector_on_Splunk_Enterprise)
- HEC Токен для отправки событий
**Установка компонентов в k8s**
- перейдите в папку
cd /yc-solution-library-for-security/kubernetes-security/osquery-kubequery/fluentsplunk-helm/
- подготовить существующий в папке файл ./values.yaml (отредактикровать) либо [скачать исходный](https://github.com/splunk/splunk-connect-for-kubernetes/blob/develop/helm-chart/splunk-connect-for-kubernetes/charts/splunk-kubernetes-logging/values.yaml)
задать имя splunk хоста splunk: hec:
host: 51.250.7.127 (укажите ваше значение)
- установить helm chart с указанием файла ./values.yaml , вашего HEC Token и настройками SSL
helm install my-splunk-logging -f values.yaml --set splunk.hec.insecureSSL=true --set splunk.hec.token= --set splunk-kubernetes-logging.fullnameOverride=splunk-logging https://github.com/splunk/splunk-connect-for-kubernetes/releases/download/1.4.5/splunk-kubernetes-logging-1.4.5.tgz
</details>
##
### Kubequery
<a href="https://kubernetes.io/">
<img src="https://repository-images.githubusercontent.com/330738883/21226100-5c12-11eb-9223-9a51942d504e"
alt="Kubernetes logo" title="Kubernetes" height="50" width="90" />
</a></br>
#### Установка kubequery в k8s
**Особенности установки в k8s**:
Kubequery устанавливается в k8s в виде [Deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) с помощью [helm chart](https://github.com/Uptycs/kubequery#helm).
Результаты kubequery записываются в папку пода: "/opt/uptycs/logs/osqueryd.results.log*".
Для отправки результатов работы kubequery в SIEM необходимо изменить конфигурацию helm chart путем добавления дополнительного sidecar container с агентом SIEM. Схема [Sidecar container with a logging agent](https://kubernetes.io/docs/concepts/cluster-administration/logging/#sidecar-container-with-a-logging-agent)
##### Установка kubequery с filebeat sidecar для отправки в ELK
<details>
<summary>Развернуть для просмотра..........⬇️</summary>
![image](https://user-images.githubusercontent.com/85429798/143607391-b0c5c2ee-4556-429b-a3e4-bb17e2dcdda5.png)
- перейдите в папку
cd /yc-solution-library-for-security/kubernetes-security/osquery-kubequery/kubequery/kubequery-with-elastic-filebeat/
- создайте namespace
kubectl create ns kubequery
- скачайте сертификат Managed Elastic сервиса (общий для всех)
mkdir ~/.elasticsearch && \ wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O ~/.elasticsearch/root.crt && \ chmod 0600 ~/.elasticsearch/root.crt cp ~/.elasticsearch/root.crt ./elastic-certificate.pem
- создать секрет с сертификатом ELK в кластере k8s
kubectl create secret generic elastic-certificate-pem --from-file=./elastic-certificate.pem -n kubequery
- создать секрет с credentials ELK в кластере k8s (заменить на свои)
kubectl create secret generic security-master-credentials --from-literal=username=admin --from-literal=password=P@ssword -n kubequery
- указать в файле ./configmap-filebeat.yaml значение output.elasticsearch: hosts: "c-c9qfrs7u8i6g59dkb0vj.rw.mdb.yandexcloud.net:9200" (ваше значение)
- скачать файлы helm-chart командой
git clone https://github.com/Uptycs/kubequery.git
- копируем заготовленные файлы в папку чарта
cp ./*.yaml ./kubequery/charts/kubequery/templates/
- удаляем файл создания ns из папки чарта
rm ./kubequery/charts/kubequery/templates/namespace.yaml
- в файле ./kubequery/charts/kubequery/values.yaml указать значение имени кластера cluster: mycluster
- установить helm chart из локальной рабочей папки
helm install my-kubequery ./kubequery/charts/kubequery/
- в elastic появится index "filebeat-kubequery"
- ** TBD: создание helm chart для удобства и contribute его в kubequery **
</details>
##### Установка kubequery с fluentd sidecar для отправки в Splunk
<details>
<summary>Развернуть для просмотра..........⬇️</summary>
![image](https://user-images.githubusercontent.com/85429798/143606787-4ef0c6e9-7595-4293-958d-7e06d10abbe5.png)
- перейдите в папку
cd /yc-solution-library-for-security/kubernetes-security/osquery-kubequery/kubequery/kubequery-with-splunk/
- создайте namespace
kubectl create ns kubequery
- создаем секрет для хранения HEC токена
kubectl create secret generic splunk-hec-secret --from-literal=splunk_hec_token= -n kubequery
- указать в файле ./configmap-fluentd.yaml значение hec_host "51.250.7.127" (ваш адрес) и host "my-cluster" (имя кластера)
- скачать helm-chart командой
git clone https://github.com/Uptycs/kubequery.git
- копируем заготовленные файлы в папку чарта
cp ./*.yaml ./kubequery/charts/kubequery/templates/
- удаляем файл создания ns из папки чарта
rm ./kubequery/charts/kubequery/templates/namespace.yaml
- установить helm chart из локальной рабочей папки
helm install my-kubequery ./kubequery/charts/kubequery/ ```