Plug-in do Code Risk Analyzer para IBM Cloud

O Code Risk Analyzer será descontinuado em todas as regiões em 12 de fevereiro de 2027. No entanto, se uma região não tiver nenhum uso ativo do Code Risk Analyzer, o serviço nessa região poderá ser descontinuado antes. Saiba mais

A interface de linha de comando (CLI) do IBM Cloud® fornece comandos para análise de risco de código. É possível usar a CLI do IBM Cloud para analisar seu código em busca de vulnerabilidades e conformidades com regras específicas. O Code Risk Analyzer está disponível em todas as regiões do site IBM Cloud nas quais as cadeias de ferramentas são compatíveis.

Use a CLI para concluir as seguintes tarefas:

  • Gere uma lista de materiais (BOM) que liste as dependências e as informações de licença disponíveis de todos os pacotes de sistemas operacionais e pacotes de aplicativos de terceiros. Você também pode gerar essa saída no formato CycloneDX-specific.
  • Descobrir vulnerabilidades em pacotes listados na lista técnica. Você também pode visualizar o relatório gerado no formato CycloneDX-specific ou usar a correção automática de vulnerabilidades para aplicativos Node.js, Maven ou Gradle (Groovy).
  • Analise arquivos Kubernetes para conformidade com determinadas regras.

A partir de janeiro de 2024, o Code Risk Analyzer consumirá dados de vulnerabilidade fornecidos pelo projeto de código aberto Clair, em vez de dados da empresa comercial Snyk Limited. Não é necessária nenhuma ação específica de sua parte como resultado dessa alteração. No entanto, você pode observar algumas diferenças nos detalhes dos CVEs relatados pelo Code Risk Analyzer.

Conteúdo suportado

O Code Risk Analyzer suporta as linguagens Java™, Node.js, Python e Go. A tabela a seguir lista e descreve o conteúdo que o Code Risk Analyzer suporta.

Conteúdo suportado
Conteúdo Descrição
Java O repositório requer Maven ou Gradle para automação de compilação. O Maven usa o arquivo pom.xml para calcular as dependências, e o Gradle usa o arquivo build.gradle(.kts). O Code Risk Analyzer pode automatizar a correção tanto para o Maven quanto para o Gradle (Groovy).
Node.js package-lock.json calcula as dependências. Para Node.js, o Code Risk Analyzer também pode automatizar a correção. Certifique-se de que a versão do npm instalada corresponda à versão do npm do projeto.
Python As dependências são calculadas usando os arquivos requirements.txt e pyproject.toml.
Golang Suporta o gerenciamento de dependência go mod e go dep. Para go mod, o arquivo go.sum deve estar no repositório. Para go dep, o arquivo Gopkg.lock deve estar no repositório.
Dockerfiles Arquivos com o padrão Dockerfile no repositório são considerados. Para imagens de contêineres, há suporte para as distribuições Debian, Red Hat Enterprise Linux®, Alpine e Ubuntu Linux.
Kubernetes Os arquivos que têm os sufixos .yaml e .yml são considerados. O valor kind deve ser definido como Pod, ReplicaSet, ReplicationController, Deployment, Daemonset, Statefulset, Job, CronJob, NetworkPolicy, ou Ingress.
Calico Os arquivos que têm os sufixos .yaml e .yml são considerados. O valor kind deve ser definido como NetworkPolicy, GlobalNetworkPolicy, Profile, NetworkSet, GlobalNetworkSet, ou HostEndpoint.
Terraform O arquivo de plano Terraform precisa ser gerado usando IBM Cloud como o provedor Terraform.

O Code Risk Analyzer examina o código-fonte e as dependências de imagem em seus repositórios em busca de vulnerabilidades. A tabela a seguir mostra as fontes de informações de vulnerabilidade que o Code Risk Analyzer consulta para diferentes tipos de dependências.

Dependências suportadas que o Code Risk Analyzer verifica quanto a vulnerabilidades
Dependência Versões suportadas Origem dos avisos de segurança
Alpine imagem Todas as versões estáveis com suporte de segurança do fornecedor. Alpine SecDB banco de dados.
Debian imagem Todas as versões estáveis com suporte de segurança do fornecedor.

Os CVEs em pacotes binários associados ao pacote de origem Debian linux, como o linux-libc-dev, não são relatados. A maioria desses pacotes binários são módulos do kernel e do kernel, que não são executados em imagens de contêineres.

