O conjunto de documentação deste produto faz o possível para usar uma linguagem imparcial. Para os fins deste conjunto de documentação, a imparcialidade é definida como uma linguagem que não implica em discriminação baseada em idade, deficiência, gênero, identidade racial, identidade étnica, orientação sexual, status socioeconômico e interseccionalidade. Pode haver exceções na documentação devido à linguagem codificada nas interfaces de usuário do software do produto, linguagem usada com base na documentação de RFP ou linguagem usada por um produto de terceiros referenciado. Saiba mais sobre como a Cisco está usando a linguagem inclusiva.
A Cisco traduziu este documento com a ajuda de tecnologias de tradução automática e humana para oferecer conteúdo de suporte aos seus usuários no seu próprio idioma, independentemente da localização. Observe que mesmo a melhor tradução automática não será tão precisa quanto as realizadas por um tradutor profissional. A Cisco Systems, Inc. não se responsabiliza pela precisão destas traduções e recomenda que o documento original em inglês (link fornecido) seja sempre consultado.
Este guia descreve os procedimentos para atualizar um Secure Malware Analytics Appliance no modo air-gap.
Nota:A manutenção dos dispositivos no modo de isolamento de ar pode diminuir sua eficácia. Considere a compensação entre segurança e funcionalidade antes de continuar.
A Cisco recomenda que você tenha conhecimento destes tópicos:
A Cisco recomenda familiaridade com os seguintes tópicos:
As informações neste documento são baseadas em dispositivos em um ambiente de laboratório controlado com configurações padrão. Se sua rede estiver ativa, tenha cuidado e compreenda completamente as possíveis implicações de qualquer comando antes de continuar.
A maioria dos dispositivos Secure Malware Analytics se conecta à Internet e usa o processo de atualização on-line. No entanto, alguns dispositivos são mantidos estritamente dentro de redes internas (com isolamento de ar). A Cisco não recomenda essa abordagem, pois ela reduz a eficácia. Este guia fornece o processo de atualização off-line para aqueles que precisam manter dispositivos com isolamento de ar.
Para atualizações offline do Secure Malware Analytics, a Cisco fornece mídia de atualização mediante solicitação. Siga o processo de atualização offline descrito neste documento.
Mídia: A mídia de atualização do Airgap (off-line) é fornecida pelo Secure Malware Analytics Support mediante solicitação. É um arquivo ISO que pode ser copiado para uma unidade USB ou HDD (com tamanho suficiente).
Tamanho:O tamanho da mídia de atualização varia de acordo com as versões suportadas e pode aumentar significativamente com a introdução de novas máquinas virtuais. Para versões atuais, o tamanho é de aproximadamente 30 GB, incluindo a ferramenta de dessincronização, que permite atualizações incrementais para alterações relacionadas à VM.
Ciclo de inicialização de atualização: Cada vez que a mídia de atualização do airgap é inicializada, ela determina a próxima versão para a qual atualizar e copia o conteúdo associado a essa próxima versão no dispositivo. Uma determinada versão também pode iniciar a instalação de um pacote se essa versão não tiver nenhuma verificação de pré-requisito que deva ser executada enquanto o equipamento estiver em execução. Se a versão incluir tais verificações ou uma substituição para partes do processo de atualização que poderiam adicionar tais verificações, a atualização não será realmente aplicada até que o usuário faça login no OpAdmin e chame a atualização com OpAdmin > Operações > Atualizar aplicativo.
Ganchos de pré-instalação: Dependendo da presença de ganchos de pré-instalação para essa atualização específica, ele executa a atualização imediatamente ou reinicializa o equipamento de volta em seu modo de operação regular para permitir que o usuário entre na interface administrativa normal e inicie a atualização manualmente.
Repita Conforme Necessário: Cada ciclo de arranque dos meios, atualiza (ou prepara-se para atualizar) apenas um passo em direção à eventual versão-alvo; o usuário deve inicializar quantas vezes for necessário para atualizar para a versão de destino desejada.
A mídia do CIMC não é suportada para atualizações air-gapped.
Devido a restrições de licenciamento em componentes de terceiros usados, a mídia de atualização para versões 1.x não estará mais disponível depois que o hardware do UCS M3 atingir o EOL (fim da vida útil). Portanto, é essencial que os dispositivos UCS M3 sejam substituídos ou atualizados antes do EOL.
Migrações: Se as notas de versão para versões cobertas incluírem cenários onde é obrigatório que a migração ocorra antes que a próxima versão seja instalada, o usuário deve seguir estas etapas antes de reinicializar novamente para evitar colocar seu dispositivo em um estado inutilizável.
Nota:A primeira versão 2.1.x mais recente que a 2.1.4, em particular, executa várias migrações de banco de dados. Não é seguro continuar até que essas migrações sejam concluídas. Para obter mais informações, consulte a Nota de migração do Threat Grid Appliance 2.1.5.
Se estiver começando em uma versão anterior à 2.1.3, a mídia de atualização do airgap usará uma chave de criptografia derivada da licença individual e, portanto, precisará ser personalizada para cada dispositivo. (O único efeito visível ao usuário é que com a mídia criada para suportar versões de origem anteriores à 2.1.3, o Secure Malware Analytics precisa das licenças instaladas nesses dispositivos com antecedência, e a mídia não funcionará em nenhum dispositivo que não esteja na lista para a qual foi criado.)
Se começar com a versão 2.1.3 ou posterior, a mídia de airgap é genérica e as informações do cliente não são necessárias.
Primeiro verifique a versão Air Gapped disponível nesta página: Tabela de pesquisa de versão do equipamento
1. Abra uma Solicitação de Suporte do TAC para obter a Mídia de Atualização Offline. Essa solicitação deve incluir o número de série do equipamento, bem como o número de compilação do equipamento.
2. Suporte do TAC forneça um ISO atualizado com base na sua instalação.
3. Grave a imagem ISO em um USB inicializável. Observe que USB é o único dispositivo/método suportado para atualizações offline.
Este é o nome de arquivo atualizado ex: Atualização do Airgap TGA 2.16.2-2.17.2.
Isso significa que essa mídia pode ser usada para um dispositivo que executa uma versão mínima: 2.16.2 e atualize o dispositivo para a versão: 2.17.2.
A Cisco recomenda que você tenha conhecimento destes tópicos:
As informações neste documento são baseadas em um sistema operacional baseado em Linux (Por exemplo: CentOS, RedHat).
As informações neste documento são baseadas em dispositivos em um ambiente de laboratório controlado com configurações padrão. Se sua rede estiver ativa, tenha cuidado e compreenda completamente as possíveis implicações de qualquer comando antes de continuar.
Instalar a linguagem de programação GO
# wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
# tar -xzf go1.23.1.linux-amd64.tar.gz
# mv go /usr/local
Execute esses três comandos após a instalação, caso contrário, o comando desync falhará
# export GOROOT=/usr/local/go
# export GOPATH=$HOME/Projects/Proj1
# export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
Você pode verificar a versão GO por:
# go version
Etapa 1. Copie o conteúdo do arquivo Zip fornecido pelo Secure Malware Analytics Support, incluindo os arquivos desync.linux e .caibx, no mesmo diretório local da máquina.
Etapa 2. Altere para o diretório no qual você armazenou os arquivos:
Exemplo:
# cd MyDirectory/TG
Etapa 3. Execute o comando pwd para garantir que você esteja dentro do diretório.
# pwd
Etapa 4. Quando estiver dentro do diretório que inclui o comando desync.linux e o arquivo .caibx, execute o comando de sua escolha para iniciar o processo de download.
Note: Estes são os exemplos de diferentes versões do ISO. Consulte o arquivo .caibx a partir das instruções fornecidas pelo Secure Malware Analytics Support.
Para as versões 2.16.2 a 2.17.2 ISO:
# desync extract -k -s s3+https://s3.amazonaws.com/sma-appliance-airgap-update airgap-update-2.16.2ag-2.17.2.caibx airgap-update-2.16.2ag-2.17.2.iso
Para as versões 2.4.3.2 a 2.5 ISO:
# desync extract -k -s s3+https://s3.amazonaws.com/threatgrid-appliance-airgap-update airgap-update-2.4.3.2-2.5.caibx airgap-update-2.4.3.2-2.5.iso
Para a versão 2.5 a 2.7.2ag ISO:
# desync extract -k -s s3+https://s3.amazonaws.com/threatgrid-appliance-airgap-update airgap-update-2.5-2.7.2ag.caibx airgap-update-2.5-2.7.2ag.iso
Quando o download for iniciado, uma barra de progresso será exibida.
Note: A velocidade de download e o tamanho da mídia de atualização em seu ambiente podem afetar o tempo para compor o ISO.
Certifique-se de comparar o MD5 do arquivo baixado com o pacote disponível fornecido pelo suporte para validar a integridade do ISO baixado.
Quando o download estiver concluído, os ISOs serão criados no mesmo diretório.
Conecte o USB à máquina e execute o comando dd para criar a unidade USB inicializável.
# dd if=airgap-update.iso of=/dev/<MY_USB> bs=64M
Onde <MY_USB> é o nome da sua chave USB (deixe fora os sinais de maior e menor).
Insira a unidade USB e ligue ou reinicialize o dispositivo. Na tela de inicialização da Cisco, pressione F6 para entrar no Menu de inicialização.
Tip:
Execute o download após o horário comercial ou fora do horário de pico, pois ele pode afetar a largura de banda.
Para parar a ferramenta, feche o terminal ou pressione Ctrl+c/Ctrl+z.
Para continuar, execute o mesmo comando para continuar o download.
Instalar a linguagem de programação GO
Feche e reabra o comando run do CMD para verificar:
go version
go install github.com/folbricht/desync/cmd/desync@latest
In case desync is not working using above command then change directory to C drive and run this command:
git clone https://github.com/folbricht/desync.git
Note: Se o comando git não estiver funcionando, você poderá baixar e instalar o Git aqui: https://git-scm.com/download/win.
Em seguida, execute abaixo de dois comandos, um por um:
cd desync/cmd/desync
go install
\$HOME/go/bin/desync extract -k -s s3+https://s3.amazonaws.com/sma-appliance-airgap-update airgap-update-2.16.2ag-2.17.2.caibx airgap-update-2.16.2ag-2.17.2.iso
Para criar este USB de recuperação específica, é crucial usar Rufus versão 2.17, pois ele permite que você use opções dd essenciais. Você pode encontrar todas as versões do RUFUS neste repositório.
A mídia de atualização determina a próxima versão no caminho de atualização e copia o conteúdo dessa versão no equipamento. O equipamento executa a atualização imediatamente ou reinicializa em seu modo operacional regular para permitir que você entre no OpAdmin e inicie a atualização manualmente.
Quando o processo de inicialização ISO estiver concluído, reinicialize o dispositivo Secure Malware Analytics novamente no modo de operação.
Faça login na interface do usuário do portal e verifique se há avisos que informem se é seguro atualizar, etc., antes de continuar.
Com a USB ainda não conectada ao endpoint, execute o comando "lsblk | grep -iE 'disk|part'.
xsilenc3x@Alien15:~/testarea/usb$ lsblk | grep -iE 'disk|part'
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 128M 0 part
└─sda2 8:2 0 931.4G 0 part /media/DATA
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 650M 0 part
├─nvme0n1p2 259:2 0 128M 0 part
├─nvme0n1p3 259:3 0 114.1G 0 part
├─nvme0n1p4 259:4 0 525M 0 part /boot
├─nvme0n1p5 259:5 0 7.6G 0 part [SWAP]
├─nvme0n1p6 259:6 0 38.2G 0 part /
├─nvme0n1p7 259:7 0 62.7G 0 part /home
├─nvme0n1p8 259:8 0 13.1G 0 part
└─nvme0n1p9 259:9 0 1.1G 0 part
xsilenc3x@Alien15:~/testarea/usb$
Depois que o stick USB estiver conectado.
xsilenc3x@Alien15:~/testarea/usb$ lsblk | grep -iE 'disk|part'
.sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 128M 0 part
└─sda2 8:2 0 931.4G 0 part /media/DATA
sdb 8:16 1 3.7G 0 disk
└─sdb1 8:17 1 3.7G 0 part /media/xsilenc3x/ARCH_201902 <--------- not observed when the USB was not connected
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 650M 0 part
├─nvme0n1p2 259:2 0 128M 0 part
├─nvme0n1p3 259:3 0 114.1G 0 part
├─nvme0n1p4 259:4 0 525M 0 part /boot
├─nvme0n1p5 259:5 0 7.6G 0 part [SWAP]
├─nvme0n1p6 259:6 0 38.2G 0 part /
├─nvme0n1p7 259:7 0 62.7G 0 part /home
├─nvme0n1p8 259:8 0 13.1G 0 part
└─nvme0n1p9 259:9 0 1.1G 0 part
xsilenc3x@Alien15:~/testarea/usb$
Isso confirma que o dispositivo USB em /dev é "/dev/sdb".
Outras maneiras de confirmar, depois que o stick USB estiver conectado:
O comando dmesg fornece algumas informações. Após a conexão da USB, execute o comando dmesg | grep -iE 'usb|attached'.
xsilenc3x@Alien15:~/testarea/usb$ dmesg | grep -iE 'usb|attached'
[842717.663757] usb 1-1.1: new high-speed USB device number 13 using xhci_hcd
[842717.864505] usb 1-1.1: New USB device found, idVendor=0781, idProduct=5567
[842717.864510] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[842717.864514] usb 1-1.1: Product: Cruzer Blade
[842717.864517] usb 1-1.1: Manufacturer: SanDisk
[842717.864519] usb 1-1.1: SerialNumber: 4C530202420924105393
[842717.865608] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[842717.866074] scsi host1: usb-storage 1-1.1:1.0
[842718.898700] sd 1:0:0:0: Attached scsi generic sg1 type 0
[842718.922265] sd 1:0:0:0: [sdb] Attached SCSI removable disk <-------
xsilenc3x@Alien15:~/testarea/usb$
O comando fidsk fornece informações sobre o tamanho, que podem ser usadas para confirmar: sudo fdisk -l /dev/sdb.
xsilenc3x@Alien15:~/testarea/usb$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 3.7 GiB, 4004511744 bytes, 7821312 sectors <-------
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x63374e06
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 0 675839 675840 330M 0 Empty
/dev/sdb2 116 8307 8192 4M ef EFI (FAT-12/16/32)
xsilenc3x@Alien15:~/testarea/usb$
Note: Lembre-se de desmontar o USB antes da execução do comando "dd".
Confirmação de que o dispositivo USB do exemplo está montado.
xsilenc3x@Alien15:~/testarea/usb$ sudo mount -l | grep -i sdb
/dev/sdb1 on /media/xsilenc3x/ARCH_201902 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2) [ARCH_201902]
Para desmontar o dispositivo USB, use sudo umount /dev/sdb1.
xsilenc3x@Alien15:~/testarea/usb$ sudo umount /dev/sdb1
Verifique novamente se o dispositivo não é visto como "montado".
xsilenc3x@Alien15:~/testarea/usb$ sudo mount -l | grep -i sdb
oflag=sync e status=opções de progresso no comando dd.
Ao gravar vários blocos de dados, a opção "status=progress" fornece informações sobre as operações de gravação atuais. Isso é útil para confirmar se o comando "dd" está gravando no cache de páginas; ele pode ser usado para mostrar o progresso e a quantidade completa de tempo em segundos de todas as operações de gravação.
Quando não usado, "dd" não fornece informações sobre o progresso, apenas os resultados das operações de gravação são fornecidos antes de "dd" retornar:
[rootuser@centos8-01 tga-airgap]$ dd if=/dev/zero of=testfile.txt bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 5.03493 s, 1.7 GB/s
[rootuser@centos8-01 tga-airgap]$
Quando usadas, as informações em tempo real sobre as operações de gravação são atualizadas a cada segundo.
[rootuser@centos8-01 tga-airgap]$ dd if=/dev/zero of=testfile.txt bs=1M count=8192 status=progress
8575254528 bytes (8.6 GB, 8.0 GiB) copied, 8 s, 1.1 GB/s <----------------
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 8.03387 s, 1.1 GB/s
[rootuser@centos8-01 tga-airgap]
Note: Na documentação oficial do processo de atualização off-line da TGA, o comando informado é: dd if=airgap-update.iso of=/dev/<MY_USB> bs=64M
Após alguns testes, o exemplo a seguir é observado.
Uma vez que um arquivo é criado de 10MB com "dd" usando o dispositivo /dev/zero.
1M x 10 = 10M (10240 kB + dados do sistema anterior em caches de página de arquivo sujo = 10304 kB —> isso é percebido no cache de página suja no final de "dd").
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && dd if=/dev/zero of=testfile.txt bs=1M \
count=10 status=progress && cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 92 kB
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0138655 s, 756 MB/s
Dirty: 10304 kB <----- dirty page cache after "dd" returned | data still to be written to the block device
1633260775 <---- epoch time
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10372 kB
1633260778
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10380 kB
1633260779
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10404 kB
1633260781
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10412 kB
1633260782
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10424 kB
1633260783
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 10436 kB
1633260785
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 0 kB <--- data in the dirty page cache flushed = written to the block device
1633260786 <---- epoch time
[rootuser@centos8-2 testarea]$
```
1633260786 - 1633260775 = 11 seconds
Note: Depois que o comando "dd" retornou, a operação de gravação no dispositivo de bloqueio não foi concluída, ela foi percebida 11 segundos após o retorno.
Se esse fosse o comando "dd" ao criar o USB inicializável com o TGA ISO, E eu tivesse removido o USB do endpoint antes desses 11 segundos = Eu teria um ISO corrompido no USB inicializável.
Explicação:
Os dispositivos de bloco fornecem acesso em buffer aos dispositivos de hardware. Isso fornece uma camada de abstração para aplicativos ao trabalhar com dispositivos de hardware.
Os dispositivos de bloqueio permitem que um aplicativo leia/grave por blocos de dados de tamanhos diferentes; essa função read()/write() é aplicada nos caches de página (buffers) e não diretamente no dispositivo de bloco.
O kernel ( e não o aplicativo que faz a leitura/gravação ) gerencia a movimentação de dados dos buffers (caches de página) para os dispositivos de bloco.
Portanto:
O aplicativo (neste caso, "dd") não tem controle sobre a liberação dos buffers se não receber instruções.
A opção "oflag=sync" força a gravação física síncrona (pelo kernel) depois que cada bloco de saída (fornecido por "dd") é colocado no cache de páginas.
oflag=sync degrada o desempenho "dd" quando comparado a não usar a opção; mas, se estiver habilitado, ele garante uma gravação física no dispositivo de bloco após cada chamada write() de "dd".
Teste: O uso da opção "oflag=sync" do comando "dd" para confirmar todas as operações de gravação com os dados de cache de página suja foi concluído no retorno do comando "dd":
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && dd if=/dev/zero of=testfile.txt bs=1M \
count=10 oflag=sync status=progress && cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 60 kB
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0841956 s, 125 MB/s
Dirty: 68 kB <---- No data remaining in the dirty page cache after "dd" returned
1633260819
[rootuser@centos8-2 testarea]$ cat /proc/meminfo | grep -iE 'dirty' && date +%s
Dirty: 36 kB
1633260821
[rootuser@centos8-2 testarea]$
Nenhum dado restante da operação de gravação no cache de páginas sujas.
A operação de gravação foi aplicada antes (ou no mesmo instante) que o comando "dd" fosse retornado (não 11 segundos após o teste anterior).
Agora, tenho certeza de que após o retorno do comando "dd" não havia dados no cache de página suja relacionados à operação de gravação = nenhum problema na criação de USB inicializável (se o checksum ISO estiver correto).
Note: Leve em consideração esse sinalizador (oflag=sync) do comando "dd" ao trabalhar nesse tipo de caso.
Precisamos garantir que o disco rígido seja formatado usando a opção "DD" com qualquer ferramenta disponível e que a mídia seja copiada posteriormente para a unidade. Se não usarmos essa formatação, não poderemos ler essa mídia.
Uma vez que temos a mídia carregada no HDD/USB usando a formatação "DD", precisamos conectá-la ao dispositivo TGA e reiniciar o dispositivo.
Esta é a tela de seleção padrão do Menu de inicialização. Precisamos pressionar "F6" para inicializar o dispositivo e selecionar a mídia de inicialização
Uma vez que o dispositivo reconheça nossa entrada, ele solicitará que o dispositivo entre no menu de seleção de inicialização.
Esse é o prompt que pode diferir entre modelos TGA diferentes. Idealmente, veríamos a opção de inicializar usando a mídia de inicialização (sistema de arquivos de upgrade) a partir desse menu, mas se não for exibida, precisaremos fazer login na "EFI Shell".
Você teria que pressionar "ESC" antes que o script "startup.sh" terminasse para se mover para o EFI Shell. Depois de fazer login no EFI Shell, observamos que as partições detectadas neste caso são 3 sistemas de arquivos: fs0:, fs1:, fs2.
Identificando o sistema de arquivos correto:
Em caso de perda de sistemas de arquivos:
Para inicializar o dispositivo na mídia de inicialização (sistema de arquivos de upgrade), devemos executar o arquivo "bootx64.efi":
fs0:\efi\boot\bootx64.efi
Para sua referência, exibimos o conteúdo dos outros sistemas de arquivos também abaixo:
fs1: Este é o sistema de arquivos de inicialização principal.
fs2: Este é o sistema de arquivos de inicialização da imagem de recuperação.
Para verificar o sistema de arquivos correto que contém a mídia de inicialização montada. Podemos fazer isso navegando pelos diferentes sistemas de arquivos e verificando o arquivo de inicialização ".efi"
Note: A sequência da mídia de inicialização real (sistema de arquivos de atualização) que, neste caso, é "fs0:" também pode variar com outros dispositivos.
O nome e o caminho podem variar, mas em todas as imagens modernas, deve ser o mesmo.
Lista de verificação que pode ajudar a localizar a mídia de inicialização correta (atualizar o sistema de arquivos):
Revisão | Data de publicação | Comentários |
---|---|---|
3.0 |
18-Sep-2024 |
As instruções foram atualizadas neste documento |
2.0 |
09-Nov-2021 |
Versão inicial |
1.0 |
08-Nov-2021 |
Versão inicial |