Índice
Título
Índice
Título
Título
Título

Software composition analysis (SCA)

No cenário acelerado de desenvolvimento de software de hoje, velocidade e eficiência são primordiais. As equipes de desenvolvimento estão sob constante pressão para entregar novas funcionalidades e aplicações, e encontraram um poderoso aliado no software de código aberto (OSS). Em vez de reinventar a roda escrevendo cada linha de código do zero, os desenvolvedores agora se baseiam no trabalho de incontáveis outros. Essa abordagem colaborativa criou um ecossistema próspero de componentes públicos, disponíveis gratuitamente—desde pequenas bibliotecas até estruturas inteiras—que formam a base dos aplicativos modernos.

No entanto, essa dependência do código externo introduz um novo e frequentemente negligenciado desafio: gerenciar os riscos de segurança, legais e de qualidade associados ao que você não escreveu. A grande maioria do código-base de uma aplicação moderna—frequentemente 80% a 90%—não é escrita sob encomenda, mas sim composta de pacotes de código aberto (como compartilhamos uma vez em nosso blog, o código proprietário acaba servindo mais como um montador e invocador de funções). É aqui que a análise de composição de software (software composition analysis, SCA) desempenha um papel crítico e indispensável. A SCA atua como um guardião vital, fornecendo a visibilidade e o controle necessários para navegar nas complexidades das dependências de terceiros, garantindo que o código que você empresta não comprometa a integridade do aplicativo que você está construindo.

O que é a análise de composição de software (SCA)?

A SCA é uma metodologia de teste de segurança de software que identifica, inventaria e avalia automaticamente os componentes de código aberto e de terceiros dentro de uma base de código. Esses componentes podem ser desde bibliotecas e módulos até frameworks e imagens de contêineres. As ferramentas SCA escaneiam meticulosamente os arquivos de uma aplicação para gerar uma lista abrangente de todos esses recursos externos, um documento crucial conhecido como lista de materiais de software (software bill of materials, SBOM).

Ao contrário de outros métodos de segurança que se concentram no código personalizado, a SCA examina minuciosamente as partes "emprestadas" de uma aplicação. Ela fornece insights profundos sobre a postura de segurança desses pacotes por meio de referências cruzadas com várias bases de dados. Esse processo ajuda as organizações a gerenciar proativamente os riscos, destacando vulnerabilidades de segurança conhecidas, versões desatualizadas de componentes e questões legais relacionadas a licenças de código aberto. Ao integrar a SCA em seus fluxos de trabalho, as equipes de desenvolvimento e segurança ganham controle sobre sua cadeia de suprimento de software, que muitas vezes é um grande ponto cego.

Como a SCA funciona?

O núcleo da SCA é um processo sistemático e em múltiplas etapas que traz transparência às dependências de um aplicativo. As ferramentas SCA realizam análises meticulosas para descobrir cada componente, não importa quão profundamente ele esteja aninhado.

1. Identificação de componentes e dependências

O primeiro passo para uma ferramenta SCA é criar um inventário completo de cada componente de terceiros usado em um aplicativo. Isso inclui tanto dependências diretas (componentes adicionados explicitamente pelos desenvolvedores, como uma biblioteca de registro) quanto dependências transitivas, que são os componentes dos quais as dependências diretas dependem. Como ilustrado no quadrinho xkcd #2347, que compartilhamos em nosso blog algum tempo atrás, essa é uma etapa crucial, já que um projeto pode depender inconscientemente de um pequeno, obscuro e mal suportado pacote encontrado várias camadas abaixo em sua árvore de dependências.

As ferramentas SCA conseguem isso escaneando uma variedade de artefatos e arquivos, incluindo:

  • Arquivos de manifesto de projeto: As ferramentas analisam arquivos de manifesto (arquivos que contêm metadados para um conjunto de arquivos) como package.json (para JavaScript), pom.xml (para Java) ou requirements.txt (para Python), que listam as dependências declaradas de um projeto.

  • Código-fonte e arquivos binários: A SCA também pode examinar o código-fonte ou arquivos binários compilados para identificar componentes que podem não estar listados em um manifesto, proporcionando uma imagem mais precisa do que está realmente em uso.

  • Imagens de contêineres: Ao escanear imagens de contêiner, as ferramentas SCA podem identificar cada pacote dentro do ambiente de execução, incluindo aqueles herdados de uma imagem base. Isso ajuda a eliminar riscos ocultos no ambiente de implantação.

