스푸핑되지 않은 네트워크 카드 MAC 주소를 찾는 방법

스푸핑되지 않은 네트워크 카드 MAC 주소를 찾는 방법

Red Hat Enterprise Linux(RHEL) 8에서 누구든지 이 작업을 수행 ifconfig eth0 hw ether abcd12341234하면

내가 아는 전부 ifconfigip -a,

그렇다면 eth0 인터페이스의 실제 MAC 주소를 안정적으로 얻을 수 있는 방법이 있습니까? 그렇다면 어떻게 해야 합니까? ...신뢰할 수 있는 소스에서 Linux Live CD로 재부팅하여 인터페이스의 MAC 주소가 변경되지 않았는지 확인하세요.

답변1

이 답변은 Linux에 관한 것입니다.

ifconfig이는 더 이상 사용되지 않으며 이 정보를 제공하는 커널 API에 대한 액세스가 없습니다.

이 정보는 오랫동안 검색이 가능했습니다 ethtool --show-permaddr. 예(편집됨):

# ethtool --show-permaddr eth0
Permanent address: 10:1f:74:32:10:fe

일부 보드/펌웨어/드라이버 조합에는 영구 주소가 없을 수 있으며 결과는 다음과 같습니다.

# ethtool --show-permaddr eth0
Permanent address: not set

현재 주소가 기존 영구 주소(설정된 경우)와 다를 때마다 충분히 새로운 ip link/kernel이 (아마도 다른 API를 통해) 영구 주소를 제공합니다. 예를 들어(편집됨):

# ip link set dev eth0 address 12:34:56:78:9a:bc

$ ip link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff permaddr 10:1f:74:32:10:fe

이는 permaddr 10:1f:74:32:10:fe원래 MAC 주소를 나타냅니다. 현재 MAC 주소가 영구 MAC 주소와 다른 경우에만 제공됩니다. 이러한 변경은 일시적으로 발생할 수도 있습니다. 예를 들어 인터페이스가 본드 슬레이브로 설정되고 해당 모드에 따라 본딩된 MAC 주소를 상속하는 경우입니다.

프로그래밍 방식으로 검색하려면 변경되지 않았더라도 JSON 출력을 사용하는 것이 좋습니다. jq예를 들어 다음과 같습니다.

ip -json link show dev eth0 | jq -r '.[] | .permaddr // .address'

영구 MAC 주소를 검색하거나, MAC 주소가 제공되지 않은 경우(즉, 변경되지 않은 영구 MAC 주소임을 의미합니다... 그렇지 않은 경우 현재 주소입니다).

이것이 중요한 경우 먼저 영구 주소가 있는지 확인해야 합니다. 반면에 ethtool보드/펌웨어/드라이버 조합에 대해 알려진 영구 주소가 설정되어 있지 않다는 것을 아는 것은 허용되지 않는 것 같습니다.

답변2

이 답변은 주로 NIC에 관한 것입니다.

해당 MAC 주소에 대해 "비현실적인" 것은 없습니다. 일반적으로 네트워크 카드에 고유한 MAC 주소가 포함된 ROM이 있다는 보장은 없습니다. 실제로 이는 특히 전체 장치가 소프트웨어로 정의되고 소프트웨어에 의해 설정된 MAC 주소만 있는 SoC에서 매우 일반적입니다.

그래서 아니야. 일반적으로 말해서, "실제" MAC 주소 같은 것은 없습니다. 시스템이 인터페이스의 주소를 변경하기로 결정한 경우, 이전에는 실제 주소였더라도 컴퓨터가 아는 한 그것은 "실제" MAC 주소입니다.

추신: 많은 대규모 소프트웨어 회사에서는 1990년대에 소프트웨어 라이센스(종종 멀티-k 유로 소프트웨어!)를 NIC 주소에 바인딩하려고 시도했으며 재미있는 결과를 얻었습니다. Xilinx는 2010년대에 이 작업을 훌륭하게 수행했습니다. 이는 부동 라이센스가 필요하지만 단일 시트 라이센스만 가지고 있는 모든 사람에게 좋습니다.

네트워크 인터페이스로 컴퓨터를 식별하는 것은 죽은 개념입니다. 특히 컴퓨터에 대한 루트 액세스 권한을 가진 사람을 방어하려고 할 때 그렇습니다. 듣고 싶은 내용을 알려주기 위해 해당 사람이 커널 드라이버를 수정하는 것을 막으려면 어떻게 해야 합니까?

이를 달성해야 한다면 TPM이 존재합니다. 이는 실제로 "암호적으로 안전"합니다. 예를 들어 다른 사람의 TPM처럼 작동하도록 TPM을 프로그래밍할 수 없습니다. 그렇게 하려면 외부에서 읽을 수 없는 다른 사람의 TPM 내부 메모리에 액세스해야 하기 때문입니다. TPM에 ID를 묻지는 않지만(이 역시 커널 드라이버에 의해 스푸핑될 수 있음) 무언가를 해독하여 올바른 내부 비밀이 있음을 암호화 방식으로 증명하도록 요청할 것입니다.

답변3

이 답변은 FreeBSD에만 해당됩니다.

가장 최근 부팅 중에 인식된 NIC의 MAC 주소는 다음 위치에 기록됩니다 /var/run/dmesg.boot.

$ grep 'Ethernet' /var/run/dmesg.boot 
em0: Ethernet address: b8:ca:3a:9f:a8:1e
igb0: Ethernet address: 90:e2:ba:78:ae:40
igb1: Ethernet address: 90:e2:ba:78:ae:41
igb2: Ethernet address: 90:e2:ba:78:ae:44
igb3: Ethernet address: 90:e2:ba:78:ae:45

관련 정보