quarta-feira, 6 de março de 2019

WRITE-UP VULNHUB TOPPO 1

Nível.: Fácil
Download da VM.: [ Clique Aqui ]

Essa máquina é de nível introdutório para aqueles que estão iniciando no mundo do CTF/pentest. Iniciaremos detectando o nosso alvo e fazendo a enumeração do mesmo.




Encontradas as portas abertas e seus respectivos serviços





Como há um servidor WEB em execução, nada melhor do que tentar enumerar também este serviço em busca de diretórios que venham a ser proveitosos para gerar um ataque




Agora é explorar os diretórios e garimpar as informações úteis. Nada de interessante foi encontrado na página inicial, porém vamos explorar os diretórios encontrados na enumeração anterior




No endereço http://192.168.10.106/admin, encontramos o arquivo notes.txt e ao clicar no mesmo é informado que devemos alterar a senha atual.




Bom, nessa máquina a porta 22, SSH, está aberta. Levando em conta que a senha é 12345ted123, qual o usuário? A senha, pode estar dando uma pista de qual é o usuário. Vamos levar em consideração que o login seja ted e a senha 12345ted123





Acesso validado! Vamos agora tentar encontrar algum(uns) binários com permissão SUID para realizar uma escalação de privilégios. Foi encontrado o python e mawk. Esses programas podem permitir a escalação de privilégios no sistemas.



Utilizei tanto o mawk quanto o python2.7 para a escalação de privilégio. Veja as duas figuras abaixo:






domingo, 3 de março de 2019

DELEGAÇÃO E SEGURANÇA DE OBJETOS DO AD DS

A delegação do controle administrativo significa atribuir permissões que gerenciam o acesso a objetos e propriedades do Active Directory. Assim como é possível dar a um grupo a capacidade de modificar arquivos em uma pasta, é possível atribuir a um grupo a possibilidade de redefinir senha, desbloquear objetos usuários entre outras tarefas.

Todos os objetos do Active Directory, tais como usuário, grupos e computadores, são protegidos por uma lista de permissões. Essas permissões são chamadas de ACE (Access Control Entries). 

Delegue tarefas a equipes de TI facilitando o gerenciamento no atendimento dos chamados evitando que uma equipe de infra tenha que atender uma solicitação para desbloquear uma conta de usuário por exemplo. Neste artigo, vou mostrar na prática como delegar tarefas de gerenciamento do AD DS a dois grupos de HelpDesk N1 e N2.

Neste cenário há uma OU denominada de Colaboradores. Será atribuído à equipe de Helpdesk N1 a seguinte permissão aos objetos Usuários:


  • Resetar senhas de usuários e trocar a senha no próximo logon

A equipe do HelpDesk N2 terá 


  • Criar, deletar e gerenciar contas de usuários
  • Crias, deletar e gerenciar grupos

Para executar essa prática, crie uma OU com o nome de Colaboradores na raiz do seu domínio e uma outra OU de nome Grupos. Na OU colaboradores, crie objetos usuários e na OU Grupos, crie os grupos HelpDesk N1 e HelpDesk N2.

1. Clique com o botão direito do mouse na OU colaboradores e escolha a opção Delegate Control



2. Será aberto uma Wizard para atribuição das permissões aos objetos. Clique em Next


3. Clique no botão Add. Na caixa Select Users, groups and computer, digite o nome do grupo Helpdesk N1 e em seguida clique em Check Names. Selecione o grupo informado e clique em OK. Em seguida clique em Next.




4. Escolha a opção selecionada na figura abaixo e depois clique em Next:


5. Clique em Finish.


Siga os passos de 1 a 4 para atribuir as seguintes permissões ao grupo Helpdesk N2:


Através do comando DSACLs.exe, é possível visualizar um relatório das permissões que acabamos de atribuir:


PS :> dsacls.exe "ou=colaboradores,dc=contoso,dc=local"

Se por algum motivo precisar voltar o padrão resetando todas as atribuições de permissões, use o comando:

PS :> dsacls.exe "ou=colaboradores,dc=contoso,dc=local" /s /t 


Aí está uma dica muito boa para o gerenciamento da sua estrutura do AD DS.














quinta-feira, 28 de fevereiro de 2019

ATUALIZAÇÕES DE SEGURANÇA AUTÔNOMAS NO DEBIAN E UBUNTU



Para combater uma quantidade maior de ameaças aos pacotes de software, eles devem ser atualizados regularmente. As vulnerabilidades são descobertas diariamente, o que também requer um monitoramento diário do sistema. O patch de software leva tempo, especialmente quando são necessários testes e reinicializações. Felizmente, sistemas rodando Debian e Ubuntu podem usar upgrades não assistidos para obter gerenciamento automatizado de patches para atualizações de segurança.
# apt-get install unattended-upgrades

