在威胁情报研究与追踪中,PE文件的编译时间戳可以帮助我们获取一些额外的信息,如果要对编译时间戳进行了解,首先要对PE文件结构有一些了解。
要查看提取编译时间这些信息,已经有相当多的工具使用。不过,采用一些市面上的安全工具获取PE文件的编译时间戳时会存在“陷阱”。其中一些工具将时间戳显示为UTC格式,有些将它们本地化为使用者的时区(最终为本地时间),其实就会因为时区转换的问题而导致与真实时间相差几个小时,这里可以参考VirusTotal站点的案例,比如这个站点上都是以UTC+0作为当前页面显示时间,所以并不是纪录提交者的当前本地时间,假设刚刚凑巧提交者与站点所在的服务器位于同一时区(比如大家都在同一国家)时页面显示的就是真正的时间,所以就不可避免的产生了“误报”,这类误报其实对病毒分析研究基本影响不大,因为并没有超出达到几天的时间,可以适当地忽略。
UTC称为协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8,经常见到的就是东八区时间。
UTC时间:这套时间系统被应用于许多互联网和万维网的标准中,例如,网络时间协议就是协调世界时在互联网中使用的一种方式。
了解了以上的相关概念后,就回到利用工具获取时间的问题上。刚刚也提到了一些安全工具对于时间显示的标准不同,所以凡是遇到疑问需要查证与测试时,还是需要先找到最初源头的官方文档进行查询,避免一开始就弄错了方向。
根据PE结构文档手册,编译时间戳定义为:
日期和时间戳值,根据系统时钟,该值以自世界协调时间1970年1月1日午夜(00:00:00)以来经过的秒数表示。可以使用C runtime(CRT)time函数来打印时间戳。
提供的一种测试方法:
如果将PE文件内的时间戳字段值设置为全零后,利用安全工具读取显示的结果是1970-01-01 00:00:00,则当前使用的工具正在使用UTC时间。如果不是,那么使用的是本地时间。
快速测试表明:
DIE、IDA、Efd、PE Studio使用当地时间
PE Bear、PPEE、VirusTotal使用UTC时间
而经典的010 Editor编辑器获取的时间也为UTC格式,如下VirusTotal站点给出的PE头信息也使用的是UTC格式,非国内所处的UTC+8(东八区)。
接下来介绍下通过时间戳来进一步挖掘威胁情报的案例,相关资料来源于互联网,安天已经将此申请了专利,具体详情可以自行下载查阅。比如我们在威胁追踪以及APT研究挖掘过程中,如果运气好且利用的方法得当,假设获取了大量的相关攻击样本,此时数据分析处理的优势就得派上用场了。通过对大量捕获的相关攻击样本的自带的PE文件编译时间就可在一定程度上来定位攻击者所处的世界时区,从而去推断背后的攻击者或者组织所在的活动区域。
比如我们通常会认为攻击者的正常工作时间是白天9点到下午6点,因为这符合大部分人类的生活习惯,然后我们就画一个世界时区轴图,在上述捕获的大量的样本数据里通过提取编译时间数据,根据小时值去填空分布,可以大致匹配出一个人类生活习惯的时区范围,然后对照世界时区表,将白天与黑夜进行分开,接着对比下看看是符合哪个时区的人,比如我们国内一般是处于东八区(UTC+8),从这里的案例实践可以表明,说明对于电子类情报的研究某些团体的研究工作已经很超前了,思路非常值得学习与借鉴,这里我也只是班门弄斧而已。
https://my.oschina.net/u/4265496/blog/4490908
https://www.antiy.com/response/WhiteElephant/WhiteElephant.html
https://patents.google.com/patent/CN105653940A/zh
http://www.hexacorn.com/blog/2019/03/11/pe-compilation-timestamps-vs-forensics/
https://blogs.360.cn/post/%E6%91%A9%E8%AF%83%E8%8D%89%E7%BB%84%E7%BB%87.html
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format