Hardware
No es posible proteger contra escritura un dispositivo USB a través del protocolo de almacenamiento masivo USB estándar. Necesitaría encontrar un proveedor de unidades flash que lo proporcione como una característica adicional. Asegúrese de que esté implementado en hardware, y no como un programa tonto que uno tiene que ejecutar para que se apliquen las protecciones. Seguramente hay algunos por ahí, pero probablemente sean costosos, y muchos de ellos pueden ser fáciles de evitar.
Tenga en cuenta que, incluso con hardware, no será necesariamente difícil para un atacante hábil o simplemente inteligente para eludir. Muchas unidades flash pueden tener su firmware sobrescrito, lo que necesariamente deshabilitará cualquier protección contra escritura. Yo recomendaría contra una solución de hardware por esta razón.
Hash lists, almacenadas en su computadora
Si su presupuesto es bajo y su modelo de amenaza no incluye adversarios particularmente avanzados que puedan explotar el firmware de la unidad flash o los controladores del sistema de archivos, entonces la solución puede ser tan simple como generar una lista hash y revisar la lista cuando Se devuelven las unidades. Si alguno de los hashes no coincide, sabrá que se ha modificado un archivo. Una forma sencilla de generar una lista hash utilizando Linux, utilizando rutas relativas para evitar problemas si la ubicación del punto de montaje es diferente:
Para generar una lista hash y guardarla en su casa:
cd /media/usb
find . -type f -exec sha1sum {} + > ~/SHA1SUMS
Para verificar la lista de hash:
cd /media/usb
sha1sum -c ~/SHA1SUMS
Listas hash firmadas, almacenadas en el USB
Si no desea almacenar un archivo separado con una lista hash para cada dispositivo USB, también puede poner una lista hash firmada en la unidad. Esto funciona básicamente de la misma manera, pero en lugar de mantener la lista hash en su propia computadora, la mantiene en el USB, usando una clave de firma para que pueda saber si se ha modificado. Esta es una técnica común utilizada para distribuir software de forma segura también. Deberá crear una clave para firmar con GPG.
Para generar y firmar una lista de hash:
cd /media/usb
find . -type f -exec sha1sum {} + > SHA1SUMS
gpg --clearsign SHA1SUMS -o SHA1SUMS.asc -b
Para verificar la lista de hash:
cd /media/usb
gpg --verify SHA1SUMS.asc
sha1sum -c SHA1SUMS
Es probable que pueda automatizar todo esto con un script.
dm-verity
Otra solución de Linux, mucho más poderosa que los hash trees, implica el uso de una función llamada dm-verity , originalmente diseñado para proteger el proceso de arranque de Android. Cuando se usa una unidad con dm-verity, se usa una clave de firma maestra para firmar el root hash . El hash raíz cambiará si cualquier cosa en la partición con dm-verity cambia, y la clave de firma ya no la validará. De forma predeterminada, cualquier cambio hará que ese archivo no sea legible. Esto es mucho más seguro porque no se puede omitir sin conocer la clave secreta de firma y se puede usar en cualquier dispositivo de almacenamiento.
Esta solución es más eficiente que el uso de una lista hash, ya que los archivos solo se verifican cuando se accede a ellos, lo que elimina la necesidad de verificarlos todos a la vez. Sin embargo, la partición se hará de solo lectura, por lo que agregar un nuevo archivo requerirá volver a formatear la unidad. Esto es genial si escribe una vez, lee muchas situaciones, pero no es tan bueno si tiene que agregar nuevos archivos a la unidad flash y redistribuirlos todo el tiempo.