关于 MAC 地址您想知道的一切

关于 MAC 地址您想知道的一切大家都知道,这六个字节通常以十六进制格式显示,是在出厂时分配给网卡的,看似随机。 有人知道地址的前三个字节是制造商ID,剩下的三个字节是分配给他们的。 众所周知,您可以自己设置 随意 地址。 许多人都听说过 Wi-Fi 中的“随机地址”。

让我们弄清楚它是什么。

MAC地址(媒体访问控制地址)是分配给网络适配器的唯一标识符,用于IEEE 802标准的网络,主要是以太网、Wi-Fi和蓝牙。 正式名称为“EUI-48 类型标识符”。 从名称中可以明显看出该地址的长度为 48 位,即6字节。 地址的编写没有普遍接受的标准(与 IPv4 地址不同,IPv00 地址中的八位字节总是用点分隔)。通常将其写为用冒号分隔的六个十六进制数字:11:AB:CD:EF:22: 00,尽管一些设备制造商更喜欢符号 11 -AB-CD-EF-22-00 甚至 1122ab.cdef.XNUMX。

历史上,地址被闪存到网卡芯片组的 ROM 中,如果没有闪存编程器就无法修改它们,但现在可以通过操作系统以编程方式更改地址。 您可以在 Linux 和 MacOS(始终)、Windows(几乎始终,如果驱动程序允许)、Android(仅限 root)中手动设置网卡的 MAC 地址; 对于 iOS(无需 root),这样的技巧是不可能的。

地址结构

地址由制造商标识符、OUI 和制造商分配的标识符的一部分组成。 OUI(组织唯一标识符)标识符的分配 занимается IEEE 组织。 事实上,它的长度不仅可以是3个字节(24位),还可以是28或36位,其中大(MA-L)、中(MA-M)和中(MA-M)类型的地址块(MAC地址块,MA)分别形成较小的(MA-S)。 在这种情况下,发行块的大小将为 24、20、12 位或 16 万、1 万、4 个地址。 目前分布了大约 38 个区块,可以使用多种在线工具查看它们,例如 IEEE или Wireshark的.

谁拥有这些地址?

公开可用的轻松处理 卸载数据库 IEEE 提供了相当多的信息。 例如,一些组织为自己占用了大量的OUI块。 这是我们的英雄:

小贩
块/记录数
地址数量,百万

思科系统公司
888
14208

Apple
772
12352

Samsung
636
10144

华为技术有限公司
606
9696

英特尔公司
375
5776

ARRIS集团公司
319
5104

诺基亚公司
241
3856

私做
232
2704

德州仪器(TI)
212
3392

中兴通讯股份有限公司
198
3168

IEEE 注册机构
194
3072

惠普
149
2384

鸿海精密
136
2176

TP-LINK
134
2144

戴尔公司
123
1968

Juniper网络公司
110
1760

Sagemcom Broadband SAS
97
1552

烽火通信技术有限公司有限公司
97
1552

小米通信有限公司
88
1408

广东OPPO移动通信股份有限公司
82
1312

谷歌只有 40 家,这并不奇怪:他们本身并不生产很多网络设备。

MA 块不是免费提供的,可以以合理的价格(无需订阅费)分别购买,价格为 3000 美元、1800 美元或 755 美元。 有趣的是,花费额外的钱(每年),您可以购买“隐藏”有关分配块的公共信息。 如上所示,现在有 232 个。

我们什么时候会用完 MAC 地址?

我们都对持续了 10 年的“IPv4 地址即将耗尽”的故事感到非常厌倦。 是的,新的 IPv4 块不再容易获得。 众所周知,IP地址 分布极不均匀; 然而,大公司和美国政府机构拥有的巨大且未得到充分利用的区块,将它们重新分配给有需要的人的希望渺茫。 NAT、CG-NAT 和 IPv6 的激增使得公共地址短缺的问题不再那么严重。

MAC 地址有 48 位,其中 46 位可以被认为是“有用的”(为什么?请继续阅读),这提供了 246 个或 1014 个地址,比 IPv214 地址空间多了 4 倍。
目前,大约已分配了 0.73 万亿个地址,仅占总数量的 XNUMX%。 我们距离耗尽 MAC 地址还很远。

随机性位

