Criptografia Numaboa
A fraude do Camouflage
Dom 20 Mar 2005 16:18 |
- Detalhes
- Categoria: Papers
- Atualização: Terça, 10 Março 2009 17:25
- Autor: vovó Vicki
- Acessos: 16321
O software Camouflage é um dos mais primários em termos de esteganografia. Adiciona dados no final de arquivos de diversos tipos usando um método que, para ser muito gentil, é uma babaquice: um simples XOR
Para quem não está familiarizado com as lidas criptográficas (e esteganográficas), estas afirmações parecem sem sentido ou coisa de sociedades herméticas. Se você não sabe o que é um XOR, sugiro que dê uma olhada no texto da seção de Informática - Oráculo de Referências - Gerais e leia Lógica Booleana antes de continuar. Se você já sabe, então vamos lá!
A seguir estão três imagens no formato gif: mosquito.gif (a imagem original), mosquitoC.gif (a imagem com texto camuflado sem senha) e mosquitoCP.gif (a imagem com texto camuflado protegido pela senha "numaboa").
| |
|
|
O TAMANHO DOS ARQUIVOS
A primeira coisa que chama a atenção é o tamanho dos arquivos. Se o criptoanalista não possuir a imagem original, este fator não é relevante, mas não deixa de ser um ponto fraco do método.
LOCALIZANDO O TEXTO ADICIONADO
Sabendo que qualquer arquivo gif possui uma "assinatura de fim de arquivo" constituída pelos valores hexadecimais 00 3B (assim como arquivos jpg possuem os terminadores FF D9), ao se inspecionar num editor hexadecimal as imagens que contêm texto, encontra-se muitos bytes após o ponto onde o arquivo deveria terminar (destacado em azul). A seguir, encontra-se um bloco de dados que contém alguns valores de cabeçalho do camouflage e o texto cifrado (destacado em vermelho). Este, por sua vez, é seguido por um longo bloco de 20 (valor hexadecimal do ASCII do caracter "espaço"), interrompido em três pontos por mais alguns dados.
Observe a listagem abaixo que corresponde à imagem mosquitoC.gif, que contém texto cifrado sem senha:
2384 00 3B 20 00 5C 2400 E0 C2 01 E0 6F 82 F3 2F 2E C5 01 30 F6 AC 47 58 2416 E0 C2 01 E0 7D 2E F6 D6 00 00 00 43 B5 3B 4E 68 2432 C3 7D 80 C1 81 CA 08 41 0D F1 D2 B9 00 39 27 1A 2448 D6 11 31 8D 53 A2 0C E8 48 8B DC 8C 96 3B BD 6C 2464 6E CF E0 99 BA 5F 2D 76 32 76 41 07 96 00 EB 45 2480 ED 97 A0 CA CD 8F E9 77 CC 4C 09 86 15 04 4E 15 2496 99 A7 85 F1 BD 27 F1 2E AE 26 0C 41 1B CB 6A F7 2512 BA 5C 90 AD D3 46 04 72 B6 B6 E2 F0 5B 8F DC 8C 2528 E3 0F 45 A4 E7 0D AC 3E 73 65 9C C4 3F 78 01 78 Alguns dados 2544 66 E2 4F 22 CF 5B 43 FF CD F1 FC A9 16 DE 5B AB + texto cifrado 2560 5E B4 94 5E 2A 5C 72 4F F4 56 D9 5D 17 30 95 24 2576 EC 2C B1 45 74 98 03 F4 7D FD 4D DE 49 CB 75 0E 2592 A2 F5 7D FE 76 4F 10 5D F6 7E 97 7B 7E 65 02 03 2608 3E 23 B5 FE DC A9 1A A4 F9 1B DC 92 E0 A1 B4 59 2624 AA AE E9 9E CB 88 EA 3D 21 1E 79 46 0A 5D F8 36 2640 A5 FF FF FF FF 20 00 23 2E C5 01 E0 D7 0D 8B 2F 2656 2E C5 01 90 85 DF 34 23 2E C5 01 90 98 1B 8B 61 2672 F4 17 4D 79 C0 78 80 86 AA E0 11 45 1C EA D6 B7 2688 11 32 27 20 20 20 20 20 20 20 20 20 20 20 20 20 2704 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2736 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2752 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2768 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2784 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 Buffer vazio 2816 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2832 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2848 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2864 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2896 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2912 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6F FA 2928 09 53 79 CF 60 8E CF A8 D6 03 20 20 20 20 20 20 Alguns dados 2944 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2976 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2992 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3008 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3024 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3056 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3072 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 Buffer vazio 3088 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3104 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3136 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3152 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3168 20 20 20 20 20 20 20 20 20 20 20 20 20 D6 00 00 3184 00 5D 09 00 00 02 00 20 20 20 20 20 20 20 20 20 Alguns dados 3200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3216 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3232 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3248 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3264 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3296 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3312 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 Buffer vazio 3328 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3344 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3376 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3392 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3408 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3424 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3440 20 20 20 20 20 20 74 A4 54 10 22 97 20 20 20 20 Alguns dados 3456 20 20 20 20 20 20 20 20 20 20
Os dados não precisam ser dissecados, pois não são importantes para quebrar este sistema capenga. Apenas como curiosidade, o comprimento do texto embutido na imagem aparece duas vezes - está destacado com sublinhado.
O ENGODO DA SENHA
Se compararmos os valores hexadecimais do arquivo que esconde o texto SEM senha e do arquivo que esconde o texto COM senha, dá vontade de rir. Os textos cifrados (que ficam no primeiro bloco de dados) são IDÊNTICOS, ou seja, a senha não foi usada para nada :crazy: A única diferença entre as duas imagens está na segunda "ilha" de dados:
3168 20 20 20 20 20 20 20 20 20 20 20 20 20 D6 00 00 3184 00 5D 09 00 00 02 00 20 20 20 20 20 20 20 20 20 Sem senha 3200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3168 20 20 20 20 20 20 20 20 20 20 20 20 20 D6 00 00 3184 00 5D 09 00 00 02 00 6C E0 17 43 6E C9 75 20 20 Com senha 3200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
Comparando-se os dois trechos, observamos que foram adicionados 7 bytes, exatamente o tamanho da senha utilizada ("numaboa") - um sinal claro de que o método é fraco.
Conhecendo-se a localização da senha, é de se supor que o buffer que a segue deve servir apenas para armazenar senhas e que o tamanho máximo da senha seja de 255 bytes. Efetivamente, se ocultarmos um texto usando como senha a letra a repetida 255 vezes, o resultado será:
3168 20 20 20 20 20 20 20 20 20 20 20 20 20 D6 00 00 3184 00 5D 09 00 00 02 00 63 F4 1B 43 6D C7 75 80 80 3200 AE DE 04 41 0E FF D2 F8 04 2B 32 9A 97 14 35 CC 3216 42 AC 1F FD 48 86 9D 83 98 2C B3 23 2F 67 A1 99 3232 FB 7D 03 59 15 45 61 34 BE 20 AA 60 C3 D6 92 EE 3248 EB BC CD 52 E2 01 48 92 19 45 5F 1B 8A B2 85 FC 3264 FC 22 F5 2B A6 24 0C 44 15 8A 6A F9 A8 1D 9D A9 3280 DB 53 0A 61 B2 A4 A3 F5 55 CE D1 84 F4 1C 4B E5 3296 C5 3E 84 0F 46 4B BA F7 1F 5F 29 58 27 AE 0E 10 3312 CB 5D 50 FB C8 FF EE E8 12 D2 58 AB 53 B4 91 50 3328 38 1D 63 4F E7 56 98 4A 1F 30 93 20 E0 6D B5 04 3344 74 96 11 B5 78 F9 41 DE 41 D9 34 06 AD E0 79 ED 3360 72 5D 02 5D F3 70 85 3A 7A 69 43 01 2D 2B A4 EB 3376 D2 A4 14 A2 F1 1B 93 D3 D7 A9 B1 59 EB A3 E7 91 3392 CD 88 AB 3D 2F 5F 68 48 19 48 F8 3B E5 B4 DB 3F 3408 B4 F3 1B 59 9B B1 01 8D 94 46 DB 8F D6 BF FE FA 3424 BF 04 B5 17 58 17 FD BB 09 EC C9 C1 C7 7F B8 BA 3440 6E 2C CA F3 AC 10 74 A4 54 10 22 97 20 20 20 20
Se a senha constituída por 255 letras a foi armazenada no buffer da senha com bytes uns diferentes dos outros, o que vem imediatamente à cabeça é que a senha deve ter sido modificada por uma string também de 255 caracteres. O modo mais simples (e ingênuo) de "casar" esta string com a senha é fazendo a operação lógica XOR entre os bytes da senha e os bytes da string "secreta".
Como a operação XOR é reversível, se repetirmos as operações XOR dos bytes do buffer com o byte 61 (valor hexadecimal do ASCII da letra a), o resultado será a... string secreta original :) Assim, os primeiros 16 bytes do buffer da senha XORados com 61 resultam em
63 F4 1B 43 6D C7 75 80 80 AE DE 04 41 0E FF D2 XOR 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 ------------------------------------------------- = 02 95 7A 22 0C A6 14 E1 E1 CF BF 65 20 6F 9E B3
O conteúdo total do buffer XORado, ou seja, a string ou chave "secreta" revela-se a seguinte:
02 95 7A 22 0C A6 14 E1 E1 CF BF 65 20 6F 9E B3 99 65 4A 53 FB F6 75 54 AD 23 CD 7E 9C 29 E7 FC E2 F9 4D D2 42 4E 06 C0 F8 9A 1C 62 38 74 24 00 55 DF 41 CB 01 A2 B7 F3 8F 8A DD AC 33 83 60 29 F3 78 24 3E 7A EB D3 E4 9D 9D 43 94 4A C7 45 6D 25 74 EB 0B 98 C9 7C FC C8 BA 32 6B 00 D3 C5 C2 94 34 AF B0 E5 95 7D 2A 84 A4 5F E5 6E 27 2A DB 96 7E 3E 48 39 46 CF 6F 71 AA 3C 31 9A A9 9E 8F 89 73 B3 39 CA 32 D5 F0 31 59 7C 02 2E 86 37 F9 2B 7E 51 F2 41 81 0C D4 65 15 F7 70 D4 19 98 20 BF 20 B8 55 67 CC 81 18 8C 13 3C 63 3C 92 11 E4 5B 1B 08 22 60 4C 4A C5 8A B3 C5 75 C3 90 7A F2 B2 B6 C8 D0 38 8A C2 86 F0 AC E9 CA 5C 4E 3E 09 29 78 29 99 5A 84 D5 BA 5E D5 92 7A 38 FA D0 60 EC F5 27 BA EE B7 DE 9F 9B DE 65 D4 76 39 76 9C DA 68 8D A8 A0 A6 1E D9 DB 0F 4D AB 92 CD 71
Se voltarmos para a imagem que contém o texto cifrado com senha de 7 bytes e realizarmos um XOR destes bytes com os 7 primeiros da chave "secreta", obteremos o seguinte resultado:
senha 6C E0 17 43 6E C9 75 XOR 02 95 7A 22 0C A6 14 ---------------------- = 6E 75 6D 61 62 6F 61 ASCII n u m a b o a
Esta foi muuuito fácil. Agora é só repetir a operação com o bloco que contém alguns dados e o texto cifrado para extrair a mensagem embutida na imagem, ou seja:
2416 43 B5 3B 4E 68 XOR chave 02 95 7A 22 0C ---------------- = 41 20 41 6C 64 ASCII A A l d 2432 C3 7D 80 C1 81 CA 08 41 0D F1 D2 B9 00 39 27 1A XOR chave A6 14 E1 E1 CF BF 65 20 6F 9E B3 99 65 4A 53 FB ------------------------------------------------- = 65 69 61 20 4E 75 6D 61 62 6F 61 20 65 73 74 E1 ASCII e i a N u m a b o a e s t á 2448 D6 11 31 8D 53 A2 0C E8 48 8B DC 8C 96 3B BD 6C XOR chave F6 75 54 AD 23 CD 7E 9C 29 E7 FC E2 F9 4D D2 42 ------------------------------------------------- = 20 64 65 20 70 6F 72 74 61 6C 20 6E 6F 76 6F 2E ASCII d e p o r t a l n o v o . 2464 6E CF E0 99 BA 5F 2D 76 32 76 41 07 96 00 EB 45 XOR chave 4E 06 C0 F8 9A 1C 62 38 74 24 00 55 DF 41 CB 01 ------------------------------------------------- = 20 C9 20 61 20 43 4F 4E 46 52 41 52 49 41 20 44 ASCII É a C O N F R A R I A D 2480 ED 97 A0 CA CD 8F E9 77 CC 4C 09 86 15 04 4E 15 XOR chave A2 B7 F3 8F 8A DD AC 33 83 60 29 F3 78 24 3E 7A ------------------------------------------------- = 4F 20 53 45 47 52 45 44 4F 2C 20 75 6D 20 70 6F ASCII O S E G R E D O , u m p o e assim por diante...
Só Deus sabe porque o autor deste método horroroso cifrou também a senha. Aliás, nem é preciso conhecer a senha que o usuário utilizou para retirar o texto de qualquer arquivo (imagem, som, texto, etc e tal). É só pregar o chinelo com texto oculto XOR chave para obter o texto claro.
Se você quiser saber o texto na íntegra que está escondido nas imagens mosquitoC.gif e mosquitoCP.gif, copie as imagens, abra qualquer delas num editor hexadecimal, retire o texto cifrado e faça o XOR com a chave que você já conhece. Tá feito o jogo
Existem mais alguns pormenores desta história que talvez sejam de interesse. Se você ainda tiver paciência, leia na próxima página.
Em 2002 surgiram os primeiros boatos de que a Al Qaeda estava usando métodos de esteganografia para ocultar mensagens terroristas em gráficos espalhados pela Internet. Aproveitando o furor causado pelas falsas informações, devidamente vitaminadas por jornalistas inescropulosos, em 11 de setembro deste mesmo ano, o "gênio" de criptógrafo que inventou esta maravilha de "método" foi entrevistado no show "Le Journal des Bonnes Nouvelles" do "Canal Plus". Fizeram uma "demonstração" de um software de esteganografia "famoso" e "inquebrável, mesmo pela NSA", que escondia dados de uma "forma totalmente indetectável" e que era "ilegal". Adivinhou, era o Camouflage
Alguns criptoanalistas amadores, entre eles Guillermito, Kaski e ViKTORY, precisaram apenas de algumas horas para detonar o Camouflage. E não foi só isto. Colocaram à disposição programas que extraem o texto claro de qualquer arquivo "camuflador". No site do PaketStorm há também um script Perl, da autoria de Andrew Christensen, que faz o mesmo serviço. Todo estes softwares encontram-se à disposição na seção de downloads da Aldeia.
MORAL DA HISTÓRIA: não acredite em tudo que você ouve ou vê na tevê e na Internet. Pode ser a maior fria.
Abraços a todos e tenham um bom dia
vovó Vicki