Debian Rastreador de bugs de segurança.
GoogleContainerTools imagem sem controle Todas as versões estáveis com suporte de segurança do fornecedor. GoogleContainerTools sem distribuição
Red Hat® Enterprise Linux® (RHEL) RHEL 6, RHEL/UBI 7, RHEL/UBI 8 e RHEL/UBI 9 Red Hat API de dados de segurança.
Ubuntu imagem Todas as versões estáveis com suporte de segurança do fornecedor. Ubuntu Rastreador CVE.
Go, npm ( JavaScript ), Maven ( Java ), PyPI ( Python ), RubyGems ( Ruby ) e Packagist (PHP) Todas as versões estáveis com suporte de segurança do fornecedor. Banco de dados de vulnerabilidades de código aberto.

Problemas conhecidos no Code Risk Analyzer

O Code Risk Analyzer não consegue descobrir vulnerabilidades em pacotes de aplicativos que não usam um esquema de versionamento, como major.minor.patch. Por exemplo, versões de pré-liberação ou versões que contêm metadados de construção não são suportadas.

Pré-requisitos

  • Instale a CLI do IBM Cloud. Consulte Download IBM Cloud CLI para instruções.

  • Instale o plug-in de CLI do Code Risk Analyzer executando o seguinte comando:

ibmcloud plugin install cra
  • Certifique-se de que seja possível acessar uma cadeia de ferramentas em uma das regiões suportadas. A cadeia de ferramentas não precisa ter ferramentas. Para obter mais informações sobre cadeias de ferramentas, consulte Criando uma cadeia de ferramentas por meio de um app.

  • Especifique o ID da cadeia de ferramentas, configurando a variável de ambiente TOOLCHAIN_ID:

export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
  • Efetue login em uma região específica de IBM Cloud executando o comando a seguir, em que [region] é a região em que a cadeia de ferramentas foi criada.
ibmcloud login -r [region]
  • Opcionalmente, para aumentar o controle e a segurança dos seus dados ao usar a CLI, você tem a opção de usar rotas privadas para os pontos de extremidade IBM Cloud. Deve-se primeiro ativar o roteamento e o encaminhamento virtuais em sua conta para poder, em seguida, ativar o uso de terminais em serviço privados do IBM Cloud. Para obter mais informações sobre a configuração de sua conta para suportar a opção de conectividade privada, consulte Ativando o VRF e terminais em serviço.

Use o comando a seguir para fazer login em um ponto de extremidade privado em que [region] é a região em que a cadeia de ferramentas foi criada.

ibmcloud login -a private.cloud.ibm.com -r [region]

Comandos de uso da CLI

Você recebe notificações na linha de comandos quando atualizações para a CLI IBM Cloud e plug-ins estão disponíveis. Certifique-se de manter sua corrente de CLI para que você use os comandos mais recentes. É possível visualizar a versão atual de todos os plug-ins instalados executando o comando ibmcloud plugin list.

Ajuda do Code Risk Analyzer

O comando a seguir exibe a lista de comandos do Code Risk Analyzer:

ibmcloud cra --help

Ajuda de comando do Code Risk Analyzer

O comando a seguir exibe os detalhes de sinalizadores usados com um comando. Use o ibmcloud cra --help para exibir os comandos disponíveis.

ibmcloud cra <command> --help

Lista de materiais (BOM)

O comando bom-generate acessa artefatos no caminho de diretório especificado e realiza descoberta profunda para identificar todas as dependências, incluindo dependências transitivas. O comando também identifica as licenças sob as quais essas dependências são distribuídas. É criada uma lista técnica que captura um instantâneo de todas as dependências. Você pode gerar a lista técnica no formato padrão ou no formato CycloneDX's SBOM.

ibmcloud cra bom-generate

Requisitos de comando BOM

O comando bom-generate depende de determinados comandos externos:

  • Se o caminho contém Dockerfiles, este comando suspende imagens de base e constrói imagens para cada estágio de construção em cada Dockerfile. Neste cenário, o comando bom-generate requer que os comandos Docker cli e tar estejam disponíveis.
  • Se o caminho contém arquivos Maven, este comando usa mvn para construir uma lista de dependências. Neste cenário, o comando bom-generate requer que o comando mvn esteja disponível.
  • Se o caminho contiver arquivos Gradle, este comando usará gradle para construir uma lista de dependências. Neste cenário, o comando bom-generate requer que o comando gradle esteja disponível.
  • Se o caminho contiver arquivos Node.js package-json e este comando for usado para gerar um arquivo package-lock.json correspondente, o comando bom-generate usará o npm para construir o arquivo package-lock.json. Neste cenário, o comando requer que o comando npm esteja disponível.
  • Se o caminho contiver os arquivos Python requirements.txt ou pyproject.toml, o comando usará pip para gerar as dependências do pacote. Nesse cenário, o comando bom-generate exige que o comando pip esteja disponível. Tanto Python versão 2 quanto Python versão 3 são suportados.

Caso você esteja usando Dockerfiles, certifique-se de efetuar login no seu registro de contêiner a partir de onde as imagens de base devem ser puxadas.

