Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Le root : un inconnu chez soi ?

Le root : un inconnu chez soi ?

Vous laisseriez le compte admin de votre laptop à un inconnu ? Ou même votre password Gmail ? Alors pourquoi tant d’utilisateurs installent le root sur leurs devices ?
Venez découvrir comment marche réellement ce hack, son évolution au cours des dernières années et ses implications un peu trop vite oubliées.

Bruce Bujon

April 11, 2017
Tweet

More Decks by Bruce Bujon

Other Decks in Programming

Transcript

  1. Le root : un inconnu chez soi ?
    Bruce BUJON – AndroidMakersFR 2017

    View full-size slide

  2. Qui suis-je ? / $ whoiam
     Architecte logiciel
     Développeur Java
     Hacker curieux
    Bruce BUJON PerfectSlayer
    @HardCoding

    View full-size slide

  3. Qu’est-ce que le root ?
     Compte utilisateur
     UID = 0 (User IDentifier)
     Tous les droits et toutes les permissions
    Le « SuperUser »

    View full-size slide

  4. Qu’est-ce que rooter un device ?
     Se donner la capacité de se connecter avec le compte root :
     Depuis l’écran de connexion,
     En substituant son utilisateur par le compte root.

    View full-size slide

  5. Qu’est-ce que rooter un device ?
     Se donner la capacité de se connecter avec le compte root :
     Depuis l’écran de connexion,
     En substituant son utilisateur par le compte root.
    Shell distant avec adb root
    Commande su (Substitute User)

    View full-size slide

  6. Pourquoi rooter un device ?
     Opportunités :
     Xposed Framework
     Sauvegarde et restauration avancées
     Gestion du noyau
     Suppression des bloatwares
    5,6 % de devices rootés
    Source : Google Android Security 2016 report

    View full-size slide

  7. Pourquoi rooter un device ?
     Opportunités :
     Xposed Framework
     Sauvegarde et restauration avancées
     Gestion du noyau
     Suppression des bloatwares
     Penser en dehors des API du SDK/NDK
     Reprendre le contrôle de son device
    5,6 % de devices rootés
    Source : Google Android Security 2016 report

    View full-size slide

  8. Démonstration du root
    $ adb shell gretprop ro.build.type
    userdebug ROM de développement

    View full-size slide

  9. Démonstration du root
    $ adb shell gretprop ro.build.type
    userdebug
    $ adb shell id
    uid=2000(shell) gid=2000(shell)
    groups=2000(shell),1004(input), …
    context=u:r:shell:s0
    ROM de développement
    id : donne l’identifiant courant
    shell : un utilisateur standard

    View full-size slide

  10. Démonstration du root
    $ adb shell gretprop ro.build.type
    userdebug
    $ adb shell id
    uid=2000(shell) gid=2000(shell)
    groups=2000(shell),1004(input), …
    context=u:r:shell:s0
    $ adb root
    $ adb shell id
    uid=0(root) gid=0(root)
    groups=0(root),1004(input),…
    context=u:r:su:s0
    ROM de développement
    id : donne l’identifiant courant
    shell : un utilisateur standard
    Redémarre adb
    avec les permissions root

    View full-size slide

  11. Démonstration du root en production
    $ adb shell getprop ro.build.type
    user ROM de production

    View full-size slide

  12. Démonstration du root en production
    $ adb shell getprop ro.build.type
    user
    $ adb root
    $ adb shell id
    uid=2000(shell) gid=2000(shell)
    groups=2000(shell),1004(input), …
    context=u:r:shell:s0
    ROM de production
    Utilisateur standard

    View full-size slide

  13. Démonstration du root en production
    $ adb shell getprop ro.build.type
    user
    $ adb root
    $ adb shell id
    uid=2000(shell) gid=2000(shell)
    groups=2000(shell),1004(input), …
    context=u:r:shell:s0
    $ adb shell su -c id
    /system/bin/sh: su: not found
    ROM de production
    Utilisateur standard
    Commande su absente
    Lance id en tant que root

    View full-size slide

  14.  lunch -
     BUILD
     BUILDTYPE :
    user
    userdebug
    eng (engineer)
    Accès limité : production
    User + root + debug
    Debug++ : développement
    Nom de code d’un device
    ROM cooking :
    Configuration de la cible

    View full-size slide

  15. ROM cooking : modules d’une ROM
     Le BUILDTYPE définit les modules de la ROM :
    "su": {
    "class": ["EXECUTABLES"],
    "path": ["system/extras/su"],
    "tags": ["debug"],
    "installed": ["out/target/product/generic/system/xbin/su"]
    },
    "adbd": {
    "class": ["EXECUTABLES"],
    "path": ["system/core/adb"],
    "tags": ["optional"],
    "installed": ["out/target/product/generic/root/sbin/adbd"]
    },
    Extraits de module-info.json

    View full-size slide

  16. $ ls -l /system/xbin/su
    -rwsr-x--- root shell 10280 2017-02-15 21:15 su Setuid flag + root user
    ROM cooking :
    Module su (substitute user)

    View full-size slide

  17. $ ls -l /system/xbin/su
    -rwsr-x--- root shell 10280 2017-02-15 21:15 su
    $ cat system/extras/su/su.c

    setuid(0);
    setgid(0);

    execv(args[0], args);

    Setuid flag + root user
    Utilisateur : root
    Groupe : root
    Exécute la commande
    en paramètre
    ROM cooking :
    Module su (substitute user)

    View full-size slide

  18.  Processus de l’exemple de démonstration : « adb shell id »
    0 (root)
    0 (root)
    /init
    /sbin/adbd
    PID1
    Démon adb
    ROM cooking :
    Module adbd (démon adb)

    View full-size slide

  19.  Processus de l’exemple de démonstration : « adb shell id »
    0 (root)
    0 (root)
    0 (root)  2000 (shell)
    /init
    /sbin/adbd
    /sbin/adbd
    PID1
    Démon adb
    Fork adb
    ROM cooking :
    Module adbd (démon adb)

    View full-size slide

  20.  Processus de l’exemple de démonstration : « adb shell id »
    0 (root)
    0 (root)
    0 (root)  2000 (shell)
    2000 (shell)
    2000 (shell)
    /init
    /sbin/adbd
    /sbin/adbd
    /system/bin/sh
    /system/bin/id
    PID1
    Démon adb
    Fork adb
    Shell
    Récupère l’identifiant
    ROM cooking :
    Module adbd (démon adb)

    View full-size slide

  21.  Processus de l’exemple de démonstration : « adb shell id »
     Avec « abd root »
    0 (root)
    0 (root)
    0 (root)  2000 (shell)
    2000 (shell)
    2000 (shell)
    /init
    /sbin/adbd
    /sbin/adbd
    /system/bin/sh
    /system/bin/id
    PID1
    Démon adb
    Fork adb
    Shell
    Récupère l’identifiant
    0 (root)
    0 (root)
    ROM cooking :
    Module adbd (démon adb)

    View full-size slide

  22.  L’influence du BUILDTYPE sur le root :
    BUILDTYPE Modules adb shell user adb root
    eng su + adbd 0 (root) OK
    userdebug su + adbd 2000 (shell) / 0 (root) OK
    user adbd 2000 (shell) KO
    ROM cooking :
    Configuration & modules root

    View full-size slide

  23.  L’influence du BUILDTYPE sur le root :
     Impossible d’utiliser les modules officiels pour se connecter en root.
    BUILDTYPE Modules adb shell user adb root
    eng su + adbd 0 (root) OK
    userdebug su + adbd 2000 (shell) / 0 (root) OK
    user adbd 2000 (shell) KO
    ROM cooking :
    Configuration & modules root

    View full-size slide

  24. Extrait de /system/code/adb/daemon/main.cpp
    Extrait de /system/code/adb/Android.mk
    Build type
    ROM cooking :
    Module adbd en production

    View full-size slide

  25. Comment s’approprier le compte root en production ?

    View full-size slide

  26. HTC Dream / G1
     22 Octobre 2008 :
    Premier téléphone commercialisé sous Android

    View full-size slide

  27. HTC Dream / G1
     22 Octobre 2008 :
    Premier téléphone commercialisé sous Android
     6 Novembre 2008 :
    AOSP Issue Tracker, Issue 1207
    « In connectbot (ssh client) if you're connected to
    a remote server, and type reboot, it will reboot
    both the remote server and the local phone. »

    View full-size slide

  28. HTC Dream / G1
     22 Octobre 2008 :
    Premier téléphone commercialisé sous Android
     6 Novembre 2008 :
    AOSP Issue Tracker, Issue 1207
    « In connectbot (ssh client) if you're connected to
    a remote server, and type reboot, it will reboot
    both the remote server and the local phone. »

    View full-size slide

  29. Communauté du root
     « How-to-root » sur XDA :

    View full-size slide

  30. Communauté du root
     « How-to-root » sur XDA :
    Koush (Koushik Dutta)
    CyanogenMod
    ClockworkMod
    Cyanogen Inc
    CyanogenMod

    View full-size slide

  31. CyanogenMod
     Créée en 2009
     Rapidement de plus en plus populaire
     Accès au root inclus

    View full-size slide

  32. CyanogenMod
     Créée en 2009
     Rapidement de plus en plus populaire
     Accès au root inclus Mais « sécurisé » !

    View full-size slide

  33. Superuser
     Package OTA :
     /system/app/Superuser.apk
     /system/xbin/su
    Zinx (Christopher Lais)
    CyanogenMod
    Par la recovery

    View full-size slide

  34. Superuser
     Package OTA :
     /system/app/Superuser.apk
     /system/xbin/su
     Usage :
     Runtime.getRuntime().exec("su id");
     Popup de confirmation
    Zinx (Christopher Lais)
    CyanogenMod
    Par la recovery

    View full-size slide

  35. com.myapp
    Superuser :
    Communications entre processus

    View full-size slide

  36. su
    com.myapp
    (1) su id
    Superuser :
    Communications entre processus

    View full-size slide

  37. su
    com.myapp
    (1) su id
    (2) uid/gid/cmd
    Superuser :
    Communications entre processus

    View full-size slide

  38. su
    com.myapp
    (1) su id
    (2) uid/gid/cmd
    permissions.db
    (3) Vérification
    Superuser :
    Communications entre processus

    View full-size slide

  39. su
    com.myapp
    (1) su id
    (2) uid/gid/cmd
    permissions.db
    (3) Vérification
    (4) socket + uid/gid/cmd
    Superuser :
    Communications entre processus

    View full-size slide

  40. su
    com.myapp superuser
    (1) su id
    (2) uid/gid/cmd
    permissions.db
    (3) Vérification
    (4) socket + uid/gid/cmd
    (5) ActivityManager
    Superuser :
    Communications entre processus

    View full-size slide

  41. su
    com.myapp superuser
    (1) su id
    (2) uid/gid/cmd
    permissions.db
    (3) Vérification
    (4) socket + uid/gid/cmd
    (5) ActivityManager
    (6) Popup
    Superuser :
    Communications entre processus

    View full-size slide

  42. su
    com.myapp superuser
    (1) su id
    (2) uid/gid/cmd
    permissions.db
    (3) Vérification
    (4) socket + uid/gid/cmd
    (5) ActivityManager
    (6) Popup
    (7) Réponse
    Superuser :
    Communications entre processus

    View full-size slide

  43. su
    com.myapp superuser
    (1) su id
    (2) uid/gid/cmd
    permissions.db
    (3) Vérification
    (4) socket + uid/gid/cmd
    (5) ActivityManager
    (6) Popup
    (7) Réponse
    (8) Mise à jour
    Superuser :
    Communications entre processus

    View full-size slide

  44. su
    com.myapp superuser
    (1) su id
    (2) uid/gid/cmd
    permissions.db
    (3) Vérification
    (4) socket + uid/gid/cmd
    (5) ActivityManager
    (6) Popup
    (7) Réponse
    id
    (8) Mise à jour
    (9) exécute
    Superuser :
    Communications entre processus

    View full-size slide

  45.  Processus
    0 (root)
    0 (root)
    0 (root)  10042 (u0_a42)
    /init
    zygote
    com.myapp
    Superuser :
    Résumé des processus

    View full-size slide

  46.  Processus
    0 (root)
    0 (root)
    0 (root)  10042 (u0_a42)
    10042 (u0_a42)
    /init
    zygote
    com.myapp
    /system/xbin/su
    Superuser :
    Résumé des processus

    View full-size slide

  47.  Processus
    0 (root)
    0 (root)
    0 (root)  10042 (u0_a42)
    10042 (u0_a42)
    10064 (u0_a64)
    /init
    zygote
    com.myapp
    /system/xbin/su
    superuser
    Superuser :
    Résumé des processus

    View full-size slide

  48.  Processus
    0 (root)
    0 (root)
    0 (root)  10042 (u0_a42)
    10042 (u0_a42)
    0 (root)
    10064 (u0_a64)
    /init
    zygote
    com.myapp
    /system/xbin/su
    /system/bin/id
    superuser
     0 (root)
    Superuser :
    Résumé des processus

    View full-size slide

  49. 2008 2009 2010 2011 2012 2013 2014
    Zinx
    Superuser :
    Historique

    View full-size slide

  50. 2008 2009 2010 2011 2012 2013 2014
    Zinx ChainsDD (Adam Shanks)
    CyanogenMod
    Superuser :
    Historique

    View full-size slide

  51. 2008 2009 2010 2011 2012 2013 2014
    Zinx Koush
    ChainsDD (Adam Shanks)
    CyanogenMod
    Superuser :
    Historique

    View full-size slide

  52. 2008 2009 2010 2011 2012 2013 2014
    Zinx Koush
    ChainsDD (Adam Shanks)
    CyanogenMod
    Android 4.3 !
    Superuser :
    Historique

    View full-size slide

  53. Plus de su depuis
    une application
    Plus de mount
    Android 4.3 :
    Renfort de la sécurité

    View full-size slide

  54.  Processus
    0 (root)
    0 (root)
    0 (root)  10042 (u0_a42)
    10042 (u0_a42)
    0 (root)
    /init
    zygote
    com.myapp
    /system/xbin/su
    /system/bin/id
     0 (root)
    Android 4.3 :
    Nouvelle approche

    View full-size slide

  55.  Processus
    0 (root)
    0 (root)
    0 (root)  10042 (u0_a42)
    10042 (u0_a42)
    0 (root)
    /init
    zygote
    com.myapp
    /system/xbin/su
    /system/bin/id
     0 (root)
    nosuid
    capacités--
    Android 4.3 :
    Nouvelle approche

    View full-size slide

  56. ChainFire (Jorrit Jongma)
    SuperSU
     Processus
    0 (root)
    0 (root)
    0 (root)  10042 (u0_a42)
    10042 (u0_a42)
    0 (root)
    /init
    zygote
    com.myapp
    /system/xbin/su
    /system/bin/id
     0 (root)
    nosuid
    capacités--
    Android 4.3 :
    Nouvelle approche

    View full-size slide

  57. ChainFire (Jorrit Jongma)
    SuperSU
     Processus
     su devient un service (démon su)
    0 (root)
    0 (root)
    0 (root)  10042 (u0_a42)
    10042 (u0_a42)
    0 (root)
    0 (root)
    /init
    zygote
    com.myapp
    /system/xbin/su
    /system/bin/id
    su --daemon
     0 (root)
    nosuid
    capacités--
    Android 4.3 :
    Nouvelle approche

    View full-size slide

  58. SuperSU :
    Mise en place du service
     Services lancés par init
     Configuration : /init.rc
     Dans la partition boot
     Non (facilement) modifiable

    View full-size slide

  59. SuperSU :
    Mise en place du service
     Services lancés par init
     Configuration : /init.rc
     Dans la partition boot
     Non (facilement) modifiable
     Extrait :
    service flash_recovery /system/bin/install-recovery.sh
    class main
    oneshot
    Extraits de /system/code/rootdir/init.rc
    Patché pour démarrer
    le démon su

    View full-size slide

  60. init
    SuperSU :
    Communications entre processus

    View full-size slide

  61. su
    (démon)
    init
    (1) install-recovery.sh
    SuperSU :
    Communications entre processus

    View full-size slide

  62. su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    SuperSU :
    Communications entre processus

    View full-size slide

  63. com.myapp
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    SuperSU :
    Communications entre processus

    View full-size slide

  64. com.myapp
    su
    (client)
    (3) su id
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    SuperSU :
    Communications entre processus

    View full-size slide

  65. com.myapp
    su
    (client)
    (3) su id
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    (4) pid/uid/cmd
    SuperSU :
    Communications entre processus

    View full-size slide

  66. com.myapp
    su
    (client)
    (3) su id
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    (4) pid/uid/cmd
    su
    (fils)
    (5) fork
    SuperSU :
    Communications entre processus

    View full-size slide

  67. com.myapp
    su
    (client)
    (3) su id
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    (4) pid/uid/cmd
    su
    (fils)
    (5) fork
    SuperSU :
    Communications entre processus

    View full-size slide

  68. com.myapp
    su
    (client)
    (3) su id
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    (4) pid/uid/cmd
    su
    (fils)
    (5) fork
    SuperSU :
    Communications entre processus

    View full-size slide

  69. com.myapp
    su
    (client)
    (3) su id
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    (4) pid/uid/cmd
    su
    (fils)
    (5) fork
    (6) exit code
    SuperSU :
    Communications entre processus

    View full-size slide

  70. com.myapp
    su
    (client)
    (3) su id
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    (4) pid/uid/cmd
    su
    (fils)
    (5) fork
    (6) exit code
    (7) exit code
    SuperSU :
    Communications entre processus

    View full-size slide

  71. com.myapp
    su
    (client)
    (3) su id
    su
    (démon)
    init
    (1) install-recovery.sh
    (2) socket
    (4) pid/uid/cmd
    su
    (fils)
    (5) fork
    (6) exit code
    (7) exit code
    (8) exit code
    SuperSU :
    Communications entre processus

    View full-size slide

  72.  Processus
    0 (root)
    0 (root)
    0 (root)
    /init
    su --daemon
    zygote
    SuperSU :
    Résumé des processus

    View full-size slide

  73.  Processus
    0 (root)
    0 (root)
    0 (root)
    10042 (u0_a42)
    10042 (u0_a42)
    /init
    su --daemon
    zygote
    com.myapp
    /system/xbin/su
    SuperSU :
    Résumé des processus

    View full-size slide

  74.  Processus
    0 (root)
    0 (root)
    0 (root)
    0 (root)
    10042 (u0_a42)
    10042 (u0_a42)
    /init
    su --daemon
    su
    zygote
    com.myapp
    /system/xbin/su
    SuperSU :
    Résumé des processus

    View full-size slide

  75.  Processus
    0 (root)
    0 (root)
    0 (root)
    0 (root)
    10042 (u0_a42)
    10042 (u0_a42)
    10064 (u0_a64)
    /init
    su --daemon
    su
    zygote
    com.myapp
    /system/xbin/su
    superuser
    SuperSU :
    Résumé des processus

    View full-size slide

  76.  Processus
    0 (root)
    0 (root)
    0 (root)
    0 (root)
    0 (root)
    10042 (u0_a42)
    10042 (u0_a42)
    10064 (u0_a64)
    /init
    su --daemon
    su
    /system/bin/id
    zygote
    com.myapp
    /system/xbin/su
    superuser
    SuperSU :
    Résumé des processus

    View full-size slide

  77. Modifications de la ROM détectées
    Plus d’OTA
    Android 4.4 / Android 5.0 :
    Verified boot & block-based OTA

    View full-size slide

  78. SuperSU : « systemless » root
    ChainFire
    boot /
    /init.rc
    /system
    /data
    /xbin/su
    /install-recovery.sh
    /app
    /data
    Operating
    System
    User data
    Kernel
    RAM disk

    View full-size slide

  79. SuperSU : « systemless » root
    ChainFire
    boot /
    /init.rc
    /system
    /data
    /xbin/su
    /install-recovery.sh
    /app
    /data
    Verified boot
    Operating
    System
    User data
    Kernel
    RAM disk

    View full-size slide

  80. SuperSU : « systemless » root
    ChainFire
    boot /
    /init.rc
    /system
    /data
    /xbin/su
    /install-recovery.sh
    /app
    /data
    /su.img
    Verified boot
    /su
    /bin/daemonsu
    /bin/su
    + patchs
    Operating
    System
    User data
    SuperUser
    Kernel
    RAM disk

    View full-size slide

  81. SuperSU :
    Modifitations du boot
     Modifications de la configuration d’init :
    # mount /data/su.img to /su
    on property:sukernel.mount=1
    mount ext4 loop@/data/su.img /su noatime
    # launch SuperSU daemon
    service daemonsu /sbin/launch_daemonsu.sh service
    class late_start
    user root
    seclabel u:r:init:s0
    oneshot
    Partition /su
    Démon su
    Extraits de init.su.rc

    View full-size slide

  82. Android 4.3 / 4.4 / 5.0 / 7.0 :
    SELinux
     Security-Enhanced Linux pour Android :
     Amélioration du sandboxing

    View full-size slide

  83. ≤ 4.4 : permissive
    5.0 : enforcing
    Android 4.3 / 4.4 / 5.0 / 7.0 :
    SELinux
     Security-Enhanced Linux pour Android :
     Amélioration du sandboxing

    View full-size slide

  84. ≤ 4.4 : permissive
    5.0 : enforcing
    Android 4.3 / 4.4 / 5.0 / 7.0 :
    SELinux
     Security-Enhanced Linux pour Android :
     Amélioration du sandboxing
     1ère solution de contournement par ChainFire’s SuperSU

    View full-size slide

  85. Résumé :
    Complexité du « root »
     Évolutions :
     Gestion des permissions + interactions utilisateur
     Nouveau service Linux
     Nouvelle partition
     Support des règles de sécurité

    View full-size slide

  86. Résumé :
    Complexité du « root »
     Évolutions :
     Gestion des permissions + interactions utilisateur
     Nouveau service Linux
     Nouvelle partition
     Support des règles de sécurité
     Services personnalisés
     Surcouche de /system

    View full-size slide

  87. Résumé :
    Complexité du « root »
     Évolutions :
     Gestion des permissions + interactions utilisateur
     Nouveau service Linux
     Nouvelle partition
     Support des règles de sécurité
     Services personnalisés
     Surcouche de /system
     ChainFire’s SuperSU toujours précurseur
    su.d
    su --bind

    View full-size slide

  88. SuperSU : solution closed source
     Exécutables installés :
    /data/SuperSU.apk
    /su/bin/daemonsu
    /su/bin/app_process
    /su/bin/su
    /su/bin/sukernel
    /su/bin/supolicy_wrapped
    /su/bin/supolicy
    /su/lib/supol.so
    /su/bin/sush
    /sbin/launch_daemonsu.sh

    View full-size slide

  89. SuperSU : solution closed source
     Exécutables installés :
    /data/SuperSU.apk
    /su/bin/daemonsu
    /su/bin/app_process
    /su/bin/su
    /su/bin/sukernel
    /su/bin/supolicy_wrapped
    /su/bin/supolicy
    /su/lib/supol.so
    /su/bin/sush
    /sbin/launch_daemonsu.sh
    Closed source

    View full-size slide

  90. SuperSU : solution closed source
     Exécutables installés :
    /data/SuperSU.apk
    /su/bin/daemonsu
    /su/bin/app_process
    /su/bin/su
    /su/bin/sukernel
    /su/bin/supolicy_wrapped
    /su/bin/supolicy
    /su/lib/supol.so
    /su/bin/sush
    /sbin/launch_daemonsu.sh
    Closed source
    Extrait de « How-To SU »

    View full-size slide

  91. SuperSU : solution closed source
     Exécutables installés :
     Bonus :
     Remplace forceencrypt par encryptable dans fstab
     Désactive dm-verity et supprime les clefs (par défaut)
    /data/SuperSU.apk
    /su/bin/daemonsu
    /su/bin/app_process
    /su/bin/su
    /su/bin/sukernel
    /su/bin/supolicy_wrapped
    /su/bin/supolicy
    /su/lib/supol.so
    /su/bin/sush
    /sbin/launch_daemonsu.sh
    Closed source
    Extrait de « How-To SU »

    View full-size slide

  92.  Gratuit (option « Pro » ≤ 5%)
     5 ans de développement
     Large support de devices
    SuperSU
    Interrogations

    View full-size slide

  93.  Gratuit (option « Pro » ≤ 5%)
     5 ans de développement
     Large support de devices
     Septembre 2015 : acquisition par CCMT (Coding Code Mobile Technology) LLC
     « They have invested in, or own, a number of popular root apps (though I am not at
    liberty to disclose which ones) » - ChainFire
     Enregistée dans le Delaware (US) mais WHOIS chinois et offres d’emploi à Pékin ?
    SuperSU
    Interrogations

    View full-size slide

  94. Installations « one-click » :
    King Root, One-click root, KingoRoot
     Adressées aux néophytes :
     Solutions en 1 clic !
     Gratuites !
     24/7 support !

    View full-size slide

  95. Installations « one-click » :
    King Root, One-click root, KingoRoot
     Adressées aux néophytes :
     Solutions en 1 clic !
     Gratuites !
     24/7 support !

    View full-size slide

  96. Installations « one-click » :
    King Root, One-click root, KingoRoot
     Adressées aux néophytes :
     Solutions en 1 clic !
     Gratuites !
     24/7 support !

    View full-size slide

  97. Installations « one-click » :
    King Root, One-click root, KingoRoot
     Adressées aux néophytes :
     Solutions en 1 clic !
     Gratuites !
     24/7 support !

    View full-size slide

  98. Privacy ?
    Malware ?
    Installations « one-click » :
    King Root, One-click root, KingoRoot
     Adressées aux néophytes :
     Solutions en 1 clic !
     Gratuites !
     24/7 support !
     Excellent référencement
     Toutes closed source

    View full-size slide

  99. 2008 2009 2010 2011 2012 2013 2014
    Zinx Koush
    ChainsDD
    Résumé :
    Superuser / SuperSU / Magisk
    2015 2016 2017
    Superuser

    View full-size slide

  100. 2008 2009 2010 2011 2012 2013 2014
    Zinx Koush
    ChainsDD
    Résumé :
    Superuser / SuperSU / Magisk
    2015 2016 2017
    ChainFire CCMT
    Superuser
    SuperSU
    ?

    View full-size slide

  101. 2008 2009 2010 2011 2012 2013 2014
    Zinx Koush
    ChainsDD
    Résumé :
    Superuser / SuperSU / Magisk
    2015 2016 2017
    ChainFire CCMT
    phhusson topjohnwu
    Superuser
    SuperSU
    ?

    View full-size slide

  102.  Fonctionnement du root
    Conclusion

    View full-size slide

  103.  Fonctionnement du root
     Implications sur la sécurité
    Conclusion

    View full-size slide

  104.  Fonctionnement du root
     Implications sur la sécurité
     Importance d’une solution open-source
    Conclusion

    View full-size slide

  105.  Fonctionnement du root
     Implications sur la sécurité
     Importance d’une solution open-source
    phh‘s Superuser
    goo.gl/4lWtqd
    Magisk
    goo.gl/2pYeie
    Conclusion

    View full-size slide

  106. Merci à vous !
    Questions ?
    Bruce Bujon – @HardCoding
    Slides : speakerdeck.com/perfectslayer/

    View full-size slide