Tenemos una aplicación web para la cual se me ha pedido que agregue la capacidad de permitir que los usuarios carguen documentos que otros usuarios podrán ver y descargar. Esos documentos generalmente serán imágenes y documentos de auditoría que inicialmente estarán en formato PDF pero que pueden extenderse a otros formatos de oficina en el futuro. Cada usuario que pueda cargar o descargar archivos tendrá que autenticarse primero. Los servidores ejecutan Debian.
Tal como lo veo, con esta funcionalidad, nuestro servidor puede potencialmente convertirse en un vector de distribución de virus en el siguiente escenario:
- El usuario 1 carga un archivo que contiene un virus,
- El servidor hace que el archivo esté disponible para descargar,
- El usuario 2 descarga el archivo infectado y propaga el virus.
Para mitigar esta amenaza, estaba pensando en implementar un mecanismo de cuarentena en el que todos los archivos se carguen en nuestro servidor en una carpeta segura, se verifiquen y solo estén disponibles para descargar una vez que se hayan aprobado todas las comprobaciones. Los controles de seguridad que tenía en mente son:
- Tenga una lista blanca de tipos de archivos que aceptamos y rechazamos cualquier archivo que no sea de ese tipo,
- Verifique que el tipo de archivo real sea el mismo que el anunciado en la solicitud POST y rechace cualquier archivo donde haya una discrepancia,
- Ejecutar antivirus en el archivo.
También podemos incluir filtros que son específicos para los tipos de archivos dados. Por ejemplo, podríamos hacer que las imágenes pasen por ImageMagick para almacenar una versión "desinfectada". De manera similar, deberíamos poder analizar parcialmente los archivos de documentos para extraer alguna información de ellos y realizar comprobaciones adicionales.
Mis ideas actuales para implementar esas verificaciones son:
- Verifique el tipo de archivo usando
file -i
, - Use ClamAV como antivirus.
¿Hay otros vectores de ataque en los que deba pensar u otras comprobaciones que deba implementar?
¿Es ClamAV la herramienta correcta para verificar si hay virus en los archivos?