Búsqueda de amenazas: monitoreo de registros basado en ELK

Experimento de uso de software de francotirador (a través del estudio de este experimento, puede comprender el principio de monitoreo del software de seguridad del host, aprender a usar el software de seguridad del host para monitorear procesos sospechosos y aprender a usar el software de francotirador para administrar el registro y los archivos de este máquina.)

Visión general

0x, descripción general!

ELK StackEn el pasado Elastic Stack, Elk Stackera Elasticun portafolio de software gratuito y de código abierto diseñado específicamente para la administración de registros centralizada. Permite buscar, analizar y visualizar logs de diferentes fuentes.

Si ubuntuinstala y configura en lo anterior ELK Stack, necesita los siguientes requisitos previos:

  • Ubuntu 20.04
  • Es mejor usar permisos de root para la configuración
Directorio de contenido 0x1
  • Componentes de ELK Stack

  • Instalación Javay todas las dependencias

  • Instalacion y configuracion Elasticsearch

  • Instalacion y configuracion Logstash

  • Instalacion y configuracion Kibana

  • Instalacion y configuracion Nginx

  • Instalacion y configuracion Filebeat

  • Configurar el Linuxregistro paraElasticsearch

  • Al Kibana中crear un panel de registro

  • Seguimiento de SSHeventos
Composición de 0x2 ELK Stack

1 Elasticsearch.: Es Elasticsearchun Apache Lucene(TM)motor de búsqueda de código abierto basado en él , RESTful APIque puede almacenar y recuperar datos.

2 Logstash.: LogstashEs un motor de recopilación de datos de código abierto que puede recopilar datos de diferentes fuentes de datos y enviarlos aElasticsearch

3 ,: una plataforma de visualización de Kibanavisualización y análisis de registrosWeb

4 Filebeat.: Reenvío y recopilación de registros ligeros, que pueden reenviar datos LogstashaoElasticsearch

composición

0x3 Instalar Java y todas las dependencias

ElasticsearchEs un Javaprograma escrito, por lo que debe instalarse JDK. Puede utilizar el siguiente comando para instalar OpenJDKy algunos otros paquetes de software necesarios.

sudo apt install -y openjdk-14-jdk wget apt-transport-https curl

Paquete de instalación

Luego importe Elasticsearchla clave pública, agregue la aptfuente de software

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Importar clave pública

Agregar fuente de software

Agregar fuente de software

Instalación y configuración 0x4Elasticsearch

Actualizar la fuente del software

sudo apt update

Instalar ruan'jian'yuan

Luego instale (la instalación doméstica es lenta, tenga paciencia)

sudo apt-get install elasticsearch

instalación

Después de la instalación, inicie la configuraciónElasticsearch

ElasticsearhEl 9200puerto de escucha predeterminado . Por motivos de seguridad, debe configurar restricciones en el acceso a la red externa. Haga que la red externa no pueda REST APIacceder a datos y elasticclústeres. ElasticsearchEl archivo de configuración es elasticsearch.yml. Solo modifícalo.

Abra el archivo de configuración

sudo gedit  /etc/elasticsearch/elasticsearch.yml

Encuentre la interfaz de escucha y el puerto para modificar

Encuentre la interfaz de escucha y el puerto para modificar

Elimine el símbolo de comentario anterior y #cámbielo a lo siguiente:

Eliminar el símbolo de comentario anterior

Guarde y luego inicie el Elasticsearchservicio

sudo systemctl start elasticsearch

Salvar,

Ver el estado del servicio y verificar si se ha iniciado

sudo systemctl status elasticsearch

Ver el estado del servicio y verificar si se ha iniciado

curl -X GET localhost:9200

Verifica que ha comenzado

Ver esto indica que el Elasticsearchinicio fue exitoso.

También puede acceder y https://localhost:9200ver en el navegador

Visitar en el navegador

0x5 instalar y configurar Logstash

Primero asegúrese de que haya en el sistema openssly luego instaleLogstash

openssl version -a
sudo apt install logstash -y

Instalar y configurar Logstash

Instalar y configurar Logstash

Creación de un SSLcertificado para garantizar Rsyslogy Filebeattransmitir datos a la Logstashseguridad cuando.

Al Logstashcrear un directorio de perfil en sslel directorio y luego generar un certificado

sudo mkdir -p /etc/logstash/ssl
cd /etc/logstash
sudo openssl req -subj '/CN=elkmaster/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt

Crea un directorio ssl

Crea un directorio ssl

