Comandos & Flags

Nessa seção você vai encontra detalhes de recursos da CLI e como utilizar cada uma delas.

Flags globais

As flags globais que atualmente temos em nossa CLI são:

Nome da flag Nome da flag curto Valor padrão Descrição
log-level - info

Essa configuração irá definir qual é o nível de log que você deseja visualizar, podem estar entre:

  • "panic"
  • "fatal"
  • "error"
  • "warn"
  • "info"
  • "debug"
  • "trace"
config-file-path - Diretório de trabalho atual/horusec-config.json Diretório onde está localizado o arquivo de configuração. Com este arquivo você pode realizar algumas configurações como por exemplo usando arquivo de configuração.

Comandos

A CLI está dividido em 3 principais comandos:

Version

Comando utilizado para verificar é a atual versão do Horusec. Para usá-lo, basta rodar:

horusec version

Generate

Comando usado para gerar um arquivo de configuração no diretório atual e, com isso, ter algumas opções de customização na análise realizada no Horusec.

horusec generate

Start

Comando usado para iniciar uma análise em busca de possíveis vulnerabilidades e/ou para alterar algumas configurações.

horusec start

Opções de uso para o comando start

1. Arquivo de configuração

Neste caso, todas as configurações de flags podem ser realizadas através de um arquivo chamado horusec-config.json

A seguir, um exemplo de um arquivo de configuração:

