8 de ago de 2019

6 práticas recomendadas para a segurança do OpenSSH

Segurança do OpenSSH


Olá, meu caro! 

Talvez você nunca tenha se deparado com a situação abaixo, mas e se deparasse, qual seria a sua atitude? Você tem controle dos acessos realizados no seu parque de máquinas?  A imagem abaixo demonstra informações de segurança no Kibana do meu ambiente na google cloud cuja as máquinas estão expostas na internet e com algumas portas abertas. Existem regras de firewall, tanto iptables quanto fail2ban,  porém agora iremos ver algumas ações recomendadas que podem ser feitas no OpenSSH para ampliar a segurança. 


Figura 1 - Kibana, dashboard de monitoramento de atividades dos hosts.


Estas são as seis tarefas mais importantes para proteger sua configuração do servidor SSH:

Figura 2 - Configurações sshd_config

1.       Use uma senha forte;
2.       Altere a porta padrão do SSH;
3.       Desabilite o login do root;
4.       Limite o acesso do usuário;
5.       Use acesso baseado em chave para autenticação.
6.       Desativar senhas vazias
 

1.       Use uma senha forte;


Não é demais enfatizar o quanto é importante usar senhas de usuário e senhas fortes para suas chaves. O ataque de força bruta funciona porque o usuário acessa senhas baseadas em dicionário. Você pode forçar os usuários a evitar senhas contra um ataque de dicionário e usar a ferramenta john the ripper para descobrir senhas fracas existentes.

2. Altere a porta padrão do SSH;


A porta padrão do serviço SSH é 22, você deve alterá-la para tornar menos óbvio que seu servidor esteja executando um serviço SSH.

#vim /etc/ssh/sshd_config
Altere a linha abaixo:
Port 22
Escolha outro valor para a porta
Port 2123

 3.       Desabilite o login do root;


É importante desativar o login direto para o usuário root, pois há muitos ataques de força bruta contra o root. IMPORTANTE: teste o login SSH com seu usuário alternativo não raiz que você planeja usar para logins ssh antes de desabilitar a conta raiz.

Figura 3 - Tentativas de acesso com usuário root


4.       Limite o acesso do usuário;


Por padrão, todos os usuários do sistema podem efetuar login via SSH usando sua senha ou chave pública. Às vezes, você cria uma conta de usuário do UNIX / Linux para fins de FTP ou email. No entanto, esses usuários podem efetuar login no sistema usando o ssh. Eles terão acesso total às ferramentas do sistema, incluindo compiladores e linguagens de script, como Perl, Python, que podem abrir portas de rede e fazer muitas outras coisas sofisticadas. O controle baseado em grupo é mais flexível e fácil de administrar, por isso coloquei os dois exemplos abaixo. Se você optar por utilizar a permissionamento por usuário e não grupos caso você adicione um novo usuário no sistema, você terá que editar o sshd_config e adicionar esse novo usuário. 

Para permissão de usuários:
#AllowUsers luizep developers
Para permissão de grupos:
AllowGroups developers devops sysadmin
Para negar usuários:
#DenyUsers root


5.       Use acesso baseado em chave para autenticação;


Todos os logins baseados em senha devem ser desativados. Somente logins baseados em chave pública são permitidos. Adicione o seguinte no seu arquivo sshd_config:

PubkeyAuthentication yes


6.       Desativar senhas vazias.


Você precisa explicitamente proibir o login remoto de contas com senhas vazias, atualize sshd_config com a seguinte linha:

PermitEmptyPasswords no

2 de ago de 2019

Comandos úteis para o elastichsearch

Introdução


Para quem não conhece, o Elasticsearch é um “servidor de buscas distribuído baseado no Apache Lucene”. Em outras palavras, pode-se dizer que o Elasticsearch é um banco de dados NoSQL, porém com esteroides, uma série de plugins e ferramentas auxiliares. E o melhor, opensource.
Abaixo está uma lista de comandos que podem ajudar na execução de solução de problemas do seu cluster elasticsearch.

substitua localhost pelo endereço IP de seus hosts elasticsearch se não estiver escutando em localhost.