可以假设 OUI 是随机分布的,然后供应商也将地址随机分配给各个网络设备。 是这样吗? 让我们看看我可以使用的 802.11 设备的 MAC 地址数据库中的位分布,这些数据是由无线网络中的工作授权系统收集的 世界自然运动协会。 这些地址属于多年来在三个国家/地区连接到 Wi-Fi 的真实设备。 此外还有一个 802.3 有线 LAN 设备的小型数据库。

让我们将每个样本的每个 MAC 地址(1 个字节)逐个字节地分解为位,并查看 48 个位置中每个位置中“1”位出现的频率。 如果该位以完全任意的方式设置,那么得到“50”的概率应该是 XNUMX%。

Wi-Fi 选择 1(RF)
Wi-Fi 样本 2 号(白俄罗斯)
Wi-Fi 选择 No. 3(乌兹别克斯坦)
LAN采样(射频)

数据库中的记录数
5929000
1274000
366000
1000

位号:
% 位“1”
% 位“1”
% 位“1”
% 位“1”

1
48.6%
49.2%
50.7%
28.7%

2
44.8%
49.1%
47.7%
30.7%

3
46.7%
48.3%
46.8%
35.8%

4
48.0%
48.6%
49.8%
37.1%

5
45.7%
46.9%
47.0%
32.3%

6
46.6%
46.7%
47.8%
27.1%

7
0.3%
0.3%
0.2%
0.7%

8
0.0%
0.0%
0.0%
0.0%

9
48.1%
50.6%
49.4%
38.1%

10
49.1%
50.2%
47.4%
42.7%

11
50.8%
50.0%
50.6%
42.9%

12
49.0%
48.4%
48.2%
53.7%

13
47.6%
47.0%
46.3%
48.5%

14
47.5%
47.4%
51.7%
46.8%

15
48.3%
47.5%
48.7%
46.1%

16
50.6%
50.4%
51.2%
45.3%

17
49.4%
50.4%
54.3%
38.2%

18
49.8%
50.5%
51.5%
51.9%

19
51.6%
53.3%
53.9%
42.6%

20
46.6%
46.1%
45.5%
48.4%

21
51.7%
52.9%
47.7%
48.9%

22
49.2%
49.6%
41.6%
49.8%

23
51.2%
50.9%
47.0%
41.9%

24
49.5%
50.2%
50.1%
47.5%

25
47.1%
47.3%
47.7%
44.2%

26
48.6%
48.6%
49.2%
43.9%

27
49.8%
49.0%
49.7%
48.9%

28
49.3%
49.3%
49.7%
55.1%

29
49.5%
49.4%
49.8%
49.8%

30
49.8%
49.8%
49.7%
52.1%

31
49.5%
49.7%
49.6%
46.6%

32
49.4%
49.7%
49.5%
47.5%

33
49.4%
49.8%
49.7%
48.3%

34
49.7%
50.0%
49.6%
44.9%

35
49.9%
50.0%
50.0%
50.6%

36
49.9%
49.9%
49.8%
49.1%

37
49.8%
50.0%
49.9%
51.4%

38
50.0%
50.0%
49.8%
51.8%

39
49.9%
50.0%
49.9%
55.7%

40
50.0%
50.0%
50.0%
49.5%

41
49.9%
50.0%
49.9%
52.2%

42
50.0%
50.0%
50.0%
53.9%

43
50.1%
50.0%
50.3%
56.1%

44
50.1%
50.0%
50.1%
45.8%

45
50.0%
50.0%
50.1%
50.1%

46
50.0%
50.0%
50.1%
49.5%

47
49.2%
49.4%
49.7%
45.2%

48
49.9%
50.1%
50.7%
54.6%

为什么7位和8位会有这样的不公平? 几乎总是有零。

事实上,该标准将这些位定义为特殊的(维基百科):
关于 MAC 地址您想知道的一切

MAC地址第一个字节的第八位(从头算起)称为单播/多播位,决定用该地址传输什么类型的帧(frame),常规(0)还是广播(1)(多播或多播)播送)。 对于正常的单播网络适配器通信,发送给它的所有数据包中该位均设置为“0”。

