Estoy escribiendo una herramienta de actualización automática que se ejecuta con permisos de administrador. El trabajo es descargar e instalar archivos desde un archivo tat.
El problema se resuelve hasta el punto en el que puedo verificar la identidad del archivo con la firma ecdsa. Sin embargo, no hay nada que impida que el archivo se modifique después de verificar la firma, pero antes de que se lea.
Una solución es leer el archivo en la memoria y luego verificar la firma de esos datos. Sin embargo, los archivos de actualización pueden tener varios cientos de MB y me gustaría evitar comer tanta RAM.
Otra solución que se me ocurre es cambiar los permisos (al menos escribir) para que solo sean accesibles por el administrador. Sin embargo, no estoy seguro de si abre algún otro vector de ataque.
Una solución más es detectar si el archivo se modificó después de verificar la firma pero antes de que los datos se leyeran por completo. No sé si el sistema operativo proporciona un método confiable y confiable para hacer esto.
Mi actualizador funcionará en Windows y OSX.
ACTUALIZAR
Aparentemente, cambiar el permiso del propietario o del archivo no ayudará si el atacante ya abrió el archivo.
ACTUALIZACIÓN 2 Se me ocurre la siguiente solución:
Archivado:
- Para cada archivo archivado, también almacene su firma ecdsa del resumen sha256
- Junto con la tienda de archivos, la firma ecdsa de su resumen sha256
Extracción:
- Abrir archivo, verificar su firma
- Sin cerrarlo, comienza a desarchivar
- Cree un directorio temporal con acceso rwx solo por root / administrador. Prohibir todos los demás usuarios
- Extraiga el archivo en ese directorio, verifique su firma, instálelo en la ubicación de destino. Repita para cada archivo
- Eliminar directorio temporal