quarta-feira, 17 de julho de 2013

Gerando IPs aleatórios

Pessoal,

Depois de vários anos sem nenhum post no blog resolvi voltar a ativa e publicar algumas dicas que, espero, sejam úteis para alguém.

Esta semana precisei executar uma varredura de portas TCP utilizando a ferramenta Nmap numa subrede muito grande para a qual não havia tempo hábil para varrer todos os IPs. Tive então que optar por trabalhar com amostragem e a escolha aleatória de endereços IP seria muito útil.

No entanto havia um problema: o Nmap não tem uma opção para escolher aleatoriamente um número finito de IPs dentro de um critério de uma subrede específica (o que ele gera com a opção -iR é um IP a partir de todo o endereçamento IP disponível na Internet). Ou seja, mãos a obra!

Aí desenvolvi um script para atender a minha necessidade baseado num artigo que vi no blog do Chad Bibler intitulado Generating a Random, Valid IP Address in Subnet in Python (http://dregsoft.com/blog/?p=24). Meu script randomip.py ficou assim:

#!/usr/bin/env python
import socket
import struct
import random
import math
import sys

def get_max_ips( netmask_length, random_ips ):
    # define maximum number of IP addresses to be generated
    netmask_ips = int( math.pow( 2, 32-netmask_length ) )
    if ( netmask_ips < random_ips ):
        winner = int( math.pow( 2, 32-netmask_length ) )
    else:
        winner = random_ips
    return winner

def get_random_ip_in_subnet( ip, netmask_length ):
    # thanks to Chad Bibler, http://dregsoft.com/blog/?p=24
    # change the IP address into its bytes so we can add a number to it
    n = socket.inet_aton( ip )
    ip_bytes = struct.unpack( '!i', n )[0]
    # we use the netmask_length to get a range of numbers we can add to the IP address
    max_to_add = int( math.pow( 2, 32-netmask_length ) )
    to_add = random.randrange( 0, max_to_add )
    ip_bytes += to_add
    # pack it back up
    and_back = struct.pack( '!i', ip_bytes )
    new_ip = socket.inet_ntoa( and_back )
    return new_ip

if ( len(sys.argv) != 4 ):
    print "Command syntax: "
    print "   python randomip.py   <# of random IPs from subnet>"
    print ""
    print "   example: python randomip.py 192.168.0.0 20 100"
else:
    iplist={}
    max_ips=get_max_ips(int(sys.argv[2]),int(sys.argv[3]))
    for x in range(0, max_ips):
        ip=get_random_ip_in_subnet( sys.argv[1], int(sys.argv[2]))
        while(iplist.has_key(ip)):
            ip=get_random_ip_in_subnet( sys.argv[1], int(sys.argv[2]))
        iplist[ip]=1
        print ip

Na prática o meu a minha varredura TCP para escolher 1000 endereços IP dentro da subrede 172.16.0.0/12 ficou assim:

python randomip.py 172.16.0.0 12 1000 | nmap -v -n --open -sS -iL - -oA nmap_out

Podem utilizar o script livremente e sugiro para quem quiser se aventurar no desenvolvimento do script três melhorias:
  1. Fazer com que o script em randomip.py aceite um arquivo de entrada com vários blocos IP (para o caso de subredes descontínuas)
  2. Fazer com que o script aceite como parâmetro um ASN (autonomous system). Neste caso ele sortearia os IP baseados neste ASN ou lista de ASNs (os blocos IP deste ASN poderiam ser recuperados a partir de site da ripe.net ou de alguma informação de BGP externa).
  3. Fazer com que o script aceite como parâmetro a sigla de um país (por exemplo sortear IPs que sejam somente da China). A lista poderia ser recuperada de sites como ipdeny.com 
Abraços e boa sorte a todos!

sábado, 15 de maio de 2010

Ajude a Medir a Qualidade da Internet no Brasil

O projeto SIMET já existe há algum tempo como uma iniciativa do Comitê Gestor da Internet no Brasil e se propõe a medir a qualidade da Internet no Brasil. O projeto depende da participação da comunidade de usuários da Internet (técnicos ou leigos) para medir - em todas as regiões do Brasil - a banda disponível, perda de pacotes e até mesmo jitter nos diversos provedores espalhados pelo Brasil. Este é um tipo de projeto que ajuda os provedores a melhorar suas redes, o que obviamente ajuda os usuários da Internet brasileira.


Para participar (aproveite, é indolor e grátis!!) basta clicar no link para o projeto ou acessar o endereço http://www.ceptro.br/Simet.

sexta-feira, 19 de junho de 2009

Vídeos sobre IPv6 do RIPE/NCC

Recentemente o RIPE/NCC publicou (e continua publicando) uma série de vídeos de entrevistas com engenheiros de rede sobre a implementação do IPv6 em suas redes. Aproveitem!

Mais informações no canal do RIPE/NCC no Youtube.

quinta-feira, 4 de junho de 2009

Eventos: GTER/GTS e ysts

Neste mês de junho, São Paulo vai abrigar dois eventos "de peso" na área de redes e segurança: a reunião conjunta do GTER/GTS (Grupo de Trabalho de Engenharia e Operação de Redes/Grupo de Trabalho em Segurança) que acontece nos dias 19/06 (GTER) e 20/06 (GTS) e a conferência de segurança "mais badalada do Brasil" - o You Sh0t the Sherrif 3.0 - que acontece no dia 22 de junho. 

A reunião do GTER/GTS é organizada pelo CGI.br e o NIC.br e tem como objetivo fomentar a discussão de aspectos relevantes para a operação e segurança da Internet brasileira. O evento é gratuito e acontece nos dias 19 e 20 de junho no Hotel Blue Tree Towers Morumbi com um programa de apresentações que inclui palestras sobre ASN de 4 bytes, BGP, VoIP, crimes cibernéticos e outros temas de interesse da comunidade de engenheiros de rede e segurança. Mais informações no site oficial
Já a edição 3.0 do ysts - organizada pelo criadores do podcast de segurança da informação I Sh0t the Sheriff - trás como novidade treinamentos em formato de mini-curso em dias separados do evento principal. A agenda completa do evento está disponível aqui. Mais informações também no site oficial.

quarta-feira, 3 de junho de 2009

Cisco Reverse Telnet

Em localidades remotas com poucos equipamentos (um roteador e um switch, por exemplo) e quando não há um servidor de console disponível, pode-se utilizar a porta auxiliar de um roteador Cisco para conectar-se a console de outro equipamento. Isto é comumente chamado de Reverse Telnet.

Para começar é necessário um cabo do tipo rolled - aquele mesmo azul claro que se acumula aos montes no seu depósito e que uma ponta do cabo está na ordem inversa da outra ponta (veja
figura). O cabo azul claro da Cisco RJ-45/DB-9 também funciona neste caso.


Conecte o cabo console na interface auxiliar do equipamento principal e depois na console do outro equipamento. Depois é necessário fazer a seguinte configuração na interface auxiliar (line aux 0).

line aux 0
modem InOut
transport preferred telnet
transport input all
transport output telnet
stopbits 1

Também é necessário que o seu roteador Cisco possua uma interface Loopback configurada para que você possa executar o comando telnet para esta interface.

interface loopback 0
ip address 10.1.1.1 255.255.255.255

Em seguida, deve-se verificar qual é o número atribuido a sua porta auxiliar. Para isso entre com o comando show line.

Router#show line
Tty Line Typ Tx/Rx A Modem Roty AccO AccI Uses Noise Overruns Int
0 0 CTY - - - - - 0 0 0/0 -
1 1 AUX 9600/9600 - inout - - - 1 0 1/1 -
*194 194 VTY - - - - - 3 0 0/0 -
195 195 VTY - - - - - 1 0 0/0 -
196 196 VTY - - - - - 0 0 0/0 -
197 197 VTY - - - - - 0 0 0/0 -
198 198 VTY - - - - - 0 0 0/0 -


As duas primeiras colunas mostram o número atribuído a interface auxiliar. Agora basta executar o comando telnet endereço 2000+line. O último parâmetro (porta) deverá ser o número da linha somado com o número 2000 - para este exemplo ficará 2001.

Router#telnet 10.1.1.1 2001
Trying 1.0.0.1, 2001 ... Open

login:


And that's all folks!

Mais informações:

segunda-feira, 18 de maio de 2009

Guideline de segurança - Cisco

Durante a configuração de equipamentos de rede, normalmente temos dúvidas (ou pelo menos todos deveriam ter) do tipo "Será essa a melhor maneira para configurar isto de maneira segura?".

A Cisco possui um guideline com as melhores práticas para configuração, design e implementação de redes de forma segura. Eles atualizaram o documento a pouco tempo.

Está disponível aqui. A página de apresentação do SAFE, nome dado pela Cisco para estes guidelines, é essa.

Lembrando que, apesar das informações serem voltadas para equipamentos Cisco, as idéias podem ser aplicadas para arquiteturas baseadas em outros tipos de equipamento, adaptando, claro, as configurações.

sábado, 25 de abril de 2009

Dica: Internetworkpro Wiki

Ainda em fase de construção, o Internetworkpro Wiki, que como o próprio nome já adianta, é um wiki que pretende reunir artigos técnicos sobre redes, equipamentos e configurações. Por enquanto a maioria das informações existentes é sobre os equipamentos Cisco - mas se você estiver disposto a ajudar, pode escrever sobre Juniper ou Extreme...


O destaque é para as páginas dos roteadores e switches que apresentam um bom resumo de cada plataforma. A página de informações sobre os switches Cisco Catalyst 6500 apresenta um excelente material para uma consulta rápida. É interessante destacar também os diversos exemplos de configuração já disponíveis neste wiki.

segunda-feira, 30 de março de 2009

Every move you make...

Eu sempre imaginei que instalar e manter um software de gerenciamento e backup de configuração de equipamentos de rede fosse uma grande idéia. Não só para conseguir restaurar um equipamento queimado de uma forma mais rápida - já que o backup, pelo menos, existe - mas também para fazer o acompanhamento das mudanças - afinal de contas, estamos na era da Gerência de Mudanças, não?

Bom, isto foi o que aconteceu com o Nick, um leitor do ISC Diary, e que o pessoal o SANS ISC relatou tão bem. O roteador foi comprometido - com usuário padrão com senha fácil -, e logo o atacante criou um túnel para a sua origem, alterou alguns parâmetros para garantir que a porta estaria aberta da próxima vez e tudo mais. O syslog e o IDS não se manifestaram, afinal de contas, a senha era válida e o acesso era permitido... O atacante só não contava com o Rancid. Assim que o Rancid fez o backup da configuração e detectou a alteração, um e-mail foi enviado para o administrador do sistema e em pouco tempo tudo estava resolvido.

Achei interessante relatar este exemplo aqui, já que o post-tutorial que fiz há algum tempo atrás sobre o Rancid aqui neste blog é disparado o post menos visto de todos os tempos! O que me faz pensar que todos já tem suas soluções de backup e gerenciamento de configuração funcionando a todo vapor ou não temos nenhum leitor mesmo :-). Particularmente eu ficaria com a segunda opção... Você sabe qual é o software usado na sua empresa para gerenciamento e backup de configuração? Você tem uma dica? Deixe-a aí nos comentarios.

Mais informações:

segunda-feira, 23 de março de 2009

Você está preparado?

"Você está preparado?". É assim que começa a mensagem que circulou hoje na lista LACNOG (lista mantida pelo LACNIC). Esta mensagem, enviada pelo Roque Gagliano, ressalta uma importante questão sobre o suporte do ASN de 32 bits nas mais diversas plataformas e fabricantes. Assunto que já foi discutido por aqui em outubro do ano passado. Naquela época, algumas versões oficiais ainda não suportavam ASN de 32 bits.

O link enviado hoje pelo Roque remete a uma página que contém um bom resumo para verificar como está o suporte a ASN 32 bits hoje, além de muitas outras informações sobre qual é o padrão adotado para a notação do ASN de 32 bits e o calendário de alocação de ASN adotado pelos RIR. Para quem acredita em saci, caipora e cuca (como eu) também pode conferir como está a alocação de ASN (16 bits) no relatório produzido pelo Geoff Huston. A imagem abaixo (retirada deste relatório) mostra a progressão das alocações de ASN de 16 bits até março de 2009 e ainda a projeção linear e exponencial para o futuro.... não muito distante.

Mais informações em:

segunda-feira, 23 de fevereiro de 2009

Cancelando com CTRL+C no Cisco

Sempre tive problemas no meu Ubuntu, utilizando o Terminal, para cancelar um traceroute ou um ping quando conectado em um equipamento Cisco. Mas, meus problemas acabaram. E compartilho com vocês do blog. Graças a um comentário na lista da Nanog descobri que, utilizando o comando escape-character 3 dentro dos line vty e do line con, você pode utilizar simplesmente CTRL+C para cancelar o comando.

Portanto, em modo de configuração:

Router(config)#line vty 0 15
Router(config-line)#escape-character 3
Router(config)#line con 0
Router(config-line)#escape-character 3