Se o seu Dockerfile requer ARGS, configure um ARG individual como variável de ambiente antes de executar o comando. Por exemplo, se o Dockerfile estiver usando um ARG IAM_USER, exporte uma variável de ambiente denominada IAM_USER: export IAM_USER='value'. A CLI passa automaticamente essas variáveis de ambiente para o comando docker build.

Também é possível especificar a sinalização DOCKERBUILDFLAGS explicitamente. Para exportar o DOCKERBUILDFLAGS com a sinalização ARGS Docker, digite o seguinte comando:

export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"

Opções de comando BOM

A tabela a seguir lista as opções de comando que você pode usar para gerar uma lista técnica com o comando bom-generate.

Opções de comando para gerar uma lista técnica
Opções de comando Obrigatório ou opcional Descrição
--path Obrigatório O caminho do diretório do projeto a ser escaneado.
-r, --report Obrigatório O nome do arquivo no qual irá armazenar o relatório BOM.
-a, --asset-type Opcional As verificações de segurança a serem executadas (apps, imagem, so, todos). Por padrão, essa opção é definida como all. A opção apps é usada para limitar a descoberta aos pacotes de aplicativos. A opção image é usada para limitar a descoberta a imagens de base usadas em Dockerfiles. A opção os é usada para limitar a descoberta a estágios de construção apenas em Dockerfiles. É possível especificar múltiplos valores usando uma vírgula para delimitar os valores, como -a os,image,apps.
-p, --prev-report Opcional Use o relatório BOM anterior para acelerar o comando. Por exemplo, se um Dockerfile não foi atualizado desde que o último relatório foi gerado, o comando ignora a descoberta de pacotes a partir desse Dockerfile. O mesmo cenário se aplica a outros arquivos de manifesto, como o arquivo package-lock.json.
-c, --dockerbuildcontext Opcional Se especificado, o CRA usará o diretório no parâmetro path como contexto de compilação do Docker durante a varredura do estágio de construção.
-o, --output Opcional Selecione o formato de relatório BOM. É possível gerar a saída de formato no formato BOM padrão (standard) ou no formato SBOM da CycloneDX (cyclonedx). O valor padrão é standard. É possível armazenar ambos os formatos inserindo cada formato separado por uma vírgula sem espaço.
-f, --dockerbuildflags Opcional Customize o comando de construção do Docker para varredura do estágio de construção. Em vez de usar esta sinalização da linha de comandos, especifique o valor em uma variável de ambiente denominada DOCKERBUILDFLAGS. Por padrão, essa opção de comando é definida como ''. Ao usar esta opção, certifique-se de que seja a última sinalização fornecida ao comando.
-d, --dockerfilepattern Opcional O padrão para identificar o Dockerfile na reposição.
-g, --gradle.excludeconfigurations Opcional Exclua as configurações Gradle, por exemplo: runtimeClasspath,testCompileClasspath. Por padrão, essa opção de comando é definida como ''.
-l, --gradleprops Opcional Personalize o comando Gradle com propriedades para a varredura de dependências do Gradle.
-m, --maven.excludescopes Opcional Exclua os escopos Maven, por exemplo: test,compile. Exemplo: 'test, compile'. Por padrão, essa opção de comando é definida como ''.
-n, --nodejs.createpackagelock Opcional Ative a tarefa para construir o arquivo package-lock.json para projetos node.js.
--region Opcional A região ibmcloud onde está localizada a cadeia de ferramentas.
--toolchainid Opcional O ID da cadeia de ferramentas de destino a ser usado.
-v, --verbose Opcional Ativar mensagens de log detalhadas.

Ignorando arquivos

Se o caminho contiver o arquivo .cra/.fileignore, arquivos especificados no arquivo .fileignore não serão escaneados para dependências. O arquivo .fileignore deve seguir as regras dos arquivos .gitignore. Semelhante a um arquivo .gitignore, o arquivo .fileignore pode incluir comentários, diretórios a serem ignorados, arquivos a serem ignorados e outros padrões.

O arquivo .fileignore de exemplo a seguir mostra como excluir scripts bash, node_modules e o Dockerfile.

# Ignore nested functional_tests directory
**/functional_tests

