
Elastic Stack is een bekend hulpmiddel op de markt van SIEM-systemen (eigenlijk niet alleen dat). Het kan veel verschillende soorten gegevens verzamelen, zowel gevoelige als niet-gevoelige. Het is niet helemaal correct als de toegang tot de elementen van Elastic Stack niet wordt beveiligd. Standaard werken alle standaardcomponenten van Elastic (Elasticsearch, Logstash, Kibana en Beats-collectors) via open protocollen. Bovendien is de authenticatie in Kibana uitgeschakeld. Al deze interacties kunnen worden beveiligd en in dit artikel leggen we uit hoe je dit kunt doen. Voor de overzichtelijkheid hebben we het verhaal opgedeeld in 3 betekenisvolle blokken:
- Toegangsrolmodel voor gegevens
- Gegevensbeveiliging binnen de Elasticsearch-cluster
- Gegevensbeveiliging buiten de Elasticsearch-cluster
Meer details hieronder.
Toegangsrolmodel voor gegevens
Als je Elasticsearch installeert zonder enige tweaking, is de toegang tot alle indexen open voor iedereen die dat wil. Of voor degenen die curl kunnen gebruiken. Om dit te voorkomen, is er in Elasticsearch een rolmodel dat beschikbaar is vanaf het Basic-abonnement (dat gratis is). Het ziet er globaal als volgt uit:

Wat er op de afbeelding staat
- Gebruikers zijn iedereen die kan inloggen met gebruik van inloggegevens.
- Rol is een set van rechten.
- Rechten zijn een set van privileges.
- Privileges zijn toestemmingen voor schrijf-, lees-, verwijder- enz. ()
- Hulpmiddelen zijn indexen, documenten, velden, gebruikers en andere entiteiten van de opslag (rolmodel voor sommige hulpmiddelen is alleen beschikbaar in betaalde abonnementen).
In Elasticsearch zijn er standaard , waaraan zijn gekoppeld. Na het inschakelen van de beveiligingsinstellingen kunnen deze onmiddellijk worden gebruikt.
Om beveiliging in de instellingen van Elasticsearch te activeren, moet je een nieuwe regel toevoegen in het configuratiebestand (standaard is dat elasticsearch/config/elasticsearch.yml) nieuw:
xpack.security.enabled: trueNa het wijzigen van het configuratiebestand starten we Elasticsearch opnieuw op zodat de wijzigingen van kracht worden. De volgende stap is het toekennen van wachtwoorden aan de standaardgebruikers. Laten we dit interactief doen met behulp van de onderstaande opdracht:
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Initiëren van de setup van wachtwoorden voor gereserveerde gebruikers elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
Je wordt gevraagd om wachtwoorden in te voeren naarmate het proces vordert.
Bevestig alstublieft dat je wilt doorgaan [y\/N]y
Voer wachtwoord in voor [elastic]:
Herhaal wachtwoord voor [elastic]:
Voer wachtwoord in voor [apm_system]:
Herhaal wachtwoord voor [apm_system]:
Voer wachtwoord in voor [kibana]:
Herhaal wachtwoord voor [kibana]:
Voer wachtwoord in voor [logstash_system]:
Herhaal wachtwoord voor [logstash_system]:
Voer wachtwoord in voor [beats_system]:
Herhaal wachtwoord voor [beats_system]:
Voer wachtwoord in voor [remote_monitoring_user]:
Herhaal wachtwoord voor [remote_monitoring_user]:
Wachtwoord veranderd voor gebruiker [apm_system]
Wachtwoord veranderd voor gebruiker [kibana]
Wachtwoord veranderd voor gebruiker [logstash_system]
Wachtwoord veranderd voor gebruiker [beats_system]
Wachtwoord veranderd voor gebruiker [remote_monitoring_user]
Wachtwoord veranderd voor gebruiker [elastic]
We controleren:
[elastic@node1 ~]$ curl -u elastic 'node1:9200\/_cat\/_nodes?pretty'
Voer hostwachtwoord in voor gebruiker 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
Je kunt jezelf op de schouder kloppen — de instellingen aan de kant van Elasticsearch zijn uitgevoerd. Nu is het tijd om Kibana in te stellen. Als je het nu start, komen er fouten, dus het is belangrijk om een sleutelopslag te creëren. Dit doe je met twee commando's (gebruiker kibana en wachtwoord, ingevoerd bij het maken van wachtwoorden in Elasticsearch):
[elastic@node1 ~]$ .\/kibana\/bin\/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ .\/kibana\/bin\/kibana-keystore add elasticsearch.passwordAls alles correct is — zal Kibana om inloggegevens vragen. In het Basic-abonnement is een rolmodel op basis van interne gebruikers beschikbaar. Vanaf Gold kunnen externe authenticatiesystemen worden aangesloten — LDAP, PKI, Active Directory en Single sign-on systemen.

