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 | 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ê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 |
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-generaterequer que os comandosDocker clietarestejam disponíveis. - Se o caminho contém arquivos Maven, este comando usa
mvnpara construir uma lista de dependências. Neste cenário, o comandobom-generaterequer que o comandomvnesteja disponível. - Se o caminho contiver arquivos Gradle, este comando usará
gradlepara construir uma lista de dependências. Neste cenário, o comandobom-generaterequer que o comandogradleesteja disponível. - Se o caminho contiver arquivos Node.js
package-jsone este comando for usado para gerar um arquivopackage-lock.jsoncorrespondente, o comandobom-generateusará onpmpara construir o arquivo package-lock.json. Neste cenário, o comando requer que o comandonpmesteja disponível. - Se o caminho contiver os arquivos Python
requirements.txtoupyproject.toml, o comando usarápippara gerar as dependências do pacote. Nesse cenário, o comandobom-generateexige que o comandopipesteja 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 | 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 | 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
truee 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).
| 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 | 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 | 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.
| 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 builde 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.