Introdução
- 2556
- 255
- Wendell Legros
Para a maioria de nós, criptografia WEP se tornou uma piada. O WPA está indo rapidamente da mesma maneira graças a muitas ferramentas, como o Aircrack-NG. Além disso, as redes com fio não são estranhos para convidados indesejados também. Qualquer pessoa sério sobre segurança deve ter um bom sistema de detecção de intrusão em sua caixa de ferramentas.
Já existem alguns IDs muito bons (sistemas de detecção de intrusões) disponíveis. Por que alguém iria querer reinventar a roda em Bash??? Existem algumas razões para isso. Obviamente, os scripts bash podem ser muito leves. Especialmente em comparação com alguns dos programas da GUI que estão lá fora. Enquanto programas como Etherape nos sugam com cores bonitas, eles exigem monitoramento constante para saber quando a rede mudou. Se você é como a maioria de nós, você só usa o computador para duas coisas, trabalho e brinque. Ao usar o sino do sistema para alertar para novos clientes on -line, você pode deixar esse script em execução e não precisa ter um relógio constante. Se você decidir que deseja inspecionar o que um cliente suspeito está fazendo mais de perto, você sempre pode abrir o Etherape, Wireshark ou sua ferramenta de escolha. Mas até você ter um problema, você pode jogar ou trabalhar em outras coisas.
Outro bônus neste programa é que ele mostrará apenas endereços IP nas redes conectadas ao seu computador. Se você estava hospedando um servidor movimentado ou talvez baixando a mais recente distro Linux, embora um cliente de torrent, um IDS pode ser inundado com conexões. Procurando um novo cliente malicioso pode ser como procurar uma agulha em uma pilha de feno. Embora esse script possa parecer simples em comparação com os outros IDs, a simplicidade também pode ter suas vantagens.
O que você precisará
NMAP é necessário para que este script funcione. Não estaremos fazendo nenhuma digitalização portuária. No entanto, para tornar esse script rápido, precisávamos de algo melhor do que um ping comum. O parâmetro -sp do NMAP usará apenas uma varredura de ping para verificar se um cliente. Houve algumas variações na forma como o NMAP produz informações entre versões. Até agora, este script foi testado apenas usando o NMAP 5.00 (Squeeze Debian) e 5.21 (Debian Sid). Você pode ter sorte com outras distros e versões do NMAP. No entanto, com todas as possibilidades, eu só podia apoiar um casal neste momento.
Você também precisará ter certeza de que está usando o Bash versão 4.0 ou acima. Você deve encontrar isso em qualquer distro que seja estável ou mais recente. Mas quaisquer versões de Bash abaixo que não suportarão matrizes usadas neste script. O acesso raiz também é necessário ou o comando ARP não será encontrado para bloquear nenhum cliente.
OBSERVAÇÃO: Este script não funciona bem com interfaces de rede virtual, como VMware, VirtualBox e etc.
Executando o script
Para executar este script, basta executar:
# chmod +x sugestão.sh; ./LEECHER.sh
Neste momento, não há parâmetros para definir.
Como funciona esse script
Pule todas as funções iniciais por enquanto para que possamos ver o fluxo real do script. A primeira coisa que fazemos é verificar se o usuário é root e o NMAP está instalado no sistema atual. Se não for, o script explicará que os privilegiados raiz são necessários ou que o NMAP é uma dependência aqui e saia. Se esses requisitos forem atendidos, o script irá pular com uma saudação ao usuário e explicar alguns recursos. Eu usei o setterm para desligar o cursor. Definitivamente era uma estética para os olhos.
Eu defino um TRAP Control-C para fazer a parada do script. Enquanto você pensa 'Espere, o Control-C geralmente interrompe o programa da linha de comando de qualquer maneira!'Embora isso seja normalmente verdadeiro, encontrei o loop Forever que usamos mais tarde para causar problemas para interromper o script com o Control-C. Ao usar uma armadilha com sigint, fomos capazes de fazer isso funcionar. Definimos algumas variáveis no seguinte, para verificar qual versão suportada do NMAP estamos usando aqui. Isso é importante, pois a saída é completamente diferente entre essas versões. A primeira coisa que fizemos aqui foi fazer um loop que primeiro receberá a versão do NMAP que estamos usando aqui. Isso é importante, pois a saída é completamente diferente entre essas versões. A próxima coisa que fizemos aqui foi fazer um loop que primeiro obterá os endereços IP de todas as nossas interfaces que estão atualmente online. Também estamos usando awk aqui para filtrar 127.0.0.1 Como não há necessidade de digitalizar o endereço de loopback. Além disso, estamos usando awk para cortar o octeto final nesses endereços IP. Por exemplo, se a interface eth0 tiver um IP de 192.168.1.12 Não precisamos do final 12. Uma varredura normal de uma sub -rede como essa seria “NMAP -SP 192.168.1.0/24 ”Então, por enquanto, esse loop desdobrará qualquer um dos IPs em qualquer interfaces ativos e os transmitirá por vez para NMAP até terminar. Dentro do loop, recebemos o valor de IP uma interface e anexam “.0/24 ”para digitalizar toda a rede nesse intervalo.(Ou 0-255) Passaremos as variáveis corretas para a versão do NMAP, para que o AWK saiba onde retornar o IP de cada verificação. Todos os valores retornados de cada varredura serão conectados a uma matriz. Após a primeira varredura de todas as suas redes de interfaces, simplesmente usaremos outro loop para exibir os resultados iniciais para o usuário.
Devo apontar aqui o que a nova mensagem seguinte para o usuário está dizendo. Se você quiser ouvir a campainha do sistema, ele deve ser ativado em suas configurações de desktop. A localização disso variará dependendo de qual versão do KDE, Gnome, Xface ou qualquer área de trabalho que você estiver usando. No entanto, você pode pensar que só porque já ouviu um sino antes que ele seja ativado. Percebi que meu sistema operacional tinha um sino semelhante para me deixar saber que minha bateria de laptop estava prestes a morrer. Por favor, verifique como ativar o sino do sistema em sua distro se você tiver algum problema.
Em seguida é o loop Forever para manter a digitalização e o monitoramento desta constante de script. Se você é novo no Bash, ou para sempre, isso pode fazer você questionar por que usaríamos algo que é um loop infinito. Muitos de vocês sem dúvida foram avisados sobre o perigo de loops infinitos e como eles podem travar uma máquina. Como você deve ter notado, usamos uma declaração de sono após a primeira varredura. Usaremos isso novamente dentro do nosso loop para sempre e algumas das funções que incluem. O sono permitirá que a execução pause e retribua temporariamente os recursos ao computador. Eu testei este script em um processador bastante modesto e não experimentei problemas. Mas se você estiver em uma máquina muito antiga, ou um tocado por recursos, pode alterar o número de segundos que o sono está sendo usado aqui.
A primeira coisa que nosso loop Forever fará é pular para a função nomeada mecanismo (). O que estamos fazendo aqui é exatamente o mesmo que a nossa primeira varredura, exceto que estamos colocando em uma matriz diferente. Depois que essa função é executada, agora voltamos ao nosso loop para sempre, onde uma declaração se comparará se essas duas matrizes são iguais. Se eles forem iguais, a matriz da segunda varredura será esvaziada para evitar valores duplicados na próxima iteração do loop. No entanto, se o valor for uma diferença nessas duas matrizes, pularemos para a cláusula else que nos redireciona para nossa função de interrupção.
A função de interrupção parará e anunciará ao usuário que a lista de clientes mudou. A partir daqui, chamaremos uma função chamada "duas vezes", onde exibimos para o usuário o conteúdo dos endereços IP na segunda matriz. Agora vamos perguntar ao usuário se eles querem bloquear um endereço IP. Pode ser qualquer IP, não apenas os exibidos. Se o usuário responder "y" para sim, eles pedirão para inserir um endereço IP. Se o IP inserido não for nulo, vamos ping este IP para adicionar seu endereço MAC ao nosso cache ARP. Por qualquer motivo, quando nmap atinge a rede, não faz isso. Em seguida, usamos o ARP para nos dar o endereço MAC do cliente. Como os IPs podem ser transferidos por um roteador, não queremos bloquear por endereços IP. Uma vez feito isso, usamos uma declaração IF aninhada para verificar se o endereço MAC que agora armazenamos em $ mac é nulo. Isso é bom para verificação de erros, caso o usuário insira uma série de lixo. Se o endereço MAC não existir, dizemos ao usuário que o cliente existe ou deixou a rede e retomar nosso monitoramento no Loop Forever. Se o endereço MAC existir, adicionamos -o a uma regra iptables que bloqueará esse usuário de qualquer conexão com nosso computador. Devo observar aqui que isso não o bloqueia de enviar pacotes para essa máquina, apenas o tráfego para você. No entanto, isso não protege toda a sua rede. Somente a máquina que você está usando até que suas regras iptables sejam lavadas. Se você bloquear acidentalmente um cliente que achar que precisa se conectar a você pode liberar esta regra com alguns comandos iptables simples. A instrução IF continua dizendo ao usuário que o endereço MAC do IP inserido agora está bloqueado e mostra os clientes atuais online. O cliente bloqueado ainda aparecerá nesta lista, pois apenas a bloqueamos de nós, não da rede. Se o usuário tivesse escolhido não bloquear um cliente, simplesmente exibiríamos a alteração na rede e voltaria ao nosso loop para sempre.
Independentemente do que o usuário fez na função de interrupção, agora precisamos atualizar os valores de nossas matrizes. Como a segunda matriz atualmente mantém os novos valores de nossa rede, precisamos alimentá -la para a outra matriz antes que a função do motor o preencha novamente. Primeiro limpamos essa matriz para evitar valores duplicados e depois copiamos o conteúdo da segunda matriz para a primeira matriz. Agora use vazio a segunda matriz e estamos prontos para iniciar o loop com a função do motor.
Claro que havia uma função que eu pulei até agora. Você deve ter notado que nossa primeira mensagem para o usuário disse para acertar o Control-C a qualquer momento para bloquear clientes adicionais ou sair. Nossa armadilha chama a primeira função chamada Control_C (). Tudo o que fiz aqui foi perguntar ao usuário em uma declaração se eles querem bloquear um usuário quase da mesma maneira que antes. Você notará se o usuário responder sim à instrução IF, existe uma nova linha aqui. “Bash Leecher.SH ”é usado para reiniciar este script. Se você nomeou este script algo diferente, você deve fornecer isso aqui. Relembramos nosso script porque a armadilha ainda quer enviar SIGINT e matar o script. Criar uma nova instância impede o script de morrer indesejável. No entanto, a criação da nova instância não deixa SIGINT completo.
Você também deve ter notado que usamos o sono um pouco mais também. Isso é apenas para dar tempo ao usuário para ler o que está acontecendo antes de mudar para a nossa nova instância do script que assumirá esse terminal. Se o usuário tivesse escolhido "não" em vez de "sim", a cláusula else apenas permitiria que o script saia. Também usaremos o set -term para devolver nosso cursor ou não teremos um neste terminal, mesmo que o script tenha saído.
O objetivo de ter o bloqueio on-the-flock é fácil. Você pode ter mais de um cliente para bloquear se houver vários clientes agressivos. Você pode decidir mais tarde depois de pular a chance de bloquear um cliente na função de interrupção que você precisa. Ou talvez você saiba que algo está errado assim que você inicia o script. Se nenhum novo cliente veio ou deixasse na rede em questão, não teríamos a chance de bloquear nada até que o fizessem.
Como esse script pode ser melhorado
Obviamente, ouvir o sino do sistema constantemente disparando para falsos positivos pode ser irritante. Tornar este script capaz de usar os clientes da lista de permissões que você confia provavelmente iria reduzir isso. O sino do sistema pode definitivamente ser incômodo se uma pessoa estiver tendo problemas para permanecer conectada por longos períodos de tempo.
Às vezes você pode notar alguns dos clientes que mudam de IPs para nomes de host. Muitos programas, como Etherape, fazem a mesma coisa. Se o seu roteador estiver agindo como seu DNS provavelmente mostrará o nome do host continuamente. Eu não acho que nenhum de vocês vai querer bloquear conexões com seu roteador. No entanto, oferecer um parâmetro para mudar para apenas IP pode ser bom para alguns de vocês.
Há também um pequeno problema com o script bifurcando quando um usuário bloqueia um cliente com Control-C. Isso não apresenta perigo, a menos que um usuário decida bloquear milhares de clientes com Control-C. No entanto, todas as instâncias do script são mortas na saída. Mas como estamos indo para o básico aqui, isso deve ficar bem.
Um sistema de detecção de intrusão com bash
#!/bin/bash # interrupt e saída função control_c () clear echo -e "Você gostaria de bloquear conexões com um cliente?\ n "echo -e" Digite y ou n: "Leia yn se [" $ yn "==" y "]; então echo -e" \ nenter endereço IP para bloquear: \ n "Leia IP se [-n $ $ ip]; então echo -e "\ nnow recuperando o endereço MAC para bloco… \ n" ping -c 1 $ ip> /dev /null mac = "arp $ ip | éter grep | awk "print $ 3" se [-z $ mac]; Em seguida, limpe o eco -e "\ n *** o cliente não existe ou não está mais \ nessa rede ***" eco -e "\ nskipping ação e retomando o monitoramento.\ n \ n "Sono 2 BASH LEECHER.SH Exit 0 else iptables -a input -m Mac -MAC -SOURCE $ mac -j Drop Clear Echo -e "\ nclient com endereço MAC $ Mac está agora \ bloqueado.\ n "echo -e" Continuaremos monitorando as alterações \ em clientes \ n \ n "Sleep 2 Bash Leecher.SH Exit 0 Fi Fi mais Clear Echo -e "\ n \ nleecher saiu \ n \ n" setterm -cursor em rm -f $ pid saída 0 fi # imprima a varredura do mecanismo () duas vezes () g = 0 len = $ #segundo [@] para ((g = 0; g /dev /null mac = "arp $ ip | grep éter | awk" print $ 3 "se [-z $ mac]; então limpe eco -e "\ n *** O cliente não existe ou não está mais nessa rede ***" eco -e "\ nskipping ação e retomando o monitoramento.\ n \ n "else iptables -a input -m Mac -MAC -SOURCE $ mac -j Drop Clear Echo -e" \ nclient com endereço MAC $ MAC agora está bloqueado.\ n "echo -e" Continuaremos monitorando as alterações \ em clientes \ n \ n "eco -e" os clientes atuais são: \ n "duas vezes eco -e" \ nResuming Monitoring ... "Fi mais eco claro" Os clientes atuais são: \ n "eco duas vezes" retomando o monitoramento ... "Fi # função para continuar monitorando qualquer alteração mecan. Para sub -rede em $ (/sbin/ifconfig | awk '/inet addr/&& !/127.0.0.1/ && !a [$ 2] ++ \ Print substr ($ 2,6) ') do segundo+= ("$ (nmap -sp $ subnet%.*.0/24 | Índice Awk '($ 0, T) \ Print $ i' t = "$ t" i = "$ i") ") Sono 1 feito # Verifique se o usuário está conectado como root se [[$ euid -ne -ne 0]]; então eco "Este script deve ser executado como raiz" 1> & 2 Sair 1 fi # Verifique se o NMAP está instalado ifnmap = "type -p nmap" se [-z $ ifnmap]; então echo -e "\ n n \ nnmap deve ser instalado para que este programa funcione \ n "echo -e" apenas nmap 5.00 e 5.21 são suportados neste momento \ n "echo -e", instale e tente novamente "Saia 0 fi eco claro -e" \ nnow Encontrando clientes em sua rede local "echo -e" control -c a qualquer momento Para bloquear clientes adicionais ou sair \ n " # remover arquivos de temperatura na saída e permitir que o Control-C saia. TRAP CONTROL_C SIGINT # Desative o cursor setterm -cursor OFF # Faça algumas matrizes e variáveis declarar -uma declaração primeiro -Um segundo SID = 5.21 # Verifique qual versão do NMAP se [5.21 = $ (nmap --version | awk '/ nmap/ print $ 3')]; então i = 5 t = relatório else i = 2 t = host fi # Obtenha IPs de interfaces e execute a primeira varredura para a sub -rede em $ (/sbin/ifconfig | awk '/inet addr/&& !/127.0.0.1/ && !a [$ 2] ++ print \ substr ($ 2,6) ') do primeiro+= ("$ (nmap -sp $ subnet%.*.0/24 | Índice Awk ($ 0, T) Print $ i '\ t = "$ t" i = "$ i") ") Dormir 1 ECHO -E" Os clientes atuais são: \ n "#Display Array Elements e Adicionar novas linhas e = 0 len = $ #primeiro [@] para ((e = 0; e < $len; e++ )); do echo -e "$first[$e]\n" done echo -e "Leecher is now monitoring for new clients." echo -e "\nAny changes with clients will be reported by the system bell." echo -e "If bell is not enabled details will log to this console." # Forever loop to keep monitoring constant for (( ; ; )) do engine if [[ $first[@] == $second[@] ]]; then second=( ) else interupt sleep 1 first=( ) first=("$second[@]") second=( ) fi done
Saída de amostra
Agora, encontrando clientes em sua rede local (s) Press Control-C a qualquer momento para bloquear clientes adicionais ou sair dos clientes atuais: 192.168.12.1 192.168.12.9 192.168.12.43 Mefistolista 10.0.0.121 10.0.0.137 10.0.0.140 Leecher agora está monitorando para novos clientes. Quaisquer alterações com os clientes serão relatadas pelo sino do sistema. Se Bell não estiver ativado, os detalhes registrarão neste console. =================================================== ============ Lista de clientes mudou! 192.168.12.9 192.168.12.43 Mefistolista 10.0.0.140 Você gostaria de bloquear conexões com um cliente? Digite y ou n: y Digite o endereço IP para o bloco: 192.168.12.9 ================================================== =========== Cliente com o endereço MAC 7C: ed: 8d: 9c: 93: 8e agora está bloqueado. Continuaremos monitorando mudanças nos clientes ============================================= ==================
Tutoriais do Linux relacionados:
- Como estender o gerenciador de arquivos Thunar com ações personalizadas
- Gerentes de rede Linux GUI
- Lista das melhores ferramentas Kali Linux para testes de penetração e…
- Como melhorar e depurar seus scripts de shell com shellcheck
- Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
- Linux pode obter vírus? Explorando a vulnerabilidade do Linux…
- Criptografia de disco completo com veracrypt no Ubuntu Linux
- Como gerenciar conexões sem fio usando o IWD no Linux
- Ubuntu 20.04 Monitoramento do sistema com widgets conky
- Ubuntu 22.04 Monitoramento do sistema com widgets conky
- « Como contar a ocorrência de um personagem específico em uma string ou arquivo usando bash
- Parênteses de scripts de bash explicou »