lundi 3 août 2009

Sercurité des MIDlets

SECURISEZ VOS APPLICATIONS MOBILE
MIDP et sécurité
Il peut parfois s'avérer primordiale de sécuriser vos applications conçu sur mobile pour les protéger contre des utilisateurs indiscrets. Il s'agira pour le programmeur de s'assurer :
- que son programme a les permissions nécessaires à son bon fonctionnemlent
- que si le code compilé venait à être décompilé il soit "flou", confus.
- d'identifier l'application auprès de l'utilisateur.
Pour l'accomplissement de ces différentes tâches je vous montrerai comment Netbeans IDE vous facilite la vie.
Obfuscation
Obfusquer peut signifier rendre sombre, confus, flou. Les programmeurs utilisent ce terme pour désigner un code dur à lire et à maintenir. Il existe de nombreux obfuscateur gratuit et payant. L'obfuscation comme vous l'aurez compris est donc utilisée pour rendre le code source difficile à comprendre et donc pour pallier à l'existence des décompilateurs. un obfuscateur n'agit que sur les fichiers .class et non sur les fichiers sources. Après une obfuscation le poids de l'application peut se trouver réduis ... ce qui semble être un bon avantage. L'obfuscation doit être faite avant la prévérification dans la séquence de compilation de votre application. Netbeans IDE inclus un obfuscateur gratuit (ProGuard) dont l'utilisation est des plus simple.
Il vous suffira de vous rendre dans les propriétés du projet - Obfuscating - Obfuscation Level. A chaque fois que vous bougez la gauge vous pouvez lire la description du niveau d'obfuscation correspondant. Après vous devez juste dire OK.
Retenez que l'Obfuscation se fait lorsque vous êtes en phase de production de de votre programme et non en phase de debugging. tester toujours votre application après l'avoir obfusquer, il peut y avoir des derangements liés par exemple au niveau d'obfuscation que vous avez définit.
Acces au API protégé
Pour son bon fonctionnement votre programme aura souvent recours à des permissions. C'est le cas par exemple pour obtenir un droit d'acces aux fichiers, aux infos du mobile (File Browser , PIM API), c'est aussi le cas pour faire une connexion à internet. Le programmeur se doit de prévoir ces permissions. La spécification MIDP 1.0 ne gére pas bien les permissions si on peut dire ça comme ça. MIDP 2.0 par contre est assez flexible. Les permissions se mettent dans le descripteur de l'application ( .jad ) à travers les attributs MIDlet-Permissions pour les permissions requise et MIDlet-Permissions-opt pour les permissions optionnelles. Lorsqu'un problème lié aux permissions est détecté lors du lancement d'une application celle ci produit une SecurityException.
Avec Netbeans IDE, l'ajout d'une permission peut se faire en allant dans propriétés - Application Descriptor - API Permissions - Add - Selectionner vos permissions. Selon que vous cocher ou non la case "required" votre permission sera ou pas considérée comme optionnelle. Netbeans se chargera d'ajouter les attributs concernés dans le .jad (application descriptor)

Tout se passe comme ci l'application spécifiait les droits (permissions) qu'elle souhaite avoir et précisait son identité à l'utilisateur via l'utilisation de certificat numérique.
Signature de l'application
Un certificat est comme la carte d'identité de l'application, le lien entre l'entité physique (auteur) et l'entité virtuel (l'application). le standard le plus utilisé pour produire des certificats est le X509.
Nous allons utiliser Netbeans IDE pour signer notre application. Pour ce faire on se rend dans les Propriétés - Signing - Keystore - Alias . Il existe plusieurs domaines de protection, choisissez le certificat correspondant au domaine qui repond à vos objectifs :
- minimale : toutes les permissions sont à refuser ( une installation OTA se soldera d'un echec).
- trusted : toutes les permissions sont acceptées sans intervension de l'utilisateur
- untrusted : permissions accordées après accord de l'utilisateur
Ensuite exportez la clé vers l'emulateur pour pouvoir tester votre application.
Choisissez le domaine et validez. Votre application est maintenannt signé. Le certificat a été exporté dans l'emulateur pour que votre application puisse être testé. En effet si votre device ne reconnait pas le certificat il n'ya aucune raison valable pour qu'elle effectue l'installation de l'application. Vous pouvez donc créer vos propres certificats (où vous mettrez des informations vous concernant pour la signature) en passant par "open keystores manager". de là, suivez les étapes tel que présenté sur le schema en dessous. (NB: l'étape 7 n'est absolument pas obligatoire)
L'attribution de cet certificat produit un jad ayant les attributs suivant (en couleur)
-------------------------------------------------------------------------------------------------------------------------------------
MIDlet-1: PIM Browser Example,/org/netbeans/microedition/resources/dir.png,pimbrowserexample.PIMBrowserExample
MIDlet-Certificate-1-1: MIICYTCCAcqgAwIBAgIESn8frjANBg ..[chiffré!!] ... etc
MIDlet-Jar-RSA-SHA1: BLSTv7epKRxVrFCmAcBIBsXRXg ..[chiffré!!] ... etc
MIDlet-Jar-Size: 73547
MIDlet-Jar-URL: VotreMIDlet.jar
MIDlet-Name: Visual Designer Custom Components
MIDlet-Permissions: javax.microedition.pim.ContactList.write, javax.microedition.pim.ContactList.read,
... etc
-------------------------------------------------------------------------------------------------------------------------------------
Si vous n'exportez pas le certificat dans l'émulateur, lors de l'exécution vous aurez un message d'erreur du style :
----------------------------------------------------------------------------
Starting emulator in execution mode
Installing suite from: http://127.0.0.1:1254/VotreMIDlet.jad
[WARN] [rms ] javacall_file_open: _wopen failed for: C:\Documents and Settings\be\javame-sdk\3.0\work\0\appdb\_delete_notify.dat
*** Error ***
A problem occured during deploying application from http://127.0.0.1:1254/VotreMIDlet.jad
Reason:
The content provider certificate issuer C=Cameroun;ST=Etat;L=Localité;O=greenspirit;OU=univa1109;CN=benycertif is unknown.
----------------------------------------------------------------------------
Ce message vous dit clairement que le certificat n'est pas reconnu, en d'autre terme votre application présente une carte d'identité qui n'a pas d'autorisation.
Ce post vous a expliqué assez rapidement les possibilités de sécurisation de vos MIDlets et vous a montré comment le faire aisement avec Netbeans IDE.
Voilà! ce sera tout ... Pour le moment.


Aucun commentaire:

Enregistrer un commentaire