分析静态编译加剥离的ELF文件的一些方法

华盟原创文章投稿奖励计划

概述

随着IOT安全越来越受到关注,我也会分析一些ELF文件,但是我们在分析ELF文件的时候最怕遇到静态编译和剥离外加没有编译器信息的样本了,我学习了一些网上的方法,在这里总结以下,供大家学习,也希望大家有什么其他的方法可以一起来分享。

 静态分析

MD5 2ec7bbc430da10d474713cdd00cbff72
大小 461 KB (472,140 字节)
壳信息 UPX(3.91)
指令集架构 Intel 80386

由于有UPX(3.91)版本的壳,这里会发现使用官方的UPX –d 无法进行脱壳

1.png

通过分析可以发现攻击者在样本后面添加了附加数据,只要将下面的阴影部分数据去除则可以使用UPX –d 进行脱壳了

我通常分析linux样本,首先会file一下 ,可以看到这个样本是静态编译,并且被剥离了编译和调试信息

3.png

在用readelf文件进行去看看,发现并没有.comment这个段,这个段通常是用来保存编译器信息的

4.png

一般linux的样本最不愿意分析的就是静态编译加剥离的了,可以先放到IDA中先看看里面自带的sig信号文件是否可以识别,你会发现里面都没有识别出来…..

QQ截图20170517174544.png

这个时候还不能放弃,搬上另一个神器lscan,这款工具主要是用来识别样本中使用的库文件的版本,并却里面自带了sig信号文件,我们用这个工具试一下。

sdf_LI.jpg

使用这个工具可以发现在lscan库中的文件识别率都很低,这样即使吧sig文件放入也不会识别出来的。

6_LI.jpg

这个时候我们只能求助于strings这个工具了,这个文件中字符串可能是发现点蛛丝马迹。

7.png

可以看到里面有一些ssh的自定义函数函数,依据我的经验来看,里面应该用到了ssh2的一些库函数。

8.png

这里我们可以分别使用三种方法就库函数进行识别,看看识别的怎么样。

(1)第一种方法是idb2pat.py+sigmake生成符号文件

idb2pat.py 是fireeye出的一个自动生成pat文件的一款脚本。

sigmake是IDA中自带的将pat文件生成sig文件程序,首先我们从Ubuntu中取出ssh的库文件,这个我选择的libssh2.so.1.0.1这个动态库。

9.png

首先生成sig文件这个文件这个时候会发现会有两个冲突。

10_LI.jpg

这个时候生成的不是sig文件而是这两个文件,这个时候你要是想快速生成sig文件,你就吧后缀为exc文件的前四行注释删除在运行一遍就行了,这个时候将生成sig文件拷贝到IDA安装目录下的sig中就可以了。

11.png

这个时候用IDA打开被静态编译剥离的文件,并打开这个sig文件。

12_LI.jpg

下面是识别结果,结果是一个也没有识别出来。。。。

123.png

(2)对比法,使用diaphora这两个文件二进制数据进行对比

首先生成这个文件的数据库文件

21.png

然后在打开要比较的静态编译和剥离的文件,进行下对比

23_LI.jpg

下面看下对比结果这里主要要关注Best matches 和Partial matches 这两个对话框,首先看一下Best matches这个里面可以看到Ratio是1也就是100%完全匹配的

24_LI.jpg

我们选中一个函数然后选择Diff pseudo-code

25.png

可以看到里面的反汇编比较,可以看到里面匹配成功的都是一些代码很少的函数,以我的经验来看这样一般是不可取

26.png

我们在来看看Partial matches这个对话框,可以看到Ratio最高才0.710,我觉的凡是低于0.8都到认真查看以下反汇编的对比,在对函数名进行导入

27.png

(3)使用Rizzo这个插件进行生成

首先把库文件生成对应的数据库文件

31_LI.jpg

生成完之后在将静态编译的文件在导入这个数据库,这个时候你可以看到确实识别了一些库函数

32.png

总结:

其实这三种方法都有一些可取之处,我在使用中为了识别更多的库函数,这三个方法也是都会尝试,比如在这个样本中还会在字符串中发现LUA的脚本引擎在里面这个时候使用diaphora进行对比也许会更好。大家有什么更好的方法,也请留个言

www.idc126.com

*本文作者:兰云科技银河实验室@diffway,转载请注明FreeBuf.COM

本文原创,作者:AlexFrankly,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/67373.html

发表评论