# Ignore bash scripts
**/*.sh

# This should allow this one file
!test/gatling_tests/loginTobx.sh

# Ignore node_modules
node_modules

# Exclude the dockerfile from scanning
Dockerfile

Configuração de vários contextos de compilação em Docker

Ao trabalhar com vários Dockerfiles em um único projeto, talvez você queira definir contextos de compilação separados para cada Dockerfile. Isso pode ser feito usando um arquivo .cra/.dockerbuildcontext, que é um arquivo JSON que mapeia os caminhos do Dockerfile para seus contextos de compilação correspondentes.

Se houver um arquivo .cra/.dockerbuildcontext no diretório do seu projeto, os comandos de compilação do CRA Docker usarão os caminhos especificados nesse arquivo como contextos de compilação para os Dockerfiles associados. As chaves no objeto JSON representam os caminhos relativos para os Dockerfiles, enquanto os valores especificam os caminhos relativos para os respectivos contextos de compilação.

Aqui está um exemplo de um arquivo .dockerbuildcontext que define diferentes contextos de compilação para vários Dockerfiles:

{
  "Dockerfile": "./",
  "path/to/different/Dockerfile": "./another/Path"
}

Exemplo

Os fragmentos de código a seguir mostram como usar o comando bom-generate:

ibmcloud cra bom-generate --path PATH --report REPORT [--asset-type ASSET-TYPE] [--dockerbuildcontext] [--dockerbuildflags DOCKERBUILDFLAGS] [--dockerfilepattern DOCKERFILEPATTERN] [--gradle.excludeconfigurations GRADLE.EXCLUDECONFIGURATIONS] [--maven.excludescopes MAVEN.EXCLUDESCOPES] [--nodejs.createpackagelock] [--prev-report PREV-REPORT] [--region REGION] [--toolchainid TOOLCHAINID] [--verbose]
ibmcloud cra bom --path . --report bomreport.json

Varredura de vulnerabilidade

O comando vulnerability-scan espera uma lista técnica no formato standard como entrada e detecta vulnerabilidades em pacotes de aplicativos e pacotes de sistemas operacionais listados na lista técnica. Com base em uma rica inteligência sobre ameaças coletada de várias fontes de vulnerabilidades e exposições comuns (CVEs), são fornecidas recomendações de correções direcionadas. O Code Risk Analyzer também pode executar a correção automática em pacotes vulneráveis somente para aplicativos baseados em Node.js. Você também pode gerar esse relatório no formato padrão ou no formato CycloneDX's Vulnerability Exploitability Exchange (VEX).

ibmcloud cra vulnerability-scan

Opções de comando de varredura de vulnerabilidades

A tabela a seguir lista as opções para usar o comando vulnerability-scan.

Opções de comando para executar uma varredura de vulnerabilidade
Opções de comando Obrigatório ou opcional Descrição
-b, --bom Obrigatório O caminho do arquivo da lista técnica que foi gerado com o comando bom-generate. Essa lista técnica deve estar no formato standard.
-a, --autofix Opcional Corrige tipos específicos de vulnerabilidades de aplicativos. Essa opção está disponível somente para aplicativos Node.js, Maven e Gradle.
-f, --commentfile Opcional Especifica o arquivo em que o relatório de remarcação para baixo é criado. Esse comando está disponível somente em autofix.
-c, --cveignore Opcional O caminho de arquivo do arquivo Ignore CVE que contém a lista de CVEs a serem ignorados.
-e, --excludedev Opcional Especifica que você não deseja que o comando informe CVEs para dependências de desenvolvimento.
--force Opcional Força uma atualização para pacotes de nós de nível superior, mesmo quando a versão principal é diferente. Esse comando está disponível somente em autofix.
--include-nofix Opcional Incluir ou excluir o relatório de CVEs que não têm correções conhecidas. Por padrão, essa opção é definida como app. A opção app é usada para incluir apenas CVEs de pacotes de aplicativos sem correções. A opção os é usada para incluir apenas CVEs de pacotes do sistema operacional sem correções. A opção all é usada para incluir CVEs de pacotes de aplicativos e de sistemas operacionais sem correções. A opção none é usada para excluir CVEs de pacotes de aplicativos e de sistemas operacionais sem correções.
--path Obrigatório se --autofix estiver ativado O caminho do diretório do projeto a ser escaneado. Esse comando está disponível somente em autofix.
--region Opcional A região ibmcloud para a cadeia de ferramentas.
-r, --report Opcional O caminho para o relatório gerado.
-o, --output Opcional Seleciona o formato de relatório do CVE. É possível gerar a saída de formato no formato padrão CVE (standard) ou no formato VEX do CycloneDX (cyclonedx). O valor padrão é standard.
-s, --strict Opcional Resultados na falha de comando (status de saída 2) quando as vulnerabilidades são encontradas.
--toolchainid Opcional A ID da cadeia de ferramentas de destino.

Ignorando vulnerabilidades

Se o parâmetro -c ou --cveignore for especificado, o comando procurará esse arquivo e não relatará os CVEs especificados no arquivo. É possível configurar os CVEs para omiti-los indefinidamente até que uma correção esteja disponível, ou até uma data de expiração especificada.

O exemplo a seguir mostra um esquema JSON para o arquivo .cveignore:

[
    {
        "cve": "string",
	    "alwaysOmit": "bool",
	    "untilRemediationAvailable": "bool",
	    "expiration": "string"
    }
]

As propriedades a seguir são suportadas para cada entrada no arquivo .cveignore:

  • cve - a vulnerabilidade a ser omitida. O valor dessa propriedade é uma ID CVE.
  • alwaysOmit - se esta propriedade for configurada como true, a vulnerabilidade será omitida até que seja alterada. Esta propriedade tem precedência sobre outros valores da propriedade.
  • untilRemediationAvailable - se esta propriedade for configurada como true, a vulnerabilidade será omitida até que um caminho de correção esteja disponível. Se uma correção for disponibilizada, a vulnerabilidade não será omitida e uma mensagem será exibida. Esta propriedade tem precedência sobre o valor da propriedade de expiração.
  • expiração - se essa propriedade for definida como true e a data de expiração não for atingida, a vulnerabilidade será omitida. Se a data de expiração for atingida, a vulnerabilidade não será omitida e uma mensagem será exibida. Use o formato de hora RFC3339 (yyyy-MM-ddTHH:mm:ss[+-]Z) para definir esta propriedade.

O Code Risk Analyzer usa apenas essas propriedades definidas. É possível incluir propriedades sem efeito em funções. Caso uma vulnerabilidade definida em .cveignore não seja omitida, será gerado um log explicando o motivo. Se uma vulnerabilidade definida no arquivo .cveignore for omitida, não haverá nenhuma criação de log individual. O número de omissões e uma lista dos IDs de vulnerabilidade, com o nome do pacote, que são omitidos são registrados após a conclusão de um relatório.

O trecho de código a seguir mostra um arquivo .cveignore de amostra:

[
    {
        "cve": "CVE-2021-27290",
        "alwaysOmit": true
    },
    {
        "cve": "CVE-2020-8244",
        "untilRemediationAvailable": true,
    }
]

Exemplo

Os fragmentos de código a seguir mostram como usar o comando vulnerability-scan:

ibmcloud cra vulnerability-scan --bom BOM [--cveignore CVEIGNORE] [--report REPORT] [--excludedev] [--include-nofix app,os,all,none] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--output OUTPUTFILE]
ibmcloud cra cve --bom ./bom-file.json --cveignore ./cveignore-example.json --report ./output-vulnerability-report.json --excludedev --include-nofix all --strict

Implementação

O comando deployment-analyze executa verificações de configuração em manifestos de implementação de Kubernetes.

ibmcloud cra deployment-analyze

Esse comando fornece orientação prescritiva para estabelecer uma postura de configuração segura para contêineres Docker. O Code Risk Analyzer usa essas configurações de segurança como ponto de referência e identifica controles de segurança para verificar artefatos de implantação, como arquivos .yaml, para aplicativos Kubernetes. Esse comando também fornece avaliações de risco para cada falha de controle.

A tabela a seguir lista os controles que podem ser implementados em DevSecOps,, conforme identificado em CIS Docker 1.13.0. Mais controles são adicionados com base em referências de código aberto do Kubernetes Common Configuration Scoring System(KCCSS).

Controles de segurança
ID Regra Risco
5.3 Certifique-se de que os contêineres não tenham o recurso CAP_SYS_ADMIN. Alta
5.3 Certifique-se de que os contêineres não tenham o recurso CAP_NET_RAW. Alta
5.4 Certifique-se de que não sejam usados contêineres privilegiados. Alta
5.5 Certifique-se de que os diretórios confidenciais do sistema host não sejam montados nos contêineres. Médio
5.7 Certifique-se de que as portas privilegiadas não sejam mapeadas dentro dos contêineres. Baixo
5.9 Certifique-se de que o namespace de rede do host não seja compartilhado. Médio
5.10 Certifique-se de que o uso de memória do contêiner seja limitado. Médio
5.11 Certifique-se de que a prioridade apropriada da CPU esteja definida no contêiner. Médio
5.12 Certifique-se de que o sistema de arquivos raiz do contêiner esteja montado como somente leitura. Médio
5.15 Certifique-se de que o namespace do processo do host não seja compartilhado. Médio
5.16 Certifique-se de que o namespace IPC do host não seja compartilhado. Médio
5.31 Certifique-se de que o soquete Docker não esteja montado dentro de nenhum contêiner. Alta
Certifique-se de que os contêineres não permitam a alocação insegura de recursos da CPU. Médio
Certifique-se de que os contêineres não permitam o escalonamento de privilégios. Médio
Certifique-se de que os contêineres não exponham partes inseguras do site /proc. Médio
Certifique-se de que os contêineres não sejam expostos por meio de uma porta de host compartilhada. Médio

Opções do comando de implementação

A tabela a seguir lista as opções de comandos aplicáveis para o comando deployment-analyze.

Opções de comando para análise de implantação.
Opções de comando Obrigatório ou opcional Descrição
--path Obrigatório O caminho do diretório do projeto a ser escaneado.
-r, --report Obrigatório O nome do arquivo no qual criar o relatório.
-f, --fileignore Opcional O caminho de arquivo do arquivo .fileignore.
-s, --strict Opcional Os resultados da falha de comando (status de saída 2) quando os riscos de implementação são encontrados.

Exemplo

Os fragmentos de código a seguir mostram como usar o comando deployment-analyze:

ibmcloud cra deployment-analyze --path PATH --report REPORT [--fileignore FILE_IGNORE] [--strict]
ibmcloud cra depl --path ./sampleDir --report deployment-report.json --strict

NetworkPolicy análise

Esse é um recurso beta que está disponível para propósitos de avaliação e de teste.

O comando netpol-analyze executa verificações de configuração nos manifestos Kubernetes e Calico NetworkPolicy.

ibmcloud cra netpol-analyze

Esse comando verifica a postura de configuração de conectividade de um aplicativo Kubernetes em relação ao controle NIST SP 800-53 SC-7(5 ). Ele verifica se a conectividade de cada carga de trabalho é controlada por pelo menos um recurso NetworkPolicy e se as portas não seguras estão bloqueadas para entrada e saída.

O comando netpol-analyze também pode fornecer um relatório de conectividade para o aplicativo verificado, mostrando todas as conexões permitidas entre as cargas de trabalho do aplicativo. Você pode usar esse relatório como evidência de conformidade ou para ajudar a depurar problemas de conectividade. Você também pode usar esse comando para fornecer resultados de lint para as políticas de rede examinadas e, em seguida, usar esses resultados para melhorar a eficiência e a legibilidade da política de rede. Em alguns casos, os resultados do lint também podem apontar para um erro nas definições da política de rede.

NetworkPolicy opções de comando de análise

A tabela a seguir lista as opções de comandos aplicáveis para o comando netpol-analyze.

Opções de comando para realizar a análise da política de rede
Opções de comando Obrigatório ou opcional Descrição
--path Obrigatório O caminho do diretório do projeto a ser escaneado.
-r, --report Obrigatório O nome do arquivo no qual será criado o relatório de conformidade.
-c, --connectivity Opcional O nome do arquivo no qual será criado o relatório de conectividade.
-l, --lint Opcional O nome do arquivo no qual será criado o relatório de lint.
-s, --strict Opcional Resulta em falha de comando (status de saída 2) quando são encontrados riscos de conectividade.

Exemplo

Os exemplos de trechos de código a seguir mostram como você pode usar o comando netpol-analyze:

ibmcloud cra netpol-analyze --path PATH --report REPORT [--connectivity CONNFILE] [--lint LINTFILE] [--strict]
ibmcloud cra np --path ./sampleDir --report netpol-report.json --strict

Imagem do analisador de configuração de rede

O comando netpol-analyze é executado como parte do Network Config Analyzer(NCA ) do IBM. Como esse comando executa o NCA como uma imagem Docker, você deve instalar o Docker em seu computador.

A imagem URL para o analisador de políticas de rede é icr.io/continuous-delivery/cra/nca.

Se a imagem do analisador ainda não estiver no seu registro local, o comando netpol-analyze extrai a imagem mais recente do analisador (incluindo correções para quaisquer vulnerabilidades) do site global IBM Cloud® Container Registry.

Usando o Code Risk Analyzer em pipelines Tekton

Você pode usar a tarefa task-cra nos pipelines do Tekton. Use a definição do pipeline do Tekton quando você criar uma solicitação pull, um acionador manual ou emitir um commit. Também é possível criar suas próprias tarefas Tekton e executar o Code Risk Analyzer a partir dessas tarefas.

Usando o Code Risk Analyzer em DevSecOps

É possível usar o Code Risk Analyzer em DevSecOps. A tabela a seguir lista e descreve os parâmetros do Code Risk Analyzer suportado para DevSecOps.

Para mais informações sobre os comandos do utilitário dependente necessários pela imagem do pipeline para executar o comando bom-generate, consulte Requisitos de BOM. Caso os comandos estejam ausentes, use o parâmetro cra-custom-script-path para referenciar um script para instalar esses comandos.

DevSecOps Parâmetros baseados no Code Risk Analyzer
Nome Tipo Descrição Obrigatório ou opcional
artifactory-dockerconfigjson SECRET O arquivo config.json do Docker codificado em base64 que armazena informações de credenciais do artefato. Opcional
baseimage-auth-user Texto As credenciais para a imagem base do aplicativo Dockerfile exigidas pela varredura do Code Risk Analyzer. Opcional
baseimage-auth-email Texto As credenciais para a imagem base do aplicativo Dockerfile exigidas pela varredura do Code Risk Analyzer. Opcional
baseimage-auth-host Texto As credenciais para a imagem base do aplicativo Dockerfile exigidas pela varredura do Code Risk Analyzer. Opcional
baseimage-auth-password SECRET As credenciais para a imagem base do aplicativo Dockerfile exigidas pela varredura do Code Risk Analyzer. Opcional
cra-cveignore-path Texto O caminho para o arquivo cveignore relativo à raiz do repositório do aplicativo. O caminho de arquivo padrão é .cra/.cveignore. Opcional
cra-custom-script-path Texto O caminho para um script customizado executado antes da varredura do Code Risk Analyzer. Este script é originado para fornecer a opção de configurar variáveis ENV no contexto da ferramenta de BOM do Code Risk Analyzer. Opcional
cra-docker-buildflags Texto O comando de construção do Docker customizado para a varredura do estágio de construção. Este parâmetro está vazio por padrão. Opcional
cra-docker-build-context Texto Se especificado, o Code Risk Analyzer usará o diretório no parâmetro path como o contexto de construção do Docker. Opcional
cra-exclude-devdependencies Texto Especifica se as dependências de dev serão excluídas da varredura (true ou false). O valor padrão é false. Opcional
cra-gradle-exclude-configs Texto Especifica quais configurações Gradle excluem dependências a partir da varredura. Por exemplo, runtimeClasspath,testCompileClasspath. Este parâmetro está vazio por padrão. Opcional
cra-maven-exclude-scopes Texto Especifica quais escopos de Maven excluem dependências a partir da varredura. Por exemplo, test,compile. Este parâmetro está vazio por padrão. Opcional
cra-nodejs-create-package-lock Texto Permite a descoberta do Code Risk Analyzer para construir o arquivo package-lock.json para repositórios node.js. Este parâmetro é configurado como false por padrão. Opcional
ibmcloud-api-key SECRET A chave de API do IBM Cloud® que interage com a ferramenta da CLI do ibmcloud. Obrigatório
pipeline-dockerconfigjson SECRET O arquivo config.json do Docker codificado em base64 que obtém imagens a partir de um registro privado. Opcional
onepipeline-dockerconfigjson SECRET Descontinuado. O arquivo config.json do Docker codificado em base64 que obtém imagens a partir de um registro privado. Opcional
pipeline-debug selecionar O comutador do modo de depuração do pipeline. Opcional
opt-in-cra-auto-remediação Texto Permite que o Code Risk Analyzer execute o comando cra auto remediation (true ou false). O valor padrão é false. Esse comando é compatível apenas com o Pipeline de Conformidade Contínua. Opcional
repositórios com correção automática ativada Texto Especifica a lista de nomes de repositórios separados por vírgula a serem ativados para o comando cra auto remediation. Esse parâmetro é considerado apenas se opt-in-cra-auto-remediation estiver definido como true e é compatível apenas com o pipeline de conformidade contínua. Opcional
opt-in-cra-auto-remediação-forçar Texto Força o comando cra auto remediation a atualizar os pacotes, mesmo que a versão principal seja diferente da versão atual do pacote vulnerável (true ou false). Esse parâmetro é considerado apenas se opt-in-cra-auto-remediation estiver definido como true e é compatível apenas com o pipeline de conformidade contínua. Opcional

Exemplo de scripts customizados para DevSecOps

Caso o seu Dockerfile exija ARGS, use o parâmetro cra-custom-script-path para configurar um ARG individual como variável de ambiente antes de executar o comando. O caminho de script customizado é o caminho para um script que reside no projeto do usuário. Por exemplo, se o Dockerfile usar IAM_USER ARG, exporte uma variável de ambiente dentro do script denominado IAM_USER: export IAM_USER='value'. Se o ARG exigido pelo seu Dockerfile for configurado como uma propriedade de ambiente dentro das cadeias de ferramentas, use get_env para obter o valor. Nesta instância, é possível exportar uma variável de ambiente dentro do script do IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name). A tarefa run-cra capta automaticamente essas variáveis de ambiente e as passa para os comandos de construção do Docker.

O exemplo a seguir mostra como usar o cra-custom-script para exportar a variável ENV:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

export IAM_USER=$(get_env iam_user_environment_property_name)

Também é possível usar o parâmetro cra-custom-script-path para cenários cujas versões da ferramenta de imagem base do DevSecOps podem estar ultrapassadas, com base em seu projeto. Por exemplo, é possível atualizar comandos como pip/pip3 para descobrir pacotes Python que requerem uma versão pip posterior.

O exemplo a seguir mostra como usar o cra-custom-script para atualizar a versão pip:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

python3 -m pip install --upgrade pip

Se o seu Dockerfile usar uma imagem a partir de um registro privado do Docker, use o parâmetro cra-custom-script-path para autenticar em um registro privado do Docker antes de executar o Code Risk Analyzer e para permitir que o Code Risk Analyzer faça o pull desta imagem para varredura.

O exemplo a seguir mostra como usar o cra-custom-script para autenticação no registro de contêiner ibmcloud:

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

ibmcloud cr login

Depurando o Code Risk Analyzer em DevSecOps

Para ajudar com a depuração, execute o Code Risk Analyzer localmente como interface de linha de comandos (CLI) em sua própria máquina local. Para obter informações sobre como executar o ibmcloud cra bom-generate comando para gerar uma BOM, veja Lista de materiais(BOM). Depois de gerar a lista técnica, use o comando ibmcloud cra cve para listar todas as vulnerabilidades. Para mais informações sobre como executar o comando ibmcloud cra cve, consulte Varredura de vulnerabilidade.

Certifique-se de que a tarefa run-cra não contenha erros. Se a tarefa contiver erros, verifique se o seu pipeline usa a versão atual do DevSecOps. Caso o problema não seja resolvido verificando a versão do DevSecOps, os exemplos a seguir fornecem alguns erros comuns e soluções propostas.

FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]

É possível verificar se você tem acesso ao registro privado. Caso você não tenha acesso, use o parâmetro cra-custom-script-path e especifique o caminho para um script customizado executado antes de o Code Risk Analyzer autenticar no registro privado.

FAILED
Error executing docker build cmd for stage-0: exit status 1

Caso o seu Dockerfile exija ARGS, o comando docker build para os estágios de construção falhará ao construir devido ao ARGS ausente. O cra-custom-script-path é necessário para configurar o ARGS como variáveis de ambiente. Para mais informações sobre como configurar o script customizado, consulte Exemplos de scripts customizados para DevSecOps.

FAILED
Error executing docker build cmd for stage-0: exit status 1
...
COPY file-to-copy.js file-to-copy.js:
------
failed to compute cache key: "/file-to-copy.js" not found: not found

Por padrão, o comando bom-generate do Code Risk Analyzer constrói os Dockerfiles a partir do contexto da localização do próprio Dockerfile. Ao construir os Dockerfiles a partir do contexto do diretório do projeto raiz, use o parâmetro cra-docker-build-context para permitir que o Code Risk Analyzer construa os Dockerfiles a partir deste contexto.

Removendo dados armazenados do Code Risk Analyzer

O plug-in do Code Risk Analyzer não armazena nenhum dado do cliente nos respectivos bancos de dados. No entanto, versões anteriores de tarefas do Code Risk Analyzer Tekton armazenam de maneira segura os resultados de varreduras de vulnerabilidades no banco de dados.

Para solicitar a remoção de quaisquer dados de clientes que possam estar armazenados no Code Risk Analyzer, entre em contato com o Suporte IBM.

FAQs

Obtenha respostas para perguntas frequentes sobre o uso da CLI do Code Risk Analyzer.

Como posso determinar por que a CLI falhou?

Antes de chamar a CLI do Code Risk Analyzer, configure a variável de ambiente IBMCLOUD_TRACE para true para ativar o log de depuração.

export IBMCLOUD_TRACE=true

Observe as chamadas de API e as respostas mostradas no log para determinar a razão exata da falha.

Como posso depurar um comando BOM que falha ao fazer pull de uma imagem base a partir de um registro privado.

Certifique-se de estar autenticado com o registro onde reside a imagem base usando o comando ibmcloud cr login ou o comando docker login.

Como posso depurar um comando BOM que está falhando ao analisar um Dockerfile?

  • Verifique se o Dockerfile não tem nenhum problema executando o comando docker build e certificando-se de que ele seja aprovado.
  • Caso o seu Dockerfile exija que o ARG seja aprovado, certifique-se de que o ARG esteja configurado como uma variável de ambiente. Também é possível usar a variável de ambiente DOCKERBUILDFLAG.
  • Autentique com o registro que contenha as imagens de base.

Estou vendo resultados falsos positivos inesperados. O que devo fazer?

Execute o pipeline de implantação contínua (CD) do site DevSecOps para gerar um SBOM atualizado no armário de evidências. Isso pode abordar uma possível causa de falsos positivos que resulta da presença de um SBOM mais antigo gerado pelo pipeline de conformidade contínua (CC) do site DevSecOps.

Por que a gravidade do relatório ou do problema é diferente da gravidade do link de vulnerabilidade associado?

Como nossa fonte de informações sobre vulnerabilidades mudou recentemente, você poderá ver que a gravidade associada a uma determinada vulnerabilidade foi alterada. O Code Risk Analyzer determinará a gravidade ideal com base em um cálculo de todas as fontes de vulnerabilidades.