Falcão
Falco é uma ferramenta de segurança de tempo de execução nativa da nuvem para sistemas operacionais Linux. Ele foi projetado para detectar e alertar sobre comportamentos anormais e possíveis ameaças à segurança em tempo real.
Basicamente, o Falco é um agente de monitoramento e detecção de kernel que observa eventos, como syscalls, com base em regras personalizadas. A Falco pode aprimorar esses eventos integrando metadados do tempo de execução do contêiner e do Kubernetes. Os eventos coletados podem ser analisados fora do host em sistemas SIEM ou data lake.
Falco, originalmente criado pela Sysdig, é um projeto graduado da Cloud Native Computing Foundation (CNCF) usado na produção por várias organizações.
Para obter informações técnicas detalhadas e insights sobre as ameaças cibernéticas que a Falco pode detectar, visite o site oficial da Falco.
Para obter informações abrangentes sobre as atualizações e alterações mais recentes no projeto, consulte o Registro de alterações. Além disso, documentamos o processo de lançamento para entrega de novas versões do Falco.
Falco Repo: Alimentando o Núcleo do Projeto Falco
Este é o repositório principal do Falco que contém o código-fonte para construir o binário Falco. Ao utilizar suas bibliotecas e o arquivo de configuração falco.yaml, este repositório forma a base da funcionalidade do Falco. O repositório Falco está intimamente interligado com os seguintes repositórios principais :
- falcosecurity/libs: As bibliotecas do Falco são fundamentais para suas operações fundamentais, constituindo a maior parte do código-fonte do binário Falco e fornecendo recursos essenciais, como drivers de kernel.
- falcosecurity/rules: Contém o conjunto de regras oficial do Falco, fornecendo regras de detecção predefinidas para várias ameaças à segurança e comportamentos anormais.
- falcosecurity/plugins: Os plug-ins do Falco facilitam a integração com serviços externos, expandem os recursos do Falco além de syscalls e eventos de contêiner e são projetados para evoluir com funcionalidades especializadas em versões futuras.
- falcosecurity/falcoctl: Utilitário de linha de comando para gerenciar e interagir com o Falco.
Para mais informações, visite o hub oficial do Projeto Falco: falcosecurity/evolution. Ele fornece insights e informações valiosas sobre os repositórios do projeto.
Primeiros passos com Falco
Revise cuidadosamente e siga a documentação oficial.
Considerações e orientações para adotantes do Falco:
Entenda as dependências: Avalie o ambiente onde você executará o Falco e considere as versões e arquiteturas do kernel.
Defina objetivos de detecção de ameaças: identifique claramente as ameaças que deseja detectar e avalie os pontos fortes e as limitações do Falco.
Considere o desempenho e o custo: Avalie a sobrecarga de desempenho computacional e alinhe-se com administradores de sistema ou SREs. Faça um orçamento de acordo.
Escolha a abordagem de construção e personalização: decida entre a construção Falco de código aberto ou a criação de um pipeline de construção personalizado. Personalize o processo de criação e implantação conforme necessário, incluindo a incorporação de testes ou abordagens exclusivas, para garantir uma implantação resiliente com ciclos de implantação rápidos.
Integre com destinos de saída: integre o Falco com SIEM, sistemas de data lake ou outros destinos de saída preferidos para estabelecer uma base robusta para análise de dados abrangente e permitir fluxos de trabalho eficazes de resposta a incidentes.
Ambiente de demonstração
Um ambiente de demonstração é fornecido por meio de um arquivo docker-compose que pode ser iniciado em um host docker que inclui falco, falcosidekick, falcosidekick-ui e seu banco de dados redis necessário. Para obter mais informações, consulte a seção docker-compose
Como contribuir
Consulte o Guia de Contribuição e o Código de Conduta para obter mais informações sobre como contribuir.
Junte-se à comunidade
Para se envolver com o Projeto Falco, visite o repositório da comunidade para encontrar mais informações e formas de se envolver.
Se você tiver alguma dúvida sobre o Falco ou sobre como contribuir, não hesite em registrar um problema ou entrar em contato com os mantenedores do Falco e membros da comunidade para obter assistência.
Como entrar em contato?
- Junte-se ao canal #falco no Kubernetes Slack.
- Junte-se à lista de discussão da Falco.
- Registre um problema ou faça solicitações de recursos.
Compromisso com a própria segurança da Falco
Relatórios completos de várias auditorias de segurança podem ser encontrados aqui.
Além disso, você pode consultar as seções de segurança falco e libs para obter atualizações detalhadas sobre recomendações e políticas de segurança.
Para relatar vulnerabilidades de segurança, siga o processo da comunidade descrito na documentação encontrada aqui.
O que vem por aí para Falco?
Mantenha-se atualizado com as capacidades em evolução do Falco explorando o Falco Roadmap, que fornece insights sobre os recursos atualmente em desenvolvimento e planejados para lançamentos futuros.
Licença
Falco está licenciado para você sob a licença de código aberto Apache 2.0.
Teste
Expanda as instruções de teste
O Build Falco from source do Falco é o recurso ideal para entender como construir o Falco a partir do código-fonte. Além disso, o repositório falcosecurity/libs oferece informações adicionais valiosas sobre testes e depuração das bibliotecas subjacentes e drivers de kernel do Falco.
Aqui está um exemplo de comando cmake
que permitirá tudo que você precisa para todos os testes de unidade deste repositório:
cmake
-DUSE_BUNDLED_DEPS=ON
-DBUILD_LIBSCAP_GVISOR=ON
-DBUILD_BPF=ON
-DBUILD_DRIVER=ON
-DBUILD_FALCO_MODERN_BPF=ON
-DCREATE_TEST_TARGETS=ON
-DBUILD_FALCO_UNIT_TESTS=ON .. ;
Crie e execute o conjunto de testes de unidade:
nproc= $( grep processor /proc/cpuinfo | tail -n 1 | awk ' {print $3} ' ) ;
make -j $(( $nproc - 1 )) falco_unit_tests ;
# Run the tests
sudo ./unit_tests/falco_unit_tests ;
Opcionalmente, construa o driver de sua escolha e teste o binário Falco para realizar testes manuais.
Por último, o Projeto Falco mudou seus testes de regressão Falco para falcosegurança/testes.
Por que Falco está em C++ em vez de Go ou {linguagem}?
Expandir informações
- As primeiras linhas de código na base do Falco foram escritas há algum tempo, onde o Go ainda não tinha o mesmo nível de maturidade e adoção de hoje.
- O modelo de execução do Falco é sequencial e mono-thread devido aos requisitos de estado da ferramenta e, portanto, a maioria dos argumentos de venda relacionados à simultaneidade do tempo de execução Go não seriam aproveitados de forma alguma.
- O código Falco lida com programação de nível muito baixo em muitos lugares (por exemplo, alguns cabeçalhos são compartilhados com o probe eBPF e o módulo Kernel), e todos nós sabemos que a interface do Go com C é possível, mas traz toneladas de complexidade e compensações para a mesa. .
- Como uma ferramenta de segurança destinada a consumir um alto rendimento de eventos por segundo, o Falco precisa reduzir o desempenho em todos os caminhos ativos em tempo de execução e requer controle profundo na alocação de memória, que o tempo de execução Go não pode fornecer (também há coleta de lixo envolvida) .
- Embora Go não atendesse aos requisitos de engenharia do núcleo do Falco, ainda pensamos que ele poderia ser um bom candidato para escrever extensões do Falco através do sistema de plugins. Esta é a principal razão pela qual demos atenção especial e alta prioridade ao desenvolvimento do plugin-sdk-go.
- Go não é um requisito para ter binários vinculados estaticamente. Na verdade, fornecemos compilações Falco totalmente estáticas há alguns anos. O único problema com eles é que o sistema de plugins não pode ser suportado com o modelo de biblioteca dinâmica atual que temos atualmente.
- O sistema de plug-ins foi concebido para suportar vários idiomas, portanto, manter uma base de código compatível com C é a melhor estratégia para garantir a máxima compatibilidade entre idiomas.
- Em geral, os plug-ins têm requisitos/dependências GLIBC porque possuem ligações C de baixo nível necessárias para carregamento dinâmico. Uma solução potencial para o futuro poderia ser também oferecer suporte ao plug-in para ser vinculado estaticamente no momento da compilação e, assim, lançado como empacotado no binário Falco. Embora nenhum trabalho tenha sido iniciado ainda nessa direção, isso resolveria a maioria dos problemas relatados e também forneceria um binário totalmente estático. Claro, isso não seria mais compatível com carregamento dinâmico, mas pode ser uma solução viável para nosso tipo de construção estática do Falco.
- A segurança da memória é definitivamente uma preocupação e tentamos o nosso melhor para manter um alto nível de qualidade, mesmo que C++ seja bastante sujeito a erros. Por exemplo, tentamos usar ponteiros inteligentes sempre que possível, construímos as bibliotecas com um sanitizador de endereço em nosso CI, executamos o Falco através do Valgrind antes de cada lançamento e temos maneiras de testá-lo para detectar regressões de desempenho ou uso estranho de memória ( por exemplo, https://github.com/falcosecurity/event-generator). Além disso, também temos terceiros auditando a base de código de tempos em tempos. É claro que nada disso representa um ponto de vista de segurança perfeito, mas tentamos maximizar nossas chances. Go definitivamente tornaria nossa vida mais fácil sob essa perspectiva, porém as compensações nunca fizeram valer a pena até agora devido aos pontos acima.
- A base de código C++ de falcosecurity/libs, que está no núcleo do Falco, é bastante grande e complexa. Portar todo esse código para outra linguagem seria um grande esforço, exigindo muitos recursos de desenvolvimento e com grandes chances de falha e regressão. Como tal, nossa abordagem até agora tem sido escolher refatoradores e polimento de código, até atingirmos um nível ideal de estabilidade, qualidade e modularidade nessa parte do código. Isto permitiria que novos desenvolvimentos fossem mais suaves e viáveis no futuro.
Recursos
- Governança
- Código de Conduta
- Diretrizes para mantenedores
- Lista de mantenedores
- Diretrizes de Repositórios
- Lista de repositórios
- Lista de adotantes
- Instalar e operar
- Solução de problemas