Integrando o Syhunt ao Jenkins

As informações contidas neste documento se aplicam a versão 6.9.5.5 do Syhunt Hybrid.

Varreduras do Syhunt podem ser facilmente executadas de dentro de um script de Pipeline do Jenkins, permitindo que você integre as ferramentas Syhunt Dynamic, Syhunt Code e Syhunt Mobile no seu pipeline de entrega contínua, agendar varreduras e mais.

Onde instalar o Syhunt

Hoje, o Syhunt pode ser instalado em 1) uma máquina Jenkins, o que faz com que o Syhunt e o servidor Jenkins coexistam na mesma máquina ou 2) uma máquina Jenkins secundária que funcionará como agente Jenkins e será chamada remotamente por uma máquina mestre Jenkins através de uma conexão SSH.

É considerada uma prática recomendada e comum fazer o uso de agentes de CI em ambientes DevOps e, por isso, recomendamos fortemente a segunda opção. Por motivos de segurança e desempenho, em ambientes de produção, também é considerada uma prática recomendada ter uma máquina dedicada funcionando como um agente.

Se você deseja ter o Syhunt rodando no Windows ou Linux, lembre-se de instalar o Syhunt depois de implantar e configurar o Jenkins. Desta maneira a instalação do Syhunt vai detectar sua instalação do Jenkins e automaticamente instalar as extensões necessárias. Se, por acidente, você instalar o Syhunt antes do Jenkins, precisará apenas executar o instalador do Syhunt novamente.

É importante lembrar que Syhunt é, conforme documentado, licenciado por dispositivo e múltiplos agentes exigirão múltiplas licenças - uma por cada dispositivo.

Ativando um Agente Syhunt

Depois de implantar e configurar as instalações mestre e slave do Jenkins, siga as etapas a seguir para tornar o agente acessível dentro da instalação mestre do Jenkins:

  1. No Painel do Jenkins (mestre), clique em Gerenciar Jenkins nos links da barra lateral:
  2. Em Configuração do Sistema, clique em Gerenciar Nós e Nuvens:
  3. Na tela Nós, clique em Novo Nó nos links da barra lateral:
    1. Dê um nome ao nó:
    2. Selecione a opção Agente Permanente e clique no botão OK.
    3. Atualize a opção # do executor para: 2:
    4. Atualize o diretório raiz remoto para o diretório de instalação do Jenkins: /var/lib/jenkins
      1. No Windows, você deve definir o diretório raiz remoto para o diretório .jenkins, que geralmente é C:\Users\[youruser]\.jenkins ou C:\windows\system32\config\systemprofile\AppData\Local\Jenkins\.jenkins.
      2. Verifique qual caminho existe na máquina slave e digite o caminho apropriado em diretório raiz remoto.
    5. Dê um rótulo ao nó que pode ser usado posteriormente para se referir a este nó. Ex: Syhunt
    6. Mantenha Uso inalterado / padrão:
    7. Altere o método de lançamento para: Lançar agentes via SSH.
    8. Digite o host da máquina slave Jenkins, que pode ser um endereço IP.
    9. Em Credenciais, clique em Adicionar e insira o nome de usuário e a senha do usuário da máquina slave do Jenkins.
    10. Se você não tiver uma credencial SSH, altere Estratégia de Verificação de Chave de host para: Não Verificação (Non verifying Verification Strategy):
      1. Se você criou uma credencial SSH do Jenkins na instalação slave do Jenkins, conforme indicado na documentação do Jenkins, altere a Estratégia de Verificação da Chave do host para: Chave fornecida manualmente
      2. Recomenda-se o uso de uma Estratégia de Verificação para melhor segurança, especialmente quando em produção.
    11. Mantenha Disponibilidade inalterada / padrão.
    12. Clique no botão Salvar.
  4. Finalmente, se você ainda não o fez, instale o Syhunt na máquina secundária que possui a instalação slave do Jenkins conforme explicado abaixo.

Antes de Instalar o Syhunt (Windows)

Depois de implantar e configurar o Jenkins:

  1. Se você desejar usar o scanCode() para analisar endereços GIT, você precisará instalar o Git for Windows no Windows, que pode ser baixado através do site https://gitforwindows.org/
  2. Você está pronto para instalar o Syhunt, conforme documentado no Guia de Instalação.

Antes de Instalar o Syhunt (Linux)

Depois de implantar e configurar o Jenkins, lembre-se de alterar o usuário do Jenkins para o usuário atual (contanto que não seja root) ou um usuário apropriado de sua escolha - não recomendamos executar o usuário do Jenkins como root, pois isso pode expor o sistema operacional e repositórios do Jenkins:

  1. Se você estiver no CentOS: sudo vim /etc/sysconfig/jenkins ou sudo vi /etc/sysconfig/jenkins
    1. Se você estiver no Ubuntu: sudo vim /etc/default/jenkins ou sudo vi /etc/default/jenkins
  2. Atualize a variável JENKINS_USER="jenkins" para JENKINS_USER="usuarioescolhido"
  3. Altere a propriedade dos diretórios principais do Jenkins para o novo usuário:
    1. sudo chown -R user:usuarioescolhido /var/lib/jenkins
    2. sudo chown -R user:usuarioescolhido /var/log/jenkins
    3. sudo chown -R user:usuarioescolhido /var/cache/jenkins
  4. Reinicie o Jenkins: sudo systemctl restart jenkins
  5. Logado como usuarioescolhido, você está pronto para instalar o Syhunt, como documentado no Guia de Instalação para Linux
    1. Se você usar scanCode() para analisar uma URL GIT, você precisará instalar o Git no Linux, conforme documentado no link acima.

