APP安全测试基础:实践起点 – 作者:calmness

图片[1]-APP安全测试基础:实践起点 – 作者:calmness-安全小百科

1、描述

由于时代的发展,小程序的诞生,需要不断的去测试发现漏洞问题;同时呢,及时的修复,避免上线后的一系列的问题。

这几天做测试遇到的情况,做归纳;

腾讯的小程序好像抓包有问题;

2、环境

下载一个测试的微信版本PC端,比如:2.7的版本等。可搜索一下下载

【测试版本使用的IE的内核】

Windows 10 或者 8、7等等。注明:我这里实验用的Windows 10虚拟机

Java环境【便于运行burpsuite抓包工具】

3、安装JAVA环境

双击执行exe的java文件

1603634739_5f9586339fb67c51a7aae.png!small

安装-下一步

1603634764_5f95864c64d928af1c555.png!small

1603634786_5f958662518497df47493.png!small

查看一下版本

1603634806_5f9586767ef53d5657d0e.png!small

4、安装App

1603634877_5f9586bd36be264960385.png!small

1603634891_5f9586cbc4fc9cef9d535.png!small

1603634906_5f9586da0875f9a67b651.png!small

测试方式一

设置IE浏览器代理

1603635135_5f9587bf2a631c840f032.png!small

选择Internet选项

1603635149_5f9587cd20e24f7e25dd5.png!small

设置的代理地址与burpsuit代理地址一样

1603635170_5f9587e242b5ebf81c6cd.png!small1603635192_5f9587f898af849063c32.png!small

进行抓取数据包

1604494813_5fa2a5dd9bca7f0ad88a0.png!small?1604494814193

测试方式二

安装最新版本的夜神模拟器或者其他的模拟器

1603635310_5f95886ee4e8042610025.png!small

安装微信、Xposed、JustTrustMe 等

1603635378_5f9588b25ab9c6b91ba32.png!small

1603635409_5f9588d164d4d76771398.png!small

1603635477_5f958915e74b7a28567a4.png!small

尝试进行抓取数据包

1604494777_5fa2a5b99b433ce28fc4b.png!small?1604494778562

测试方式三

使用手机在手机上设置代理WIFI的位置设置;导入burpsuite 的抓包工具证书(http://burp)下载后,后缀改为 .cer

保存在手机里进行安装执行;

手机WIFI的位置上可以设置代理ip+端口,要与burpsuit上的一致,才可抓到包;

测试方式四:

安装wireshark 分析工具,抓包工具

1603635574_5f958976b0d295104ba8b.png!small

1603635625_5f9589a950730c7efeaca.png!small

点击APP测试,选择要检测的app ,对抓取到的包进行分析PCAP包

1603635676_5f9589dc03e1713dfbcb5.png!small

分析包即可获取有用信息

1604494715_5fa2a57bf2f605d604798.png!small?1604494717385

App安全检测实践基础——工具

apktool:简而言之就是获取资源文件,主要查看res文件下xml文件、AndroidManifest.xml和图片。
(注意:如果直接解压.apk文件,xml文件打开全部是乱码)
dex2jar:将apk反编译成Java源码(classes.dex转化成jar文件)
jd-gui:查看APK中classes.dex转化成出的jar文件,即源码文件

1、Apktool

下载地址:https://ibotpeaches.github.io/Apktool/install/

1603632889_5f957ef9aebc72952c3eb.png!small

windows则下载,放置同一目录;名字一样【放置在要检测的apk里最好方便检测】

1604494675_5fa2a553888ea771f33a8.png!small?1604494675876

apktool.bat 不好下载可以用我这个

@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul
 
set java_exe=java.exe
 
if defined JAVA_HOME (
set java_exe="%JAVA_HOME%\bin\java.exe"
)
 
rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
    set BASENAME=apktool
    goto skipversioned
)
set max=0
for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion
 
rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
    rem Directory, rebuild
    set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
    rem APK file, unpack
    set fastCommand=d
)
 
:load
%java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*
 
rem Pause when ran non interactively
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause

1604494642_5fa2a53233f00bacf0132.png!small?1604494643594

反编译后的文件如下:

1604494607_5fa2a50fbfe2c859e3b9a.png!small?1604494608158

将反编译后的文件重新打包

1604494560_5fa2a4e0a30627a88efd2.png!small?1604494561472

目录文件内多了一个build、dist文件夹

1604494507_5fa2a4ab17619dbe4def0.png!small?1604494507233

1604494531_5fa2a4c33dbad992ae317.png!small?1604494531400

注意:
反编译时,可能会报bug:
Exception in thread “main” brut.androlib.AndrolibException: Could not decode 
这个问题,就是apktool.jar比较老旧的问题; apktools.jar下载官网。

2、Apk反编译得到Java源代码

1604494290_5fa2a3d28b960eb57e4b9.png!small?1604494290727

得到classes.dex 文件

它就是java文件编译再通过dx工具打包而成的,将获取到的classes.dex放到之前解压出来的工具dex2jar文件夹内。

3、dex2jar

下载地址:https://sourceforge.net/projects/dex2jar/files/latest/download

1603633222_5f95804646918e1071a54.png!small

去执行命令在该目录下,然后生成jar文件

1603633256_5f9580687bd70a1fb630e.png!small

4、jd-gui.exe

下载地址:https://www.sdbeta.com/plus/download.php?open=2&id=224579&uhash=6fd792195f5c2d1cd6f23471

使用jd-gui.exe去分析生成的classes-dex2jar.jar包

1603633302_5f958096e4c693f07c907.png!small1603633345_5f9580c15264856404cf4.png!small

5、劫持工具

那么在实际检测该漏洞的时候,可以利用工具逆向、扫描源代码进行分析,查看代码在关键位置是否进行了一些报警,如toast。实现的方法为直接使用一个测试的apk对目标应用进行界面覆盖,观察目标应用是否进行了报警。

https://github.com/aloswoya/android_app

在styles.xml文件中利用样式配置将界面设置为透明

1604494231_5fa2a397a98d500e89a66.png!small?1604494232664

1603633450_5f95812a3e309a46f0719.png!small

1603633488_5f958150f401013599275.png!small

1603633505_5f958161f169a605f03fb.png!small

6、使用方法:

adb工具

简介

adb是Android的一个很重要的调试工具,熟练掌握后可实现很多功能,比如有些手机的解锁、ROOT就会用到adb工具

安装过程

下载地址:https://developer.android.com/studio/releases/platform-tools

1603633559_5f9581972bf2e537e891d.png!small

由于网速的问题没下载下来,然后从其他网站上下载了一个比较旧的版本

1603633580_5f9581acc561928d5cbc6.png!small

设置环境变量

1603633617_5f9581d13ccd00c6adc86.png!small

显示安装结果

1603633758_5f95825e5426bb9d92c73.png!small

1603633772_5f95826c61b0609aad203.png!small

1603633786_5f95827a68fb1832764a1.png!small

1603633800_5f95828866aea24bee255.png!small

1603633813_5f958295def8cd4aee3fd.png!small

PYTHON2.7

下载地址:https://www.python.org/downloads/release/python-2718/

1603633882_5f9582da7303ca8d1baa6.png!small

设置环境变量

1603633902_5f9582ee963de57e77ae8.png!small

显示安装结果

1603633915_5f9582fb3e74b6eb9ff85.png!small

drozer工具安装及使用

简介

