Cómo proteger la contraseña SFTP en APK?
Estoy desarrollando una aplicación para Android que tiene un servicio para subir imágenes / archivos a un servidor FTP. Para que sea posible, la aplicación en el dispositivo tiene que iniciar sesión en el servidor FTP antes de enviar los datos. Y aquí viene mi problema. El usuario no necesita / tiene que saber sobre los datos de inicio de sesión ftp. Sólo la aplicación en sí. Tengo que almacenar los datos de inicio de sesión en la clase Java. Pero cómo debo asegurar el usuario y la contraseña. Podría enrypt o ofuscarlo. Pero creo que sería posible para un hacker leer la contraseña en el tiempo de ejecución cuando los métodos "setPassword (passwordString) son llamados por la JVM:
String passwordString = "myPass"; JSch ssh = new JSch(); session = ssh.getSession(SFTP_USER, HOST_ADDRESS, 22); session.setPassword(passwordString);
Entonces, ¿cómo puedo almacenar mis credenciales dentro del APK y asegurarlas? No quiero que nadie tenga acceso a mi servidor FTP.
- Protección de contraseña de Android Keystore
- Clave API segura Android
- Seguridad de aplicaciones móviles híbridas
- Uso de un certificado autofirmado para crear una conexión cliente-servidor segura en android
- Comprobar si el sistema de archivos Android está encriptado
Gracias
- Encriptación de Android
- Cómo manejar SecurityException lanzado de startActivity con el selector?
- ¿Cómo detecta la aplicación Android SuperUser que una aplicación solicite root?
- ¿Cómo debo codificar para resistir la "piratería con un solo clic"?
- Prácticas recomendadas (lo mejor para Android): autenticar a un usuario con acceso a Facebook o Google
- Obtener una matriz de char desde el usuario sin utilizar String
- Android Central Keystore
- Android obfuscation código y la aplicación segura de Android de la piratería
¿Cómo puedo almacenar mis credenciales dentro del APK y asegurarlas? No quiero que nadie tenga acceso a mi servidor FTP.
El problema indicado no puede ser resuelto.
No importa lo ingeniosa que sea tu técnica de ofuscación, si ocultas credenciales fijas en el archivo APK, entonces alguien que analiza tu aplicación las va a encontrar.
Si tomas sólo una cosa de esta respuesta, que sea que tener una sola contraseña estática para tu servidor es extremadamente problemática , ya que nunca podrás cambiar la contraseña del lado del servidor, ya que romperías todas las aplicaciones . Será una cuestión de tiempo antes de que su contraseña sea de conocimiento público y no habrá nada que pueda hacer al respecto.
Cualquier enfoque razonable requiere credenciales de acceso independientes para cada usuario individual.
Un sistema de registro de usuario tradicional que implica un correo electrónico de confirmación es un enfoque bastante bueno. Puedes usar algo como el inicio de sesión de Google+ o Facebook Connect para minimizar las molestias para el usuario final.
Si insistes absolutamente en tener una interacción de usuario cero, un enfoque que podría funcionar (algo) es hacer que la aplicación se registre para Google Cloud Messaging y luego enviarle una notificación push que contenga credenciales de acceso, que la aplicación almacenará en KeyChain. Si genera un ID de usuario y una contraseña únicos para cada instalación de la aplicación, podrá supervisar el servidor y bloquear cualquier credencial de acceso abusivo sin afectar a ningún otro usuario. Si de alguna manera factor el código que firma la identidad de la APK en el proceso, usted tendrá una defensa básica contra las personas reempaquetar su aplicación. Este enfoque no le protegerá contra un atacante inteligente, pero podría elevar la barra lo suficientemente alta para sus propósitos.
Además, independientemente de lo que haga, asegúrese de verificar correctamente el certificado SSL de su servidor. Si no lo hace, un atacante simplemente ejecutará su conexión a través de un servidor proxy.
- "El inicio de la etiqueta no está cerrado" al comentar dentro de la etiqueta de inicio y fin del elemento XML
- Robolectric no puede encontrar AndroidManifest.xml