Toegang tot objecten binnen Elasticsearch kan ook worden beperkt. Maar om hetzelfde te doen voor documenten of velden is een betaald abonnement vereist (dit luxe begint vanaf het Platinum-niveau). Deze instellingen zijn beschikbaar in de Kibana-interface of via . Je kunt het controleren via het al bekende Dev Tools-menu:
Rol aanmaken
PUT \/_security\/_role\/ruslan_i_ludmila_role
{
"cluster": [],
"indices": [
{
"names": [ "ruslan_i_ludmila" ],
"privileges": ["read", "view_index_metadata"]
}
]
}Gebruiker aanmaken
POST \/_security\/_user\/pushkin
{
"password" : "nataliaonelove",
"roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
"full_name" : "Alexander Pushkin",
"email" : "pushkin@lyceum.edu",
"metadata" : {
"hometown" : "Sint-Petersburg"
}
}Gegevensbeveiliging binnen de Elasticsearch-cluster
Wanneer Elasticsearch in een cluster draait (wat gebruikelijk is), worden de beveiligingsinstellingen binnen het cluster belangrijk. Voor veilige interactie tussen knooppunten gebruikt Elasticsearch het TLS-protocol. Om veilige interactie tussen hen in te stellen, is een certificaat nodig. We genereren een certificaat en privésleutel in PEM-formaat:
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-certutil ca --pemNa het uitvoeren van de bovenstaande opdracht, verschijnt er een map /../elasticsearch met een archief elastic-stack-ca.zip. Binnenin bevinden zich een certificaat en een privésleutel met extensies crt en key respectievelijk. Het is aan te raden deze op een gedeelde resource te plaatsen, die toegankelijk moet zijn vanuit alle knooppunten van het cluster.
Voor elk knooppunt zijn nu eigen certificaten en privésleutels nodig op basis van die in de gedeelde map. Bij het uitvoeren van de opdracht wordt gevraagd een wachtwoord op te geven. Extra opties zoals —ip en —dns kunnen worden toegevoegd voor volledige verificatie van de interactie tussen knooppunten.
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.keyNa het uitvoeren van de opdracht krijgen we een certificaat en een privésleutel in PKCS#12-formaat, beveiligd met een wachtwoord. Het enige wat nog rest is het verplaatsen van het gegenereerde bestand p12 naar de configuratiemap:
[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/configWe voegen het wachtwoord voor het certificaat toe in p12 de keystore en truststore op elk knooppunt:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_passwordIn het al bekende elasticsearch.yml blijft het enige dat we moeten doen, de regels met de gegevens van het certificaat toe te voegen:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12We starten alle Elasticsearch-knooppunten en voeren curluit. Als alles correct is uitgevoerd, ontvangt u een antwoord met verschillende knooppunten:
[elastic@node1 ~]$ curl node1:9200/_cat/nodes -u elastic:password
172.18.0.3 43 75 4 0.00 0.05 0.05 dim * node2
172.18.0.4 21 75 3 0.00 0.05 0.05 dim - node3
172.18.0.2 39 75 4 0.00 0.05 0.05 dim - node1Er is nog een extra beveiligingsoptie - IP-adresfiltering (beschikbaar in abonnementen vanaf het Gold-niveau). Hiermee kunt u witte lijsten maken van IP-adressen die toegang hebben tot de knooppunten.
Gegevensbeveiliging buiten de Elasticsearch-cluster
Buiten het cluster betekent het aansluiten van externe tools: Kibana, Logstash, Beats of andere externe clients.

Om https-ondersteuning in te schakelen (in plaats van http), voegen we nieuwe regels toe aan elasticsearch.yml:
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12Aangezien het certificaat is beveiligd met een wachtwoord, voegen we dit toe aan de keystore en truststore op elk knooppunt:
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_passwordNa het toevoegen van de sleutels zijn de Elasticsearch-nodes klaar om via https te verbinden. Ze kunnen nu worden gestart.
De volgende stap is het aanmaken van een sleutel voor de verbinding met Kibana en deze toe te voegen aan de configuratie. Op basis van het certificaat dat al in de gedeelde directory is geplaatst, zullen we een certificaat in PEM-formaat genereren (PKCS#12, Kibana, Logstash en Beats ondersteunen dit momenteel niet):
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-certutil cert --ca-cert \/shared_folder\/ca\/ca.crt --ca-key \/shared_folder\/ca\/ca.key --pemWe moeten nu de aangemaakte sleutels uitpakken in de configuratiemap van Kibana:
[elastic@node1 ~]$ unzip elasticsearch\/certificate-bundle.zip -d kibana\/configSleutels zijn aanwezig, dus de configuratie van Kibana moet worden aangepast zodat deze ze gaat gebruiken. In het configuratiebestand kibana.yml veranderen we http naar https en voegen we de rijen met SSL-configuratie-instellingen toe. De laatste drie rijen configureren de veilige interactie tussen de browser van de gebruiker en Kibana.
elasticsearch.hosts: ["https:\/${HOSTNAME}:9200"]
elasticsearch.ssl.certificateAuthorities: \/shared_folder\/ca\/ca.crt
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: \/..\/kibana\/config\/instance\/instance.key
server.ssl.certificate: \/..\/kibana\/config\/instance\/instance.crtZo zijn de instellingen voltooid en is de toegang tot de gegevens in de Elasticsearch-cluster versleuteld.
Als u vragen heeft over de mogelijkheden van Elastic Stack in gratis of betaalde abonnementen, vragen over monitoring of de creatie van een SIEM-systeem, laat dan een aanvraag achter in op onze website.
Hier zijn nog meer artikelen van ons over Elastic Stack op Habr:
Bron: habr.com