drozer是一款针对Android系统的安全测试框架。
Drozer可以通过与Dalivik VM,其它应用程序的IPC端点以及底层操作系统的交互,避免正处于开发阶段,或者部署于的组织的android应用程序和设备暴露出不可接受的安全风险。
drozer提供了很多Android平台下的渗透测试exploit供你使用和分享。
对于远程漏洞,drozer能够生产shellcode帮助你部署drozer代理作为一个远程管理工具,最大化对设备的利用。
更快的Android安全评估drozer可以大大缩减Android安全评估的耗时,通过攻击测试暴露Android APP的漏洞。
基于真机的测试
drozer运行在Android模拟器和真实设备上,它不需要USB调试或其他开发即可使用。
自动化和扩展drozer有很多扩展模块,你可以找到他们进行测试以发现Android安全问题

安装过程

下载地址:https://github.com/FSecureLABS/drozer/releases

1603634058_5f95838a7a866ea26c9fb.png!small

1603634071_5f9583977b4dcf257165d.png!small

将agent.apk 导入模拟器里

1603634088_5f9583a82993d709cf741.png!small

1603634102_5f9583b6efb87d6bfda65.png!small

使用过程

adb与模拟器进行连接

1603634140_5f9583dc693b12baf3a36.png!small

使用drozer对app进行测试

官方直接指定的drozer支持命令及其命令说明列表如下

命令	描述
run	执行驱动模块
list	显示可在当前会话中执行的所有drozer模块的列表。这将隐藏您没有适当权限运行的模块。
shell	在代理进程的上下文中,在设备上启动交互式Linux Shell。
cd	挂载特定的名称空间作为会话的根目录,以避免重复输入模块的全名。
clean	删除drozer在Android设备上存储的临时文件。
contributors	显示为系统中使用的drozer框架和模块做出贡献的人员列表。
echo	将文本打印到控制台。
exit	终止驱动程序会话。
help	显示有关特定命令或模块的帮助。
load	加载包含drozer命令的文件,并依次执行它们。
module	从Internet查找并安装其他drozer模块。
permissions	显示授予drozer代理的权限列表。
set	将值存储在变量中,该变量将作为环境变量传递给drozer生成的任何Linux shell。
unset	删除drozer传递给它产生的任何Linux shell的命名变量。

1603634230_5f958436d776bb16ebe26.png!small

找到所要测试安卓应用程序的包名

1603634248_5f95844883a77bdd5fa7b.png!small

