2008年 08月 26日 ( 2 )
(ネットワーク)無線LANのMACアドレスフィルタリングは意味がない?
家の無線LANクライアントの一部がWEPしか対応していないので、仕方なくWEPにしてました。
(ちなみに、WEPは脆弱性があり、ツールを使えば数分でクラックできてしまうことが広く知られています。)
WEP単体ではまったく意味がないと思い、MACアドレス制限をかけていました。(あと、SSIDをステルスモードにしてますが、まあこれは気休め程度で玄人の前には意味がほとんどないのは理解してます。)
これなら、接続できる機器が制限されるわけだから、大丈夫だろうと思っていましたが、無線LANのMACアドレス制限の無意味さがあまり理解されていないという記事を見つけて己の無知を思い知りました。

まず、無線LANですが、これは昔のダムハブのように無線LANクライアントを持ってるだけで、自分の周辺を飛んでる無線パケットはすべて傍受できます。
その傍受したパケットのヘッダにはMACアドレスが記述されているのですが、ヘッダは暗号化されていません。
そして、MACアドレスは偽装が簡単にできてしまいます。
後は、WEPキーをツールで解読し、攻撃用マシンのMACアドレスを偽装してしまえば簡単にその無線LANに侵入できることになってしまうのです。

ということは、MACアドレスが傍受できてしまう以上、MACアドレスの制限は悪意のある人間の前には意味がないということになります。

上記のサイトにも下記のように書かれています。
----------------------------------------------------------
WEPを使用せざるを得ないときに、MACアドレス接続制限を加えることに意味があるかというと、全く意味がない。なぜなら、WEPの暗号をクラックする際には、同時にMACアドレスも見えているからだ。
----------------------------------------------------------
対策としては、WEPは使わず、WPA,WPA2で適切な鍵設定をすればいいだけですね。

ただし、WEPをどうしても使いたいという場合はやはりあると思います。
その点についても上記サイトに触れられていました。
----------------------------------------------------------
最近は、家庭向けの無線LANルータでも、「マルチSSID」「マルチAP」あるいは「マルチセキュリティ」などと呼ばれる、複数の無線ネットワークを提供して別々の暗号化設定を選べる機種が売られている。
----------------------------------------------------------
便利なものがあるんですね。これは知りませんでした。これで、無線のネットワークを別々にしてしまえばいいのです。

ITpro 利用率7割のWEPは「1分」で破られるにも、「MACアドレスでのアクセス制限やSSIDを秘匿する機能があったとしても、攻撃者はパケット・キャプチャなどによって容易に情報を入手できるため、本質的な対策にはならない。」と書かれてました。


最近しばらくネットワーク系触ってなかったので、こんな基本的なことに気付きませんでした。
(一応これでも国試の情報セキュリティと、情報セキュリティアドミニストレータ、ネットワークは持ってるんですが。。。)
[PR]
by jehoshaphat | 2008-08-26 14:37 | 豆知識 | Trackback | Comments(0)
(VB.Net)パラメタ使ったSQLで、NULL値を入れる。
ついつい忘れてしまうのでメモ。

SqlParameterを使って、値を入れるときにNullを入れる方法です。

Imports System.Data.SqlClient
 
Public Class TestClass
 
Private Sub DBTest()

 
 
Dim conn As New SqlConnection("DB接続文字列")
 
'StringBuilder使ったほうがStringでつなぐより速いらしい。
Dim strCmd As New System.Text.StringBuilder
strCmd.AppendLine("INSERT INTO tbl")

strCmd.AppendLine(" ( No ,")
strCmd.AppendLine(" Name ) ")
strCmd.AppendLine("VALUES ")

strCmd.AppendLine(" ( @No , ")
strCmd.AppendLine(" @Name ) ")
 
Dim cmd As New SqlCommand(strCmd.ToString(), conn)

 
'パラメータを作成
Dim param As New SqlParameter("@No", SqlDbType.Int, 0)

'ここでNull値をパラメタにセット。
param.Value = "DBNull.Value"
cmd.Parameters.Add(param)

Dim param2 As New SqlParameter("@Name", SqlDbType.NText, 0)
param2.Value = "DBNull.Value"

cmd.Parameters.Add(param2)
'上記で作成しているパラメータは下記のようにインスタンス作成省略も可能。
'cmd.Parameters.Add("@No",SqlDbType.Int)
'cmd.Parameters.Add("@Name",SqlDbType.NText)

 
'DB接続、実行、切断
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
 

 
End Sub
End Class

上記はパラメタを使ったサンプルですが、みてわかるようにSystem.DBNullクラスの Value プロパティを入れるだけです。

ちなみに、DBNullクラスはシングルトン クラスであり、インスタンスは1つしか存在しないようです。(つまり開発者はこのインスタンスを作成できない。)
シングルトン クラスとなるので、デザインパターンのSingletonパターンの実装のようですね。
デザインパターンはまだまださっぱしなので、勉強しないといけないですな。。。
[PR]
by jehoshaphat | 2008-08-26 09:50 | .Net開発 | Trackback | Comments(2)