MAC 地址第一个字节的第七位(从头开始)称为 U/L(通用/本地)位,用于确定该地址是全局唯一 (0) 还是本地唯一 (1)。 默认情况下,所有“制造商缝合”地址都是全球唯一的,因此绝大多数收集的 MAC 地址的第七位设置为“0”。 在分配的OUI标识符表中,只有大约130个条目的U/L位为“1”,显然这些是用于特殊需要的MAC地址块。

从第一个字节的第 4 位到第 6 位,OUI 标识符中的第 XNUMX、XNUMX 个字节的位,甚至制造商分配的地址的第 XNUMX-XNUMX 个字节的位,分布得或多或少均匀。 。

这样,在网卡的真实MAC地址中,除了高字节的两个服务位之外,其他位实际上是等价的并且没有技术意义。

流行

想知道哪些无线设备制造商最受欢迎? 让我们将 OUI 数据库中的搜索与样本 1 中的数据结合起来。

小贩
设备份额,%

Apple
26,09

Samsung
19,79

华为技术有限公司
7,80

小米通信有限公司
6,83

索尼移动通信公司
3,29

LG电子(移动通信)
2,76

华硕电脑公司
2,58

TCT移动有限公司
2,13

中兴通讯股份有限公司
2,00

在 IEEE 数据库中未找到
1,92

联想移动通信技术有限公司
1,71

宏达国际电子股份有限公司
1,68

村田制作所
1,31

InPro通讯
1,26

微软公司
1,11

深圳市天朗移动科技股份有限公司
1,02

摩托罗拉(武汉)移动技术通信有限公司有限公司
0,93

诺基亚公司
0,88

上海风电科技有限公司有限公司
0,74

联想移动通信(武汉)有限公司
0,71

实践表明,特定地点的无线网络用户队伍越繁荣,苹果设备的份额就越大。

独特性

MAC地址是唯一的吗? 理论上是的,因为每个设备制造商(MA 块所有者)都需要为其生产的每个网络适配器提供唯一的地址。 然而,一些芯片制造商,即:

  • 00:0A:F5 Airgo 网络公司(现为高通)
  • 00:08:22 InPro Comm(现为联发科技)

将 MAC 地址的最后三个字节设置为随机数,显然是在每次设备重新启动后。 我的 1 号样本中有 82 个这样的地址。

当然,您可以通过有目的地将其设置为“像您的邻居一样”、使用嗅探器识别它或随机选择它来为自己设置一个外国的、非唯一的地址。 也可能会意外地为自己设置一个非唯一的地址,例如,恢复 Mikrotik 或 OpenWrt 等路由器的备份配置。

如果网络上有两台设备具有相同的 MAC 地址,会发生什么情况? 这一切都取决于网络设备(有线路由器、无线网络控制器)的逻辑。 最有可能的是,这两种设备都无法工作或间歇性工作。 从IEEE标准的角度来看,建议使用例如MACsec或802.1X来解决防止MAC地址欺骗的问题。

