Como monitorar a integridade do arquivo no Linux usando osquery

Como monitorar a integridade do arquivo no Linux usando osquery

O conceito básico envolvido com o uso do aplicativo Osquery é a "abstração tabular" de muitos aspectos do sistema operacional, como processos, usuários, etc. Os dados são armazenados em tabelas que podem ser consultadas usando SQL sintaxe, diretamente através do Osqueryi concha, ou através do Osqueryd Daemon.

Neste tutorial, veremos como instalar o aplicativo, como executar consultas básicas e como usar FIM (Monitoramento de integridade do arquivo) como parte do seu trabalho de administração do sistema Linux.

Neste tutorial, você aprenderá:

  • Como instalar osquery
  • Como listar as tabelas disponíveis
  • Como realizar consultas do Osqueryi Shell
  • Como usar o daemon Osqueryd para monitorar a integridade do arquivo
Como monitorar a integridade do arquivo no Linux usando osquery

Requisitos de software e convenções usadas

  • Conhecimento básico dos conceitos SQL
  • Permissões de raiz para executar tarefas administrativas
Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição
Programas Osquery
Outro
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Instalação

Temos basicamente duas opções para instalar Osquery: o primeiro consiste em baixar o pacote apropriado para o nosso sistema no site oficial; O segundo, geralmente preferido, é adicionar o repositório de Osquery às nossas fontes de software de distribuição. Aqui vamos explorar brevemente as duas opções.





Instalando via pacote

No site oficial de Osquery é possível baixar assinado Deb e RPM Pacotes, ou mais tarballs genéricos. Como primeira coisa, selecionamos a versão que queremos instalar, depois baixamos um pacote.

O conselho é selecionar a versão mais recente disponível (4.1.2 no momento da redação). Depois que o pacote for baixado, podemos instalá -lo usando nosso gerenciador de pacotes de distribuição. Por exemplo, para instalar o software em um sistema Fedora (assumindo que o pacote esteja localizado em nosso diretório de trabalho atual), nós executaríamos:

$ sudo dnf install ./Osquery-4.1.2-1.Linux.x86_64.RPM

Usando um repositório

Como alternativa, podemos adicionar o RPM ou Deb repositório para nossa distribuição. Se estivermos usando uma distribuição baseada em RPM, podemos executar os seguintes comandos para realizar a tarefa:

$ curl -l https: // pkg.Osquery.io/rpm/gpg | sudo tee/etc/pki/rpm-gpg/rpm-gpg-key-osquery $ sudo yum-config-manager --add-repo https: // pkg.Osquery.io/rpm/osquery-s3-rpm.repo $ sudo yum-config-manager --enable Osquery-s3-rpm-repo $ sudo yum install Osquery

Com os comandos Linux acima, adicionamos a tecla Pulic GPG usada para assinar os pacotes em nosso sistema, depois adicionamos o repositório. Finalmente, instalamos o pacote Osquery. Notar que yum, Nas versões recentes de Fedora e CentOS/Rhel é apenas um vínculo simbólico para DNF, Então, quando invocamos o primeiro, o último é usado em vez disso.

Se estivermos executando uma distribuição baseada no Debian, em vez disso, podemos adicionar o repositório Deb às nossas fontes de software executando:



$ sudo apt-key Adv-KeyServer KeyServer.Ubuntu.COM--RECV-KEYS 1484120AC4E9F8A1A577AEEEE97A80C63C9D8B80B $ SUDO add-prot-repository 'Deb [arch = amd64] https: // pkg.Osquery.IO/Deb Deb Main '$ sudo apt-get update $ sudo apt-get install Osquery

Depois que o pacote é instalado, podemos dar uma olhada no software básico de uso básico.

Uso básico

Osquery nos permite monitorar vários aspectos de um sistema operacional adotando uma "abstração tabular", usando uma sintaxe SQL semelhante à usada em sqlite bancos de dados. As consultas são executadas em tabelas que abstrata vários aspectos do sistema operacional, como processos e serviços.

Podemos executar as consultas diretamente usando o Osqueryi concha interativa, ou podemos agendá -los através do Osqueryd Daemon. Aqui está um exemplo de uma consulta para listar todas as tabelas disponíveis (a lista completa com a descrição das tabelas também pode ser encontrada
on-line):