Após a instalação, é hora de configurar o pacote. Embora não haja muitas coisas para configurar, o arquivo de configuração é denominado /etc/apt/apt.conf.d/50unattended-upgrades. Por padrão, apenas atualizações de segurança serão instaladas, que é o que a maioria das pessoas deseja. Neste arquivo é possível configurar a reinicialização do sistema após uma atulização que exija isso ou até o quanto de banda de internet pode ser utilizado para download.




O arquivo usar os caracteres "//" como indicação de comentário. Para ativar alguma opção, basta apagar esses caracteres.

Em seguida, faça a reconfiguração do pacote para a instalação das atualizações de segurança:
# dpkg-reconfigure --priority=low unattended-upgrades





Escolha a opção Sim para finalizar a configuração. Na primeira utilização do unattended-upgrades, use o comando acompanhado do atributo -v:
# unattended-upgrades -v

É bom criar uma rotina para essas atualizações configurando uma entrada de agendamento dessa tarefa no crontab. Para este artigo, fiz a configuração para execução do comando toda semana, na sexta-feira, a partir do meio dia. Adapte ao seu ambiente de produção.


# crontab -e




Por padrão, todas as ações são registradas em /var/log/unattended-upgrades/unattended-upgrades.log.

Essa é uma dica bastante útil e que pode ajudar a mitigar possíveis ataques mantendo o sistema operacional com as atualizações de segurança mais recentes. Até a próxima!




terça-feira, 26 de fevereiro de 2019

SEGURANÇA EM SERVIDORES LINUX: PORT KNOKING



Nesse artigo vou mostrar a técnica do port knocking e como o mesmo é configurado por meio do iptables de maneira fácil e simples permitindo aplicar uma camada a mais de segurança na utilização de algum serviço remoto. Foi escolhido o serviço do SSH para os testes tendo em vista que é amplamente usado quando se quer fazer o gerenciamento remoto de um servidor.

Port knocking é uma técnica usada para proteger serviços de rede que devem ser acessíveis a partir da Internet pública, mas não são destinados ao uso público. Ele funciona bloqueando o acesso ao serviço, a menos que o cliente primeiro "bata" enviando uma pequena seqüência de pacotes para um determinado conjunto de portas em uma ordem específica. O conteúdo dos pacotes não é importante.

Há duas formas de usar essa técnica: através do daemon knockd ou iptables, como já foi mencionado no início.

Os módulos netfilter incluídos no kernel Linux padrão não fornecem suporte direto para o knock de porta, mas contêm todos os blocos de construção necessários para implementá-lo. O mais importante deles é o módulo recent, que tem a capacidade de:


  • manter uma lista de pacotes recentes que satisfaçam uma determinada condição

  • tomar decisões consoante o número de pacotes gravados de um determinado endereço de origem esteja acima ou abaixo de um determinado limiar.

Qualquer número de listas separadas e nomeadas pode ser mantido. Neste caso, haverá três:




Com essa linha de raciocínio, o script, no servidor ficará:

#!/bin/sh

iptables -F
iptables -X
iptables -Z

iptables -N STATE0
iptables -A STATE0 -p udp --dport 12345 -m recent --name KNOCK1 --set -j DROP
iptables -A STATE0 -j DROP

iptables -N STATE1
iptables -A STATE1 -m recent --name KNOCK1 --remove
iptables -A STATE1 -p udp --dport 23456 -m recent --name KNOCK2 --set -j DROP
iptables -A STATE1 -j STATE0

iptables -N STATE2
iptables -A STATE2 -m recent --name KNOCK2 --remove
iptables -A STATE2 -p udp --dport 34567 -m recent --name KNOCK3 --set -j DROP
iptables -A STATE2 -j STATE0

iptables -N STATE3
iptables -A STATE3 -m recent --name KNOCK3 --remove
iptables -A STATE3 -p tcp --dport 22 -j ACCEPT
iptables -A STATE3 -j STATE0

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


iptables -A INPUT -m recent --name KNOCK3 --rcheck -j STATE3
iptables -A INPUT -m recent --name KNOCK2 --rcheck -j STATE2
iptables -A INPUT -m recent --name KNOCK1 --rcheck -j STATE1
iptables -A INPUT -j STATE0

Dessa forma usei as portas 7000, 8000 e 9000, com o protocolo UDP para configurar a sequencia das batidas. Numa máquina cliente, execute o script abaixo:

#!/bin/sh

echo -n "*" | nc -q1 -u $1 7000
echo -n "*" | nc -q1 -u $1 8000
echo -n "*" | nc -q1 -u $1 9000
ssh suporte@$1

Perceba que o "$1" refere-se ao IP passado como parâmetro na execução do script no terminal: ./script <IPDOSEVIDOR>.

Caso tenha ficado com alguma dúvida dos comandos utilizados e queira se aprofundar mais no assunto de iptables, recomendo o curso Iptables - O Firewall do Linux que dará uma boa base como montar scripts de firewall com regras bem definidas e úteis como conceitos de redes a análise de dados. Vale muito a pena adquirir o curso pois vai agregar bastante valor.

Até a próximo artigo pessoal!