Saúde do cluster

curl -XGET 'http://localhost:9200/_cluster/health?pretty'

Deletar um index

curl -XDELETE 'localhost:9200/index_name*?pretty' -d '
{
  "acknowledged" : true
}

Encontrar shards não atribuídos

curl -XGET localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grep UNASSIGNED

File Sharing (Samba) - Mental map

Nginx structure - Mental map

31 de jul de 2019

O que é Brainstorming

Brainstorming significa tempestade cerebral ou tempestade de ideias. É uma expressão inglesa formada pela junção das palavras "brain", que significa cérebro, intelecto e "storm", que significa tempestade.
brainstorming é uma dinâmica de grupo que é usada em várias empresas como uma técnica para resolver problemas específicos, para desenvolver novas ideias ou projetos, para juntar informação e para estimular o pensamento criativo.
Brainstorming é um método criado nos Estados Unidos, pelo publicitário Alex Osborn, usado para testar e explorar a capacidade criativa de indivíduos ou grupos, principalmente nas áreas de relações humanas, dinâmicas de grupo e publicidade e propaganda.
A técnica de brainstorming propõe que um grupo de pessoas se reúnam e utilizem seus pensamentos e ideias para que possam chegar a um denominador comum, a fim de gerar ideias inovadoras que levem um determinado projeto adiante. Nenhuma ideia deve ser descartada ou julgada como errada ou absurda, todas devem estar na compilação ou anotação de todas as ideias ocorridas no processo, para depois evoluir até a solução final.
Para uma sessão de brainstorming devem ser seguidas algumas regras básicas: é proibido debates e críticas às ideias apresentadas, pois causam inibições, quanto mais ideias melhor; nenhuma ideia deve ser desprezada, ou seja, as pessoas têm liberdade total para falarem sobre o que quiserem; para o bom andamento, deve-se reapresentar uma ideia modificada ou combinação de ideias que já foram apresentadas; por fim, igualdade de oportunidade - todos devem ter chance de expore suas ideias.
Fonte: significados.com.br

16 de mai de 2019

Falha ao iniciar o Daemon do scanner do sistema Open Vulnerability Assessment


Olá, meus caros!

Recentemente ocorreu um problema com o openvas-scanner e foi algo simples, ocorrido inesperadamente, sem intervenção alguma. Quando ocorreu o problema o openvas-scanner estava em funcionamento, no primeiro momento tentei iniciá-lo, porém não obtive êxito. Efetuei verificações nos arquivos de configurações em; /var/lib/systemd/system/openvas* . Todos os arquivos estavam conforme eu havia configurado.  

Problema: O openvas-scanner não se comunicava com o redis. 
OpenVAS can currently only access redis via a unix socket. This choice has been
made for the sake of speed and security. No authentication is supported yet, we
rely on filesystem permissions to protect the KBs.

Conexão: O OpenVAS atualmente só pode acessar o redis através de um soquete unix. Esta escolha foi feita por uma questão de velocidade e segurança. 

Solução:  Recriar o arquivo /var/run/redis-openvas/redis-server.sock.


Documentação oficial; redis_config.txt


O erro abaixo é exibido na WEB GUI e acontece quando o scanner selecionado na task, não está em execução. 

Operation: Start Task
Status code: 503
Status message: Service temporarily down


O erro abaixo é exibido quando é verificado o status do scanner. 