{
  "horusecCliCertInsecureSkipVerify": false,
  "horusecCliCertPath": "",
  "horusecCliContainerBindProjectPath": "",
  "horusecCliCustomImages": {
    "c": "",
    "csharp": "",
    "elixir": "",
    "generic": "",
    "go": "",
    "hcl": "",
    "javascript": "",
    "leaks": "",
    "php": "",
    "python": "",
    "ruby": "",
    "shell": ""
  },
  "horusecCliCustomRulesPath": "",
  "horusecCliDisableDocker": false,
  "horusecCliEnableCommitAuthor": false,
  "horusecCliEnableGitHistoryAnalysis": false,
  "horusecCliEnableInformationSeverity": false,
  "horusecCliEnableOwaspDependencyCheck": false,
  "horusecCliFalsePositiveHashes": [],
  "horusecCliLogFilePath": "./tmp",
  "horusecCliFilesOrPathsToIgnore": [
    "*tmp*",
    "**/.vscode/**"
  ],
  "horusecCliEnableShellcheck": false,
  "horusecCliHeaders": {},
  "horusecCliHorusecApiUri": "http://0.0.0.0:8000",
  "horusecCliJsonOutputFilepath": "",
  "horusecCliMonitorRetryInSeconds": 15,
  "horusecCliPrintOutputType": "text",
  "horusecCliProjectPath": "/home/wilian/go/src/github.com/ZupIT/docs-horusec/content",
  "horusecCliRepositoryAuthorization": "00000000-0000-0000-0000-000000000000",
  "horusecCliRepositoryName": "content",
  "horusecCliReturnErrorIfFoundVulnerability": false,
  "horusecCliRiskAcceptHashes": [],
  "horusecCliSeveritiesToIgnore": [
    "INFO"
  ],
  "horusecCliShowVulnerabilitiesTypes": [
    "Vulnerability"
  ],
  "horusecCliTimeoutInSecondsAnalysis": 600,
  "horusecCliTimeoutInSecondsRequest": 300,
  "horusecCliToolsConfig": {
    "Bandit": {
      "istoignore": false
    },
    "Brakeman": {
      "istoignore": false
    },
    "BundlerAudit": {
      "istoignore": false
    },
    "Flawfinder": {
      "istoignore": false
    },
    "GitLeaks": {
      "istoignore": false
    },
    "GoSec": {
      "istoignore": false
    },
    "HorusecEngine": {
      "istoignore": false
    },
    "MixAudit": {
      "istoignore": false
    },
    "NpmAudit": {
      "istoignore": false
    },
    "PhpCS": {
      "istoignore": false
    },
    "Safety": {
      "istoignore": false
    },
    "SecurityCodeScan": {
      "istoignore": false
    },
    "Semgrep": {
      "istoignore": false
    },
    "ShellCheck": {
      "istoignore": false
    },
    "Sobelow": {
      "istoignore": false
    },
    "TfSec": {
      "istoignore": false
    },
    "YarnAudit": {
      "istoignore": false
    },
      "DotnetCli": {
        "istoignore": false
   }, 
      "Nancy": {
        "istoignore": false
   },

  "horusecCliWorkDir": {
    "go": [],
    "csharp": [],
    "ruby": [],
    "python": [],
    "java": [],
    "kotlin": [],
    "javaScript": [],
    "leaks": [],
    "hcl": [],
    "php": [],
    "c": [],
    "yaml": [],
    "generic": [],
    "elixir": [],
    "shell": [],
    "dart": [],
    "nginx": []
  }
}

Por definição padrão, o Horusec vai buscar esse arquivo de configuração automática na mesma pasta em que for executado o comando horusec.start.

Portanto, é recomendado que você esteja na raiz do seu projeto, assim como o comando start.

2. Variável de ambiente

Neste caso, você pode utilizar algumas váriaveis de ambiente para alterar as opções de configuração do Horusec.

export HORUSEC_CLI_HORUSEC_API_URI="http://0.0.0.0:8000"
export HORUSEC_CLI_TIMEOUT_IN_SECONDS_REQUEST="300"
export HORUSEC_CLI_TIMEOUT_IN_SECONDS_ANALYSIS="600"
export HORUSEC_CLI_MONITOR_RETRY_IN_SECONDS="15"
export HORUSEC_CLI_REPOSITORY_AUTHORIZATION="00000000-0000-0000-0000-000000000000"
export HORUSEC_CLI_PRINT_OUTPUT_TYPE="text"
export HORUSEC_CLI_JSON_OUTPUT_FILEPATH=""
export HORUSEC_CLI_SEVERITIES_TO_IGNORE="INFO"
export HORUSEC_CLI_FILES_OR_PATHS_TO_IGNORE="*tmp*, **/.vscode/**"
export HORUSEC_CLI_RETURN_ERROR_IF_FOUND_VULNERABILITY="false"
export HORUSEC_CLI_PROJECT_PATH="./"
export HORUSEC_CLI_FILTER_PATH=""
export HORUSEC_CLI_ENABLE_GIT_HISTORY_ANALYSIS="false"
export HORUSEC_CLI_CERT_INSECURE_SKIP_VERIFY="false"
export HORUSEC_CLI_CERT_PATH=""
export HORUSEC_CLI_ENABLE_COMMIT_AUTHOR="false"
export HORUSEC_CLI_REPOSITORY_NAME="config"
export HORUSEC_CLI_FALSE_POSITIVE_HASHES=""
export HORUSEC_CLI_RISK_ACCEPT_HASHES=""
export HORUSEC_CLI_TOOLS_TO_IGNORE=""
export HORUSEC_CLI_HEADERS=""
export HORUSEC_CLI_CONTAINER_BIND_PROJECT_PATH=""
export HORUSEC_CLI_DISABLE_DOCKER="false"
export HORUSEC_CLI_CUSTOM_RULES_PATH=""
export HORUSEC_CLI_ENABLE_INFORMATION_SEVERITY="false"
export HORUSEC_CLI_SHOW_VULNERABILITIES_TYPES="Vulnerability"
export HORUSEC_CLI_ENABLE_OWASP_DEPENDENCY_CHECK="false"
export HORUSEC_CLI_ENABLE_SHELLCHECK="false"
export HORUSEC_CLI_LOG_FILE_PATH="./tmp"

3. Flags

Neste caso, você pode passar algumas flags para alterar seus valores.

Por exemplo, é possível utilizar uma flag horusec start --ignore="**/*test.go" ou mesmo usar uma flag curta horusec start -i **/*test.go.

Na tabela abaixo, você confere todas as flags disponíveis. Para melhor visualização, basta arrastar para o lado:

Variável de ambiente Chave no arquivo de configuração Nome da Flag Nome da Flag curto Valor padrão Descrição
HORUSEC_CLI_MONITOR_RETRY_IN_SECONDS horusecCliMonitorRetryInSeconds monitor-retry-count m 15 Esta configuração identifica em quantos segundos quero verificar se minha análise está perto do tempo limite. O tempo mínimo é 10s.
HORUSEC_CLI_SEVERITIES_TO_IGNORE horusecCliSeveritiesToIgnore ignore-severity s INFO Esta configuração identifica quais níveis de severidade você deseja ignorar, pode ser entre: CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN, INFO
HORUSEC_CLI_PRINT_OUTPUT_TYPE horusecCliPrintOutputType output-format o text A saída pode ser alterada entre json ou sonarqube ou text
HORUSEC_CLI_JSON_OUTPUT_FILEPATH horusecCliJsonOutputFilepath json-output-file O Caso a saída seja sonarqube ou json deverá ter um nome do arquivo a ser salvo. Ex.:./output.json
HORUSEC_CLI_FILES_OR_PATHS_TO_IGNORE horusecCliFilesOrPathsToIgnore ignore i Esta configuração especifica alguns caminhos absolutos de arquivos ou pastas e até padrões para ignorar no envio para análise. Ex.: /home/user/go/project/helpers/ , /home/user/go/project/utils/logger.go, **/*tests.go Este exemplo mostra todos os arquivos dentro da pasta helpers sendo ignorados, assim como o arquivo logger.go e todos os arquivos terminados em tests.go. Por padrão, o Horusec não realiza a análise em imagens, vídeos, binários, pastas de IDE e pastas de dependências, como node modules e vendor.
HORUSEC_CLI_HORUSEC_API_URI horusecCliHorusecApiUri horusec-url u http://0.0.0.0:8000 Esta configuração tem por objetivo identificar onde estará o url onde o serviço horusec-api está hospedado
HORUSEC_CLI_TIMEOUT_IN_SECONDS_REQUEST horusecCliTimeoutInSecondsRequest request-timeout r 300 Esta configuração identifica quanto tempo, em segundos, desejo esperar para enviar o objeto de análise para horusec-api. O tempo mínimo é 10s.
HORUSEC_CLI_TIMEOUT_IN_SECONDS_ANALYSIS horusecCliTimeoutInSecondsAnalysis analysis-timeout t 600 Esta configuração identifica quanto tempo, em segundos, quero esperar para realizar uma análise que inclui: "adquirindo um projeto", "enviando para análise", "saída de containers" e "adquirindo uma resposta". O tempo mínimo é 10.
HORUSEC_CLI_REPOSITORY_AUTHORIZATION horusecCliRepositoryAuthorization authorization a 00000000-0000-0000-0000-000000000000 Para executar a análise, você precisa do token de autorização. Este token você pode obter gerando um novo token dentro do seu repositório horusec. Ver mais AQUI
HORUSEC_CLI_RETURN_ERROR_IF_FOUND_VULNERABILITY horusecCliReturnErrorIfFoundVulnerability return-error e false Esta configuração é feita para saber se eu quero retornar a saída (1) caso eu encontre alguma vulnerabilidade na análise. (Bastante utilizado em pipelines)
HORUSEC_CLI_PROJECT_PATH horusecCliProjectPath project-path p ${CURRENT_DIRECTORY} Esta configuração serve para saber se desejo alterar o diretório de análise e não desejo executar no diretório atual. Se este valor não for passado, o Horusec perguntará se você deseja executar a análise no diretório atual. Se passar, ele iniciará a análise no diretório informado por você sem perguntar nada.
HORUSEC_CLI_CERT_INSECURE_SKIP_VERIFY horusecCliCertInsecureSkipVerify insecure-skip-verify S false Esta configuração usada para desativar a validação do certificado. Seu uso não é recomendado fora dos casos de teste.
HORUSEC_CLI_CERT_PATH horusecCliCertPath certificate-path C Usado para passar o caminho do certificado. Ex.:-C="/home/example/ca.crt ".
HORUSEC_CLI_FILTER_PATH horusecCliFilterPath filter-path f Esta configuração serve para definir o caminho para executar a análise e manter o caminho atual em sua base. Exemplo: um projeto que contém backend e frontend em que quero rodar no path base, mas desejo analisar somente o frontend. Ficaria assim: -f="./frontend"
HORUSEC_CLI_ENABLE_GIT_HISTORY_ANALYSIS horusecCliEnableGitHistoryAnalysis enable-git-history false Esta configuração serve para saber se eu desejo habilitar ferramentas e análises de execução do gitleaks em todo o histórico do git pesquisando por vulnerabilidades.
HORUSEC_CLI_ENABLE_COMMIT_AUTHOR horusecCliEnableCommitAuthor enable-commit-author G false Esta configuração é usada para habilitar e desabilitar o autor de commit. Se não passar, o author ficará vazio. Se passar, iremos pesquisar no histórico git quem é o author da vulnerabilidade encontrada pelo Horusec. Caso essa opção não esteja habilitada, o usuário deve ter git instalado na máquina e ter a pasta .git na base em que estiver executando a análise.
HORUSEC_CLI_REPOSITORY_NAME horusecCliRepositoryName repository-name n Caso o token de autorização seja da empresa, você deverá enviar o nome do repositório a ser analisado. Se o repositório não existir na base do Horusec, iremos criar com o nome apresentado nesta configuração.
HORUSEC_CLI_FALSE_POSITIVE_HASHES horusecCliFalsePositiveHashes false-positive F Usado para ignorar vulnerabilidade nas análises e configurar com o tipo Falso positivo . Quando você adiciona esta configuração diretamente na CLI, a configuração irá sobre escrever as configurações da interface gráfica do Horusec.
HORUSEC_CLI_RISK_ACCEPT_HASHES horusecCliRiskAcceptHashes risk-accept R Esta configuração é usada para ignorar vulnerabilidades nas análises e configurar com o tipo Risco aceito . Quando você adiciona esta configuração diretamente na CLI, a configuração irá sobrescrever as configurações da interface gráfica do Horusec.
HORUSEC_CLI_CUSTOM_RULES_PATH horusecCliCustomRulesPath custom-rules-path c Esta configuração é usada para passar o caminho para o arquivo das regras personalizadas do Horusec. Exemplo: -c="./horusec/horusec-custom-rules.json".
HORUSEC_CLI_ENABLE_INFORMATION_SEVERITY horusecCliEnableInformationSeverity information-severity I false Esta configuração é usada para habilitar ou desabilitar a severidade das informações da vulnerabilidade que podem conter falso positivo. Ex.: I="true"
HORUSEC_CLI_DISABLE_DOCKER horusecCliDisableDocker disable-docker D false Used to run horusec without docker if enabled it will only run the following tools: horusec-csharp, horusec-kotlin, horusec-kubernetes, horusec-leaks, horusec-nodejs, horusec-dart. Example: -D=\"true\"
HORUSEC_CLI_CONTAINER_BIND_PROJECT_PATH horusecCliContainerBindProjectPath container-bind-project-path P Esta configuração é usada para passar o path do projeto para host quando rodando o horusec CLI dentro de um container.
HORUSEC_CLI_HEADERS horusecCliHeaders headers {} Esta configuração é usada para enviar cabeçalhos adicionais em todas as requisições HTTP da horusec-cli e, dessa forma, garantir que o seu servidor tenha acesso aos dados gerados no dashboard do Horusec.
horusecCliWorkDir {"go": [],"csharp": [],"ruby": [],"python": [],"java": [],"kotlin": [],"javaScript": [],"leaks": [],"hcl": [],"php": [],"c": [],"yaml": [],"generic": [],"elixir": [],"shell": [],"dart": [],"nginx": []} Esta configuração informa ao Horusec o diretório correto para executar uma linguagem específica.
horusecCliToolsConfig {"Bandit": {"istoignore": false},"Brakeman": {"istoignore": false},"BundlerAudit": {"istoignore": false},"Flawfinder": {"istoignore": false},"GitLeaks": {"istoignore": false},"GoSec": {"istoignore": false},"HorusecEngine": {"istoignore": false},"MixAudit": {"istoignore": false},"NpmAudit": {"istoignore": false},"PhpCS": {"istoignore": false},"Safety": {"istoignore": false},"SecurityCodeScan": {"istoignore": false},"Semgrep": {"istoignore": false},"ShellCheck": {"istoignore": false},"Sobelow": {"istoignore": false},"TfSec": {"istoignore": false} Esta configuração informa ao Horusec quais ferramentas estão habilitadas a realizar análise.
horusecCliCustomImages {"c": "","csharp": "","elixir": "","generic": "","go": "","hcl": "","javascript": "","leaks": "","php": "","python": "","ruby": "","shell": ""} Esta configuração informa ao Horusec onde a imagem docker da linguagem está para rodar a análise.
HORUSEC_CLI_REGISTRY_USERNAME Esta configuração informa ao Horusec o usuário para realizar download de imagens caso você tenha configurado em um registro privado.
HORUSEC_CLI_REGISTRY_PASSWORD Esta configuração informa ao Horusec a senha para realizar download de imagens caso você tenha configurado em um registro privado.
HORUSEC_CLI_REGISTRY_ADDRESS Esta configuração informa ao Horusec o endereço para realizar download de imagens caso você tenha configurado em um registro privado.
HORUSEC_CLI_ENABLE_OWASP_DEPENDENCY_CHECK horusecCliEnableOwaspDependencyCheck enable-owasp-dependency-check -w false Habilita a ferramenta owasp dependency check, que realiza a análise de dependências. `Ex: -w`
HORUSEC_CLI_ENABLE_SHELLCHECK horusecCliEnableShellcheck enable-shellcheck j false Habilita o shellcheck na ferramenta, e procura erros em arquivos sh. Ex: -j.
HORUSEC_CLI_LOG_FILE_PATH horusecCliLogFilePath log-file-path l ./tmp/horusec/ Mudança no caminho do arquivo de log default.
HORUSEC_CLI_SHOW_VULNERABILITIES_TYPES horusecCliShowVulnerabilities show-vulnerabilities-types Vulnerability Usado para mostrar as vulnerabilidades dos tipos informados. Exemplo --show-vulnerabilities-types="Vulnerability, Risk Accepted, Corrected".
GITHUB_TOKEN Esta variável de ambiente é consumida por ferramentas que necessitam de uma integração com as API's do Github como o Nancy a fim de evitar o erro "limitante de taxa"

Exemplos

A seguir, você pode conferir alguns exemplos práticos de comandos usando a CLI do Horusec:

Exemplo 1: Usando outro diretório

Neste exemplo, estamos utilizando:

  • A flag -p para informar o local onde está o projeto;
  • A flag -a passando o token de autorização a fim de enviar essa análise para nossa interface web.
horusec start -a="REPOSITORY_TOKEN" -p="/home/user/project"

Exemplo 2: Usando nome de flag completo de diretório

Neste exemplo, estamos utilizando:

  • A flag --project-path para informar o local onde está o projeto;
  • A flag --authorization passando o token de autorização a fim de enviar essa análise para nossa interface web.
horusec start --authorization="REPOSITORY_TOKEN" --project-path="/home/user/project" 

Exemplo 3: Usando outro nome de flag completo de diretório

Neste exemplo, estamos utilizando:

  • A flag -p para informar o local onde está o projeto;
  • A flag -a passando o token de autorização a fim de enviar essa análise para nossa interface web;
  • A flag -i onde iremos ignorar essas pastas ou arquivos.
horusec start -p="/home/user/project" -a="REPOSITORY_TOKEN" -i="**/node_modules/**, **/vendor/**, **/*_test.go"

Exemplo 4: Usando para obter uma saída JSON

Neste exemplo, estamos utilizando:

  • A flag -p para informar o local onde está o projeto;
  • A flag -a passando o token de autorização a fim de enviar essa análise para nossa interface web,
  • A flag -oonde o output está sendo utilizado é "json" e o local do arquivo de saída será em "./output.json”.
horusec start -p="/home/user/project" -a="REPOSITORY_TOKEN" -o="json" -O="./output.json"

Exemplo 5: Usando para obter uma saída sonarqube

Neste exemplo, estamos utilizando:

  • A flag -p para informar o local onde está o projeto;
  • A flag -a passando o token de autorização a fim de enviar essa análise para nossa interface web;
  • A flag -o onde o output está sendo utilizado é “sonarqube” e o local do arquivo de saída será em “./sonarqube.json”
horusec start -p="/home/user/project" -a="REPOSITORY_TOKEN" -o="sonarqube" -O="./sonarqube.json"

Exemplo 6: Usando como imagem docker localmente

Veja que, neste exemplo, o comando horusec start já é executado. Por isso, ao iniciar a imagem, basta adicionar as flags que deseja.

Quando o comando é usado dessa forma, você precisa criar um volume do seu projeto para a imagem e seu local de destino. Para isso, é recomendado que esse local seja sempre na localização /project.

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/src horuszup/horusec-cli:latest horusec start -p /src -P $(pwd)

Exemplo 7: Usando como imagem docker em sua pipeline

Vamos utilizar como exemplo a AWS Code Build para realizar a análise.

Veja que, neste exemplo, temos que utilizar o comando sh /usr/local/bin/horusec-cli.sh, pois neste script temos algumas configurações necessárias.

Ao iniciar a análise, perceba que o comando horusec start também foi iniciado e, por isso, basta você adicionar as flags que deseja.

  build:
    commands:
      - docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/src/horusec horuszup/horusec-cli:latest horusec start -p /src/horusec -P $(pwd)