2. Criação da SBOM

Uma vez que a ferramenta SCA tenha identificado todos os componentes, ela os compila em uma SBOM. Como discutimos em um artigo dedicado a este tema, uma SBOM é essencialmente uma "lista de ingredientes" completa de um produto de software. Ele fornece um inventário detalhado e estruturado de todos os componentes, suas versões e seus relacionamentos.

Uma SBOM bem gerada inclui informações essenciais sobre cada componente, como por exemplo:

  • Nome e versão do componente: A identidade específica da biblioteca ou do pacote.

  • Origem e fonte: De onde o componente veio (p. ex., um gerenciador de pacotes ou um repositório específico).

  • Informações de licença: A licença sob a qual o componente é distribuído (as licenças para código aberto podem variar em seus requisitos para direitos como cópia, modificação e redistribuição).

  • Hashes e somas de verificação: Dados criptográficos para verificar a integridade e autenticidade do componente.

  • Vulnerabilidades conhecidas: Uma lista de quaisquer falhas de segurança associadas a essa versão específica.

Uma ferramenta SCA pode gerar SBOMs em formatos padronizados como CycloneDX ou SPDX, que asseguram que os dados sejam facilmente compreensíveis e compartilháveis com partes interessadas internas e externas, incluindo equipes legais e de segurança.

3. Análise de vulnerabilidades, licenças e qualidade

Com a SBOM como base, as ferramentas SCA desempenham sua função primária: avaliação. Elas cruzam os componentes e suas versões com uma variedade de bases de dados para identificar riscos.

  • Bases de dados de vulnerabilidades: A ferramenta verifica a SBOM contra bases de dados públicas de vulnerabilidades, como o National Vulnerability Database (NVD) e a base de dados de Common Vulnerabilities and Exposures (CVE). Ela também aproveita bases de dados proprietárias mantidas por fornecedores comerciais, que muitas vezes contêm dados de vulnerabilidade mais oportunos ou de nicho que ainda não foram divulgados publicamente. Quando uma correspondência é encontrada, a ferramenta pode fornecer detalhes críticos, como a pontuação CVSS (uma classificação numérica de severidade), versões afetadas e medidas recomendadas de remediação.

  • Bases de dados de conformidade de licenças: As ferramentas SCA analisam as licenças associadas a cada pacote e as comparam às políticas legais da organização. (Os tipos mais comuns de licenças em código aberto são aqueles categorizados como permissivos. Eles tendem a ter menos restrições sobre o uso de componentes. Muitas vezes, eles não exigem compensação monetária ou intelectual e, portanto, representam um baixo risco. Por outro lado, os mais arriscados, especialmente para uso comercial, são as chamadas licenças recíprocas ou "copyleft". Estas exigem alguma compensação pelo uso do código.) Isso ajuda a prevenir conflitos com licenças copyleft (que podem exigir que todo o aplicativo seja de código aberto) ou outras licenças restritivas que podem levar a disputas legais e sanções financeiras.

  • Qualidade do componente: A SCA também pode avaliar a qualidade geral e o status de manutenção dos componentes. Ela pode sinalizar bibliotecas desatualizadas, pacotes com baixa atividade de manutenção ou aqueles que foram descontinuados. Isso ajuda os desenvolvedores a escolher componentes que são ativamente suportados e menos propensos a introduzir riscos no futuro.

4. Relatórios e remediação

Por fim, a ferramenta SCA gera relatórios com insights acionáveis, incluindo uma lista priorizada de vulnerabilidades com base na severidade, explorabilidade, alcançabilidade e impacto potencial no ambiente do aplicativo. Os relatórios devem indicar o componente exato, a versão e a natureza do problema. Uma solução SCA moderna também fornece conselhos concretos de remediação, como atualizar para uma versão específica corrigida ou substituir um componente por uma alternativa mais segura.

Por que a SCA é importante?

A necessidade de SCA surge diretamente da realidade do desenvolvimento de software moderno, que depende fortemente de uma cadeia de suprimento de software cada vez mais complexa e interconectada. Como destaca nossa publicação sobre o tema, essa cadeia de suprimentos é todo o ecossistema de componentes, ferramentas, processos e pessoas que contribuem para um produto de software.