$ osqueryi Osquery> .Tables => acpi_tables => apt_sources => arp_cache => atom_packages => Augreas => Authorized_keys => block_devices => carbon_black_info => CRONTAB => CURLLOME_EXTENSIONS => cpu_time => cpuid => Crontab => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => Curl => CurL => > device_file => device_hash => device_partitions => disk_encryption => dns_resolvers => docker_container_labels => docker_container_mounts => docker_container_networks => docker_container_ports => docker_container_processes => docker_container_stats => docker_containers => docker_image_labels => docker_images => docker_info => docker_network_labels => docker_networks >> Docker_Version => Docker_volume_labels => Docker_volumes => EC2_Instance_Metadata => EC2_Instance_Tags => elf_dynic => elf_info => elf_sensções => etctents_cts = ect => elf_info => elf_sensio grupos =>hardware_events => hash => intel_me_info => interface_addresses => interface_details => interface_ipv6 => iptables => kernel_info => kernel_integrity => kernel_modules => conhecido_hosts => => escutações => escuta => LOADLENTS => LOUNS => LABLE_PORTH_PORTH => > md_devices => md_drives => md_personalities => memory_array_mapped_addresses => memory_arrays => memory_device_mapped_addresses => memory_devices => memory_error_info => memory_info => memory_map => mounts => msr => npm_packages => oem_strings => opera_extensions => os_version => osquery_events > osquery_extensions => osquery_flags => osquery_info => osquery_packs => osquery_registry => osquery_schedule => pci_devices => platafort_info => portage_keywords => portage_packages => porta_uses => Process_EnSeM) process_open_files =>process_open_sockets => processes => prometheus_metrics => python_packages => routes => rpm_package_files => rpm_packages => selinux_events => shadow => shared_memory => shell_history => smart_drive_info => smbios_tables => socket_events => ssh_configs => sudoers => suid_bin = > syslog_events => system_controls => system_info => time => ulimit_info => uptime => usb_devices => user_events => user_groups => user_ssh_keys => usuários => yara => yara_events => yum_sources


Executando o Osqueryi Comando, inserimos o shell interativo; a partir disso, podemos emitir nossas consultas e instruções. Aqui está outro exemplo de consulta, desta vez para listar todos os processos em execução PID e nome. A consulta é realizada no processo Tabela (a saída da consulta foi truncada por conveniência):

Osquery> selecione PID, nome dos processos; +-------+----------------------------------+| pid | nome | +-------+----------------------------------+| 1 | Systemd | | 10 | rcu_sched | | 10333 | KWORKER/U16: 5-EVENTS_UNBOUND | | 10336 | KWORKER/2: 0-EVENTS | | 11 | Migração/0 | | 11002 | KWORKER/U16: 1-KCRYPTD/253: 0 | | 11165 | KWORKER/1: 1-EVENTS | | 11200 | KWORKER/1: 3-EVENTS | | 11227 | Bash | | 11368 | Osqueryi | | 11381 | KWORKER/0: 0-EVENTS | | 11395 | Conteúdo da Web | | 11437 | KWORKER/0: 2-EVENTS | | 11461 | KWORKER/3: 2-EVENTS_POWER_EFFAITICY | | 11508 | KWorker/2: 2 | | 11509 | KWORKER/0: 1-EVENTS | | 11510 | KWORKER/U16: 2-KCRYPTD/253: 0 | | 11530 | Bash | […] | +-------+------------------------------------+ 
cópia de

É até possível realizar consultas em tabelas unidas usando o JUNTAR declaração, assim como costumávamos fazer em bancos de dados relacionais. No exemplo abaixo, realizamos uma consulta no processos mesa, juntada ao Usuários um através do uid coluna:

Osquery> Selecione Processos.PID, processos.nome, usuários.Nome de usuário dos processos Junte -se aos usuários em processos.uid = usuários.uid; +-------+-------------------------------+--------- ---------+ | pid | nome | nome de usuário | +-------+-------------------------------+--------- ---------+ | 1 | Systemd | raiz | | 10 | rcu_sched | raiz | | 11 | Migração/0 | raiz | | 11227 | Bash | egdoc | | 11368 | Osqueryi | egdoc | | 13 | CPUHP/0 | raiz | | 14 | CPUHP/1 | raiz | | 143 | Kintegrityd | raiz | | 144 | Kblockd | raiz | | 145 | blkcg_punt_bio | raiz | | 146 | tpm_dev_wq | raiz | | 147 | ata_sff | raiz | […] | 9130 | Conteúdo da Web | egdoc | | 9298 | Conteúdo da Web | egdoc | | 9463 | GVFSD-Metadata | egdoc | | 9497 | GVFSD-Network | egdoc | | 9518 | GVFSD-DNSSD | egdoc | +-------+-------------------------------+------------------+ 
cópia de

Monitoramento de Integridade de Arquivos (FIM)

Até agora usamos Osquery através do shell interativo: Osqueryi. Usar FIM (Monitoramento da integridade do arquivo), queremos usar o Osqueryd Daemon em vez disso. Através do arquivo de configuração, fornecemos uma lista dos arquivos que queremos monitorar. Eventos como alterações de atributo envolvendo os arquivos e diretórios especificados são registrados no file_events mesa. O daemon executa uma consulta nesta tabela após um intervalo de tempo especificado e notifica nos logs quando novos registros são encontrados. Vamos ver um exemplo de configuração.

Configuração de configuração

O principal arquivo de configuração para osquery é /etc/Osquery/Osquery.conf. O arquivo não existe por padrão, então devemos criá -lo. A configuração é fornecida em JSON formatar. Suponha que queremos monitorar todos os arquivos e diretórios em /etc; Aqui está como configuraríamos o aplicativo:

