
Wrapper de túnel com criptografia simétrica TCP/UDP
CryptHook é uma implementação modular para proteger aplicações existentes com criptografia simétrica de blocos. Ele funciona interceptando as chamadas de sistema base para comunicação de rede send/sendto e recv/recvfrom. O Crypthook funcionará com qualquer aplicação existente que dependa dessas chamadas de sistema.
CryptHook depende de AES no modo GCM usando uma chave de 256 bits. As chaves são geradas a partir de frases-senha usando PBKDF2. Os IVs são construídos dinamicamente usando bytes aleatórios de dados, e a mesma técnica de derivação de chave é usada para reconstruir o vetor de inicialização no lado receptor, a fim de manter a sobrecarga ao mínimo. A autenticação de cada pacote também é verificada.
As seguintes características devem ser alteradas se você for usar isso para algo razoavelmente seguro. Toda a configuração pode ser alterada em crypthook.c usando os seguintes #defines.
#define KEY_SALT "changeme"
#define IV_SALT "changeme"
#define ITERATIONS 1000
#define PASSPHRASE "Hello NSA"
KEY_SALT e ITERATIONS são usados no processo de derivação de chave para transformar a frase-senha em texto simples em uma chave de 256 bits.
IV_SALT e ITERATIONS são usados no processo de derivação do IV para transformar os 8 bytes de dados aleatórios em um IV completo para uso com o algoritmo.
PASSPHRASE é simplesmente a frase-senha padrão se nenhuma for fornecida por meio da variável de ambiente CH_KEY.
$ make
Server
$ LD_PRELOAD=./crypthook.so CH_KEY=donthackmebro ncat -l -p 5000
Client
$ LD_PRELOAD=./crypthook.so CH_KEY=donthackmebro ncat server 5000