通过app.package.list模块获取要检测的app的包名
dz> run app.package.list
com.android.providers.telephony (绉诲姩缃戠粶閰嶇疆)
com.android.providers.calendar (鏃ュ巻瀛樺偍)
com.android.providers.media (濯掍綋瀛樺偍)
com.android.wallpapercropper (com.android.wallpapercropper)
com.android.documentsui (鏂囨。)
com.android.externalstorage (澶栭儴瀛樺偍璁惧)
com.android.htmlviewer (HTML 鏌ョ湅绋嬪簭)
com.android.mms.service (MmsService)
com.android.providers.downloads (涓嬭浇绠$悊绋嬪簭)
com.android.browser (娴忚鍣?
[Errno 0] Error
 
 
使用app.package.info模块查看apk基本信息
dz> run app.package.info -a com.android.providers.downloads
 
Package: com.android.providers.downloads
  Application Label: 涓嬭浇绠$悊绋嬪簭
  Process Name: android.process.media
  Version: 5.1.1-500200917
  Data Directory: /data/data/com.android.providers.downloads
  APK Path: /system/priv-app/DownloadProvider/DownloadProvider.apk
  UID: 10004
  GID: [1028, 1015, 1023, 1024, 2001, 3003, 3007]
  Shared Libraries: null
  Shared User ID: android.media
  Uses Permissions:
  - android.permission.RECEIVE_BOOT_COMPLETED
  - android.permission.ACCESS_DOWNLOAD_MANAGER
  - android.permission.ACCESS_CACHE_FILESYSTEM
  - android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  - android.permission.ACCESS_NETWORK_STATE
  - android.permission.INTERNET
  - android.permission.WRITE_EXTERNAL_STORAGE
  - android.permission.ACCESS_ALL_DOWNLOADS
  - android.permission.UPDATE_DEVICE_STATS
  - android.permission.CONNECTIVITY_INTERNAL
  - android.permission.MODIFY_NETWORK_ACCOUNTING
  - android.permission.CLEAR_APP_CACHE
  - android.permission.WAKE_LOCK
  - android.permission.READ_EXTERNAL_STORAGE
  Defines Permissions:
  - android.permission.ACCESS_DOWNLOAD_MANAGER
  - android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED
  - android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  - android.permission.DOWNLOAD_CACHE_NON_PURGEABLE
  - android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
  - android.permission.ACCESS_ALL_DOWNLOADS
 
dz> run app.package.info -a /system/priv-app/DownloadProvider/DownloadProvider.apk
could not find the package: /system/priv-app/DownloadProvider/DownloadProvider.apk
dz> run app.package.info -a DownloadProvider.apk
could not find the package: DownloadProvider.apk
dz> run app.packag.list -f DownloadProvider.apk
unknown module: 'app.packag.list'
dz> run app.package.list -f DownloadProvider.apk
dz> run app.package.info -a com.android.providers.downloads
Package: com.android.providers.downloads
  Application Label: 涓嬭浇绠$悊绋嬪簭
  Process Name: android.process.media
  Version: 5.1.1-500200917
  Data Directory: /data/data/com.android.providers.downloads
  APK Path: /system/priv-app/DownloadProvider/DownloadProvider.apk
  UID: 10004
  GID: [1028, 1015, 1023, 1024, 2001, 3003, 3007]
  Shared Libraries: null
  Shared User ID: android.media
  Uses Permissions:
  - android.permission.RECEIVE_BOOT_COMPLETED
  - android.permission.ACCESS_DOWNLOAD_MANAGER
  - android.permission.ACCESS_CACHE_FILESYSTEM
  - android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  - android.permission.ACCESS_NETWORK_STATE
  - android.permission.INTERNET
  - android.permission.WRITE_EXTERNAL_STORAGE
  - android.permission.ACCESS_ALL_DOWNLOADS
  - android.permission.UPDATE_DEVICE_STATS
  - android.permission.CONNECTIVITY_INTERNAL
  - android.permission.MODIFY_NETWORK_ACCOUNTING
  - android.permission.CLEAR_APP_CACHE
  - android.permission.WAKE_LOCK
  - android.permission.READ_EXTERNAL_STORAGE
  Defines Permissions:
  - android.permission.ACCESS_DOWNLOAD_MANAGER
  - android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED
  - android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  - android.permission.DOWNLOAD_CACHE_NON_PURGEABLE
  - android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
  - android.permission.ACCESS_ALL_DOWNLOADS
 
使用app.package.attacksurface模块识别攻击面
所谓攻击面,应该就是指可export的安卓四大组件(activaty、broadcast receiver、content provider、service)
 
dz> run app.package.attacksurface com.android.providers.downloads
Attack Surface:
  0 activities exported
  0 broadcast receivers exported
  2 content providers exported
  1 services exported
    Shared UID (android.media)
 
使用app.activity.info模块查看activity组件信息
dz> run app.activity.info -a com.android.providers.downloads
Package: com.android.providers.downloads
  No matching activities.
 
使用app.provider.info模块查看content provider组件信息
dz> run app.provider.info -a com.android.providers.downloads
Package: com.android.providers.downloads
  Authority: downloads
    Read Permission: null
    Write Permission: null
    Content Provider: com.android.providers.downloads.DownloadProvider
    Multiprocess Allowed: False
    Grant Uri Permissions: True
    Uri Permission Patterns:
      Path: /all_downloads/
        Type: PATTERN_PREFIX
      Path: /my_downloads/
        Type: PATTERN_PREFIX
    Path Permissions:
      Path: /my_downloads
        Type: PATTERN_PREFIX
        Read Permission: android.permission.INTERNET
        Write Permission: android.permission.INTERNET
      Path: /all_downloads
        Type: PATTERN_PREFIX
        Read Permission: android.permission.ACCESS_ALL_DOWNLOADS
        Write Permission: android.permission.ACCESS_ALL_DOWNLOADS
      Path: /download
        Type: PATTERN_PREFIX
        Read Permission: android.permission.INTERNET
        Write Permission: android.permission.INTERNET
  Authority: com.android.providers.downloads.documents
    Read Permission: android.permission.MANAGE_DOCUMENTS
    Write Permission: android.permission.MANAGE_DOCUMENTS
    Content Provider: com.android.providers.downloads.DownloadStorageProvider
    Multiprocess Allowed: False
    Grant Uri Permissions: True
 
使用app.service.info模块查看service组件信息
dz> run app.service.info -a com.android.providers.downloads
Package: com.android.providers.downloads
  com.android.providers.downloads.DownloadIdleService
    Permission: android.permission.BIND_JOB_SERVICE

安装apk文件

1604494143_5fa2a33f198dbe11ce811.png!small?1604494143680

源码地址:https://github.com/aloswoya/android_app

目的:方法为直接使用一个测试的APK对目标应用进行界面覆盖,观察目标应用是否进行了报警。

1604494434_5fa2a4625ca399d81e3ef.png!small?1604494434805

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.uihijack"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.test.uihijack.MainActivity"
            android:exported="true"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

1603634395_5f9584db7ef68671afbec.png!small

打包完成后,在测试apk开启的情况下,使用drozer来调用MainActivity:

run app.activity.start --component com.test.uihijack com.test.uihijack.MainActivity

效果图如下:

1603634454_5f9585164fb549ff3a606.png!small

修复建议

  • 测试到缺陷后,开发方需要对程序进行修复,修复方法也很简单,

  • 就是也去判断当前应用程序是否位于栈顶 (是否显示在前面),

  • 如果在后台了,就进行一些如toast提示、震动、通知弹窗等等,告诉用于当前应用已经在后台运行了。

通过在线工具进行测试
1.腾讯金刚审计系统
http://service.security.tencent.com
 
优点:包含了修复建议
 
2.阿里聚安全检测
 
网址: http://jaq.alibaba.com/ 
阿里聚安全下有自己的安全博客,包含一些:1.安全漏洞、2.病毒分析、3.技术研究、4.安全报告相关文档。
 
3.360捉虫猎手检测结果
 
网址: http://appscan.360.cn/ 
同样有自己的安全博客
 
4.爱加密
 
网址:http://safe.ijiami.cn/analyze
优点:在导出的报告中可以看到对当前apk的评分
 
5.百度MTC
 
网址: http://mtc.baidu.com/

HijackActivity-劫持工具

下载地址:

https://github.com/rohitshampur/droidsheep/blob/master/%20droidsheep/DroidSheep_public/src/de/trier/infsec/koch/droidsheep/activities/HijackActivity.java

或者查看https://blog.csdn.net/weixin_43650289/article/details/109105943

参考链接

https://www.freebuf.com/sectool/249725.html

https://blog.csdn.net/JiaoMaGe/article/details/103023839?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-3-103023839.nonecase&utm_term=activity%20%E7%95%8C%E9%9D%A2%E5%8A%AB%E6%8C%81%E5%B7%A5%E5%85%B7&spm=1000.2123.3001.4430

https://www.52pojie.cn/thread-749955-1-1.html

https://blog.csdn.net/wizardforcel/article/details/54755814

https://blog.csdn.net/nancyfh/article/details/81196070

https://www.cnblogs.com/zhaoyixiang/p/11236458.html

http://www.mamicode.com/info-detail-2486333.html

https://www.jianshu.com/p/7c0a6da594c8

https://www.cnblogs.com/lsdb/p/9441813.html

https://blog.csdn.net/weixin_39190897/article/details/108802836

来源:freebuf.com 2020-11-04 21:02:08 by: calmness

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论