
Envoltorio de túnel de cifrado simétrico TCP/UDP
CryptHook es una implementación modular para asegurar aplicaciones existentes con cifrado simétrico por bloques. Funciona interceptando las llamadas al sistema base para la comunicación de red send/sendto y recv/recvfrom. Crypthook funcionará con cualquier aplicación existente que dependa de estas llamadas al sistema.
CryptHook se basa en AES en modo GCM usando una clave de 256 bits. Las claves se generan a partir de frases de contraseña usando PBKDF2. Los IV se construyen sobre la marcha usando bytes aleatorios de datos, y la misma técnica de derivación de claves para reconstruir el vector de inicialización en el extremo receptor con el fin de mantener la sobrecarga al mínimo. La autenticación de cada paquete también se verifica.
Las siguientes características deben cambiarse si vas a utilizar esto para algo razonablemente seguro. Toda la configuración se puede cambiar en crypthook.c usando los siguientes #defines.
#define KEY_SALT "changeme"
#define IV_SALT "changeme"
#define ITERATIONS 1000
#define PASSPHRASE "Hello NSA"
KEY_SALT e ITERATIONS se usan en el proceso de derivación de claves para convertir la frase de contraseña en texto plano en una clave de 256 bits.
IV_SALT e ITERATIONS se usan en el proceso de derivación de IV para cambiar los 8 bytes de datos aleatorios en un IV completo para usar con el algoritmo.
PASSPHRASE es simplemente la frase de contraseña predeterminada si no se proporciona ninguna mediante la variable de entorno 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