Proteção contra ataques à cadeia de suprimento

Hoje em dia, os atacantes mudaram seu foco e não tendem mais a se concentrar em organizações individuais, mas sim em comprometer componentes amplamente utilizados. Ao injetar código malicioso ou explorar uma vulnerabilidade em uma biblioteca de código aberto, eles podem comprometer milhares de aplicações que dependem dela, como visto no famoso incidente Log4Shell. Essa única falha em uma popular biblioteca de registro expôs milhões de aplicativos à execução de código remoto. Outro exemplo recente é o ataque à cadeia de suprimento npm, onde um esquema de phishing resultou no comprometimento de versões de 18 pacotes JavaScript populares, com bilhões de downloads semanais na comunidade de desenvolvedores.

A SCA é talvez a principal medida preventiva contra esses ataques. Ao fornecer um inventário claro e continuamente atualizado de todos os componentes de terceiros, ela dá às organizações a visibilidade necessária para rapidamente determinar se estão usando pacotes recém-comprometidos. Isso permite respostas rápidas e remediação antes que os atacantes possam aproveitar as vulnerabilidades.

Gerenciamento de riscos e conformidade

O grande volume de código aberto e o número de vulnerabilidades conhecidas tornam o rastreamento manual impossível. A SCA automatiza essa tarefa avassaladora e oferece uma solução escalável para:

  • Gerenciamento de vulnerabilidades: Ela identifica sistematicamente e ajuda a priorizar as vulnerabilidades com base em sua severidade e risco real, economizando as equipes de segurança de perseguir cada alerta e permitindo que se concentrem nas ameaças mais críticas.

  • Conformidade regulatória: O ecossistema de código aberto é regido por uma multitude de licenças, cada uma com seu próprio conjunto de regras. Algumas licenças, como copyleft, podem ter um impacto legal significativo sobre o código proprietário de uma empresa. A SCA ajuda as equipes legais e de conformidade a garantir que todas as licenças estejam em conformidade com as políticas organizacionais, prevenindo disputas legais onerosas.

O problema da infraestrutura pouco suportada

Muitos projetos de código aberto são mantidos por um punhado de pessoas com pouca ou nenhuma remuneração. Essa condição pode levar a falhas de segurança e vulnerabilidades devido à falta de recursos, tempo ou experiência. Como discutido em nossas postagens no blog sobre infraestrutura digital pouco suportada e a "piada de Nebraska," muitos projetos que são críticos para nossa infraestrutura digital podem estar em um estado precário. Quando um escaneamento da SCA revela que um componente crítico não é mais mantido ou possui vulnerabilidades conhecidas, as organizações podem tomar uma decisão informada para ou encontrar uma alternativa mais segura ou contribuir para a manutenção do projeto.

Ajuda à produtividade dos desenvolvedores

A SCA é uma ferramenta que impulsiona os desenvolvedores, não os impede. Ao fornecer feedback em tempo real dentro de seu ambiente de desenvolvimento integrado ou plataforma de gerenciamento, a SCA permite que os desenvolvedores escolham bibliotecas seguras e resolvam problemas enquanto escrevem código. A abordagem de "shift left" previne que vulnerabilidades sejam transferidas para fases posteriores, onde são muito mais caras e demoradas para remediar. Ela assegura que a segurança seja uma parte integrada do processo de desenvolvimento, não uma ideia de última hora.

Que tipos de problemas a SCA detecta?

A SCA é uma ferramenta multifacetada que aborda uma ampla gama de riscos inerentes ao uso de software de terceiros.

  • Vulnerabilidades de segurança conhecidas: Este é o uso mais comum da SCA. Ela detecta falhas de segurança conhecidas (CVEs) em versões específicas de pacotes de código aberto. Por exemplo, ela alertaria se seu aplicativo usa uma versão antiga de uma popular biblioteca de JavaScript com uma vulnerabilidade conhecida de cross-site scripting (XSS).

  • Pacotes maliciosos ou comprometidos: A SCA pode identificar pacotes que foram deliberadamente comprometidos por atacantes como parte de um ataque à cadeia de suprimentos. Ela também pode ajudar a detectar código malicioso que foi inserido em um projeto legítimo.

  • Componentes desatualizados ou não mantidos: Um componente que não é mais suportado por seus criadores pode se tornar um risco de segurança. A SCA sinaliza dependências desatualizadas, ajudando as equipes a atualizar para versões mais novas e seguras.

  • Questões de conformidade de licenças: A SCA verifica a licença de cada componente, garantindo que ela esteja alinhada com as políticas legais da empresa. Ela pode ajudar a sinalizar licenças que exigem atribuição, são incompatíveis com o modelo de negócios da organização, ou podem levar a ações legais.

  • Qualidade e proveniência dos componentes: Além da segurança, a SCA pode fornecer insights sobre a qualidade de um componente, como seu histórico de versões, frequência de contribuições e autoria, ajudando as equipes a tomar decisões informadas sobre quais pacotes usar.