┌─[root@parrot]─[/home/]
└──╼ #systemctl status openvas-scanner
openvas-scanner.service - Open Vulnerability Assessment System Scanner Daemon
   Loaded: loaded (/lib/systemd/system/openvas-scanner.service; enabled; vendor pres
   Active: failed (Result: timeout) since Tue 2019-05-14 21:08:05 -03; 1 day 17h ago
     Docs: man:openvassd(8)
           http://www.openvas.org/
  Process: 21371 ExecStart=/usr/sbin/openvassd --unix-socket=/var/run/openvassd.sock

May 14 21:06:35 parrot.isweluiz systemd[1]: Starting Open Vulnerability Assessm
May 14 21:08:05 parrot.isweluiz systemd[1]: openvas-scanner.service: Start oper
May 14 21:08:05 parrot.isweluiz systemd[1]: openvas-scanner.service: Control pr
May 14 21:08:05 parrot.isweluiz systemd[1]: openvas-scanner.service: Failed wit
May 14 21:08:05 parrot.isweluiz systemd[1]: Failed to start Open Vulnerability


Solução

┌─[root@parrot]─[/etc/openvas]
└──╼ #mv /var/run/redis-openvas/redis-server.sock redis-server.sock.bk

┌─[root@parrot]─[/etc/openvas]
└──╼ #touch /var/run/redis-openvas/redis-server.sock

┌─[root@parrot]─[/etc/openvas]
└──╼ #systemctl status redis-server


┌─[root@parrot]─[/etc/openvas]
└──╼ #redis-cli ping
PONG

┌─[✗]─[root@parrot]─[/opt]
└──╼ #systemctl restart  openvas-scanner
┌─[root@parrot]─[/opt]
└──╼ #systemctl status openvas-scanner
 openvas-scanner.service - Open Vulnerability Assessment System Scanner Daemon
   Loaded: loaded (/lib/systemd/system/openvas-scanner.service; enabled; vendor prese
   Active: active (running) since Thu 2019-05-16 15:28:15 -03; 992ms ago
     Docs: man:openvassd(8)
           http://www.openvas.org/
  Process: 21841 ExecStart=/usr/sbin/openvassd --unix-socket=/var/run/openvassd.sock
 Main PID: 21842 (openvassd)
    Tasks: 3 (limit: 4915)
   Memory: 14.0M
   CGroup: /system.slice/openvas-scanner.service
           ├─21842 /usr/sbin/openvassd --unix-socket=/var/run/openvassd.sock
           ├─21843 openvassd (Loading Handler)
           └─21844 /usr/sbin/openvassd --unix-socket=/var/run/openvassd.sock

May 16 15:28:15 parrot.isweluiz systemd[1]: Starting Open Vulnerability Assessme
May 16 15:28:15 parrot.isweluiz systemd[1]: Started Open Vulnerability Assessmen

Por último, rode o comando abaixo para verificar a consistência da instalação do openvas.


┌─[✗]─[root@parrot]─[/opt]
└──╼ #openvas-check-setup
openvas-check-setup 2.3.7


Verificação do scanner via WEB GUI



Espero ter ajudado.






Leituras que não resolveram o meu problema, mas talvez possa resolver o seu:

16 de mar de 2019

Implantar e executar o Splunk Enterprise dentro de um contêiner Docker + conectar-se a openvas

Mais uma vez, 

olá, meu caro!!

O post não começa aqui 


Como vocês perceberam os assuntos do blog estão muito diversificados e isso é legal, quanto mais tecnologias conhecermos melhor, sem via de dúvidas. No post de hoje eu decidi abordar esse assunto de "Splunk+Docker+Openvas" pois no post anterior eu mencionei a respeito dele. Durante minhas buscas eu não consegui identificar este assunto agrupado em um só lugar e em português, lendo documentações e relatos em fóruns e após implantar está arquitetura algumas vezes, 
eu me senti preparado para compartilhar e facilitar a vida dos interessados. Ao final do post eu sempre recomendo leitura, não deixe de ler! 





Por que utilizar Splunk no docker? 


Com a aplicação rodando em micro serviço torna muito fácil a escalação de clusters, replicação do ambiente, obtemos tbm uma redução de recursos e custos de hardware. Após a configuração inicial os clusters podem ser criados sob demanda.


Etapas: 

  1. Obter o docker 
  2. Obter a imagem do splunk 
  3. Rodar a imagem do splunk 
  4. Instalar componente do GSM  no splunk 
  5. Configurar índices
  6. Configurar alertas do splunk 
  7. Disparar alerta do GSM para o splunk

1. Obter o docker 


Caso você não tenha o docker instalado comece por aqui, faça o download e instalação do docker em seu sistema, os links oficiais para download estão logo abaixo:

Website oficial

Community Edition

As instalções estão disponíveis para: 
  • Windows
  • Mac
  • Linux
  • AWS & Azure

Instalação do docker

2. Obtendo a imagem do splunk 

Uma imagem do Docker é uma coleção de binários e configurações a serem usadas ao iniciar um contêiner

Existem imagens oficiais do Splunk Docker

Faça o download da imagem conforme oweb comando abaixo:

#docker pull splunk/splunk:latest

Obtendo a imagem do splunk


Para utilizar a image contida no github declare o comando abaixo:

#git clone https://github.com/splunk/docker-splunk


3. Rodar a imagem do splunk 


Execute o comando abaixo para rodar a imagem do splunk. Repare que a porta 7680 ficará exposta, isto justamente por que precisaremos dela para escutar as conexões advindas do openvas.

docker run -d -p 8000:8000 -p 7680:7680 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=<password>' splunk/splunk:latest
Onde está <password> você deve declarar um novo password para acessar o splunk pela primeira vez. O usuário é admin, após o primeiro acesso as credenciais podem ser alteradas.


Status Contêiner

 #docker ps 
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                   PORTS                                                                                                             NAMES
283ce7035651        splunk/splunk:latest   "/sbin/entrypoint...."   6 minutes ago       Up 6 minutes (healthy)   0.0.0.0:7680->7680/tcp, 4001/tcp, 8065/tcp, 8088-8089/tcp, 8191/tcp, 9887/tcp, 9997/tcp, 0.0.0.0:8000->8000/tcp   tender_ramanujan



Gerenciamento de portas do docker - Contêineres do Docker são executados em uma rede virtual isolada

A saída do comando acima exibirá uma hash de números e letras que representam o ID do contêiner que é a sua aplicação splunk. Execute o comando abaixo para verificar o status do contâiner.

#docker ps -a -f id=<contêiner_id>




Quando o status do contêiner estiver como healthy, significa que ele já está disponível e você poderá acessá-lo com o comando abaixo através de seu navegador.

#localhost:8000



4. Instalar componente do GSM no splunk 

A integração do Splunk requer a instalação do aplicativo Greenbone-Splunk no servidor splunk. O download e instalação do aplicativo são explicados na seção Aplicação Splunk.

Depois que o aplicativo é instalado no servidor splunk, o GSM pode ser instruído a enviar os resultados para o servidor splunk. Esta seção cobrirá a configuração do GSM.


A Greenbone Networks oferece um pequeno aplicativo para integração com o Splunk. O aplicativo está atualmente disponível em https://download.greenbone.net/tools/Greenbone-Splunk-App-1.0.1.tar.gz.


Para instalar o aplicativo no seu servidor splunk. Navegue até Splunk-> App-> ManagerApps > Install app from file  I



Gerenciamento de aplicativos



Upload de aplicativo


Aplicativo instalada com sucesso


Verifique a porta do Greenbone-Splunk-App após a instalação. Você pode acessar a porta na GUI Web através de Settings-> Data inputs-> TCP.



A porta do aplicativo é necessária para a configuração no GSM.


5. Configurar índices


Para configurar o índice acesse settings > indexes > New Index




Criando um novo índice para receber os dados do openvas

Para configurar o índice para receber os dados do openvas acesse settings> data input > 7680 > more settings > index



Adicionando o índice aos dados de entrada do openvas

6. Configurar alertas do splunk 

Para configurar o GSM, navegue até Configuration > Alerts. Crie um novo alerta clicando no ícone novo.
Role para baixo até a opção Enviar para o host. Preencha o endereço IP do servidor splunk e a porta do aplicativo Greenbone. Esta porta TCP é 7680 por padrão. Escolha o formato XML.


Configurações para o novo alerta


Para testar o alerta criado navegue até a aba actions ainda em alerts e clique sobre Test Alert



Validando a conexão do alerta criado




Alerta validado com sucesso


7. Disparar alerta do GSM para o splunk

Este alerta agora pode ser adicionado às tarefas apropriadas. Navegue para Scans > Tasks e crie uma nova Task usando o alerta. O alerta pode até ser adicionado a tarefas já existentes, o alerta não modifica o comportamento da análise.

Resumo e download





Para fins de teste, relatórios existentes podem ser processados pelo alerta. Navegue para Scans > Reports. Escolha qualquer relatório existente e mude para a visualização Resumo e Download. Aqui você pode processar o relatório usando qualquer alerta configurado.


Resumo e download do relatório


Acessando as informações no Splunk

Para acessar as informações no Splunk, alterne para o painel do Greenbone. O painel do Greenbone na interface da Web do Splunk exibirá as vulnerabilidades encontradas nos últimos sete dias.





Você criar visualizações novas e adicionar aos seus dashboards conforme necessário. Abaixo um painel criado por mim para testes no ambiente interno. 






E é isso, até o próximo!



Leitura recomendada:

15 de mar de 2019

Openvas - Análise de dados do relatório de vulnerabilidade com pandas


Olá, meu caro!

Intro 


Hoje irei apresentar para vocês um método que pode ser utilizado em Python com a biblioteca pandas para manipulação de relatórios de análise de vulnerabilidade exportado do openvas. Isto pode ser feito de várias maneiras com outras ferramentas e linguagens de programação, então não se limite à apenas um método, normalmente encontramos maior facilidade de fazer o tratamento dos dados com o Excel e/ou Powerbi, porém, quando não está automatizado está tarefa se torna massiva e nos toma horas, dias ou até mesmo semanas, vai depender de quão extenso é o teu relatório, os gráficos servem para complementar o relatório e não enche-lo de tabelas, é possível utilizar tbm outras ferramentas como o Splunk, irei criar um post mostrando como integrar o openvas ao Splunk e como manipular os dados para gerar visualizações dinâmicas e interativas.

 A etapa de transformação dos dados é a mais demorada e costuma ocupar em média 80% de todo o seu tempo de preparação dos dados. No geral, algo que aprendi durante a especialização em ciência de dados é que isso é um fato e contra fatos não há argumentos, então não adianta chorar, tratar dados requer tempo e a necessidade é a mãe das invenções. 

Por que não encaminhar o relatório original da ferramenta para o cliente? 


O relatório integro pode ser exportado da ferramenta e entregue ao seu cliente porém, como sabemos, o relatório exportado da ferramenta é imenso e não contém todos os detalhes intrínsecos que normalmente queremos apresentar de forma enxuta e direta, o que pode levar o cliente a se confundir e ao não entendimento do que se passas e o que fazer com tudo aquilo que foi apresentado diante dele. É importante sentar com o cliente, entender as necessidades, e então depois desenvolver a sua metodologia.

Se liga cara! Não exporte o relatório cru  e mande para o cliente.


Tipos de relatório

Os relatórios podem ser dos seguintes tipos:
  • Técnico
  • Gerencial

1. Conceito de relatório
"É a exposição escrita na qual se descrevem fatos verificados mediante pesquisas ou se historia a execução de serviços ou de experiências. É geralmente acompanhado de documentos demonstrativos, tais como tabelas, gráficos, estatísticas e outros." (UFPR, 1996)."

2. Objetivos

De um modo geral, podemos dizer que os relatórios são escritos com os objetivos:

divulgar os dados técnicos obtidos e analisados; registrá-los em caráter permanente.

Veja mais sobre relatório no link abaixo.


Exibindo os dados do relatório do openvas em gráficos com pandas


OBS: Os dados apresentados abaixo foram criados randomicamente para apresentação.

Importando o dataset e listando as colunas



Verificando a dimensão do arquivo que será analisado

Tratando valores nulos



Tratando o dataset


Verificando valores nulos após o tratamento dos dados





Criando a primeira visualização



Gráfico com o 10 hosts com maior quantidade de vulnerabilidade e a soma do cvss cuja a sua soma se da como score de risco



Gráfico de setores exibindo os percentuais de ações que são sugeridas pela ferramenta e o percentual de severidade por vulnerabilidade

Top vulnerabilidades únicas e severidade

Produto detectado no scan










E é isso, até o próximo!! 



Leitura recomendada: