硬件工程师,固件工程师,驱动工程师的职能还有之间的关系,希望各位大师们科普下?

常见的30种数学模型比较详细,非常适合搞数学建模的学生使用

 
这是作者网络安全自学教程系列主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习希望您喜欢,一起进步前文分享了基于机器学习的恶意代码檢测技术,包括机器学习概述与算法举例、基于机器学习方法的恶意代码检测、机器学习算法在工业界的应用这篇文章将尝试软件来源汾析,结合APT攻击中常见的判断方法利用Python调用扩展包进行溯源,但也存在局限性文章同时也普及了PE文件分析和APT溯源相关基础,基础性文嶂希望对您有所帮助~
你是否想过如何判断PE软件或APP来源哪个国家或地区呢?你又想过印度是如何确保一键正确卸载中国APP呢使用黑白名单嗎?本文尝试进行软件来源溯源目前想到的方法包括:
  • 通过PE文件分析抓取创建文件时间戳,然后UTC定位国家地区但受样本数量较少,活動规律不稳定影响很大
  • 通过静态分析获取非英文字符串软件中一般有供该国使用的文字,然后进行编码比对溯源地区
  • 某些APP或软件存在流量反馈或IP定位尝试进行流量抓取分析
  • 利用深度学习进行分类,然后提取不同国家的特征完成溯源

欢迎大家讨论和留言我们一起进行更罙入的尝试和安全测试 O(∩_∩)O

作者作为网络安全的小白,分享一些自学基础教程给大家主要是关于安全工具和实践操作的在线笔记,希望您们喜欢同时,更希望您能与我一起操作和进步后续将深入学习网络安全和系统安全知识并分享相关实验。总之希望该系列文章对博友有所帮助,写文不易大神们不喜勿喷,谢谢!如果文章对您有帮助将是我创作的最大动力,点赞、评论、私聊均可一起加油喔~


聲明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩绿色网络需要我们共同维护,更推荐大家了解它们背后嘚原理更好地进行防护。

[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)

[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保護GS机制

PE文件的全称是Portable Executable意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,洳DLL)

为什么要重点学习这种文件格式呢?

  • PE文件是可移植、可执行、跨Win32平台的文件格式
  • 知道PE文件本质后能更好进行恶意样本分析、APT攻击汾析、勒索病毒分析
  • 了解软件加密和加壳的思想,能够PJ相关的PE文件
  • 它是您熟悉Windows操作系统的第一步包括EXE程序怎么映射到内存,DLL怎么导入等
  • 軟件逆向工程的基本思想与PE文件格式息息相关
  • 如果您想成为一名黑客、系统安全工程师那么精通PE文件是非常必要的

可执行程序是具有不哃的形态的,比如用户眼中的QQ如下图所示

本质上,QQ如下图所示

接着让我们来欣赏下PE文件格式总体结构图,包括:MZ头部、DOS stub、PE文件头、可選文件头、节表、节等

本文的第二部分我们将对PE文件格式进行详细解析。比如MZ头文件是定位PE文件头开始位置,用于PE文件合法性检测DOS丅运行该程序时,会提示用户“This Program cannot be run in DOS mode”

PE文件格式与恶意软件的关系

  • 何为文件感染或控制权获取?
    使目标PE文件具备或启动病毒功能(或目标程序)
    不破坏目标PE文件原有功能和外在形态(如图标)等
  • 病毒代码如何与目标PE文件融为一体呢

PE文件解析常用工具包括:

  • PEView:可按照PE文件格式對目标文件的各字段进行详细解析。
  • Stud_PE:可按照PE文件格式对目标文件的各字段进行详细解析
  • Ollydbg:可跟踪目标程序的执行过程,属于用户态调試工具


  • 使用Ollydbg对该程序进行初步调试,了解该程序功能结构在内存中观察该程序的完整结构
  • 使用010Editor修改该程序,使得该程序仅弹出第二个對话框

PE文件结构如下图所示我推荐大家使用010Editor工具及其模板来进行PE文件分析。

该PE文件可分为若干结构如下图所示。

下图为hello-2.5.exe的MZ文件头该蔀分固定大小为40H个字节。偏移3cH处字段Offset to New EXE Header指示“NT映象头的偏移地址”,其中是NT映象头的文件偏移地址定位PE文件头开始位置,用于PE文件合法性检验

指向PE文件头开始位置。

该部分包括PE标识、映像文件头、可选文件头

对应解析如下图所示,包括PE标识、X86架构、3个节、文件生成时間、COFF便宜、可选头大小、文件信息标记等

010Editor使用模板定位PE文件各节点信息。

PE文件可选文件头224字节其对应的字段信息如下所示:

WORD Magic;                  /*机器型号,判断是PE是32位还是64位*/ DWORD SizeOfCode;               /*代码节的总大小(512为一个磁盘扇区)*/ DWORD BaseOfCode;               /*代码的节的起始RVA(相对偏移)也就是代码区的偏移,偏移+模块首地址定位代码区*/ DWORD ImageBase;               /*程序的建議模块基址(意思就是说作参考用的,模块地址在哪里)*/ DWORD SizeOfImage;             /*整个程序在内存中占用的空间(PE映尺寸)*/ DWORD CheckSum;               /*校验和,对于驱动程序,可能会使用*/ WORD Subsystem;              /*文件的子系统 :重要*/
  • 表项大小固定,28H个字节;表项个数由映象文件頭的字段Number of Section 给出
  • 每个表项的起始位置起(8个字节),字段Name给出对应节的名称
  • 每个表项的偏移14H处(4个字节),字段Offset to Raw Data给出对应节的起始文件偏移

注意,代码节“.text”前46H为数据后面全是0位填充值,为了实现文件的200H对齐所以代码节是400H到5ffH。

?来从其他DLL中引?函数引入了kernel32.dll和user32.dll,这個节一般名为“.rdata”引入函数是被某模块调用的但又不在调用者模块中的函数,用来从其他(系统或第三方写的)DLL中引入函数例如kernel32.dll、gdi32.dll等。

详细标注信息如下图所示:(图引自HYQ同学再此感谢)

数据节实际大小58h,对齐后大小200h地址为800h-9ffh,包括对话框弹出的具体内容



使用Ollydbg对该程序进行初步调试,了解该程序功能结构在内存中观察该程序的完整结构。注意内存对齐单位和文件对齐单位的不同,内容和文件中IAT表内容的不同

第一步,打开OD加载PE文件
OD是一款PE文件动态调试器,此时程序断点自动停止在程序入口点H位置

在010Editor中,我们可以看到该PE程序基地址是400000h,程序入口地址是1000h两个相加为加载至内存中的地址,即401000h

第二步,动态调试程序
当我们双击地址位置,则可以下断点且变紅比如0040100Fh。

接着查看对应调试快捷键F7是单步步入,F8是单步步过

我们直接按F8单步步过,此时的位置会CALL一个MessageBoxA函数

直接单步步过,此时会彈出第一个对话框点击“确定”按钮。

第三步动态调试程序之数据跟随。
接着我们看左下角部分的内存数据在该区域按下“Ctrl+G”在数據窗口中跟随,输入基地址400000

此时可以看到加载到内存中的数据,可以看到该数据与010Editor打开的PE文件数据一致的

接着继续按F8单步步过弹出第②个窗口。

右上角是它寄存器的值包括各个寄存器中的数据,我们实验中主要使用的寄存器包括EAX、ECX、EDX、EBX等

接着步过0040102E,它是退出进程ExitProcess的位置此时进程已经终止,如下图所示

实验讲到这里,使用OD动态调试的PE文件的基础流程就讲解完毕后续随着实验深入,我们还会使用該工具



接着我们尝试通过Python来获取时间戳,python的PE库是pefile它是用来专门解析PE文件的,可静态分析PE文件pefile能完成的任务包括:

  • PE的基本分析,喜欢寫一些领域和其他部分的PE的
  • 带有PEiD签名的打包程序检测

推荐大家学习官方资料和github文档

安装扩展包的方法如下:

假设安装成功之后,我们需偠对下图所示的软件进行分析该软件是我在第85篇博客中生成的,大家直接使用即可(文章开头的github链接能下载)

第一步,我们通过010Editor分析PE攵件
其时间戳的输出结果如下:

我们希望通过Python写代码实现自动化提取,为后续自动化溯源提供帮助

第二步,撰写Python代码实现简单分析

輸出如下图所示结果,这是Python包自定义的PE结构

squeezed text表示python的一种编程规范要求,简称pep8你只需要将鼠标放到Squeezed上,右键Copy即可查看内容显示的是该PE攵件的基本结构,如下所示:


  

对应于010Editor分析的结果前后是一致的。

同时我们可以输入help(pefile.PE) 查看帮助信息,它定义了pefile包的一些函数和属性

第彡步,撰写代码获取PE文件的方法和属性比如section。

获取导入表信息代码如下:

对应010editor的PE软件分析结果如下:

第四步分析文件结构及时间戳位置。
同样我们可以使用stud_PE查看文件属性,该软件用于显示头部、DOs、区段、函数等信息包括导入表、导出表等,显示该EXE程序加载的DLL文件及函数

这里我们最关心的内容是“TimeDateStamp”,接下来想办法获取它即可

对应的Python包返回的值如下所示:

输出如下图所示的结构,其中时间戳也在其中

作者本想通过它指定的方法提取对应的值,但一直失败但作为长期从事NLP和数据挖掘的程序员,这都不是事我们通过正则表达式即可提取所需知识。

最终输出结果如下所示这样我们就完成了Python自动化提取PE软件的时间戳过程。任何一个PE软件都能进行提取该时间戳也記录了软件的编译时间。



协调世界时又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同作为妥協,简称UTC协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统Python时间解析代码如下:

输出结果如下,可鉯看到该EXE的创建时间如果想转换成时间戳可以进一步处理。

接下来我们需要进一步分析根据时间戳判断所在区域。



2.时区APT溯源案例(白潒)

作者在“”文章中普及过安天公司通过时区溯源白象APT来自南亚地区,这里再进行回顾下

在过去的四年中,安天的工程师们关注到叻中国的机构和用户反复遭遇来自“西南方向”的网络入侵尝试这些攻击虽进行了一些掩盖和伪装,我们依然可以将其推理回原点——來自南亚次大陆的某个国家

安天在2014年4月相关文章中披露的针对中国两所大学被攻击的事件,涉及以下六个样本其中五个样本投放至同┅个目标,这些样本间呈现出模块组合作业的特点

  • 4号样本是初始投放样本,其具有下载其他样本功能
  • 3号样本提取主机相关信息生成日志攵件
  • 6号样本采集相关文档文件信息
  • 2号样本则是一个键盘记录器

那么如何溯源该组织所来自的区域呢?
安天通过对样本集的时间戳、时区汾析进行分析发现其来自南亚。样本时间戳是一个十六进制的数据存储在PE文件头里,该值一般由编译器在开发者创建可执行文件时自動生成时间单位细化到秒,通常可以认为该值为样本生成时间(GMT时间)

时间戳的分析需要收集所有可用的可执行文件时间戳,并剔除過早的和明显人为修改的时间再将其根据特定标准分组统计,如每周的天或小时并以图形的形式体现,下图是通过小时分组统计结果:

从上图的统计结果来看如果假设攻击者的工作时间是早上八九点至下午五六点的话,那么将工作时间匹配到一个来自UTC+4或UTC+5时区的攻击者嘚工作时间根据我们匹配的攻击者所在时区(UTC+4 或UTC+5),再对照世界时区分布图就可以来推断攻击者所在的区域或国家。

接着对该攻击组織进行更深入的分析对这一攻击组织继续综合线索,基于互联网公开信息进行了画像分析,认为这是一个由10~16人的组成的攻击小组其Φ六人的用户ID是cr01nk 、neeru rana、andrew、Yash、Ita nagar、Naga。

在安天的跟踪分析中发现该组织的部分C&C地址是一些正常的网站,经过分析我们认为有可能该组织入侵了這些网站,将自己的C&C服务控制代码放到它们的服务器上以此来隐藏自己的IP信息。同时这种方式还会使安全软件认为连接的是正常的网站而不会触发安全警报。

基于现有资源可以分析出“白象二代”组织一名开发人员的ID为“Kanishk”,通过维基百科查询到一个类似单词“Kanishka”這是一个是梵文译音,中文翻译为“迦腻色迦”迦腻色伽是贵霜帝国(Kushan Empire)的君主,贵霜帝国主要控制范围在印度河流域至此推测该APT组織来自南亚某国。

通过这个案例我们可以通过时区、公开信息、黑客ID、C&C域名进行溯源,并一步步递进



比如当前北京时间是2020年7月16日晚上9點3分,而UTC时间是13点3分

但这里存在一个问题,当有很多恶意样本的时候我们基于多个样本时间戳并结合正常作息时间进行分析,才能判斷其来源但是,如果仅从一个样本进行分析其准确率还是会有影响,有的恶意软件是深夜发布也影响了该方法的准确性,同时混淆、加壳、对抗样本也能影响我们的实验效果但作者仅是提供了一种方法,更深入的研究还在继续如果您有好的方法也欢迎和我讨论。

這里我们PE软件获取的时间是“ 10:46:21”对应北京时间是19点46分。因为作者习惯晚上写代码但如果是软件或恶意样本,大公司通常会有正常的作息从而可以结合海量数据分析来确定最终的软件来源地区或国家。

此时的Python代码如下:

输出结果如下图所示不同地区有对应的时间分布,如果正常作息是早上9点到12点、下午2点到5点从结果看更像是来自India、England、Japan等地区。当然只有恶意样本很多的时候,我们才能进行更好的溯源哈哈~



写到这里,这篇文章就介绍完毕希望对您有所帮助,最后进行简单的总结下作者的猜想

  • 通过PE文件分析抓取创建文件时间戳,嘫后UTC定位国家地区但受样本数量较少,活动规律不稳定影响很大
  • 通过静态分析获取非英文字符串软件中一般有供该国使用的文字,然後进行编码比对溯源地区
  • 某些APP或软件存在流量反馈或IP定位尝试进行流量抓取分析
  • 利用深度学习进行分类,然后提取不同国家的特征完成溯源

本文尝试的是最简单的方法所以也存在很多问题,比如当有很多恶意样本的时候我们才能基于多个样本时间戳并结合正常作息时間进行分析,才能判断其来源如果仅从一个样本进行分析,其准确率还是会有影响有的恶意软件是深夜发布,也影响了该方法的准确性同时混淆、加壳、对抗样本也能影响我们的实验效果,但作者仅是提供了一种方法更深入的研究还在继续,如果您有好的方法也欢迎和我讨论

最后欢迎大家讨论如何判断PE软件或APP来源哪个国家或地区呢?印度又是如何确保一键正确卸载中国APP呢哈哈,未知攻焉知防。加油~

学安全一年认识了很多安全大佬和朋友,希望大家一起进步这篇文章中如果存在一些不足,还请海涵作者作为网络安全初学鍺的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享深知自己很菜,得努力前行



我要回帖

 

随机推荐