2006.04.14

闘う管理者その1 (vs IP Messenger)

ネットワーク管理をしている、あるいは社内のマシン全体の管理をしている管理者にとって、
場合によってはインストールされたくないプログラムというのが幾つか存在する。

その手のプログラムと、それを検出する方法というのを幾つか紹介する。
(・・・元来文書化されたネタはあまりないので企画倒れになるかも)
 
 
 
第1回: vs IP Messenger

<これは何か>
P2Pでインスタントメッセージ(チャット)とファイル交換を行うツールである。
基本的には常時立ち上げ、常駐したままで使用する。
 
 
<通信内容はどこに残るか>
通信記録は各々参加しているクライアントにのみ IPMessengerオリジナルのログを残す設定が可能である。
 
 
<何が問題か>
制限の少ないネットワークでは一般的に業務に必要ない。
参加者は、業務中に業務に関係ないメッセージを流す傾向にある。
 
 
<軽減する事由>
数人のチームとして外部の会社に出向した際に、ファイル交換の貧弱な環境だった場合は
ファイル交換に有効に働く可能性がある。
(ただし、やはりチャットの機能は不要だと思われる)

逆に社内に出向者を受け入れる場合、使用を許可すべき可能性がある。
 
 
<他、備考>
IPMessenger は何度かバージョン変更があり、通信内容は Ver2 と呼ばれるものから暗号化されている。
通信内容については容易には解析できない。
 
 
<追跡方法>
[手法その1]
デフォルトで IPMessenger が使用するポートは:UDP 2425のみである(src / destとも)
ネットワーク内部で使用されているか、一から調査するには、まず以下のようにする。
(調べるには nmap コマンドが必要)

   nmap -sU -p 2425 10.1.1.0/24
 UDP-2425 のopen 状況を 10.1.1.0/24 のネットワーク全体で調査     下記のように表示されるマシンがあれば IPMessenger が起動している可能性が高い。
Interesting ports on hogehoge.domain.jp (10.1.1.53):
PORT STATE SERVICE
2425/udp open unknown

下記のようであればひとまず起動していない可能性が高い。

Interesting ports on hogehoge.domain.jp (10.1.1.53):
PORT STATE SERVICE
2425/udp closed unknown
    ただし、WindowsXP + SP2 になってから、ポートがフィルタされる傾向にあり、 未使用かどうか区別がつけづらくなってきている。
Interesting ports on hogehoge.domain.jp (10.1.1.53):
PORT STATE SERVICE
2425/udp open|filtered unknown
    また IPMessenger は使用するポートを簡単に変更することが可能で、 使用するポートによって『グループ分け』を推奨する傾向にある。

使用者側にスキルがある場合は、ポートを変更して使用している可能性が高い。
この場合は、UDPの全スキャンを前提としなくてはいけない可能性がある。(ヒー)

nmap -sU -p 1025-65535 hogehoge.domain.jp
      [手法その2] Windows関係のマシンに限れば、 IPMessenger 実行中は該当マシンで ipmsg.exe という名称のプロセスが起動している。 これを確認することもできる。
'Excel等 VBAで実行可能 
Function procEnumerate(ByRef rsProcName As String, ByRef rsMachineName As String, ByRef rsAdminName As String, ByRef rsAdminPass As String) As Boolean
' 参照設定:『Microsoft WMI Scripting V1.x Library』
Dim loWMILocator As SWbemLocator
Dim loSWbemServices As SWbemServicesEx
Dim loProcess As SWbemObjectEx

  procEnumerate = False
  Set loWMILocator = CreateObject("WbemScripting.SWbemLocator")
  Set loSWbemServices = loWMILocator.ConnectServer(rsMachineName, "root\cimv2", rsAdminName, rsAdminPass)

  For Each loProcess In loSWbemServices.InstancesOf("Win32_process")
    Debug.Print loProcess.Name & vbTab & loProcess.processid
    If UCase(rsProcName) = UCase(loProcess.Name) Then procEnumerate = True
  Next

  Set loSWbemServices = Nothing
  Set loWMILocator = Nothing
End Function

?procEnumerate("ipmsg.exe", "hogehoge", "domain\administrator", "password")


ただし、この場合も WindowsXP + SP2 でポートがフィルタされていると確認できない可能性が高い。
また、調査先のマシンのポリシーの設定によってはイベントログにログが残る可能性がある。
 
 
 
[手法その3]
使用するポートがわかっていれば、以下のコマンドを利用して確認することができる。
(調べるには NetCat コマンドが必要)

nc -u hogehoge.domain.jp 2425 -p 2425 UDP-2425 <- UDP-2425 接続する。

以下のメッセージ(ipmssengerのコマンド)を送る
 
例1:バージョン取得コマンド

  1:1:name:machine:64:0

name は本来参加者(コマンド発行側)の名称、machineは本来参加者(コマンド発行側)のマシン名、64はバージョン取得コマンド
でもひとまず『name』『machime』をそのまま使用して可。

画面表示例:

  1:1086189256:hoge:hogehoge:65:Win32版 Ver2.06

ここで hogehoge は マシン名。 hoge はそのマシンにおける参加ユーザー。
Windows版の Version2.06 が起動されていることがわかる。

例2:参加者一覧取得コマンド

  1:1:name:machine:18:0

上記と同じ、18は参加者取得コマンド

画面表示例:(整形済み)

  1:1086196168:hoge:hogehoge:19:0. 2.
   hoge.hogehoge.10.1.1.53
   hoge2.hogehoge2.10.1.1.58

(注:本来バイナリで返信されるので、画面表示時に ピーピーうるさい)
 
 
プロトコルについては、以下ページを参照。
http://smart-pda.net/isourou/ipmsg/doc/ipmsg_protocol.html
 
 
 
[手法その4]
IDS や Ethereal等で UDP かつ src=dest ポートの通信を傍受して、
上記に類するプロトコルが流れていないかチェックする。

ただし、IPMessengerは参加者が増えたとき(減ったとき?)や
メッセージ/ファイルの交換をする時しかパケットを流さない静かなプロトコルのようで、
使用頻度が低い場合はかなり長時間の監視が必要。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ichikawa