d-Raco/android-malware-analyzer
GitHub: d-Raco/android-malware-analyzer
一款运行在Android设备上的恶意软件分析应用,通过权限评分、签名比对和云端日志分析三种方式综合检测恶意应用。
Stars: 17 | Forks: 0
# android-malware-analyzer
一款基于权限、哈希值和日志来检测恶意软件的 Android 应用程序。
本项目的文档可以在[这里](https://eprints.ucm.es/id/eprint/66842/)和[这里](https://github.com/d-Raco/android-malware-analyzer/blob/master/docs/Malware-Analysis-on-Android.pdf)找到。
## 目录
[android-malware-analyzer](https://github.com/d-Raco/android-malware-analyzer#android-malware-analyzer)
+ [目录](https://github.com/d-Raco/android-malware-analyzer#table-of-contents)
+ [简介](https://github.com/d-Raco/android-malware-analyzer#introduction)
+ [动机](https://github.com/d-Raco/android-malware-analyzer#motivation)
+ [ proposed Solution](https://github.com/d-Raco/android-malware-analyzer#proposed-solution)
+ [决策与功能](https://github.com/d-Raco/android-malware-analyzer#decisions--features)
+ [环境要求](https://github.com/d-Raco/android-malware-analyzer#requirements)
+ [文件结构](https://github.com/d-Raco/android-malware-analyzer#file-structure)
+ [结论](https://github.com/d-Raco/android-malware-analyzer#conclusions)
+ [未来工作](https://github.com/d-Raco/android-malware-analyzer#future-work)
- [签名分析器](https://github.com/d-Raco/android-malware-analyzer#signature-analyzer)
- [日志分析器](https://github.com/d-Raco/android-malware-analyzer#log-analyzer)
- [权限分析器](https://github.com/d-Raco/android-malware-analyzer#permission-analyzer)
+ [资源](https://github.com/d-Raco/android-malware-analyzer#resources)
## 简介
在 21 世纪,世界见证了移动设备的创造、发展及普及,直至今日的广泛使用。这些设备提供的便携性、即时性和易用性促使绝大多数人将它们随身携带。因此,这些设备已成为恶意开发者觊觎的目标。这就是为什么移动设备的安全性已成为必须解决的重要课题,因为目前尚未找到合适的解决方案。
正是出于这种需求,诞生了本项目。我们详细阐述了一个作为起点的应对方案,旨在促进进一步的开发,以实现最终目标。
鉴于 Android 是移动设备中最具代表性的操作系统,我们将研究 Android 上的恶意软件分析,并开发一个基于签名、权限和日志的静态和动态杀毒软件,因为它们在试图检测恶意应用程序时将被证明是有用的。
## 动机
我们生活在一个移动设备普及率逐渐提高的时代,据估计,目前全球 70% 的人口都在使用它们。从儿童到老人,每个人都在根据各自的喜好、爱好或商业目的,以不同的方式使用移动设备。
超过 25 亿用户选择使用搭载 Android 操作系统的设备,这意味着其在全球移动市场中占据了 85.9% 的份额。因此,我们的工作集中在 Android 上,因为它是世界上分布最广的移动操作系统。
目前有一长串的杀毒软件产品,任何用户都可以使用它们来保护和防止对其设备的攻击。然而,大多数反恶意软件都是针对 Windows 或 Mac OS 操作系统开发的,而将 Android 搁置一旁。需要指出的是,对 Android 安全性的明显忽视是具有讽刺意味的。许多 Android 应用程序在进入 Play Store 之前,会通过 Google Play Protect 的分析等安全机制,还有一些起初并非恶意,但随后收到更新改变了一切。Android 设备上出现的恶意应用程序在 Play Store 内外都在增加,加上针对移动设备的新攻击技术(SIM Swapping、Smishing 等),这表明在 Android 安全方面需要更多的工作。
因此,本项目的动机是研究适应 Android 操作系统的特定恶意软件分析技术的潜力和有效性。除了将这些不同的技术结合到一个应用程序中的好处之外。
## 建议方案
一个使用三种方法分析所有已安装应用程序的应用程序:
- 提取其权限,并根据其数量和保护级别计算分数。
- 计算其哈希值,并将其与恶意软件签名数据库进行比较。
- 实时提取所有日志,将其发送到服务器并在云端进行分析,然后将结果发送回设备。
## 决策与功能
- 我们决定为 Android 实现日志分析,因为我们希望进行动态分析,以在另外两种分析方法之外增加一些功能。此外,由于我们没有找到太多相关信息,我们想尝试创造一些相对新颖的东西。
- 我们选择实现权限分析器,因为它可以给用户提供大量关于应用程序试图实现什么的信息。此外,通过给出一个分数,我们相信可以直观且有效地展示它是否真的是一个良性应用程序。最后,我们认为它可以提高用户对授予权限的意识,并鼓励他们检查正在安装在其设备上的应用程序的权限。
- 我们选择实现签名分析器,因为如果发现其签名存在碰撞,它几乎可以肯定是恶意软件,这意味着这种分析方法给用户提供了几乎绝对的确定性。
- 我们决定实现服务器设置 Fragment,因为每次启动 EC2 实例时,都会为该实例设置一个新的 IP。如果我们没有开发这个 Fragment,每次启动实例时,我们都需要在应用程序代码中写入新的 IP,构建 APK 并将其安装在我们的手机上。此外,这个 Fragment 允许用户创建自己的服务器,只需担心添加 IP 而无需更改任何代码。
- 我们选择在云端处理日志,因为在本地处理将意味着应用程序可能会因为所需的处理量而卡顿或崩溃。这也意味着减少了电池消耗,因为所需的功率更少。最后,这允许用户设置自己的服务器来处理日志。
- 我们还得出结论,我们将只分析用户安装的应用程序,而不分析预装应用程序,因为这些应用程序是由全球信任的相关公司开发的。此外,由于用户无法卸载它们,这意味着分析只会花费更多时间而不会获得任何东西。
- 轻松设置将接收和分析日志的开放服务器的 IP 和端口。
- 所有先前分析的历史记录。
## 环境要求
- Android Studio
- ADB
- Cloud Instance
- Spark Streaming
Android Studio 用于开发 Android 应用程序,可以从[此](https://developer.android.com/studio/#downloads)网页下载。
ADB (Android Debug Bridge) 可以从[这里](https://developer.android.com/studio/releases/platform-tools)下载。它是一个命令行工具,允许用户通过 PC 上的控制台与 Android 设备进行通信。对于本项目,有必要对 Android 发出的所有日志进行分析,因此我们必须准备设备以利用其所有功能。例如,要访问所有 `logcat` 日志,必须向分析器应用程序授予 `android.permission.READ_LOGS` 权限。由于潜在的危险性,此权限属于特殊类别,这就是为什么读取日志的权限只应授予属于系统固件的应用程序。为了让我们的应用程序获得此权限,我们必须使用 ADB 工具。在 ADB 控制台中使用的命令 `adb shell pm grant com.example.androidmalwareanalyzer android.permission.READ_LOGS` 允许向恶意软件分析器授予权限。值得一提的是,要使用此工具,必须激活设备的 USB Debugging。
需要一个 Cloud Instance 来容纳服务器端代码以分析日志。Spark Streaming 用于实时接收和分析这些日志。
## 文件结构
```
# 重要项目组件
.
├── AndroidMalwareAnalyzer - # Contains the Android app code
│ ├── app
│ │ └── src
│ │ └── main - # App code
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── androidmalwareanalyzer
│ │ │ ├── MainActivity.java
│ │ │ └── ui
│ │ │ ├── aboutUs - # Print developer information
│ │ │ │ └── AboutUsFragment.java
│ │ │ ├── appsInformation - # Extract information from apps
│ │ │ │ ├── AppDetails.java
│ │ │ │ ├── AppPermissions.java
│ │ │ │ ├── AppsListFragment.java
│ │ │ │ ├── PackageInfoStruct.java
│ │ │ │ └── PermissionFragment.java
│ │ │ ├── home - # Home view
│ │ │ │ └── HomeFragment.java
│ │ │ ├── logAnalyzer - # Analyze logs
│ │ │ │ ├── LogAnalyzerConnect.java
│ │ │ │ ├── LogAnalyzerFragmentApplications.java
│ │ │ │ ├── LogAnalyzerFragment.java
│ │ │ │ ├── LogAppsAdapter.java
│ │ │ │ └── LogResult.java
│ │ │ ├── MalwareDB.java - # Database holding malware hashes and permissions
│ │ │ ├── permissionAnalyzer - # Analyze permissions
│ │ │ │ ├── AppScore.java
│ │ │ │ ├── CustomExpandableListAdapter.java
│ │ │ │ ├── ExpandableListDataPump.java
│ │ │ │ ├── PermissionAnalysisProcess.java
│ │ │ │ └── PermissionAnalyzerFragment.java
│ │ │ ├── prevResults - # Show a history of previous analysis results
│ │ │ │ ├── ElementsAdapter.java
│ │ │ │ ├── LogElementsAdapter.java
│ │ │ │ ├── LogSubElementsAdapter.java
│ │ │ │ ├── PrevResultsAdapter.java
│ │ │ │ ├── PrevResultsDB.java
│ │ │ │ ├── PrevResultsFragment.java
│ │ │ │ ├── PrevResultsRecyclerView.java
│ │ │ │ ├── ShowLogResult.java
│ │ │ │ └── ShowResult.java
│ │ │ ├── serverSettings - # Set up IP and port of the server that will receive the logs
│ │ │ │ └── ServerSettingsFragment.java
│ │ │ └── signatureAnalyzer - # Analyze hashes
│ │ │ ├── AppInfo.java
│ │ │ ├── AppsManager.java
│ │ │ ├── InstalledAppsAdapter.java
│ │ │ └── SignatureAnalyzerFragment.java
│ │ └── res - # App visual resources
├── Android_Malware_Analyzer.apk - # Compiled Android app
├── docs
│ └── Malware-Analysis-on-Android.pdf - # Thesis
└── server - # Contains the server code
├── analyser.py - # Analyzes the logs
└── server.c - # Opens a socket and receives logs
```
## 结论
在项目结束时,在阐述了在每个用户的设备上安装反恶意软件的必要性之后,我们相信我们的应用程序可以满足手机用户的一些关键需求。
我们相信项目开始时设定的目标已经实现。我们开发了一个应用程序,它向用户提供大量信息,这些信息可以极大地帮助确定已安装的应用程序是否为恶意软件,或者至少是否具有可疑行为。
我们不仅成功开发了三种被证明极为有用的不同类型的分析,还编写了一种显示已安装应用程序通用信息的方法。此外,多亏了保存先前的结果,用户可以跟踪应用程序在不同时间段的行为,从而允许用户获得已安装应用程序行为的整体图像。
我们还认为,该应用程序将鼓励用户主动分析其应用程序,并且他们将认识到根据权限和行为确保所安装应用程序真实性的重要性。
## 未来工作
### 签名分析器
- 扩展数字签名(哈希)的恶意软件数据集,并能够为每个数据库行存储应用于单个恶意软件的不同哈希算法,如 SHA512、SHA256 等。
- 将数据库迁移到云端,以便安装了我们应用程序的设备不需要在本地存储它,从而占用更少的空间并具有更高的性能。
- 创建另一个数据库或修改并扩展现有数据库,以包含 Google Play Store 中最常用/安装的前 100 个(或更多)应用程序的哈希值,以便将您手机上安装的应用程序的哈希值与数据库中的哈希值进行比较,以检测您的 Android 设备上的恶意软件。
- 为用户创建一个报告选项,以防她/他通过使用其他分析方法(日志分析器或权限分析器)或从其他来源检测到新的恶意应用程序,从而生成其哈希并将其包含在我们的数据库中。
### 日志分析器
- 配置服务器,以便脚本可以一直运行。目前,实现这一点的唯一方法是通过连接到服务器的 ssh shell 中运行脚本,这并不理想。
- 在结果中,显示每个目标元素被访问的时间。
- 通过 SSL 执行与服务器的连接。
- 将 AsyncTask 更改为 Executor 或 Service,因为 AsyncTask 已被弃用,有时可能不可靠。
- 确保连接是从 AndroidMalwareAnalyzer 应用程序执行的,以防止恶意连接。
- 利用我们在服务器上创建的日志历史记录,允许用户查询其日志并按日期或应用程序搜索。
- 实施机器学习,用于对比不同用户之间特定应用程序的日志,这将允许应用程序检测异常行为。
- 改进分析以避免在检测目标元素时出现误报。
- 开发一个自动服务,每隔一定时间(例如,每小时 5 分钟)启动一次日志分析,并向用户通报自上次访问应用程序以来获得的结果。
### 权限分析器
- 将所有应用程序权限存储在数据库中,并在每次分析中查找权限的任何更改以警告用户。最后,用这些更改更新数据库。
- 通过创建新线程来减少分析时间。
- 获取 Google Play Store 承认的所有应用程序类别,以便在试图预测权限量时更加精确。例如,可以通过实现 android-market-api 来完成。
- 改进导航性和 GUI。
- 保持更新并完善权限和域的数据集,包括应用程序尚不知道的那些。
## 资源
欲了解更多信息,可以在[这里](https://eprints.ucm.es/id/eprint/66842/)获取最终的研究论文,也可以在此仓库内的[这里](https://github.com/d-Raco/android-malware-analyzer/blob/main/docs/Malware-Analysis-on-Android.pdf)找到。
标签:AMSI绕过, Android, Android开发, App安全, DSL, JS文件枚举, 云安全监控, 云资产清单, 哈希校验, 域名枚举, 域名枚举, 威胁检测, 权限检测, 目录枚举, 移动安全, 签名分析, 网络安全, 网络安全, 逆向工具, 逆向工程, 隐私保护, 隐私保护, 静态分析