Quais são as diferenças entre SCA e SAST?

É crucial entender que SCA e os testes de segurança de aplicações estáticos (SAST) são metodologias de segurança complementares, não competitivas. Embora ambas analisem código em um estado não executável, elas se concentram em diferentes aspectos do código-base.

Característica

SCA

SAST

Foco

Componentes de código aberto e de terceiros (dependências).

Código-fonte personalizado e interno.

Tipo de vulnerabilidade

Vulnerabilidades conhecidas em bibliotecas e outros pacotes de código aberto ou de terceiros.

Vulnerabilidades em nível de código, falhas lógicas ou práticas de codificação inseguras.

Metodologia

Identifica componentes e os compara com bases de dados de vulnerabilidades e licenças.

Analisa o código-fonte, o bytecode ou o código binário da aplicação para encontrar padrões de código inseguros.

Saída

Um SBOM com uma lista de componentes vulneráveis, versões e licenças.

Um relatório com as linhas exatas de código em que vulnerabilidades ou falhas foram encontradas.

Falsos positivos

Tende a ter menos falsos positivos porque se baseia em vulnerabilidades conhecidas e publicadas.

Pode gerar um número maior de falsos positivos devido à falta de contexto em tempo de execução.

Escopo

Gerencia a cadeia de suprimento de software.

Protege a lógica única da aplicação.

O SAST se concentra no código que a equipe de desenvolvimento escreve, enquanto a SCA se concentra no código que eles usam. Quando a SCA é combinada com o SAST, uma organização pode se aproximar de uma postura de segurança holística, protegendo tanto a lógica personalizada quanto os componentes externos que formam a espinha dorsal da aplicação.

O que procurar em uma ferramenta de análise de composição de software

A implementação eficaz da SCA requer uma abordagem estratégica, que começa pela escolha da ferramenta adequada. Uma solução de SCA de alta qualidade deve ter as seguintes características-chave:

  • Cobertura abrangente: Uma boa ferramenta SCA deve ser capaz de escanear todas as partes de sua cadeia de suprimento de software, incluindo arquivos de manifesto, código fonte, arquivos binários e imagens de contêineres. Deve também ter a capacidade de identificar tanto dependências diretas quanto transitivas, não importa quão profundamente elas estejam aninhadas.

  • Um banco de dados preciso e abrangente: A qualidade de uma ferramenta SCA depende fortemente da qualidade de seu banco de dados de vulnerabilidades. Uma ferramenta de primeira linha deve agregar dados de várias fontes públicas, bem como de sua própria pesquisa de vulnerabilidades do fornecedor. Isso garante que novas vulnerabilidades sejam detectadas assim que forem divulgadas.

  • Informações práticas: Uma ferramenta que simplesmente lista milhares de vulnerabilidades pode sobrecarregar uma equipe. As melhores soluções SCA priorizam os problemas com base em sua severidade, explorabilidade, alcançabilidade e impacto potencial no negócio. Elas também devem fornecer orientações claras de remediação, como recomendar versões específicas atualizadas ou oferecer soluções automatizadas.

  • Integração fluida: A ferramenta SCA deve se encaixar naturalmente nos fluxos de trabalho existentes de seus desenvolvedores. Procure soluções que ofereçam plugins de IDE e avaliação contínua de repositórios para obter feedback em tempo real enquanto o código é escrito. Essa abordagem de "shift left" é crucial para uma remediação rápida e eficiente.

  • Geração eficaz de SBOM: A solução SCA deve ser capaz de gerar automaticamente uma SBOM precisa em um formato padrão da indústria (como CycloneDX ou SPDX). Esse recurso é essencial para demonstrar transparência, garantir conformidade e compartilhar informações com parceiros e clientes.

  • Monitoramento contínuo: À medida que novas vulnerabilidades são descobertas diariamente, um escaneamento único é insuficiente. Uma solução robusta de SCA fornece monitoramento contínuo, enviando alertas assim que uma nova vulnerabilidade é encontrada em um componente que você já está usando.

