审计说多了,回过头来说点运维和安全基础。
网卡的 MAC 地址,但凡是个网管都会接触过。在网络安全实务中,MAC 地址的安全管理一直都是繁琐但重要的基础工作。网络上虽然有不少关于 MAC 地址的科普内容,但如果有看过 IEEE (Institute of Electrical and Electronics Engineers, 电子电气工程师学会)网站上更新的关于 MAC 地址的资料,就会发现这些科普都不完整甚至已经过时。
笔者:国际认证信息系统审计师、软考系统分析师
所以,这次也写成系列篇,第一篇从软件和基础知识谈起;第二篇是安全管理;第三篇再发散思考。鉴于MAC地址的定义存在好多不断修改的历史,我这里主要介绍当前有效的定义。
1、查询及扫描工具
操作系统的 ARP 命令耳熟能详不说了。开源的安全扫描器 nmap 也是必须懂的,只是一般使用 nmap 时更关注的是扫描出什么端口而不是 MAC 地址。下载地址:
https://nmap.org/download.html
2、抓包和协议分析工具
实际工作中,要观察 MAC 地址的场景离不开抓包分析软件。
WireShark 这个网络抓包软件是工作标配,网络上教程不少我也不用复述了。但要深度用好 WireShark 其实并不简单,就算本文的主题只是关注 MAC 地址,网络基础知识也还是要充分入脑。最新版本4.2.2,下载地址:
https://www.wireshark.org/download.html
务必注意的是因为 WireShark 的下载镜像比较慢,网络上就出现了一些打着 WireShark “官方入口正版下载”旗号加塞私货的情况,而且还在搜索引擎打广告。
其他工具软件可以使用科来网络分析系统,该系统提供了技术交流版,可以个人非商业使用,用户界面做得还是很不错的,低中高用户都适合。下载地址:
https://www.colasoft.com.cn/download/capsa.php
作为企业内搭配使用,可以先用科来观察网络全景,再抓取流量(或者直接用 WireShark 抓取流量)然后通过 WireShark 进行详细观察和分析。
商业的抓包分析软件也有一些,比如 Omnipeek,特点是抓包数据量大的时候查找、分析和统计的速度比 WireShark 要快。
笔者曾经为了排查疑似 DNS 隧道,用 WireShark 分析了几十个文件加起来几百 GB 的抓包结果。这个过程即使自己用的已经是 i9 的工作站 PC,依然是一个慢字。
早期还有些软硬件结合的抓包工具,比如 FlukeNetworks 的 Optiview,不过都退出历史舞台了。
MAC 地址(Media Access Control Address),直译媒体访问控制地址,也称作局域网地址(LAN Address)、以太网地址(Ethernet Address)以及物理地址(Physical Address)等。另外对于港澳台地区会使用“位址”一词取代“地址”。
计算机网络中,网络设备用 MAC 地址在局域网络内唯一性地标识自己对局域网络的每个接口(Network Interface)。计算机设备的每个网络接口都有至少一个 MAC 地址。
MAC 地址的格式为6个字节。一般用:
A1-B2-C3-D4-E5-F6
的方式表示,其中的分隔符可以改用冒号,或不使用分隔符。
理论上 MAC 地址共有组合数量为:256^6=281,474,976,710,656。
在常见的局域网环境中,MAC 地址的前3个字节是设备厂商的“组织唯一标识符”(OUI,Organizationally Unique Identifier)。这里的唯一性并不是局域网概念的,而是全球唯一。
既然是全球唯一性的标识符,那就不能厂家自选,需要通过管理机构统一分配和管理以避免冲突。
因此,世界上凡要生产网络设备的厂家都必须向 IEEE 的注册管理委员会RAC(Registration Authority Committee)提出申请分配标识符,IEEE按申请收费分配。
MAC 地址的后3个字节是 OUI 所属的厂商自行流水分配的序列。也就是一个 OUI 可以产生2^24个总长48比特(6个字节)的 MAC 地址。所以 MAC 地址的标准叫法是 EUI-48,之前也曾使用 MAC-48,但这个词已淘汰。
大多数人对 MAC 地址的了解到此就已经差不多了,但作为专业的尤其是安全人员,需要对 MAC 地址有充足的了解,因为 OUI 的定义已经变得复杂了。
由于网络环境和使用场景的发展,主要是为了降低全球唯一性(下文严谨一点用“全局唯一”)的 MAC 地址的消耗速度,IEEE 对 MAC 地址发展出不同的分类和用途,区分为以下4种:
MAC 大型地址块,MAC Address Block Large (MA-L)
MAC 中型地址块,MAC Address Block Medium (MA-M)
MAC 小型地址块,MAC Address Block Small (MA-S)
Company ID (CID)
前三者分别代表了 OUI 拥有者可支配的全局唯一地址空间的不同数量。其长度按二进制位数分别是24、28和36位。从这个位数可知,对于较小的地址空间 MA-M 和 MA-S,用于分辨企业组织的位数长度不止24位。第四种 CID 用于不需要 MAC 地址全局唯一性的应用场合。
下面详细介绍这些分类。
1、MAC 大型地址块:MA-L
在MAC地址发展的前期,MA-L 就曾直接称为 OUI。因此,MA-L地址等价于传统的48位格式 MAC 地址。分配MA-L地址块同时会分配24位的 OUI。
需要注意 MA-L 或者说全部三种 MAC 地址现在都具备了64位扩展的 MAC 地址,也就是 OUI 拥有者自己产生的流水号可以是24位或40位,MAC 地址的长度从6个字节(EUI-48)扩充到8个字节(EUI-64)。
一个 MA-L 地址块包含有2^24个 EUI-48 标识符,或2^40个 EUI-64 标识符。
64位扩展 MAC 地址常见用于 IPv6 场景。
对于专业范畴来说,OUI 的具体用途还包括创建多播地址、作为上下文关联的唯一性的根(做软件开发的都知道 UUID 里面包含了 MAC 地址),在使用 OUI 作为识别机制的网络协议中区别不同的公司等。
2、MAC 中型地址块:MA-M
中型意味着可分配的全局唯一地址空间比 MA-L 要少。对于被分配到 MA-M 的企业来说,区分自身的位数长度是24位的OUI加上4位的附加位共28位。但同样地最后产生的 MAC 地址依然是48位的 EUI-48(附加20位流水号)和64位的 EUI-64(附加36位流水号)两种。
一个 MA-M 地址块包含有2^20个 EUI-48 标识符,或2^36个 EUI-64 标识符。
与 MA-L 的主要不同在于,MA-M 的分配实际并不包括 OUI 的分配。因为MA-M 的用途是用于创建由 IEEE 802 标准体系定义的 MAC 地址。但 MA-M 分配可以扩展用于创建 OUI-36(36位长的 OUI) 和基于 OUI-36 的各种扩展标识符。
使用到 MA-M 分配地址的应用,不应对在 MAC 地址前24位也就是 OUI 部分的值作任何假设。因为这24位的OUI部分是 IEEE 自己保留专门用于 MA-M 分配的。
3、MAC小型地址块:MA-S
MA-S 和 MA-M 相似,但其长度是36位,可用于创建各种扩展标识符,也可以创建 MAC 地址,包括48位和64位均可,只需要附加上由使用者提供的12位或28位流水号。
一个 MA-S 地址块包含有2^12个 EUI-48 标识符,或2^28个 EUI-64 标识符。
注意,MA-S 的分配同样不包括分配 OUI,但获分配的 MA-S 可以作为各种标准中指定的 OUI-36(也就是MA-S的曾用名)使用,并基于OUI-36创建各种扩展标识符。
与 MA-M 相同,使用到 MA-S 分配地址的应用,不应对在 MAC 地址前24位的 OUI 部分的值作任何假设,因为这也是 IEEE 自己保留用于 MA-S 分配的。
MA-S 的定义是在2014年开始生效的,替代了之前定义的独立地址块(IAB,Individual Address Block)和 OUI-36 分配。
4、公司ID:CID
第四种即 CID 比较特殊,它也是3个字节共24位的 OUI 标识,但仅用作申请者的唯一标识,不用于产生全局唯一的 MAC 地址。它是专门为不需要 MAC 地址全局唯一的应用场合设计的。创建 CID 的目的主要就是为了减少 OUI 的消耗。
CID 的使用场景可包括一些特殊的硬件部件的内部微总线环境,又或者是云计算服务商或互联网企业自有的大型数据中心内部。具体见下文。
MAC 地址的分类需要将其转换为二进制比特去解析,根据特定位置比特进行区分。
1、区分 OUI 和 CID
在上面我们提到了 MAC 地址按 OUI 性质有4种分类,我们需要区分开可以产生全局唯一流水 MAC 地址的 OUI 和仅用作区分申请者唯一性的 CID。
按 IEEE 的定义,基于 EUI-48 也就是传统的6字节 MAC 地址,第一个字节的最低二进制位被称为 M 位,从低数起第2~4位被称为 X、Y 和 Z 位。这两个位的排列组合如表1:
Z | Y | X | M | 说明 |
---|---|---|---|---|
0 | 0 | OUI、OUI-36以及MA-M | ||
1 | 0 | 1 | 0 | CID |
表1 OUI/CID区分说明
说明:
(1)由于 MAC 地址定义和分配的历史原因,最早分配的18个企业组织的 OUI 的 X 位是1。
(2)关于 OUI-36:获分配使用 OUI 的企业组织可以自行创建 OUI-36,也就是自主增加12个比特在原来的24比特 OUI 后面即可。但如果使用OUI-36 作为唯一的企业组织标识时,应当改为申请使用 CID。
如果 OUI-36 是由 IEEE 分配,这个 OUI-36 的前24位是属于 IEEE 专门保留的 OUI,获分配使用 OUI-36 的企业组织不能截取前24位作为自己的 OUI 使用。也不能假设获得多个 OUI-36 的企业组织,这些 OUI-36 的 OUI 部分都是一样的。
2、区分单播、多播和广播地址
MAC 地址还可以区分为单播地址、多播地址和广播地址(空地址)共三种。
IEEE 还规定了第一个字节的最低二进制位为 I/G位,I/G 即 Individual/Group;第2低位为 U/L 位,U/L 即 Universal/Local。排列组合如表2:
U/L (同为X位) |
I/G (同为M位) |
说明 |
---|---|---|
0 | 单播地址(Individual) | |
1 | 多播地址(Group) | |
0 | 全局管理地址(Universal) | |
1 | 本地管理地址(Local) |
表2 地址性质说明
其中的本地管理地址在下文关于 CID 的说明中再介绍。这里先就单播、多播和广播地址进行说明:
1、单播地址
由于 IEEE 在分配 OUI 或者 OUI-36 时 X 位必为0,因此分配的就必然是 全局管理(Universal administered) 地址。再加上因为 IEEE 分配 OUI 或者 OUI-36 时的 M 位必为0,所以企业厂商自行流水创建的 EUI-48 或者 EUI-64 的 MAC 地址就必然是单播地址。
这样的一个比特多个作用的设计,也是为了节省有限资源。
2、多播地址
获得分配 OUI 或者 OUI-36 的企业组织可以自行修改 I/G 位为1(同等设置 M 位为1),此时产生的是多播地址。就算把 U/L 位设置为0,也不改变其多播地址的性质,所以不是全局唯一的 MAC 地址。
多播地址主要应用于一对多的应用,比如在 802.1X 认证,STP/RSTP/MSTP 协议等,不过实际更常见的是打印机的轮询搜索,例如图1。
图1 打印机轮询搜索时的多播地址
3、广播地址(空地址,null address)
最后是特例,首先是广播地址 FF-FF-FF-FF-FF-FF,所有的位都是1。按上面的逻辑,广播地址就是本地管理的多播地址:Local administered Group Address。
空地址是指在硬件设备通电初始化期间临时填充到和 MAC 地址(EUI 性质)有关的寄存器或者硬件内存之类的地方的地址值。
IEEE 建议使用广播地址 FF-FF-FF-FF-FF-FF 作为空地址使用。
广播地址最常见的用途就是 ARP 请求,例如图2。
图2 ARP请求中的广播地址
还有一个特殊的地址是全0地址 00-00-00-00-00-00。实际上这个地址的 OUI 即 00-00-00 是已被分配的,但该空地址并没有被使用而是被认为由 IEEE 保留。
IEEE 建议不要使用全0地址作为空地址,因为按标准这其实是一个 EUI 地址。
CID 除了是用于定义和分辨企业组织的唯一性标记外,还可以用于创建扩展 ELI ,即扩展的本地标识符(Extended Local Identifier)。顾名思义,本地管理也就是并非全局唯一。所以 ELI 是由获分配 CID 的企业组织自行管理和确保在 ELI 的使用范围内(比如局域网的广播域内)唯一。
注:OUI 对应 EUI,CID 对应 ELI。
从表1我们可以发现,对于 CID 只定义了 Z 位=1,Y 位=0,但排列组合的其他3种组合作什么用途呢?
答案是 IEEE 还定义了相关的使用标准 IEEE Std 802,称为“结构化的本地地址计划”,SLAP,Structured Local Address Plan。Z和Y两位产生的4种二进制组合被称为本地地址空间的四个象限空间。
SLAP 标准对如何在本地地址空间中基于 CID 的 Z=1、Y=0 的象限空间创建使用 ELI 给出了说明;对另外三个象限空间(00、01、11),SLAP 描述了不基于 CID 的标准分配标识符(SAI,Standard Assigned Identifiers)和管理分配标识符(AAI,Administratively Assigned Identifiers)的使用说明。这里不详细说了。
由于 IEEE 分配的所有 CID 其 M 位都等于0,从分配的 CID 创建为扩展标识符的 ELI 具有 I/G 位为0,因此,当把 ELI 用作 MAC 地址时,它是单播地址。同样地,可以把 I/G 位设置为1去创建 ELI,也就是这个 ELI 是多播地址。
CID 的最大使用场合是超大规模数据中心,在不同的数据中心内部可以使用同一个 CID,产生 ELI 性质的 MAC 地址给中心内全部网络设备使用,从链路层开始实现统一管理。
MAC 地址的设计,本来 IEEE 是打算管用100年的,但由于信息技术的发展远远超出了当时的设想,MAC 地址就面临着被提前耗尽的可能。所以 IEEE 对 MAC 地址的设计调整了多次,目的就只有一个,减少 MAC 地址的浪费,延长其生命周期。
以下是因为调整而已经过时的术语:
1、Individual Address Block (IAB),独立地址块
36比特的标识符,包含了4096个 EUI-48(MAC-48)地址,已被 MA-S 替代。
2、22比特基于 OUI 的标识符
某些早期标准仅通过24比特的 OUI 的前22比特去描述 OUI,把 M 和 X 比特作为标记位而不是 OUI 的一部分。这种描述已经被正式的24比特 OUI 替代。
3、MAC-48 标识符
由于 MAC-48 这个词不能体现现在的设计,所以被淘汰。对于独立的全局唯一性的网络地址,则应使用 EUI-48 进行替代。但必须注意早期资料中使用到 MAC-48 一词时所指的范围比 EUI-48 要大,不要简单地替代两个词而导致理解错。
4、EUI-60
已经废弃,以 EUI-64 为替代。
5、CDI-32、CDI-40
历史上曾建议使用这两个术语作为上下文相关标识符(CDI,Context Dependent Identifiers),现都已过时。
MAC 地址所有这些都离不开 IEEE 802 一系列的标准,是网络运维和网络安全人员的基础背景知识。
基于最新的 MAC 地址设计,我们可以通过第一个字节的第2个十六进制数快速分辨这个地址的分类性质,进而判断代表其企业组织的位数实际长度是24位的 OUI、28位的基于 MA-M 还是36位的 OUI-36,然后从公开的清单中查询获知对应的企业名称。
同时还可以根据第一个字节的第2个十六进制数快速分辨这个地址用途和适用范围,具体如表3:
表3 MAC地址分类汇总
参考信息
[1] Guidelines for Use of Extended Unique Identifier (EUI), Organizationally Unique Identifier (OUI), and Company ID (CID)
https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf
[2] IEEE网站的注册说明页,包含可下载的OUI清单
本站微信订阅号:
本页网址二维码: