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

admin 2021年9月4日08:23:04评论345 views字数 1623阅读5分24秒阅读模式

概述

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

 静态分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结:    

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


本文始发于微信公众号(零组攻防实验室):分析静态编译加剥离的ELF文件的一些方法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月4日08:23:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   分析静态编译加剥离的ELF文件的一些方法https://cn-sec.com/archives/357779.html

发表评论

匿名网友 填写信息