"Opções": "desabille_events": "false", "cronograma": "file_events": "query": "selecione * de file_events;", "interval": 300, "file_paths":  "etc etc/%%" ], ,  
cópia de

Vamos analisar a configuração acima. Primeiro de tudo, no opções Seção, definimos desabille_events para "falso", Para ativar eventos de arquivo.

Depois disso, criamos o agendar Seção: Dentro desta seção, podemos descrever e criar várias consultas agendadas nomeadas. No nosso caso, criamos uma consulta que seleciona todas as colunas do file_events Tabela, que deve ser executada a cada 300 segundos (5 minutos).

Depois de agendar a consulta, criamos o file_paths Seção, onde especificamos os arquivos a serem monitorados. Nesta seção, cada tecla representa o nome de um conjunto de arquivos a serem monitorados (uma categoria no jargão osquery). Nesse caso, a chave "etc" faz referência a uma lista com apenas uma entrada, /etc/%%.

O que % Símbolo significa? Ao especificar caminhos de arquivo, podemos usar padrão (*) ou SQL (%) curingas. Se um único curinga for fornecido, ele seleciona todos os arquivos e diretórios existentes no nível especificado. Se um curinga duplo for fornecido, ele seleciona todos os arquivos e pastas recursivamente. Por exemplo, o /etc/% A expressão corresponde a todos os arquivos e pastas um nível em /etc, enquanto /etc/%% corresponde a todos os arquivos e pastas sob /etc recursivamente.

Se precisarmos, também podemos excluir arquivos específicos do caminho que fornecemos, usando o exclude_paths Seção no arquivo de configuração. Na seção, só podemos fazer referência a categorias definidas no file_paths seção, ("etc" neste caso). Fornecemos a lista de arquivos a serem excluídos:

 "exclude_paths": "etc": ["/etc/Aliases"]
cópia de

Apenas como exemplo, excluímos o /etc/aliases arquivo da lista. Aqui está como nossa configuração final se parece:

"Opções": "desabille_events": "false", "cronograma": "file_events": "query": "selecione * de file_events;", "interval": 20, "file_paths":  "etc": ["/etc/%%"], "exclude_paths": "etc": ["/etc/aliases"]
cópia de

Começando o daemon

Com nossa configuração no lugar, podemos iniciar o Osqueryd Daemon:

$ sudo systemctl start Osqueryd

Para fazer o daemon começar automaticamente na inicialização, devemos executar:

$ sudo systemctl atability Osqueyd

Depois que o daemon estiver em execução, podemos verificar nossas obras de configuração. Apenas como exemplo, modificaremos as permissões do /etc/fstab arquivo, alterando -os de 644 para 600:

$ sudo chmod 600 /etc /fstab

Agora podemos verificar se a alteração no arquivo foi registrada lendo o /var/log/Osquery/Osqueryd.resultados.registro arquivo. Aqui está a última linha do arquivo (embelezada):



"name": "file_events", "hostIdentifier": "fingolfin", "calendartime": "Seg 30 de dezembro 19:57:31 2019 UTC", "unixtime": 1577735851, "epoch": 0, "contador": 0, "LognumericsAsNumbers": False, "Colunas": "Action": "Attributes_modified", "ATIME": "1577735683", "categoria": "etc", "ctime": "1577735841", "Gid": "" 0 "," hashed ":" 0 "," inode ":" 262147 "," md5 ":" "," mode ":" 0600 "," mtime ":" 1577371335 "," sha1 ":" "," SHA256 ":" "," Tamanho ":" 742 "," Target_Path ":" etc/fstab "," time ":" 1577735841 "," transaction_id ":" 0 "," uid ":" 0 ", "Ação": "Adicionado"
cópia de

No log acima, podemos ver claramente que um Atributes_modified ação (linha 10) ocorreu no caminho de Destino "/Etc/fstab" (linha 23), que faz parte do "etc" categoria (Linha 12). É importante perceber que, se consultarmos o file_events Tabela do Osqueryi concha, não veremos linhas, já que o Osqueryd Daemon, e Osqueryi Não se comunique.

Conclusões

Neste tutorial, vimos os conceitos básicos envolvidos no uso do Osquery Aplicativo, que abstrai vários conceitos de sistema operacional usando dados tabulares que podemos consultar usando a sintaxe SQL. Vimos como instalar o aplicativo, como executar consultas básicas usando o Osqueryi shell, e finalmente como configurar o monitoramento de arquivos usando o Osqueryd Daemon. Acabamos de arranhar a superfície do que o aplicativo pode fazer; Como sempre, o conselho é dar uma olhada na documentação do projeto para um conhecimento mais profundo.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Melhor ferramenta de monitoramento do sistema para Linux
  • Ubuntu 20.04 Monitoramento do sistema com widgets conky
  • Ubuntu 22.04 Monitoramento do sistema com widgets conky
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Otimização de desempenho do Linux: ferramentas e técnicas
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Coisas para instalar no Ubuntu 22.04
  • Como grep corretamente para texto em scripts de bash
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes