+++++++++++++++++++++++++ + Clube dos Mercenarios + +++++++++++++++++++++++++ http://xxx.xxx.xxx.xxx Por Jerry Slater --> jerryslater@bol.com.br 03/2003 -> Por favor elitos, crackers, script kiddies, defacers e coisas do genero nao percam seu precioso tempo lendo esse txt. -> O autor nao se responsabiliza pelo mau uso das informacoes contidas aqui. ================= Port Scanning ================= ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 - Clube dos Mercenarios 2 - Entendendo um pouco as flags 3 - Introducao ao port scanning 4 - Tipos de port scan 4.1 - Open 4.2 - Half-open 4.2.1 - SYN 4.2.2 - IP ID Header 4.3 - Stealth 4.3.1 - SYN+ACK 4.3.2 - FIN 4.3.3 - ACK 4.3.4 - NULL 4.3.5 - XMAS 4.4 - Distribuited 5 - Consideracoes finais 6 - Links e Referenciais ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ============================= 1 --> Clube dos Mercenarios ============================= Buscando uma maior interacao entre os membros da comunidade underground brasileira, e ateh mesmo internacional, o Clube dos Mercenarios (CdM) foi criado. Como jah foi citado o objetivo principal do CdM eh promover a divulgacao de informacoes ligadas a (in)seguranca e atrair mais pessoas interessadas em conhecer um pouco mais sobre o hacking, sem qualquer discriminacao. ==================================== 2 --> Entendendo um pouco as Flags ==================================== O TCP eh um dos principais protocolos da pilha TCP/IP, que eh usado pela Internet. O TCP, que se localiza na camada superior a camada IP, eh um protocolo orientado a conexao, dando ao usuario uma maior confiabilidade na integridade dos dados que trafegam em uma conexao. Tal integridade eh checada de diversas formas pelo TCP, podemos citar: temporizacao(timeout), rotulacao, checagem de sequencia e perda de dados. Caso algum problema aconteca com os dados que estao em fluxo o TCP forca o reenvio dos mesmos. Nos pacotes TCP alguns flags podem ser marcadas para determinar alguma(s) caracteristicas do mesmo. Essas flag's sao: + PSH -> Push Flag. A flag push informa ao TCP que ele deve enviar todos os pacotes, inclusive o pacote marcado com essa flag, que estejam no buffer ao destinatario. + URG -> Urgent Flag, faz com que o pacote marcado com essa flag tenha prioridade no envio. + SYN -> Syncronize, usado para sincronizacao dos numeros de sequencia. + ACK -> Acknowledgement number, informa ao receptor qual proximo numero de sequencia o emissor deseja receber. + FIN -> Flag usada para finalizar uma conexao. As flags apresentadas acima sao utilizadas em tecnicas de port scanning um pouco mais avancadas, os conhecidos stealth's scans. =================================== 3 --> Introducao ao port scanning =================================== O primeiro passo que um atacante toma antes de agir eh verificar quais servicos o host alvo oferece a rede. Tal acao eh denominada port scaning. O port scaning ficou bastante difundido com o surgimento da ferramenta SATAN, na decada de 90. Esse software assustou a banda podre que, quase 100% das vezes, nao esta preparada para as descobertas da comunidade hacker. Cada servico esta relacionado a uma porta, que eh um numero inteiro compreendido entre 0 a 65000. As portas menores que 1024 soh podem ser abertas pelo root. Para que vc saiba a porta de determinado servico, vale uma conferida no /etc/services. Na atualidade, o grande nome do momento eh o nmap, que eh desenvolvido pelo fyodor. Voce pode encontra-lo em: http://www.insecure.org/nmap Os tipos de port scanning podem resumir-se basicamente a: + open scan + half-open scan + stealth scan + distribuited scan ============================== 4 --> Tipos de port scanning ============================== 4.1 --> Open O atacante deve relaziar uma conexao completa com o host alvo, ou seja, ele deve cumprir o three-way handshake. SYN * atacante -----> host alvo SYN+ACK * host alvo -----> atacante ACK * atacante -----> host alvo A implementacao dessa tecnica eh feita atraves da system call connect(). Abaixo segue um exemplo de um port scan que usa open scanning. +++++++++++++++++++++++++++++++++ cut +++++++++++++++++++++++++++++++++++++ /* * * Simples Port Scan com uso da funcao connect() * Recomendo nao usa-lo, pois eh muito facil de ser logado * Jerry Slater - jerryslater@bol.com.br * Thanks Clube dos Mercenarios * */ #include #include #include #include #include #include #include #define POR_INI 0 #define POR_FIM 6000 int scann (char *alvo, int port_in, int port_fim); int main (int argc, char *argv[]) { u_int porin, porfim; if (argc < 2) { printf ("\nUsage: %s \n", argv[0]); exit (1); } if (argc == 2) { porin = POR_INI; porfim = POR_FIM; } if ((argc > 2) && (argc < 4)) { printf ("\nUsage: %s \n", argv[0]); exit (1); } if (argc == 4) { porin = atoi(argv[2]); porfim = atoi(argv[3]); } printf ("\nScanning...\n"); scann(argv[1], porin, porfim); return 0; } int scann (char *alvo, int port_in, int port_fim) { int sock; struct sockaddr_in target; struct hostent *he; struct servent *servi; if ((he = gethostbyname(alvo)) == NULL) { printf ("\nHost Desconhecido\n"); exit (1); } for(; port_in <= port_fim; port_in++) { if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf ("\nFalha no socket!\n"); exit (1); } target.sin_family = he->h_addrtype; target.sin_port = htons(port_in); target.sin_addr = *((struct in_addr *)he->h_addr); bzero(&(target.sin_zero), 8); if ((connect(sock, (struct sockaddr *)&target, sizeof(target))) == -1) { close (sock); } else { if ((servi = getservbyport(htons(port_in), "tcp")) == NULL) printf ("Porta %d --> %s aberta!\n", port_in, "desconhecida"); else printf ("Porta %d --> %s aberta!\n", port_in, servi->s_name); } } } +++++++++++++++++++++++++++++++++ cut +++++++++++++++++++++++++++++++++++++ O open scan nao eh uma tecnica muito boa para ser usada, pois eh facil sua deteccao, seja por uma IDS ou por um firewall. 4.2 --> Half-open Denominamos half-open a finalizacao de uma conexao antes do three-way handshake ser completado. 4.2.1 --> SYN scan O syn scan baseia-se no envio de um pacote com a flag syn ativada ao servidor, se a porta estiver aberta o servidor respondera com um pacote com as flags syn e ack ativadas. SYN * atacante -----> host alvo SYN+ACK * host alvo -----> atacante RST * atacante -----> host alvo Podemos perceber que apos o recebimento do pacote com as flags syn e ack ativadas o atacante enviou um pacote com a flag rst e isso fez com que a conexao nao fosse estabelecida. Caso a porta esteja fechada, o servidor respondera com as flags rst e ack. SYN * atacante -----> host alvo RST+ACK * host alvo -----> atacante 4.2.2 --> IP ID Header Tambem conhecido como dumb scan o IP ID header eh umas das formas de scanning mais criativas jah desenvolvidas. Diferente das formas convencionais de scan, o dumb scan eh feito com a participacao de um terceiro host alem do atacante e do host alvo, esse terceiro host eh conhecido como dumb host..:) O atacante comeca a enviar uma sequencia de pings para o dumb host analisando seu campo ID. O campo ID sofrera a incrementacao de apenas uma unidade. Em seguida o atacante enviara pacotes para o host alvo com o ip do dumb host (ip spoofing). Se a porta a qual vc enviou o pacote estiver aberta o campo ID dos pings enviados ao dumb host sofreram uma mudanca no seu incremento, caso esteja fechada nada sera alterado. 4.3 --> Stealth Stealth scan eh a tecnica de port scanning que procura ser mais camuflada possivel. Essa tecnica permite ao atacante enviar pacotes ao host alvo com algumas ou todas as flags setadas, e a partir da responta do servidor analisar quais portas estao abertas. Tal metodo eh muito eficiente pois pode-se passar por alguns firewalls ou IDS's do alvo. Os scanners mais avancados implementam todas as tecnicas listadas ateh aqui. 4.3.1 --> SYN+ACK Muito parecido com o syn scan, esse metodo consiste no envio de pacote com as flags syn e ack ativadas ao host. SYN+ACK * atacante -----> host alvo * host alvo -----> atacante Caso a porta para qual o pacote for enviado o servidor nao responder, a porta estara aberta. Para implementacao dessa tecnica eh necessario trabalhar-se com time out, ou seja, o tempo de resposta. Podemos notar tambem que essa "tentativa de comunicacao" foge aos padroes estabelecidos pela pilha TCP/IP (three-way handshake) e por isso eh preciso de uma IDS para que algo seja logado. 4.3.2 --> FIN O atacante envia um pacote ao servidor alvo com a flag FIN ativada. Caso o servidor nao responda, a porta estara aberta. FIN * atacante -----> host alvo * host alvo -----> atacante 4.3.3 --> ACK O atacante envia um pacote com a flag ACK ao servidor alvo. Se o pacote de respostas do servidor tiver com ttl (time to live) < ou = 64 ou se o campo window for maior que zero a porta estara aberta. ACK * atacante -----> host alvo * host alvo -----> atacante 4.3.4 --> NULL Nessa variacao, o atacante envia um pacote sem nenhuma flag ativada a vitima. Se nao houver resposta, a porta esta fechada. * atacante -----> host alvo * host alvo atacante 4.3.5 --> XMAS Aqui, o atacante enviara um pacote com todas as flags ativadas ao host alvo. Caso a porta esteja aberta o alvo respondera com ACK+SYN+FIN * atacante -------------> host alvo * host alvo -------------> atacante A ferramenta de port scanning mais difundido hoje eh o nmap. Ele executa todas essas tecnicas de port scan, basta dar uma lida no help dele, mas eh bom que fique claro que muitas IDS's jah detectam esses tipos de scanning, nesses casos eh sempre bom usar um bounce. Mas, a principal tecnica de port scanning eh a sua malicia, se vc sabe que um host eh um prover voce jah deduz que servicos como http, ftp e telnet ou ssh estao disponiveis em 100% deles, outros servicos que podemos enumerar eh dns, smpt e etc. Um atacante com isso em mente precisa apenas descobrir qual daemon esta rodando e mandar brasa..:) Para isso um simples telnet resolve. 4.4 --> Distribuited Hoje executar um port scanning esta cada vez mais dificil pois varias formas de se barrar um scanneamento estao sendo implementadas nos servidores. Firewalls, IDS's, etc... estao sendo usados para proteger um computador para que um atacante nao consiga levantar informacoes da rede alvo, ou que ele levante informacoes falsas sobre essa rede. Os modos mais usados para se proteger de um scaneamento sao: 1 - Tempo e numero de portas acessadas por um determinado host. Quando se executa um port scan seu host envia um ou mais pacotes a varias portas diferentes do alvo em um curto espaco de tempo. 2 - Pacotes enviados a portas "anomalas". Geralmente um port scanning usa + ou - a seguinte funcao em seu codigo for (porta=1; porta <= porta_final; porta++) ai percebemos que os pacotes sao enviados para todas as portas compreendidas entre 1 e porta_final. Com isso muitas portas que nao sao associadas a um servico recebem pacotes tb. Partindo do mesmo conceito de DDoS (Distribuited Denial of Service) o scaneamento distribuido surgiu. Tendo acesso a varios hosts um atacante pode usa-los para que todos eles executem um scaneamento em um determinado alvo. --------------- | Alvo | ___________ --------------- ________ / / \ \ / / \ \ / / \ \ --------- --------- --------- ---------- | host 1 | | host 2 | | host 3 | | host 4 | --------- --------- --------- ---------- | | | | | | | | | | | | | | | | |_______________| |_____________| / \ / \ | | | ------------- | \----------- | atacante | ---------/ ------------- Baseando-se nessa estrutura o atacante utiliza os hosts para scanear o seu alvo, deixando assim a primeira das formas de protecao contra um port scanning a ver navios. Para passar pela segunda basta o atacante criar uma lista com as portas, que possuem relacao com algum servico, mais usadas pelos servers, como: 21 - ftp 22 - ssh 25 - smpt 53 - dns 80 - http Como DDoS ainda nao possui solucao 100% eficaz o mesmo pode se dizer de Distribuited scan, jah que os dois possuem conceitos parecidos. Muitas ferramentas para esse tipo de scaneamento jah foram desenvolvidas, inclusive uma em php..:) =========================== 5 --> Consideracoes finais =========================== Bem pessoal, o basico sobre port scanning foi tentato ser passado nesse simples txt. Existem tambem outros tipos de scan, sao scans de vulnerabilidades. O mais famoso desses eh o nesus. Voce pode obte-lo em http://www.nessus.org Outras tecnicas de port scanning mais avancadas serao abordadas futuramente pelos membros e colaboradores do Clube dos Mercenarios. Ateh hoje uma grande polemica gira em torno do port scan. Eh legal ou nao scanear uma rede? Sinceramente eu nao sei responder com certeza, mas ao usar um bounce para executar um port scan em uma rede percebi que apos alguns dias o admin havia recebido um e-mail do admin da rede alvo exigindo explicacoes sobre o porq do port scanning..:) Agradeco aqui a forca que venho recebendo dos meus verdadeiros amigos, nao vou citar nicks por que eles sabem quem sao, e todo pessoal do #mercenaries. =========================== 6 --> Links e Referenciais =========================== Clube dos Mercenarios -> http://xxx.xxx.xxx.xxx Unsekurity Team -> http://unsekurity.virtualave.net int0x80 Team -> http://int0x80.host.sk Virii Hacking Group -> http://www.infoshack.cjb.net http://www.linuxsecurity.com.br http://www.insecure.org http://www.phrack.org http://www.securityfocus.com http://packetstorm.decepticons.org ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ []'s Jerry Slater.