なりすましのないネットワークカードMACアドレスを見つける方法

なりすましのないネットワークカードMACアドレスを見つける方法

Red Hat Enterprise Linux(RHEL)8で誰でもこれを行うifconfig eth0 hw ether abcd12341234と、

私が知っているifconfigすべてip -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アドレスです。

PS:多くの大規模なソフトウェア会社は、1990年代にソフトウェアライセンス(しばしばマルチKユーロソフトウェア!)をNICアドレスにバインドしようとし、面白い結果を得ました。ザイリンクスは2010年代にこの仕事を見事に行いました。これは、フローティングライセンスが必要ですが、シングルシートライセンスしか持っていないすべての人に最適です。

ネットワークインターフェイスでコンピュータを識別するのは死んだ概念です。特に、コンピュータへのrootアクセス権を持っている人を守ろうとするときにそうです。聞きたいことを伝えるために、その人がカーネルドライバを修正するのを防ぐにはどうすればよいですか?

これを達成する必要がある場合は、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

関連情報