Passos principais para implementar a SCA de forma eficaz

Além de simplesmente escolher uma ferramenta, uma implementação bem-sucedida da SCA requer uma estratégia de integração da segurança em todo o ciclo de vida do desenvolvimento de software (SDLC).

Integração antecipada

O valor máximo da SCA é realizado quando está integrada o mais cedo possível no SDLC. As ferramentas SCA devem ser configuradas para que sejam executadas nos ambientes locais dos desenvolvedores, fornecendo feedback imediato sobre dependências inseguras antes que elas sejam incorporadas ao código-base. Isso ajuda os desenvolvedores a aprender práticas de codificação seguras e impede que componentes vulneráveis cheguem a um repositório central.

Estabelecer políticas claras

Antes de executar o primeiro escaneamento, uma organização precisa estabelecer políticas de segurança claras. Isso inclui definir um nível de severidade aceitável para as vulnerabilidades e uma lista de licenças de código aberto aprovadas e não aprovadas. Essas políticas podem então ser aplicadas pela solução SCA, que pode ser configurada para bloquear automaticamente compilações ou implantações que contenham um componente que viole uma regra pré-definida.

Priorizar e remediar

A SCA pode muitas vezes produzir um grande volume de descobertas. É crucial ter um processo para classificar e priorizar esses problemas. As vulnerabilidades devem ser classificadas com base em sua severidade e relevância para a funcionalidade do aplicativo. Por exemplo, uma vulnerabilidade de alta severidade em uma biblioteca que não é chamada ativamente pelo código da aplicação pode ter uma prioridade menor do que uma falha de severidade média em um componente central.

Avaliação e melhoria contínuas

A SCA não é um processo pontual. As organizações devem avaliar continuamente suas dependências em busca de novas vulnerabilidades, já que estas são descobertas diariamente. A metodologia também deve ser revisada e atualizada periodicamente para levar em conta as novas tecnologias, as linguagens de programação e as ameaças de segurança em constante evolução.

Fluid Attacks: uma abordagem abrangente para SCA e além

Na Fluid Attacks, reconhecemos a importância de adotar uma abordagem integral e proativa para a segurança de software. Nossa SCA é uma parte central de nossa solução Hacking Contínuo, projetada para ajudar as organizações a proteger suas cadeias de suprimento de software desde o início do SDLC.

Oferecemos uma ferramenta SCA que proporciona uma visão holística de suas dependências e os riscos associados a elas. Nosso scanner, que leva apenas alguns minutos para se conectar ao seu repositório Git, pode:

  • Gerar SBOMs precisas: Nossa ferramenta cria automaticamente uma SBOM detalhada que inclui um mapeamento completo de sua árvore de dependências, dando a você um inventário exaustivo de todos os componentes, bibliotecas e serviços de código aberto que você usa. Isso ajuda você a reconhecer e analisar sistematicamente e completamente as dependências de seus projetos de software.

  • Fornecer insights oportunos e valiosos: Oferecemos informações oportunas sobre os problemas de segurança de suas dependências e determinamos cuidadosamente sua alcançabilidade, ou seja, se sua aplicação pode realmente acessar e ativar o código vulnerável. Nossas ferramentas de teste automatizadas entregam relatórios de vulnerabilidade através de nossa plataforma de fácil utilização, assim como por meio de extensões de IDE, tornando-as ainda mais acessíveis para sua equipe de desenvolvimento.

  • Manter-se um passo à frente das ameaças: Nossa equipe de pesquisa de segurança trabalha incansavelmente para manter nosso scanner atualizado, especialmente para novas vulnerabilidades em projetos de código aberto amplamente utilizados. Por exemplo, ajudamos nossos clientes a identificar e remediar a vulnerabilidade Log4Shell e o recente ataque à cadeia de suprimento npm, evitando desastres potenciais.

  • Oferecer uma integração fluida: Nossa ferramenta SCA é projetada para se integrar aos fluxos de trabalho modernos de DevSecOps e é compatível com os principais repositórios Git, incluindo GitLab, GitHub, Azure e Bitbucket. Isso permite o escaneamento contínuo que se adapta ao ritmo de suas equipes de desenvolvimento.