Generar certificado

Para facilitar la configuración posterior, podemos modificar el /etc/hostsarchivo. El anfitrión ipconfigura un nombre de anfitrión

Modifique el archivo / etc / hosts

Entonces tenemos que configurar tres archivos, es decir, por los filebeatdatos recibidos filebeat-input.conf, el registro del sistema para filtrar el archivo de configuración del filtro syslog-filter.conf, y para dar salida a los datos de elasticsearchla output-elasticsearch.conf.

logstashCrea un filebeat-input.confarchivo en el directorio de configuración

cd /etc/logstash/
sudo gedit conf.d/filebeat-input.conf

Cree un archivo filebeat-input.conf en el directorio de configuración de logstash

Agrega el siguiente contenido:

input {
  beats {
    port => 5443
    type => syslog
    ssl => true
    ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"
    ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"
  }
}

Agrega el siguiente contenido

Luego cree un archivo de configuración de filtro syslog-filter.confy adopte el grokfiltro, cuya función es Logstashextraer datos de acuerdo con las reglas dadas.

sudo gedit conf.d/syslog-filter.conf

Introduzca la siguiente:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

Luego, cree un output-elasticsearch.confarchivo de configuración para transferir datos elasticsearch.

sudo gedit conf.d/output-elasticsearch.conf

El contenido es el siguiente:

