Estoy diseñando un servicio HTTP para un dispositivo integrado y me pregunto si el siguiente concepto de seguridad es suficiente:
-
SSL (Hasta la versión 3) está habilitado de forma predeterminada, TLS no es por limitaciones de la plataforma.
-
La fortaleza de la clave SSL es RSA 2048
-
Todas las solicitudes HTTP se redirigen a HTTPS si SSL está habilitado.
-
El encabezado HSTS se envía de forma predeterminada.
-
Autorización mediante un secreto hash MD5 en un campo de encabezado personalizado. La solicitud se ejecuta si el secreto es válido.
-
Después de demasiadas solicitudes con un secreto de autorización no válido, la API se bloquea por un tiempo.
-
El certificado SSL se puede extraer o reemplazar de una manera que requiera acceso físico al dispositivo y conocimiento del secreto de autorización.
En mi opinión, los siguientes vectores de ataque están cubiertos con esto.
- MITM: si el usuario ya ha instalado el certificado, el atacante debe engañarlo para que acepte otro certificado o intente explotar las debilidades en SSL3.
- XSRF: como el campo del encabezado es personalizado, el navegador no lo envía automáticamente. Si el atacante puede crear paquetes personalizados, debe forzar el secreto.
El servicio es vulnerable a DOS al abusar del mecanismo de bloqueo de la API, pero como los recursos del dispositivo son limitados, no puedo hacer nada al respecto.