E foi lançado o CBL-Mariner 2.0.20230924 com pacotes AArch64 recompilados. Confira as novidades e veja como criar sua própria compilação dela.
CBL-Mariner não é uma distribuição de propósito geral como qualquer outra que teríamos em mente (como Ubuntu ou Fedora), embora seja de código aberto e já esteja sendo usado por sistemas como o Windows Subsystem for Linux (WSL), Azure Sphere OS, SONiC e outros esforços baseados em Linux.
CBL-Mariner é uma distribuição caracterizada por fornecer um pequeno conjunto padrão de pacotes principais que servem como base universal para a criação de contêineres, ambientes de hospedagem e serviços executados em infraestruturas de nuvem e dispositivos de borda.
Soluções mais complexas e especializadas podem ser criadas adicionando pacotes adicionais ao CBL-Mariner, mas a base para todos esses sistemas permanece a mesma, facilitando a manutenção e a preparação para atualizações.
Por exemplo, o CBL-Mariner é usado como base para a minidistribuição WSLg, que fornece componentes de pilha de gráficos para iniciar aplicativos Linux GUI em ambientes baseados no subsistema WSL2 (Windows Subsystem for Linux).
A funcionalidade estendida no WSLg é feita incluindo pacotes adicionais com Weston Composite Server, XWayland, PulseAudio e FreeRDP.
O sistema de compilação CBL-Mariner permite gerar pacotes RPM autônomos baseados em arquivos fonte e SPEC, bem como imagens de sistema monolíticas geradas com o kit de ferramentas rpm-ostree e atualizadas atomicamente sem dividir em pacotes separados.
Consequentemente, dois modelos de entrega de atualização são suportados: atualizando pacotes individuais e reconstruindo e atualizando toda a imagem do sistema.
Um repositório está disponível com cerca de 3000 RPMs já construídos que você pode usar para construir suas próprias imagens com base no arquivo de configuração.
A distribuição inclui apenas os componentes mais necessários e é otimizada para consumo mínimo de memória e espaço em disco, bem como altas velocidades de download. A distribuição também se destaca por incluir vários mecanismos de segurança adicionais.
O projeto usa uma abordagem de “segurança máxima por padrão”. Fornece a capacidade de filtrar chamadas de sistema usando o mecanismo seccomp, criptografar partições de disco e verificar pacotes usando assinaturas digitais.
Os modos de randomização de espaço de endereçamento suportados no kernel Linux são ativados, assim como os mecanismos de proteção contra ataques relacionados a links simbólicos, mmap, /dev/mem e /dev/kmem.
Para áreas de memória que contêm segmentos com dados do kernel e do módulo, o modo é definido como somente leitura e a execução de código é proibida.
A capacidade de desabilitar o carregamento de módulos do kernel após a inicialização do sistema está disponível opcionalmente. O kit de ferramentas iptables é usado para filtrar pacotes de rede. Por padrão, a etapa de compilação habilita os modos de proteção contra estouros de pilha, estouros de buffer e problemas de formatação de string (_FORTIFY_SOURCE, -fstack-protector, -Wformat-security, relro).
O gerenciador de sistema systemd é usado para gerenciar serviços e inicialização. Os gerenciadores de pacotes RPM e DNF são fornecidos para gerenciamento de pacotes.
Agora, a Microsoft lançou o CBL-Mariner 2.0.20230924 como a mais nova atualização mensal para sua distribuição Linux interna usada para propósitos do Azure ao WSL.
Novidades do CBL-Mariner 2.0.20230924
Sim. A Microsoft lançou o CBL-Mariner 2.0.20230924 esta semana como a versão mais recente de sua distribuição Linux interna.
A força motriz por trás deste lançamento é lançar pacotes AArch64 reconstruídos após a recente vulnerabilidade de segurança do GCC que afetou o software construído em Arm 64 bits.
CVE-2023-4039 foi tornado público em meados de setembro por meio do recurso -fstack-protector
do GCC, abrindo uma vulnerabilidade ao atingir o AArch64.
A CVE-2023-4039 permite que um invasor explore um buffer overflow existente em variáveis locais de tamanho dinâmico para serem exploradas sem ser detectado.
“Uma falha no recurso -fstack-protector em cadeias de ferramentas baseadas em GCC direcionadas ao AArch64 permite que um invasor explore um buffer overflow existente em variáveis locais de tamanho dinâmico em seu aplicativo sem que isso seja detectado. Essa falha do protetor de pilha se aplica apenas ao C99 -style variáveis locais de tamanho dinâmico ou aquelas criadas usando alloca(). O protetor de pilha opera conforme pretendido para variáveis locais de tamanho estaticamente. O comportamento padrão quando o protetor de pilha detecta um estouro é encerrar seu aplicativo, resultando em perda controlada de disponibilidade. Um invasor que pode explorar um buffer overflow sem acionar o protetor de pilha pode ser capaz de alterar o controle de fluxo do programa para causar uma perda descontrolada de disponibilidade ou ir além e afetar a confidencialidade ou integridade.”
Aqueles que não tinham ouvido falar dessa vulnerabilidade do GCC AArch64 quando ela foi lançada, há algumas semanas, podem aprender mais em NIST.gov.
A atualização CBL-Mariner 2.0.20230924 desta semana veio depois que a Microsoft descobriu que vários, mas nem todos, seus pacotes AArch64 com código nativo foram afetados.
A Microsoft também está incentivando seus clientes a recompilar seu software AArch64 com GCC 11.2.0-6 ou mais recente. Devido ao CBL-Mariner não permitir o versionamento por arquitetura, os pacotes x86_64 também foram reconstruídos, mas não afetados.
A CBL-Mariner 2.0.20230924 também tem uma série de outras atualizações de pacotes devido a outros CVEs, incluindo 27 para Wireshark, alguns problemas com seu kernel Linux 5.15 LTS e também correções para CMake, libssh2, Node.js, xterm e outros. pacotes.
Por fim, se você tiver interesse em saber mais sobre o assunto, consulte os detalhes no seguinte endereço.
Como criar sua própria compilação CBL-Mariner?
Para aqueles que estão interessados em aprender mais sobre o CBL-Mariner, eles devem saber que podem construir sua própria imagem a partir do Ubuntu ou de qualquer distribuição Linux, somente neste caso seguiremos as instruções para gerar a imagem no Ubuntu.
Para fazer isso primeiro, devemos estabelecer alguns pré-requisitos que precisaremos para construir a imagem ISO:
sudo apt install make tar wget curl rpm qemu-utils golang-go genisoimage python2-minimal bison gawk
Agora procedemos para obter o código da CBL-Mariner:
git clone https://github.com/microsoft/CBL-Mariner.git
E agora teremos que entrar no diretório CBL-Mariner/toolkit e criar a imagem ISO de instalação.
cd CBL-Mariner/toolkit
sudo make iso REBUILD_TOOLS=y REBUILD_PACKAGES=n CONFIG_FILE=./imageconfigs/full.json
Quando terminar, podemos encontrar o arquivo ISO no diretório ../out/images/full/. Com a imagem do sistema criada, podemos testar o sistema em uma máquina virtual, seja com VirtualBox, VMWare, Boxes ou qualquer outro de sua preferência.
A única coisa que você precisa configurar na máquina virtual é que ela tenha pelo menos 2 GB de RAM, um núcleo e 16 GB de armazenamento.
Por fim, caso tenha interesse em saber mais sobre o assunto, consulte os detalhes no seguinte endereço.