Como monitorar a integridade do arquivo no Linux usando osquery
- 2989
- 749
- Randal Kuhlman
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
Requisitos de software e convenções usadas
- Conhecimento básico dos conceitos SQL
- Permissões de raiz para executar tarefas administrativas
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