output {
  elasticsearch { hosts => ["localhost:9200"]
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

Una vez que el archivo de configuración esté listo, inicie el logstashservicio para ver si es normal.

sudo systemctl start logstash
sudo systemctl status logstash

No hay error

No se informó ningún error, lo que indica que el servicio se inició normalmente.

0x6 instalar y configurar Kibana

La instalación Kibanatambién está aptcompleta

sudo apt install kibana

Una vez completada la instalación, configuramos kibanael archivo de configuración

sudo gedit /etc/kibana/kibana.yml

Principalmente para modificar el puerto de escucha y la dirección, y elasticsearchla dirección

Modificar el puerto de escucha y la dirección

Guarde y luego inicie el kibanaservicio

Iniciar el servicio kibana

Entonces puedes acceder a él directamente en el navegador.

Visítalo en el navegador

0x7 instalar y configurar Nginx

Esta instalación es principalmente para Kibanahacer proxy inverso.

Primero instale NginxyApache2-utlis

sudo apt install nginx apache2-utils -y

Una vez completada la instalación, cree un kibanaarchivo de configuración de host virtual

sudo gedit /etc/nginx/sites-available/kibana

El contenido es el siguiente:

server {
    listen 80;
    server_name localhost;
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;
    location / {
        proxy_pass https://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Cree una conexión al archivo de configuración

sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/

Luego Kibana Dashboardconfigure una autenticación básica para el acceso

sudo htpasswd -c /etc/nginx/.kibana-user elastic

Configurar una autenticación básica

Luego pruebe el Nginxarchivo de configuración e inicie el servicio

sudo nginx -t
sudo systemctl restart nginx

Configurar el archivo e iniciar el servicio

0x8 instalar y configurar Filebeat

Descargar filebeate instalar

Enlace de descarga: < https://www.elastic.co/cn/downloads/beats/filebeat> ;

Descarga filebeat e instálalo

Puedes descargar según tus necesidades

Estamos aquí para instalarlo Ubuntu, así que elija la DEBversión para descargar. Por supuesto, también se puede aptinstalar directamente , siempre que haya agregado la Elasticfuente de software antes . Puede ver la guía oficial para agregar una fuente de software: < https://www.elastic.co/guide/en/beats/filebeat/7.10/setup-repositories.html#_apt> ;

sudo apt install filebeat -y

Luego edite la configuración de filebeat

Luego edite filebeatla configuración, la ruta del archivo de configuración:

/etc/filebeat/filebeat.yml

Primero cambie la inputpieza atrue

Cambia la parte de entrada a verdadera

Luego modifica la Elasticsearch outputpieza

Modificar la sección de salida de Elasticsearch

Modifique la configuración de la siguiente manera: (establezca según su situación real)

Modificado a la siguiente configuración

Modifique la Kibanaparte de configuración:

Modificar la sección de configuración de Kibana

Guardar después de la modificación.

Luego inicializafilebeat

sudo filebeat setup

Luego inicializa filebeat

Copie el logstash-forwarder.crtcertificado generado previamente al /etc/filebeatdirectorio

sudo cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/

Entonces inicia el filebeatservicio

sudo systemctl start filebeat
0x9 Configurar el registro de Linux en Elasticsearch

Configurado rsyslogen Logstash, y luego estos registros se transferirán automáticamente aElasticsearch

En el registro de configuración Logstashanterior, primero debemos configurar Logstashel Elasticsearchregistro entre reenvíos.

/etc/logstash/conf.dCree un archivo de configuración en el directorio para configurar el Elasticsearchreenvío de registros entre.

cd /etc/logstash/conf.d/
sudo gedit logstash.conf

El contenido del archivo de configuración es el siguiente:

input {
  udp {
    host => "127.0.0.1"
    port => 10514
    codec => "json"
    type => "rsyslog"
  }
}

# The Filter pipeline stays empty here, no formatting is done.
filter { } 

# Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here.                              
output {
  if [type] == "rsyslog" {
    elasticsearch {
      hosts => [ "localhost:9200" ]
    }
  }
  }

El archivo de configuración se compone principalmente de tres partes, inputparte: definir de dónde viene el registro, filterparte: filtro de registro, outputparte: la dirección a la que se transmite el registro.

Luego reiniciamos el logstashservicio

sudo systemctl restart logstash

A continuación, configure rsyslogel Logstashreenvío de registros desde para registrar, rsyslogpuede utilizar la plantilla para convertir el registro y luego reenviar.

Para poder rsyslogreenviar el registro, debe /etc/rsylog.dcrear un directorio de 70-output.confperfiles.

cd /etc/rsyslog.d/
sudo gedit 70-output.conf

Agrega el siguiente contenido:

*.*                         @127.0.0.1:10514;json-template

Significa que todos los registros se envían 127.0.0.1:10514y se jsonconvierten utilizando la plantilla formateada

Necesitamos crear un jsonarchivo de plantilla en un formato

sudo gedit 01-json-template.conf

El contenido es el siguiente:

template(name="json-template"
  type="list") {
    constant(value="{")
      constant(value="\"@timestamp\":\"")     property(name="timereported" dateFormat="rfc3339")
      constant(value="\",\"@version\":\"1")
      constant(value="\",\"message\":\"")     property(name="msg" format="json")
      constant(value="\",\"sysloghost\":\"")  property(name="hostname")
      constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")
      constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")
      constant(value="\",\"programname\":\"") property(name="programname")
      constant(value="\",\"procid\":\"")      property(name="procid")
    constant(value="\"}\n")
}

Entonces inicia el rsyslogservicio

sudo systemctl start rsyslog

Compruebe logstashsi el puerto de escucha es normal:

ss -na | grep 10514

Compruebe si el puerto de escucha de logstash es normal

Si la supervisión no se realiza correctamente y ve el siguiente mensaje de error en el registro:

Mensaje de error

Se debe a que hay un error de sintaxis en ELKel archivo de configuración . El software tiene requisitos estrictos sobre la sintaxis del archivo de configuración. Por favor, compruébelo cuidadosamente.

0x10 Crea un panel de registro en Kibana

Abra la Kibanainterfaz en el navegador.

Primero necesitas crear un patrón de índice

Luego busque Stack Management--- KibanaenIndex Patterns

Crea un patrón de índice

luego haga clic enCreate index pattern

Haga clic en Crear patrón de índice

Entrar logstash-*y hacer clicNext step

Ingrese logstash- *

Luego elegimos el filtro de tiempo@timestamp

Filtro de tiempo

luego haga clic enCreate index pattern

Haga clic en Crear patrón de índice

Se ve así después de una adición exitosa:

Después de agregar con éxito

Haga clic de nuevo en Kibanael Discovermedio, aquí puede buscar sus datos

Consulta busca tus datos

Consulta busca tus datos

0x11 Supervisar eventos SSH

En la condición de filtro, establecemos la condición de filtro comoprogramename:sshd*

Establecer criterios de filtro

Para que pueda ver los sshdeventos relacionados con el programa.

0x12 Más referencias

Configure SSL, TLS y HTTPS para garantizar la seguridad de Elasticsearch, Kibana, Beats y Logstash | Elastic Blog < https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure -elasticsearch -kibana-beats-and-logstash> ;

Cómo usar Elastic Stack para monitorear el servidor web Nginx | ​​Elastic Blog < https://www.elastic.co/cn/blog/how-to-monitor-nginx-web-servers-with-the-elastic-stack> ;

Supongo que te gusta

Origin blog.51cto.com/14601372/2607230
Recomendado
Clasificación