freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

溯源专题 | 通过时间与时区溯源
2022-12-12 10:57:01
所属地 广东省

欢迎关注同名微信公众号!狼蛛安全实验室

​时区的起源

640?wx_fmt=png

关于时区的概念,因为地球总是自西向东自转,太阳总是从东边升起西边落下,所以东边总比西边先看到太阳,东边的时间也总比西边的早。东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒来计算。整个地球分为二十四时区,每个时区都有自己的本地时间。为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。现行的协调世界时UTC基于铯原子的震荡周期时间为基础,也叫原子钟,并通过不规则的加入闰秒来抵消地球自转变慢的影响。

时区的划分

GMT:格林尼治标准时间(旧译格林威治平均时间或格林威治标准时间;英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。UTC是我们现在用的时间标准,GMT则是旧的时间计量标准。UTC是根据原子钟来计算时间,而GMT是根据地球的自转和公转来计算时间,这个两种简称含义不一样,但是表示时间上没有差别,UTC相对更加精确,可以简单的理解成GMT=UTC+0。目前大多数情况下都已采用UTC时间来做标识。

UTC与格林威治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。时区以英国伦敦的一个小镇格林威治作为中心,左右两边分别划分为西部时区和东部时区,所以一般“ + ”表示东时区,“ - ”表示西时区,所以UTC +0 表示中心点,同时也是英国所在时区,而UTC +8 表示东八区(中国),UTC -8 表示西八区(美国旧金山、洛杉矶、西雅图)。

由于每个国家的大小不一样,有些国家面积比较大,会横跨几个时区,所以国家又会使用自己定义的标准时区,比如中国其实跨越了3个时区东六、七、八区(UTC+6,7,8),但是我国一般都以东八区时间作为标准时间,缩写CST:中国标准时间(China Standard Time)。

640?wx_fmt=png

在来看看美国所在时区:

美国的时区界限并不完全按照经线划分,基本上照顾了各州的自然边界。不同的时区覆盖的州市大小、多少不同。有以下几个:

1. 东部时间EST(UTC-5),包括大西洋沿岸及近大陆的19个州和华盛顿特区,代表城市华盛顿、纽约。

2. 中央时间CST(UTC-6),代表城市芝加哥、新奥尔良。

3. 山地时间MST(UTC-7),代表城市盐湖城、丹佛。

4. 太平洋时间PST(UTC-8),包括太平洋沿岸的4个州,代表城市旧金山、洛杉矶、西雅图。

5. 阿拉斯加时间AKST(UTC-9),只限于阿拉斯加。

6. 夏威夷时间HST(UTC-10),只限于夏威夷。

640?wx_fmt=png

美国不像我国一样采用统一的北京时间(UTC+8),美国时间一共分成了六个。从东向西分别为东部时间(EST)(西五区时间)、中部时间(CST)(西六区时间)、山地时间(MST)(西七区时间)、太平洋时间(西部时间)(PST)(西八区时间)、阿拉斯加时间(AKST)(西九区时间)和夏威夷时间(HST)(西十区时间),按照“东早西晚”的规律,各递减一小时。美国的时区界限虽然并不完全按照经线划分,但基本上也照顾了各州的自然边界。不同的时区覆盖的州市大小、多少都不同,每个时区都包含了一些典型城市。比如东部时间(EST)的代表城市华盛顿、纽约;中部时间(CST)的代表城市芝加哥、新奥尔良;山地时间(MST)的代表城市盐湖城、丹佛,太平洋时间(PST)的代表城市旧金山、洛杉矶、西雅图,阿拉斯加时间(AKST)和夏威夷时间(HST)则只限于阿拉斯加和夏威夷。

再看下我国的北部邻国俄罗斯,横跨亚欧大陆,地域宽广,总共跨过了11个时区,但国内时间只分成了9个时区。横跨这么多个时区,着实给俄罗斯带来了不少麻烦,比如2018年俄罗斯世界杯,为了避免因时区不同带来的舟车劳顿,所有的比赛都放在了西部城市举行。俄罗斯的欧洲部分与乌拉尔地区有两小时的时差,世界上再没有任何一个国家因横跨如此多的时区而造成时间上如此大的差异。目前来说,全俄罗斯在比如铁路上执行的是莫斯科时间,其他的,基本上是要按照当地时间走。比如,乘飞机到其他地区,下飞机之前会有广播提醒,现在是什么时间,人们可以据此及时调整钟表。

640?wx_fmt=png

再来看看印度,由于印度首都新德里正好位于东5区与东6区的分界线附近,它既不属于东5区,也不属于东6区,最终就折中地将当地定为东5.5区,并采用UTC+5.5作为印度的标准时间。

640?wx_fmt=png

时间戳

时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数。它也被称为 Unix 时间戳(Unix Timestamp)。Unix时间戳(Unix timestamp)是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。时间戳的样子一般是一组10或13的数字如:1668071152736,10位是以秒为单位的时间戳,13位是以毫秒为单位的时间戳。

中美时区转换

这里我们代入攻击场景进行推理,以美国东部时间EST(UTC-5)纽约时间为例子,假设我们的安全设备捕获到的攻击记录是2022年11月11日晚上的10点也就是22点,那转换成美国时间是多少呢?前面介绍了我国的标准时区是在东八区(UTC+8),而纽约的时区是在西五区(UTC-5),看下图可知

640?wx_fmt=png

由于我们跟美国是在东西两个不同的方向,中间总共是相隔了13(5+8)个时区,所以22-13=9,对应的正是美国上午的9点。

这里再介绍一个小技巧,使用Linux中的date命令可以快速进行时间与时区转换,还是刚才的例子,在Linux环境中使用以下命令得到2022年11月11日22点的时间戳

date -d '2022-11-11 22:00:00' +%s输出结果:1668175200

然后将该时间戳转换成纽约时区的时间,TZ表示时区

TZ=America/New_York date -d @1668175200输出结果:Fri Nov 11 09:00:00 EST 2022

可以看到EST表示美国东部标准时区

这里简单列举几个全球比较有代表性的的时区

美国 ['America/New_York', 'America/Detroit','America/Chicago','America/Los_Angeles']俄罗斯 ['Europe/Kaliningrad', 'Europe/Moscow']越南 ['Asia/Ho_Chi_Minh']朝鲜 ['Asia/Pyongyang']韩国 ['Asia/Seoul']日本 ['Asia/Tokyo']印度 ['Asia/Kolkata']澳大利亚 ['Australia/Lord_Howe', 'Antarctica/Macquarie']英国 ['Europe/London']加拿大 ['America/Toronto','America/Vancouver']新西兰 ['Pacific/Auckland']法国 ['Europe/Paris']土耳其 ['Europe/Istanbul']

如果想要查询更多的国家所在时区可以利用python3自带的pytz库来查询,在python交互模式下输入以下代码:

#导入pytz库import pytz  #其中cn可以替换成其它国家的简写,如us、vn等pytz.country_timezones('cn')

便会输出对应国家所在时区。

样本编译时间(TIME IN COMPLUTE)

一次完整的攻击链涉及信息收集、钓鱼、漏洞利用,提权,横向移动,植入后门,窃取信息,清理痕迹。每一个步骤都有一个时间点,如果能将这些时间节点进行梳理,则能大致推断攻击者所在时区。

这里我们以早些年的Lambert家族木马样本举例。样本从代码到编译成可执行文件的过程中,编译器会将编译时间以十六进制时间戳的形式记录在样本中,但是需要注意的一点是,编译器并不会将编译样本的电脑所在时区计算进去,也就说这个时间戳是不带有时区属性的,单纯是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数,或者看成是UTC+0 的时间。使用010editor或者其它十六进制工具可以看到在PE文件的文件头中保存着十六进制格式(小端存储)的时间戳507C66BE

640?wx_fmt=png

使用Linux命令将十六进制转换十进制

echo $((16#507C66BE))输出结果:1350330046解释:16#表示16进制,也就是把16进制的507C66BE转换成10进制,同理也可以转换其它16进制数,比如echo $((16#a))的结果是10

使用之前的命令将十进制时间戳转换成纽约时区看看

TZ=America/New_York date -d @1350330046输出结果:Mon Oct 15 15:40:46 EDT 2012

可以看到样本的编译时间是2012年10月15日星期一的15点40分,是在一个正常的工作时间内。这里我也写了一个小程序将时间戳转换成多个时区进行比对,还是用上面的样本时间戳来查询,见下图,我们可以看到大部分的工作时间区域都落在的美国时区。

640?wx_fmt=png

当然仅凭一个样本的时间属性来作为依据是不够说服力的,这里通过互联网开源样本平台提取了一批Lambert家族木马的编译时间戳并转换成美区时间进行分析,以直方图形式展示如下

640?wx_fmt=png

红色框处是时间区间,柱状是在这个区间的样本梳理,可以看出有20个本是在早上9点-中午12点左右完成编译的,另外还有11和7个样本分布在12点44-19点27中。通过大量的样本时间分析,可以大致猜测Lambert家族木马的开发人员可能是在美区时间工作的。

时区在溯源中的应用

溯源归因是一项长期且复杂的工作,时间只是其中一个因素,下面列举的是在定向攻击中需要做的溯源相关工作!

640?wx_fmt=png


# 技术分享 # 攻击溯源
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录