############################################################################ ######################### CLUBE DOS MERCENARIOS ############################ ############################################################################ ARTIGO PRIVATIVO AOS MEMBROS DA MAIL LIST DO CLUBE DOS MERCENARIOS E ASSOCIADOS Desenvolvido por Nash Leon vulgo coracaodeleao. nashleon@yahoo.com.br OBS: Todos os dados e exemplos fornecidos neste artigo possuem somente proposito educacional. O autor nao se responsabiliza pelo mau uso das informacoes. OBS2: Elites, pseudo-elites, Crackers, Analistas de Seguranca sem Escrupulos, Scrippt Kiddies (Defacers) nao sao bem vindos a leitura deste documento. 07/2003 ******************************* * TRUQUES HACKING - PARTE II * * Logic Bombs * ******************************* 1 - INTRODUCAO 2 - TECNICAS FUCADORAS 2.1 - Metodo de Espera sem Base no Horario (sleep) 2.1 - Metodo de Espera com Base no Horario (gettimer) 2.2 - Metodo de Setagem e Execucao (settimer) 3 - EXPANSAO DOS CONCEITOS 4 - TERMINANDO 4.1 - Links e Referencias 4.2 - Consideracoes Finais --------------- 1 - INTRODUCAO | --------------- Hacking Classico!! Muita gente desconhece tecnicas utilizadas por hackers e crackers ao longo de mais de 20 anos e que ainda sao efetivas em inumeros casos. Uma das tecnicas mais difundidas durante a decada de 80 e meados da decada de 90, foi a tecnica conhecida como "Bombas Logicas". Muito se especulou sobre a utilizacao do conceito em inumeros tipos de ataque, mas esta tecnica aos poucos foi sendo "banalizada". Neste artigo para a Mail List do Clube dos Mercenarios pretendo trazer a tona esquemas uteis que podem ser utilizados por fucadores se aproveitando do conceito das bombas logicas. A plataforma Linux serah nosso alvo, mas os conceitos podem ser expansiveis a outros sistemas operacionais e arquiteturas. Espero abrir a discussao em torno desta tecnica para mostrar que muitos esquemas de hacking amplamente difundidos ainda sao uteis no atual cenario de inseguranca. ----------------------- 2 - TECNICAS FUCADORAS | ----------------------- As Bombas Logicas se referem aos programas que utilizam algum sistema de timming(controle de tempo) executando algum codigo nocivo a seguranca de uma maquina. O conceito se torna amplamente expansivel a medida que a mente criativa de um fucador passa a ir contemplando esquemas e mais esquemas. No decorrer deste artigo, apenas os esquemas mais simples serao discutidos. Mas os casos onde este tipo de tecnica podem ser empregados, sao inumeros. Pretendo descrever alguns cenarios para ilustrar de forma efetiva a real utilidade desta tecnica. 2.1 - Metodo de Espera sem Base no Horario (sleep) --------------------------------------------------- Ilustracao: -> Uma maquina da rede de uma instituicao de ensino foi invadida. O invasor deseja utilizar a maquina como ponte para acessar a rede interna. Sabe-se que a rede interna estah utilizando um Servidor de Base de Dados Oracle. Apos quase 2 horas, ele consegue alterar por completo o sistema e instalar o "poderoso" Sniffer DSNIFF. Nao resta muito tempo. O DSNIFF comeca a catar logins e senhas, mas ele nao tem muito tempo e resolve entao enviar um programa para checar os logs do DSNIFF a cada 10 segundos em busca de uma senha do ORACLE. Enquanto isso o invasor vai planejando e executando outros ataques. <- Fim da Ilustracao A ilustracao e cenario acima demonstra que em determinados casos, um fucador nao irah medir esforcos para fazer com que cada segundo seja bem utilizado(com certeza sabemos que ele nao executaria o DSNIFF, afinal, DSNIFF nao serve para o hacking, disse apenas para ilustrar). Um programa utilizando o conceito de "Bomba Logica" poderia entao ser criado pelo atacante para automatizar as coisas. Abaixo vemos um exemplo ultra basico do conceito: --------------------------- logic_bomb1.c ----------------------------- /* Exemplo inicial de Bomba Logica. * Nash Leon - nashleon@yahoo.com.br * Executando comando a cada 10 segundos */ #include #include #include #define INTERVALO 10 #define COMANDO "/bin/ls" /* Sem filtro do dsniff, ok?:) */ int main(int argc, char *argv[]){ printf("Mini Daemon Crond utilizado para hacking...\n"); /* Iniciamos um loop infinito * Nao acrescentei nada para cortar o looping de forma elitista. * Eu nao sou programador e quanto menos "lixo", mais facil fica * o entendimento de todos. Se quiser algo bonito, coloque um * signal(). */ while(1){ sleep(INTERVALO); if(!fork()){ execl(COMANDO,COMANDO,NULL,0); } } return 0; } ----------------------------------------------------------------- O programa acima funcionaria semelhante ao daemon "CROND" lendo regras do crontab para execucao a cada 10 segundos. O que desejo demonstrar com isso eh que nao importa se a rede tem daemons de execucao de programas em horarios especificos(crond, atd e etc). Com ou sem isso, um atacante pode utilizar os recursos do sistema para ser bem sucedido. Com base neste conceito, ele poderia ateh mesmo instalar uma backdoor e carrega-la apos X segundos da invasao(por exemplo, 1 dia - 3600 segundos). 2.1 - Metodo de Espera com Base no Horario (gettimer) ------------------------------------------------------- Ilustracao -> Sao 16:30 minutos. Um atacante com conhecimentos avancados invadiu um grande sistema atraves da Internet. Apos analisar a fundo a estrutura da rede, ele percebeu que um usuario costuma executar um script de acesso a uma maquina interna atraves de telnet. O atacante jah havia capturado senhas, mas percebeu que a maquina que o usuario alvo acessa possui um sistema de autenticao ativado por timestamp, sendo que a senha expira apos a autenticacao, e o usuario recebe uma nova apos solicitacao(comando npass). A maquina do usuario eh uma maquina cliente, sem servicos executando e com um sistema operacional enxuto. O atacante percebeu que o script do usuario costuma ficar conectado em media 35 minutos por dia. O atacante passa a raciocinar que ha uma possibilidade de que o usuario execute durante este periodo um sistema de backup. De modo que, ele precisa entao, ser bem sucedido em sequestrar a sessao telnet e capturar a proxima senha. Mas as 16:30 ateh as 17:00 horas eh inviavel para o atacante atacar em modo interativo, pois neste horario, ele estah ocupado, literalmente trabalhando numa empresa, lixando(lavando) jeans. Ele passa a contemplar entao 1 saida. Aplicar o conceito de "Logic Bomb" na maquina jah invadida. Ele cria entao um programa que vai ser executado exatamente as 16:50 minutos, irah sequestrar a sessao e carregar uma bindshell no sistema alvo. <- Fim da Ilustracao Como bem sabemos, um programa pode ficar residente na memoria. O conceito de Logic Bomb vem sendo empregado em virus e worms durante longos anos. No hacking ele eh mais empregado em backdoors e mail bombs. Um exemplo basico de uma logic bomb para a ilustracao acima, segue abaixo: --------------------------- logic_bomb2.c ------------------------------ /* Exemplo 2 de Logic Bomb. * Nash Leon - nashleon@yahoo.com.br * Executando comando no timer especificado * atraves de uma comparacao de string. */ #include #include #include #include #include #define TIMER "16:50" #define COMANDO "/bin/ls" /* Sem hacking anti timestamp */ int main(int argc, char *argv[]){ char *horario; time_t t; while(1){ t = time(NULL); horario = asctime(localtime(&t)); if(strstr(horario,TIMER) != NULL){ fork(); execl(COMANDO,COMANDO,NULL,0); } } return 0; } -------------------------------------------------------------------- Bom, no exemplo acima, dentro do loop existe a captura a hora atual atraves de time/localtime e a saida em ascii no formato do linux para a variavel horario, se a checagem string to string(strstr) for diferente de NULL, executa o que desejarmos. Codigo simples para facil entendimento, mas podemos em cima deste exemplo visualizar inumeros esquemas. Podemos gerar nossos proprios sistemas de execucao de timer, independente que qualquer daemon estilo crond e atd. Na expansao do conceito eu abordo ainda outro metodo de programacao utilizando o esquema descrito aqui. 2.2 - Metodo de Setagem e Execucao (settimer) ---------------------------------------------- Ilustracao -> Todos os dias, depois da meia a noite. As portas de um servidor sao fechadas. Ninguem mais tem acesso externo a Ele. Um administrador de rede setou um programa semelhante ao descrito no item anterior para executar esta tarefa diariamente. Apos a Meia Noite, os Firewalls entram em acao, no entanto todos os demais sistemas de log sao parados. Um atacante entao procura saber se o sistema estah executando algum esquema de timer ou sincronismo remoto. Nao encontra nada. Ele decide entao invadir o sistema antes da Meia Noite. Apos muito suor e lagrimas, ele consegue invadir, o Sistema Operacional da rede alvo eh um Unix Comercial. O administrador de rede, cautelosamente removeu quaisquer programas que setam a hora. O fucador precisa ser rapido, sao 23:56 minutos. Em poucos minutos ele serah colocado para fora da rede e correrah serios riscos de ser descoberto. Ele decide entao tentar enganar o sistema, alterando a hora para uma hora "imprevisivel". Aplicando a tecnica conhecida como "DE VOLTA PARA O FUTURO"..:). <- Fim da Ilustracao Vamos com calma, porque este tipo de hacking eh o mais comum entre os fucadores, mas tambem o menos discutido. Muitas vezes, um sistema alvo possui um agendador de tarefas(crond, eh comum). Determinadas tarefas ocorrem num intervalo de tempo definido(syslog em redes de alta seguranca pode ser completamente inutilizado se o fucador utilizar esse esquema com malicia), por exemplo, todos os dias, as 00:00 uma determinada maquina vai executar um reboot, ser reinicializada sem nenhuma porta aberta, etc. Um atacante sabendo disso, necessita fazer com que o horario 00:00 nao aconteca(hacking puro!:)), pra isso, ele pode "saltar" este momento primeiramente capturando uns 10 segundos antes, saltando para 10 segundos depois. Depois, novamente capturar algo em torno de 20 segundos e setar a diferenca, deste modo saltando o momento esperado(00:00), mas mantendo uma contagem de segundos correta(podendo setar sincronismo entre os aplicativos depois). Abaixo apenas um exemplo basico para demonstrar a alteracao da hora utilizando recursos de programacao. ------------------------ logic_bomb3.c ----------------------------- /* Exemplo 3 de Logic Bomb. * Nash Leon - nashleon@yahoo.com.br * setagem de hora em hora definida, saltando * e saltando, impedindo carregamento de determinados * programas. */ #include #include #include #include //#define _SVID_SOURCE /* Glibc2 - Eh fogo!!!:( */ #include #define TIMER1 "23:59:50" #define SALTA 30 /* Salta 30 segundos */ int main(int argc, char *argv[]){ char *horario1, *horario2; time_t t, z, m; time_t *y; int i; while(1){ t = time(NULL); horario1 = asctime(localtime(&t)); if(strstr(horario1,TIMER1) != NULL){ z = t + SALTA; y = z; i = stime(&y); m = time(NULL); horario2 = asctime(localtime(&m)); printf("Novo Horario: %s",horario2); exit(0); } } return 0; } ------------------------------------------------------------------ Setando a hora, podemos entao novamente checar time() por mais um horario definido, e depois recuperar os segundos alterados. Camuflando bem quaisquer esquemas de backdoors e logic bombs. --------------------------- 3 - EXPANSAO DOS CONCEITOS | --------------------------- Os exemplos que citei utilizam o User Space(UserLand) para manuseio de dados. Mas analisando o Kernel, espcificamente do Linux 2.4.X, podemos ver alguns system calls: #define __NR_stime 25 #define __NR_gettimeofday 78 #define __NR_settimeofday 79 #define __NR_setitimer 104 #define __NR_getitimer 105 #define __NR_adjtimex 124 Dentre outros que podem ser interessantes. Qualquer programa em execucao pode conter um esquema de timmer e atuar como uma bomba logica. A execucao de tarefas, programas, backdoors e etc, fica apenas a criterio do fucador. O que eu espero ter evidenciado eh que podemos utilizar os nossos sistemas de agendamento nao soh para carregar tarefas mas tambem para N utilidades. Tambem vale ressaltar que podemor gerar confusoes em daemons e sistemas de IDS em maquinas rodando atualizacao de hora remotamente, quebrar sistemas de syslog avancados e etc. --------------- 4 - TERMINANDO | --------------- Apenas mais alguns truques de hacking pra ser repassado. Ha muito o que ser discutido sobre este tipo de tecnica. A utilizacao dela estah bem longe de terminar, de modo que, nao raro um virus, worm ou backdoor traz este recurso. Agendadores de Tarefas nao sao necessarios em backdoors evoluidas. O proprio kernel pode fornecer sistema de controle de tempo. Hackers e Crackers avancados evitam quaisquer programas padroes de agendamento de tarefas. 4.1 - Links e Referencias -------------------------- Sinceridade, talvez o google tenha algo sobre isso, mas este assunto nao eh preciso nem pesquisar.:) http://www.google.com.br/ Talvez haja alguma coisa na phrack tb: http://www.phrack.org/ Links de Grupos Apoiadores do Clube dos Mercenarios: http://unsekurity.virtualave.net/ http://int0x80.host.sk/ http://www.infoshack.cjb.net/ http://www.microfobia.com/ Mail Lists: http://www.yahoogroups.com/group/clube_dos_mercenarios http://www.yahoogroups.com/group/frontthescene http://www.yahoogroups.com/group/virii_hacking 4.2 - Consideracoes Finais --------------------------- Estou publicando a Parte II de uma serie artigo sobre truques de hacking. A primeira deve ser publicada assim que o pessoal do Linux tornar a serie 2.6.X padrao(esquemas de LKM com 2.4.X que quero tornar manifesto, mas nao agora). Em termos de seguranca contra os conceitos abordados aqui, um LKM interceptando as systemcalls de tempo e executando em modo oculto pode ser util. :)... Quando a serie 2.6.X tiver nas minhas maos, eu levantarei essa discussao e repassarei alguns pormenores. Um Cordial Abraco, Nash Leon. ------------------------------ EOF ------------------------------------