Adicionando o Syhunt ao script da Pipeline

  1. Através do Dashboard do Jenkins, abra o item de pipeline desejado.
  2. Clique Configure nos links da sidebar (barra lateral).
  3. Vá até a aba Pipeline e desmarque a opção "Use Groovy Sandbox" se estiver marcada
  4. Insira o código abaixo na posição apropriada do seu script de pipeline:

def rootDir = pwd()
def syhunt = load "${rootDir}/../workspace@script/syhunt/syhunt.groovy"
syhunt.scanURL([target: 'http://somewebsite.com/', huntMethod: 'appscan', pfcond: 'failifriskmedium'])

Examplo:


#!/usr/bin/env groovy

# Se você não estiver usando a funcionalidade de agentes, lembre-se de alterar a linha abaixo para apenas: node {
node ("Syhunt") {  
    stage('Scan') {
        def rootDir = pwd()
        def syhunt = load "${rootDir}/../workspace@script/syhunt/syhunt.groovy"
        syhunt.scanURL([target: 'http://somewebsite.com/', huntMethod: 'appscan', pfcond: 'failifriskmedium'])
    }
}

Clique no botão Save para atualizar a configuração da pipeline.

Executando o Build

Após a execução do script de pipeline acima, o Console Output do projeto deve conter algo como:

Pipeline] echo
Preparing to scan URL: http://somewebsite.com/
[Pipeline] echo
VULNERABLE!
Found 2 vulnerabilities
SYHUNT URLSCAN 6.8.5.4 PLATINUM EDITION (c) 2020 Syhunt
...
[Pipeline] echo
Build problem: found Medium risk vulnerabilities.
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: FAILURE

Função scanURL

O Syhunt Dynamic pode ser be invocado através da função scanURL(). Os seguintes parâmetros devem ser fornecidos ao chamar a função scanURL():

  • target - o URL alvo a ser examinado (exemplo: http://www.somesite.com)
  • huntMethod (opcional) - o método de varredura a ser usado durante o scan, Se omitido, o método padrão será usado.
  • pfcond (opcional) - permite que o build falhe se uma certa condição for encontrada. Confira abaixo uma lista das condições de aprovação/reprovação disponíveis.

Após a execução, a função scanURL() retorna um mapa contendo as seguintes chaves:

  • outFilename - O nome de arquivo do relatório gerado.
  • outResultHTML - O conteúdo do relatório de varredura gerado em formato de texto HTML.

Funções scanCode

O Syhunt Code pode ser invocado através da função scanCode(). Os seguintes parâmetros devem ser fornecidos ao chamar a função scanCode():

  • target - o URL alvo de um repositório GIT, diretório de código-fonte ou arquivo local a ser analisado
  • huntMethod (opcional) - o método de varredura a ser usado durante o scan, Se omitido, o método padrão será usado.
  • pfcond (opcional) - permite que o build falhe se uma certa condição for encontrada. Confira abaixo uma lista das condições de aprovação/reprovação disponíveis.
  • branch (opcional) - o branch do repositório GIT a ser analisado. Se omitido, master será o alvo. Este parâmetro não é necessário se o alvo for um diretório ou arquivo local.

Após a execução, a função scanCode() retorna um mapa contendo as seguintes chaves:

  • outFilename - O nome de arquivo do relatório gerado.
  • outResultHTML - O conteúdo do relatório de varredura gerado em formato de texto HTML.

Exemplos:


syhunt.scanCode([target: 'https://github.com/someuser/somerepo.git', huntMethod: 'normal', pfcond: 'failifriskmedium'])
syhunt.scanCode([target: 'C:\\www\\', huntMethod: 'normal', pfcond: 'failifriskmedium'])

Condições de Aprovação / Reprovação

A seguir estão as condições de aprovação / reprovação atualmente suportadas pelo Syhunt:

  • fail-if:risk=high - Falha se for encontrada uma vulnerabilidade de alto risco
  • fail-if:risk=mediumup - Falha se for encontrada uma vulnerabilidade de risco Médio ou Alto
  • fail-if:risk=lowup - Falha se for encontrada uma vulnerabilidade de risco Baixo, Médio ou Alto

Agendando Verificações

  1. Através do Dashboard do Jenkins, abra o item de pipeline desejado.
  2. Clique em Configure através dos links da sidebar (barra lateral)
  3. Vá até a aba Build Triggers, marque a opção "Build periodically" e insira a programação apropriada.
  4. Clique no botão Save para atualizar a configuração da pipeline.


Para documentação adicional do produto, visite syhunt.com/docs/br

お問い合わせ

Contact