O que realmente diferencia a Fluid Attacks é nossa abordagem integrada e aprimorada por humanos. Nossa ferramenta SCA é complementada por outras metodologias de testes de segurança, incluindo SAST, DAST e pentesting como serviço (PTaaS). Isso garante que não apenas encontramos vulnerabilidades em seus componentes de terceiros, mas também em seu código personalizado e ambiente de execução. Com nossa solução Hacking Contínuo, você pode ter a certeza de que sua cadeia de suprimento de software está protegida de ponta a ponta.

Conclusão

Em uma era em que o software moderno depende fortemente de componentes de código aberto, a análise de composição de software (SCA) não é mais um luxo — é um requisito essencial para uma estratégia robusta de segurança das aplicações. A SCA ilumina os riscos muitas vezes ocultos dentro da cadeia de suprimento de software, desde vulnerabilidades de segurança até não conformidade legal.

Ao fornecer uma visibilidade abrangente das dependências de um aplicativo e automatizar o processo trabalhoso de rastreamento e avaliação delas, a SCA permite que as organizações construam software mais seguro, confiável e em conformidade com as normas. Quando a SCA é integrada com metodologias complementares como SAST, DAST e pentesting e instalada de forma fluida em um pipeline maduro de DevSecOps, ela fornece uma defesa poderosa contra os ciberataques mais comuns e prejudiciais.

À medida que continuamos a confiar no poder colaborativo da comunidade de código aberto, adotar a SCA é uma maneira proativa de gerenciar essa responsabilidade compartilhada. Ela não apenas protege suas aplicações, mas também demonstra um compromisso inabalável com a excelência, a transparência e a segurança em um mundo construído sobre uma base digital compartilhada.

Se você está interessado em detectar vulnerabilidades com nossas ferramentas SAST, DAST e SCA, convidamos você a se inscrever em nosso teste gratuito de 21 dias. Se você tiver alguma dúvida, não hesite em entrar em contato conosco.

Comece agora com a solução SSCS da Fluid Attacks

Comece seu teste gratuito de 21 dias

Descubra os benefícios de nossa solução de Hacking Contínuo, da qual empresas de todos os tamanhos já desfrutam.

Comece seu teste gratuito de 21 dias

Descubra os benefícios de nossa solução de Hacking Contínuo, da qual empresas de todos os tamanhos já desfrutam.

Comece seu teste gratuito de 21 dias

Descubra os benefícios de nossa solução de Hacking Contínuo, da qual empresas de todos os tamanhos já desfrutam.

Comece seu teste gratuito de 21 dias

Descubra os benefícios de nossa solução de Hacking Contínuo, da qual empresas de todos os tamanhos já desfrutam.

As soluções da Fluid Attacks permitem que as organizações identifiquem, priorizem e corrijam vulnerabilidades em seus softwares ao longo do SDLC. Com o apoio de IA, ferramentas automatizadas e pentesters, a Fluid Attacks acelera a mitigação da exposição ao risco das empresas e fortalece sua postura de cibersegurança.

Assine nossa newsletter

Mantenha-se atualizado sobre nossos próximos eventos e os últimos posts do blog, advisories e outros recursos interessantes.

As soluções da Fluid Attacks permitem que as organizações identifiquem, priorizem e corrijam vulnerabilidades em seus softwares ao longo do SDLC. Com o apoio de IA, ferramentas automatizadas e pentesters, a Fluid Attacks acelera a mitigação da exposição ao risco das empresas e fortalece sua postura de cibersegurança.

Assine nossa newsletter

Mantenha-se atualizado sobre nossos próximos eventos e os últimos posts do blog, advisories e outros recursos interessantes.

As soluções da Fluid Attacks permitem que as organizações identifiquem, priorizem e corrijam vulnerabilidades em seus softwares ao longo do SDLC. Com o apoio de IA, ferramentas automatizadas e pentesters, a Fluid Attacks acelera a mitigação da exposição ao risco das empresas e fortalece sua postura de cibersegurança.

Assine nossa newsletter

Mantenha-se atualizado sobre nossos próximos eventos e os últimos posts do blog, advisories e outros recursos interessantes.