このページは過去に掲載していたものをそのまま使用しています。

Contents


Documents top page
README
API
Sample Scripts
 

Network Intrusion Detection System 実験室

基本形から簡単な応用まで載せてみました。

サンプル 〜基礎編〜

その弐

「その壱」からの続きで、全部のlibnids内部状態に対応した プログラムは以下のようになります。

#!/usr/local/bin/ruby

require "rnids"

class SEED > NIDS
  def callback(pkt)
    return if not pkt.kind_of?(NIDS_TCP)

    case pkt.tcp_state
    when NIDS::NIDS_JUST_EST
      print "connection establised : "
      print "#{pkt.saddr}:#{pkt.sport} -> #{pkt.daddr}:#{pkt.dport}\n"
    when NIDS::NIDS_DATA
      print "sending data : "
      print "#{pkt.saddr}:#{pkt.sport} -> #{pkt.daddr}:#{pkt.dport}\n"
    when NIDS::NIDS_CLOSE
      print "connection closed : "
      print "#{pkt.saddr}:#{pkt.sport} -> #{pkt.daddr}:#{pkt.dport}\n"
    when NIDS::NIDS_RESET
      print "connection reseted : "
      print "#{pkt.saddr}:#{pkt.sport} -> #{pkt.daddr}:#{pkt.dport}\n"
    when NIDS::NIDS_TIMED_OUT
      print "connection timedout : "
      print "#{pkt.saddr}:#{pkt.sport} -> #{pkt.daddr}:#{pkt.dport}\n"
    else
      raise "you don't allow reach here"
    end
  end

  def kill(pkt)
    if pkt.tcp_data =~ /phf/
      return true
    end

    return false
  end
end

#
# allow C-c interruption
#
trap("SIGHUP", "EXIT")
trap("SIGINT", "EXIT")

#
# MAIN proc
#

seed = SEED.new
seed.run

あたらしくkill(pkg)メソッドを追加しました。 これはNIDS::NIDS_DATA状態の時にのみ呼ばれるので 内部で状態のチェックをする必要なくpkt.tcp_dataにアクセスできます。 ここでは典型的なCGIプログラムの弱点を付こうとしてphfを含む データが流れたコネクションだけを切断しようとします。 これでは'phf'の3文字を含むweb pageを閲覧しただけで切断されるという欠点(^^; もあります。

この欠点を解決するための簡単な解決方法はTCPセッションの方向を 考えることです。


Yasuhiro ABE <yasu@dengaku.org>
Last modified: Sun Feb 11 23:02:06 JST 2001