如果您安装的 MAC 的第七位或第八位设置为“1”(即本地地址还是组播地址? 您的网络很可能不会注意到这一点,但从形式上来说,这样的地址不符合标准,最好不要这样做。

随机化的工作原理

我们知道,为了防止通过扫描和收集电波来跟踪人们的行​​动,智能手机 MAC 操作系统多年来一直在使用随机化技术。 理论上,当扫描电波以搜索已知网络时,智能手机会发送 802.11 探测请求类型的数据包(数据包组),并将 MAC 地址作为源:

关于 MAC 地址您想知道的一切

启用随机化允许您指定不是“缝合”的地址,而是指定一些其他数据包源地址,这些地址随着每个扫描周期、随着时间的推移或以某种其他方式而变化。 有效吗? 我们来看一下所谓的“Wi-Fi 雷达”从空中收集到的 MAC 地址的统计数据:

整个样本
仅使用第 7 位为零进行采样

数据库中的记录数
3920000
305000

位号:
% 位“1”
% 位“1”

1
66.1%
43.3%

2
66.5%
43.4%

3
31.7%
43.8%

4
66.6%
46.4%

5
66.7%
45.7%

6
31.9%
46.4%

7
92.2%
0.0%

8
0.0%
0.0%

9
67.2%
47.5%

10
32.3%
45.6%

11
66.9%
45.3%

12
32.3%
46.8%

13
32.6%
50.1%

14
33.0%
56.1%

15
32.5%
45.0%

16
67.2%
48.3%

17
33.2%
56.9%

18
33.3%
56.8%

19
33.3%
56.3%

20
66.8%
43.2%

21
67.0%
46.4%

22
32.6%
50.1%

23
32.9%
51.2%

24
67.6%
52.2%

25
49.8%
47.8%

26
50.0%
50.0%

27
50.0%
50.2%

28
50.0%
49.8%

29
50.0%
49.4%

30
50.0%
50.0%

31
50.0%
49.7%

32
50.0%
49.9%

33
50.0%
49.7%

34
50.0%
49.6%

35
50.0%
50.1%

36
50.0%
49.5%

37
50.0%
49.9%

38
50.0%
49.8%

39
50.0%
49.9%

40
50.0%
50.1%

41
50.0%
50.2%

42
50.0%
50.2%

43
50.0%
50.1%

44
50.0%
50.1%

45
50.0%
50.0%

46
50.0%
49.8%

47
50.0%
49.8%

48
50.1%
50.9%

情况完全不同。

MAC地址第一个字节的第8位仍然对应于探测请求数据包中SRC地址的单播性质。

在 7% 的情况下,第 92.2 位设置为 Local,即带着相当的置信度,我们可以假设所收集的地址中有很多都是随机的,只有不到 8% 是真实的。 在这种情况下,此类真实地址的 OUI 中的位分布与上表中的数据大致一致。

根据 OUI 的说法,哪个制造商拥有随机地址(即第 7 位为“1”)?

制造商:OUI
在所有地址之间共享

在 IEEE 数据库中未找到
62.45%

谷歌公司
37.54%

其余的
0.01%

此外,分配给 Google 的所有随机地址都属于具有前缀的同一 OUI DA:A1:19。 这个前缀是什么? 让我们看看 安卓源.

private static final MacAddress BASE_GOOGLE_MAC = MacAddress.fromString("da:a1:19:0:0:0");

普通 Android 在搜索无线网络时使用特殊的注册 OUI,这是少数设置了第七位的 OUI 之一。

从随机 MAC 计算真实 MAC

让我们看看那里:

private static final long VALID_LONG_MASK = (1L << 48) - 1;
private static final long LOCALLY_ASSIGNED_MASK = MacAddress.fromString("2:0:0:0:0:0").mAddr;
private static final long MULTICAST_MASK = MacAddress.fromString("1:0:0:0:0:0").mAddr;

public static @NonNull MacAddress createRandomUnicastAddress(MacAddress base, Random r) {
        long addr;
        if (base == null) {
            addr = r.nextLong() & VALID_LONG_MASK;
        } else {
            addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong());
        }
        addr |= LOCALLY_ASSIGNED_MASK;
        addr &= ~MULTICAST_MASK;
        MacAddress mac = new MacAddress(addr);
        if (mac.equals(DEFAULT_MAC_ADDRESS)) {
            return createRandomUnicastAddress(base, r);
        }
        return mac;
    }

整个地址或其低三个字节是纯粹的 Random.nextLong()。 “专有恢复真实MAC”是一个骗局。 我们充满信心地预计 Android 手机制造商会使用其他未注册的 OUI。 我们没有 iOS 源代码,但很可能使用了类似的算法。

上述内容并没有取消基于对探测请求帧其他字段的分析或设备发送请求的相对频率的相关性来对 Wi-Fi 用户进行去匿名化的其他机制的工作。 然而,使用外部手段可靠地跟踪订户是非常有问题的。 收集的数据将更适合根据大量数据按位置和时间分析平均/峰值负载,而不参考特定设备和人员。 只有那些“内部”、移动操作系统制造商本身以及安装的应用程序才拥有准确的数据。

其他人知道您设备的 MAC 地址会带来什么危险? 可以针对有线和无线网络发起拒绝服务攻击。 此外,对于无线设备来说,有可能在安装传感器的地方记录其出现的时刻。 通过欺骗地址,您可以尝试“冒充”您的设备,这只有在不使用其他安全措施(授权和/或加密)的情况下才能工作。 这里99.9%的人没有什么可担心的。

MAC 地址比看起来更复杂,但也比想象的更简单。

来源: habr.com

添加评论