JP2005515541A - ネットワーク脆弱性の検出および報告のためのシステムならびに方法 - Google Patents
ネットワーク脆弱性の検出および報告のためのシステムならびに方法 Download PDFInfo
- Publication number
- JP2005515541A JP2005515541A JP2003560745A JP2003560745A JP2005515541A JP 2005515541 A JP2005515541 A JP 2005515541A JP 2003560745 A JP2003560745 A JP 2003560745A JP 2003560745 A JP2003560745 A JP 2003560745A JP 2005515541 A JP2005515541 A JP 2005515541A
- Authority
- JP
- Japan
- Prior art keywords
- network
- target computer
- data
- computer
- response
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1433—Vulnerability analysis
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/50—Testing arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
Abstract
Description
図1は、ターゲットネットワークの一実施形態を示す。本発明のネットワークセキュリティシステム100は、一実施形態では、Windows 2000オペレーティングシステム上で稼働している少なくとも1つのIntelベースのサーバであるが、IPネットワークを扱うことができ、また大規模データ処理が可能なコンピュータシステムまたはオペレーティングシステムであればどのようなものでも使用できる。ネットワークセキュリティシステム100は、ターゲットネットワーク102の外側にあっても、ターゲットネットワークの内側にあってもよい(図に示されていない)。いずれの場合も、システム100は、1つまたは複数のノード104を介して、インターネットなどのネットワークを通じてターゲットネットワーク102に接続される。ターゲットネットワーク102は、一実施例では、中央イントラネットハブ106を備えるイントラネットからなる。ターゲットネットワーク102は、さらに、ターゲットネットワーク102に入るトラフィックまたはターゲットネットワーク102から出るネットワークトラフィックの一部をブロックするファイヤウォール108を含む。ターゲットネットワークは、さらに、インターネットプロトコル(IP)アドレスの所定の範囲内にあるとして定義されている、多数のホスト110を含む。場合によっては、外部ホスト112は、ターゲットネットワークの外側に置かれていてもよいが、それでも、ターゲットネットワーク102に接続することが可能である。
ターゲットコンピュータの脆弱性およびアクセスは、どの特定のオペレーティングシステムがコンピュータ上で実行されているかがわかれば、高めることができる。ターゲットコンピュータのオペレーティングシステムの識別は、ネットワーク上で受信するデータパケットに対するオペレーティングシステムの応答を調べることにより実行できる。パケットの形式およびそれらのパケットへの応答は、ネットワークプロトコルに従って生成される。インターネット上での通信に使用されるプロトコルの定義は、Internet Request for Comment(RFC)文書で規定され、文書化されている。例えば、TCP/IPプロトコルは、一部、参照により本明細書に組み込まれているRFC793で定義されており、ネットワーク越しのTCPパケット通信の標準モデルを含む。事実上すべてのオペレーティングシステムがTCP/IPスタックを備えているが、それぞれのTCP/IPスタックの実装は少しずつ異なる。したがって、特定のオペレーティングシステムに特有のTCP/IPスタックからの知られている応答を「指紋」として使用して、ターゲットコンピュータの実際のオペレーティングシステムを判別することができる。
AWMSS=0:AWMSS=128:AWMSS=384:TTL:DF:OS
ここで、例えば、
AW=TCP広告ウィンドウ
MSS=TCPオプション最大セグメントサイズ
TTL=TCPオプション有効期間
DF=TCPオプション「断片化しない」フラグ、および
OS=オペレーティングシステム識別子
である。
AWMSS=0:AWMSS=128:AWMSS=384:OPTMSS=384:OPTMSS=0:OPTMSS=128:TTL:DF:FL:OS
ここで、例えば、
OPT=TCPオプションバイト、および
FL=TCPフラグ
である。
window1:window2:window3:options1:options2:options3:ttl:dontfrag:flags
ここで、
window1=第1の応答から受信したTCPウィンドウサイズ
window2=第2の応答から受信したTCPウィンドウサイズ
window3=第3の応答から受信したTCPウィンドウサイズ
options1=第1の応答から受信したオプションバイト
options2=第2の応答から受信したオプションバイト
options3=第3の応答から受信したオプションバイト
ttl=第1の応答からのIP TTLフィールド
dontfrag=第1の応答からのIP dontFragmentビット
flags=第1の応答からのTCPフラグの単一文字表示
である。
40E8:4000:4080:020405B4:020405B4:020405B4:80:1:SA−−−−
これから、指紋を知られているオペレーティングシステム指紋のデータベースと比較し、リモートオペレーティングシステムを識別する最も近い一致を見つける。この例では、送信される3つのTCPパケット例および返される3つのTCPパケット例が以下に示されている。
----------
Packet 1 send
TCP
Source port: 272
Destination port: 80
Sequence: 0x01100000 (17825792)
Acknowledgement: 0x00000000 (0)
Header length: 0x05 (5)-20 bytes
Flags: SYN
URG: 0
ACK: 0
PSH: 0
RST: 0
SYN: 1
FIN: 0
Window: 0x0040 (64)
Checksum: 0x4518 (17688)-correct
Urgent Pointer: 0x0000 (0)
TCP Options: None
Data length: 0x0 (0)
---------
Packet 1 reply
TCP
Source port: 80
Destination port: 272
Sequence: 0x659A2C81 (1704602753)
Acknowledgement: 0x01100001 (17825793)
Header length: 0x06 (6) - 24 bytes
Flags: SYN ACK
URG: 0
ACK: 1
PSH: 0
RST: 0
SYN: I
FIN: 0
Window: 0xE840 (59456)
Checksum: 0x9A47 (39495) - correct
Urgent Pointer: 0x0000 (0)
TCP Options
Maximum Segment Size: 0x5B4 (1460)
Data length: 0x0 (0)
--------
Packet 2 send
TCP
Source port: 528
Destination port: 80
Sequence: 0x03100000 (51380224)
Acknowledgement: 0x00000000 (0)
Header length: 0x07 (7) - 28 bytes
Flags: SYN
URG: 0
ACK: 0
PSH: 0
RST: 0
SYN: 1
FIN: 0
Window: 0x0040 (64)
Checksum: 0x1E8A (7818) - correct
Urgent Pointer: 0x0000 (0)
TCP Options
Maximum Segment Size: 0x80 (128)
Data length: 0x0 (0)
---------
Packet 2 reply
TCP
Source port: 80
Destination port: 528
Sequence: 0x659ABB23 (1704639267)
Acknowledgement: 0x03100001 (51380225)
Header length: 0x06 (6) - 24 bytes
Flags: SYN ACK
URG: 0
ACK: 1
PSH: 0
RST: 0
SYN: 1
FIN: 0
Window: 0x0040 (64)
Checksum: 0x098D (2445) - correct
Urgent Pointer: 0x0000 (0)
TCP Options
Maximum Segment Size: 0x5B4 (1460)
Data length: 0x0 (0)
----------
Packet 3 send
TCP
Source port: 784
Destination port: 80
Sequence: 0x05100000 (84934656)
Acknowledgement: 0x00000000 (0)
Header length: 0x07 (7) - 28 bytes
Flags: SYN
URG: 0
ACK: 0
PSH: 0
RST: 0
SYN: 1
FIN: 0
Window: 0x0040 (64)
Checksum: 0x1A8A (6794) - correct
Urgent Pointer: 0X0000 (0)
TCP Options
Maximum Segment Size: 0x180 (384)
Data length: 0x0 (0)
---------
Packet 3 reply
TCP
Source port: 80
Destination port: 784
Sequence: 0x659B732B (1704686379)
Acknowledgement: 0x05100001 (84934657)
Header length: 0x06 (6) - 24 bytes
Flags: SYN ACK
URG: 0
ACK: 1
PSH: 0
RST: 0
SYN: 1
FIN: 0
Window: 0x8040 (32832)
Checksum: 0x4E04 (19972) - correct
Urgent Pointer: 0x0000 (0)
TCP Options
Maximum Segment Size: 0x5B4 (1460)
Data length: 0x0 (0)
------------
ターゲットコンピュータに関して導かれる上述の指紋の繰り返し数はいくつでもかまわないが、過度の繰り返しをせずにオペレーティングシステムを最も正確に識別できるのは3つの指紋であると判断されている。同様に、他のTCPオプションフラグを変更してターゲットオペレーティングシステムを検出するようにすることも可能であるが、複数のテストSYNパケットにわたって、好ましくはTCPオプションMSS値がそれぞれ0、128、および384である3つのテストSYNパケットを使用して、TCP広告ウィンドウを変更することが最も効果的であることがわかっている。さらに、TCP広告ウィンドウ内のMSS値を変更することは、パケット内の他の値を変更することに比べてターゲットコンピュータのオペレーションへの干渉の可能性も低い。
ポートスキャニングは、ネットワークセキュリティを確実なものとするための欠かせないツールである。通常、不審な侵入者は、ポートスキャナを選択されたターゲットコンピュータに適用して、開いているポートを見つけようと試みる。これらの開いているポートを通じて、侵入者は知られているまたは知られていない脆弱性を利用してターゲットコンピュータへのアクセス権を取得することを望む可能性がある。ネットワークセキュリティコンテキストに関しては、通常のポートスキャナをターゲットネットワークにつながっているそれぞれのターゲットコンピュータ上の216個すべての(65,536個の)ポートに適用することは、ネットワーク資源を著しく枯渇させ、途方もない時間を要す可能性があり、そのためターゲットコンピュータの実際の脆弱性を正確に突きとめられない場合がある。
以下で詳述するが、ホスト発見段階では、1つ、2つ、または3つの異なるテストをスキャンリスト上の各IPアドレスに適用する。バッチでスキャンリストをスキャンし、そこでIPアドレスのそれぞれのバッチが(以下で詳述するように)並行してスキャンされ、ホストコンピュータ(すなわち、稼働しているターゲットコンピュータ)を識別する。
第1のホスト発見テストでは、標準のICMPパイプ要求を各ターゲットコンピュータに送信する。応答を受信すると、ターゲットコンピュータは、スキャンリストから外され、稼働しているリストに入れられる、一実施形態では、これは、ICMPエコー要求パケットをそれぞれのホストに送信することを引き起こす。複数のICMPパケットは、並行して、バッチ内の複数のIPアドレスに送出できると都合がよい。通常、システムは、ICMPエコー返信がバッチ内のすべてのIPアドレスから受信されるか、またはICMPエコー要求がタイムアウトになるまでシステムは待機する。このプロセスの結果として、スキャンリスト上のIPアドレスのバッチ毎に、ICMPエコー要求に応答するIPアドレスのリストがスキャンリストから削除され、稼働しているリスト上に置かれる。
第1のテストでリストに載っている1つまたは複数のIPアドレスから応答を受け取らなかった場合、第2のホスト発見テストとしてスキャンリスト内の残りのターゲットコンピュータに一組のTCPパケット(単一のSYNパケットまたは完全TCP接続シーケンス(「TCP完全接続」))が送信される。特に、一実施形態では「TCP発見ポート」のリストが選択されている。選択は、開いている可能性が最も高いTCPポートに基づく。TCP発見ポートリストは、比較的短いと都合がよく、HTTP(Hypertext Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)などの周知のサービスポートを含むのが好ましい。TCPホスト発見リストの非独占的な一実施例を表3に示した。
IPアドレス(すなわち、ターゲットコンピュータ)が第1の2つのテストの後もスキャンリストに残っている場合、インテリジェント型UDPポートスキャニングの第3のテストが残りのアドレスに対して実行される。後述のように、インテリジェント型UDPポートスキャニングは、不正確なことで悪名の高いUDPポートの従来型スキャニングとは異なる。TCPポートをスキャンする場合、ターゲットコンピュータからの応答により、ターゲットコンピュータ上のターゲットポートが開いていることが示される。それとは対照的に、UDPポートをスキャンしている間、ターゲットコンピュータから応答があっても、ターゲットポートが開いていることを示さず、スキャンされたUDPポートが閉じられた場合にのみ応答(ICMPエラーメッセージ)が送信される。UDPポートをスキャンする従来の方法では、「偽陽性」がかなりの回数発生し、その場合UDPスキャンの結果、応答がない(開いているポートを示唆する)が、スキャンされたUDPポートは実際には閉じられている。例えば、これは、ファイヤウォールまたはルータがターゲットコンピュータから返るICMPエラーメッセージをブロックした場合に発生するか、またはターゲットコンピュータから返送中にICMPエラーメッセージが単に喪失しただけの場合にも発生する。数千回の試験を行うと、そのようなエラーが発生する可能性がある。
一実施形態では、本発明はさらに進み、それぞれのホスト(すなわち、ターゲットコンピュータ)をより詳しく調べるが、その際に、稼働しているリストを使用し、またオプションにより、潜在的に稼働しているリストも使用する。サービス発見では、一組の共通TCPサービスポートおよび一組の共通UDPサービスポートがスキャンされる。TCPサービス発見リストおよびUDPサービス発見リストは、通常、TCPホスト発見リストおよびUDPホスト発見リストに比べてかなり大きい。それぞれのリストは、通常、通信に一般に使用されるポートの何らかの部分集合を含む。例えば、それぞれのリストは、数個から数百までの任意のポートを含むことができる。通常、それぞれのリストは、表6に示されているようなポートを含む(Windows(登録商標)2000に関してMicrosoft(登録商標)社が公開報告している既定のポートのリスト例)。このリストは、網羅しているわけではなく、技術、プロトコル、ネットワーク基盤、およびオペレーティングシステムが変わると、ポートの要件も変更されるのがしばしばである。
好ましい一実施形態では、本発明は個々のポートの直列スキャニングを次から次へと完了して行くのではなく、ポートスキャニングを「バッチ」で実行するので都合がよい。このため、大きなスキャンの小さな断片を完了し、データベースに保存することができ、大きなスキャンの結果全体をすべて一度にメモリ内に保持する必要はない。例えば、クラスAネットワークをテストする場合、ただ単にホスト発見のためだけに、数億個のポートをスキャンする必要がある。旧いネットワーク機器の技術的制限にシステムを適合させ、複数の著しいIPアドレス範囲を持つ非常に大きなターゲットネットワーク内のコンピュータのポートをスキャンするようにできると都合がよい。ネットワークまたはシステムの障害が発生した場合、システムは最後に知られている正常に完了したバッチの後に特に大きなスキャンを再開する。
「バナーグラビング」は、ターゲットコンピュータから受信されたパケットから関連する情報を剥ぎ取る方法である。一実施形態では、稼働しているリスト内のターゲットコンピュータ毎に、サービススキャン段階で発見されたそれぞれの開いているTCPポートおよびそれぞれの開いているUDPポートに対してバナーグラビングの実行を試みる。情報が応答TCPまたはUDPパケットから正常に受信された場合、この情報は、取得元のターゲットコンピュータと関連してデータベースに格納される。その後、格納されている情報は、ターゲットコンピュータ上の脆弱性情報を収集するために使用され、脆弱性情報はさらに、データベースにも格納される。
一実施形態では、稼働しているリスト内のターゲットコンピュータ毎に、システムとターゲットコンピュータとの間のICMP tracerouteの実行を試みる。ICMP tracerouteが不完全な場合、システムとターゲットコンピュータとの間のTCP tracerouteの実行を試みる。それぞれのターゲットコンピュータに対するtracerouteの結果に基づいて、ターゲットネットワークトポロジのマップが作成され、データベースに格納される。
・CONDENSE UNKNOWNS:連続する未知の対象物を、未知のIPアドレス(OxFFFFFFFF)を持つ単一ホップに圧縮する。tracerouteが所定のホップまで実行され、未知の対象物を受け取った場合、第1の未知のホップがパケットをブロックしているファイヤウォールであるため、それ以降のすべてのホップはさらに未知のものとなることが考えられる。
・UNKNOWN RESOLUTION:他の経路を見て、知られているすべてのマシンによって接続されているこの経路内の未知の対象物のいずれかの側のIPアドレスを持つ経路が存在するか調べることにより、未知の対象物を解決しようと試みる。見つかった場合、その未知の対象物をそれらのマシンで置き換える。こうして、ファイヤウォールとして違ったラベルを貼らないように、見せかけの未知の対象物を排除しようと試みる。実際のファイヤウォールは、通常、未知となるので、排除されない。
・BUILD SET OF NODES:型ROUTENODEの構造(structs)のリストを構築する。これは、IPアドレスが一意であると保証されるリストであり(後述の未知の対象物を除く)、ネットワーク内で発見されたすべてのIPアドレスの集まりを表す(すなわち、スキャニングプロセスにより発見されたホストおよびtracerouteプロセスにより発見されたそこに至るホップ)。各ROUTENODE structのm_pHostメンバは、IPアドレスがスキャニングプロセスで発見されたホストの1つでない場合にNULLとなり、そうでなければ、そのプロセスにより発見されたホストデータを指す。上述のように、知られているマシンは、IPアドレスにより一意である。さらに、未知の対象物は、その直前のIPアドレスにより修飾される。その結果、同じIPアドレスが前に付く未知の対象物は、通常、同じファイヤウォールであると考えられ、したがって、リスト内の単一のROUTENODEにより表される。
・FILL IN CONNECTIONS:各ROUTENODE structは、ROUTENODEの直接の接続先であるマシンを表すROUTENODEポインタのリストを含む。アルゴリズムは、次に、これを埋めて、IPアドレスが接続の各リスト内で一意であることを保証する。これらのポインタはリスト内の他のROUTENODE structを指すことに注意されたい(すなわち、リストは、通常、自給自足型のデータ群である)。
・COMPUTE DISTANCE FROM INTERNET:もう一度、ホスト毎、およびIPアドレス毎に、traceroute情報がトラバースされる。リスト内の対応するROUTENODE structが検索され、structのm_nDistFromInternetはその経路内のホップカウントに応じて設定される。これは、通常、最大ホップカウントを表すために実行される。すなわち、m_nDistFromInternetフィールドは0に初期化され、その後、traceroute IP文字列内のホップカウントが大きければ、m_nDistFromInternetはそのホップカウントに設定される。例えば、IPアドレス(例えば、「d」とする)は1つの経路内にa−b−dとして現れ、他の経路では、a−b−c−dとして現れるが、ただし、「a」、「b」、および「c」はIPアドレスcへの経路上の他のIPアドレスである。アルゴリズムのこの部分が完結している場合、dはm_nDistFromInternet=4となる。この情報は、一方のマシンが他方のマシンの前にあるかどうかを知るためにアルゴリズムによって使用される。この最大発見ホップ長は、問題を十分計算可能なものにするための発見的手法となることに注意されたい。特定マシンが他のマシンに接続されているものとして描かれるとうまくいかない可能性があり(直接接続されているため)、1つの経路内でその前に置くが、マシンは、m_nDistFromInternetが他の経路内で接続されているマシンと同じまたはそれ以上のマシンにぶつかる他の何らかの経路内にあるためそのようには描かれない。この状況はまれであり、この発見的手法は、通常、許容可能である。
・BUILD ROUTER LIST:次にアルゴリズムは、ROUTENODEリストをトラバースし、ROUTER structのリストを構築する。ROUTER structは、ROUTERであると信じられるROUTENODEへのポインタおよび接続先となっている葉(経路末端)マシンであるROUTENODEポインタのリストを含む。葉は、ただ1つのマシン(自分自身以外)に直接接続されているROUTENODEである。このアルゴリズムの目的のために、ROUTERは、そのマシンであるとする。アルゴリズムのこの段階では、ROUTER structのリストを構築し、それぞれのROUTER内に、そのROUTERに接続されている葉ROUTERNODEのリストを構築する。このアルゴリズムはさらに、ROUTERリストを参照せずにROUTENODEリスト内のどのマシンがルータであるかを知る必要があるときに、ROUTERとして指定されているROUTENODE内のブール型フィールドにマーク付けも行う。
・ROUTER PROMOTION:これまでに詳述したとおりこのアルゴリズムにより、ROUTERがこれを囲む葉ノードを持ち、そのすべてが同じサブネットを持つ、例えば、すべて149.17.1.xxxであるようなマップが出力されるという状況がある。最初の1、2、または3桁(それぞれ8ビット)は同じである。そのROUTERは、ちょうど1つの葉ノードを持つ直接接続されている少ないm_nDistFromInternetのROUTERを持ち、その葉ノードは第1のROUTERの葉リスト内のすべてと同じIPアドレスの桁を共通に持つ。この場合、tracerouteデータは、第1のROUTERおよびその単一の葉が異なるマシンであることを示唆するが、同じマシン上の2つのNIC(ネットワークインターフェースカード)である可能性がある。したがって、アルゴリズムは、そのIPアドレスを第1のROUTERのROUTENODEのm_lnOtherNicsメンバに追加し、その後、他のROUTERの葉のリストからそれを削除し、ROUTERのROUTENODEにもはやROUTERでないというマークを付けることにより、そのROUTENODEを「格上げする」。そのROUTERは、さらに、ROUTERリストからも削除される。その後、マップ上で、ROUTERの一次IPアドレスは通常通り表されるが、今度は、灰色のバーがあり、その下に他のIPアドレスがある。アルゴリズムでは、マルチホームROUTERの実行をサポートしており、格上げされたすべてのIPを表す。マルチホームのケースは、ここで説明するデュアルホームの例を拡大解釈することにより容易に想像される。
・OTHER TYPE OF ROUTER PROMOTION:好ましいアルゴリズムでは、さらに他の種類のルータ格上げをも実行する。何らかのROUTERの回りのちょうど1つの葉で発見的手法が実行されると、ROUTERの他のNICへの格上げが行われる。発見的手法のテストを行うためには、マシンはスキャニングプロセスで発見されたホストである必要があるが、それは、情報の出所であるためである。ほとんどの葉は発見されたホストであるのは注目すべきことである。アルゴリズムではこのことを要求しないが、また1つのものしか接続されていない非発見ホストホップがtraceroute情報から出力され、それによりそこから葉が作られる可能性があるが、tracerouteは発見されたホストに対して実行されるので、葉は発見されたホストとなる傾向がある。一実施形態では、発見的手法は以下のとおりである。TCP 2001、4001、6001、または9001が発見された場合、あるいはUDP 520、またはUDP 23および79 の両方が発見された場合、あるいは発見されたオペレーティングシステムがCiscoである場合、そのROUTENODEはルータIPアドレスであると想定され、また格上げされる(IPアドレスはROUTERのm_lnOtherNicsに追加され、ROUTENODEポインタはその葉から削除される)。
・FIREWALL PROMOTION:ファイヤウォールの格上げは、上述のルータの格上げ発見的手法に似ている。一実施形態では、ファイヤウォールの回りのちょうど1つの葉が発見的手法の条件を満たした場合、ファイヤウォールの他のNICリストに格上げされ、その結果、「ファイヤウォール」と表示するマップが得られるが、今度は、知られているIPアドレスは灰色のバーで区切られ下に示される。一実施形態では、発見的手法は、TCP 256、257、264、265がマシン上に見つかった場合であり、それはファイヤウォールであると想定される。
・NUMBER FIREWALLS:これは、アルゴリズムの最後のステップである。ファイヤウォールは、その前にあるIPアドレスの順序でソートされ、その後、レポート上のマップに「Firewall−1、Firewall−2、...など」とプリントできるように番号が振られる。
知られているそれぞれのTCPポート、UDPポート、およびオペレーティングシステムについて、その構成に対する知られている脆弱性は、脆弱性識別符号に基づいて脆弱性データベースに格納される。脆弱性識別データベース内の多くの脆弱性項目について、脆弱性をテストするための方法を自動スクリプトに書き込むことができ、これで、疑わしい脆弱性に照らしてターゲットシステムの実際の弱点を評価すると都合がよい。一実施形態では、これらのスクリプトは、評価セキュリティスクリプト言語で作成され、またFASLで作成されるのが好ましい。FASLは、一実施形態では、C++およびJava実装に基づくスクリプト言語である。FASLは、さまざまな脆弱性に関するセキュリティテストを行うための調整可能な自動化言語を実装している。複数のFASLスクリプトを並列実行できるため都合がよい。例えば、一実施形態では、最大8個までのスクリプトを同時に実行することができる。例えば、それぞれのFASLスクリプトは、所定の脆弱性識別符号に照らしてターゲットコンピュータに脆弱性があったかどうかを示す成功または失敗の結果で応答する。FASLスクリプトによりターゲットコンピュータから収集された情報、およびこの試みの成功または失敗の情報は、後で報告できるようにターゲットコンピュータに関係するデータベースに格納され、さらに脆弱性テストで使用したり、これで追加テストを繰り返したりする。
FASL言語の実装は、構文の面でC++と類似している。一実施形態では、FASLは構造体オブジェクトのメンバ関数、構造体オブジェクトのコンストラクタおよびデストラクタ、構造体オブジェクトの継承、スカラー型の配列、新しいスカラー型「バイナリ」および関連関数、埋め込みゼロバイトを含む埋め込み16進数符号をサポートする文字列定数、RPCおよびNetBIOSチェック用のRPCCheck()およびSMBCheck()関数、バイナリ型で16進数出力するすべてのスカラー型に対するdebugMessage()、再帰、関数オーバーロード、参照パラメータ、ならびにActive−Assessmentのサポートを含む。
スカラーデータ型は、実行スタック上でスロットを1つ占有する、言語にネイティブの型である。基本的に、宣言することが可能な変数はスカラー型、スカラー型の配列、または構造体のインスタンスである。スカラー型は次のとおりである。
binary b=“1234”;// 長さ=4
string s=“1234”;// 長さ=4
binary b=“zzzz\x0ssss”;// 値=“zzzz\x0ssss”,長さ=9
string s=“zzzz\x0ssss”;// 値=“zzzz”,長さ=4
である。
FASLスクリプトは、通常、ステートメントのリストである。これらのステートメントは、一般に、セミコロンによって区切られる。この規則の例外は、ブロックを含むステートメント({と}で囲まれている他のステートメントリスト)は、通常、区切るためにセミコロンを必要としないという点である。セミコロンは、有効な(空)ステートメントとなり、したがって、ブロックを伴うステートメントの後にセミコロンを入れても何ら問題はなく、何も実行されないだけである。新しいブロックは、新しいスコープを表す。そのスコープ内で宣言されている変数は、そのスコープ内でのみアクセス可能であり、デストラクタがある場合には、それらのデストラクタはスコープの終わりで呼び出される。変数は、変数が宣言されているスコープを閉じるスコープ内の変数と同じ名前で宣言することができる。これらは、外側のスコープ内の変数をオーバーライドするが、これらの変数は閉じられているスコープから他の方法でアクセス可能である。しかし、同じスコープ内の他の変数と同じ名前の変数があると、エラーが発生する。ステートメントは、以下のうちの1つであり、それぞれ以下で詳しく説明する。
・関数宣言:スコープ内で宣言された変数としてステートメントのリストに現れるが、その値は式からコピーされるか、さもなければ、式の型である関数呼び出しにより供給される変数を参照する、パラメータを持つステートメントの名前付きリスト。関数宣言は、スクリプトの最上位のスコープ内にのみ出現できる。
・構造体宣言:データメンバおよびメンバ関数の両方を持つことができるエンティティの宣言。メンバ関数はすべて、関数が呼び出されるオブジェクトインスタンスへの参照である暗黙の第1のパラメータを持つ。
・変数宣言:変数が宣言されていたスコープ内に存在する変数の宣言。変数は、単に宣言することができるか、あるいはその宣言の一部として、式に代入することにより初期化するか、または変数の後のかっこ内にコンストラクタパラメータを入れることにより作成できる。スカラー型にはコンストラクタはないことに注意されたい。コンストラクタを持つ型では、パラメータリストは、その型に対して存在するコンストラクタと一致していなければならない。
・式:これは、関数呼び出し、定数値、変数、メンバ選択(メンバ変数またはメンバ関数のいずれか)、ならびに変数、定数などの算術および論理演算とすることができる。
・Whileループ:これは、所定の条件(式)が真に解決される場合に実行されるブロック/ステートメント/スコープを持つ制御構造である。
・Repeatループ:これは、式が解決される整数値を実行回数としてブロックを実行する制御構造である。
・Ifステートメント:これは、式が真に評価されるとブロックを実行し、偽であればオプションのelseブロックを実行する制御構造である。
・Forループ:この制御構造は、かっこで囲まれた、セミコロンで区切られた、式の3つのリストを持つ。リスト内で(空の場合も、式を1つ持つ場合も、複数の場合もある)、複数の式がある場合、それらはカンマで区切る。最初に第1のリストが実行される。次は、ブロックが実行されるには真でなければならない(式のリスト内ですべて真でなければならない)条件であり、最後は、ループを通る毎に実行される式のイテレータリストである。
・ブロック:多数のステートメントがブロックを所有することに注意されたい。ブロックは、制御ステートメントまたは関数宣言により所有されなくてもそのまま存在していてよい。所有されないブロックは、何かの作成と破壊を、「通常の」スコープ内で遂行できない与えられた位置で実行する必要がある状況でコーディングすることができる。
関数は、「function」キーワードを使用して宣言される。これらは、以下のように宣言される。
function [<scalar-return-type]<functionname>(<argument-list>)
{
<body>
}
戻り型が指定されていない場合、intが暗黙のうちに仮定される。引数リストは、空とすることができる(すなわち、「function <functionname>()...」)。すべてのスクリプトは、通常、「function faslmain()」を必要とし、見つからないとエラーになる。関数faslmain()は、スクリプト内の任意の場所から明示して呼び出すことができるが、faslmain()の呼び出しが最上位スコープ内にない場合、呼び出しはスクリプトの終わりに暗黙のうちに挿入される。関数はオーバーロードすることができ、その引数リストが異なれば、同じ関数名を持つ複数の関数が存在することが可能である。引数リストは、「<argument>、<argument>、...、<argument>」という形式である。引数は以下の形式とすることができる。
・コピー渡し。<scalar−type><distinct−variable−name>:関数がこの変数に対し実行するものは、呼び出しの中で与えられる対応する式に反映されない。式は定数とすることができる。
・参照渡し。<scalar−type>& <distinct−variable−name>:関数がこの変数に対し実行するものは、呼び出しの中で与えられる対応する変数に反映される。呼び出しでは、この引数に対応する変数に縮小する式を与えなければならない(すなわち、変数、あるいは変数に縮小する構造体メンバ選択のみ)。
----------------------
function faslmain()
{
int x;
X = 5;
}
function string DoStringStuff(int x)
{
return intToString(x);
}
function void DoStringThing(string& s)
{
s = "the string";
// DoStringThing(szThing) will set
// szThing to "the string"
}
-------------------
である。
変数宣言は以下のとおりである。
<typename> <var> [, <var>...];
構造体の場合、<typename>は、通常、「structure <structurename>」と表されるか、またはそれとは別に、型「OBJECT」の構造体変数を「OBJECT o;」と宣言することができる。
・<identifier>:これは単純な宣言である。<typename>が構造体であり、既定の(引数なし)コンストラクタが存在する場合、それが呼び出される。
・<identifier>=<initializer expression>:式は評価され、結果は宣言時に変数に代入される。式によって返される型は」<typename>と互換性がなければならないことに注意されたい。
・<identifier>(<params>):<params>は、カンマで区切られた、式のリストである。<typename>内のシグネチャと一致するコンストラクタが呼び出される。<typename>は、構造体である必要があることに注意されたい。
・<identifier>[<array−dimension−expression>]:<typename>は、スカラー(非構造体)型を示していなければならない。式は、整数定数に解決しなければならない(すなわち、その中に変数も関数呼び出しもあってはならない)。これにより、<identifier>が所定の次元<typename>の配列変数として宣言される。
------------
OBJECT o;
structure OBJECT o;
OBJECT o (5, 6, "something");
int x = 8, y, z[6 + 7];
-----------
である。
構造体は、「structure」キーワードを使用して宣言される。これらは、以下のように、
structure <structurename> [extends <parentstructurename>]
{
<member-list>
};
と宣言される。
「extends」が使用されている場合、この構造体は親のすべてのメンバを「継承」する。親構造体の中にあるのと同じ名前およびシグネチャであるこの構造体の中のメンバ関数は、その親構造体の関数をオーバーライドする。
------------
OBJECT o;
o.m_intmember = 5;
o.m_ownedstructuremember.m_x = 8;
o.DoSomething(5, 6, "stuff");
------------
である。
式は、変数、関数呼び出し、定数、メンバ選択、およびこれらとコネクタとして使用される演算子との組み合わせである。ここでの説明のために、式を再帰的に、例えば、<expression>+<expression>が式となるように定義することができる。演算子を伴う式(代入、算術演算、論理演算など)では、式の左側を「lvalue」、式の右側を「rvalue」と呼ぶのが通例である。FASLでは、大半の言語と同様、式の中のlvalueとrvalueは互換性のある型を返さなければならない(通常、型は同じでなければならないが、ときには、FASLのintおよびcharと同様、異なる型も互換性があり得る)。さらに、特定の型にしか作用しない演算子もある。また、演算子の優先度という概念もあり、オーバーライドするかっこがない場合の演算子の優先度が決まる。したがって、例えば、3−5+7は、左から右へ評価されるが、3−5*7では、5*7を先に計算し、その結果を3から引く。優先度順のすべての演算子のリストを以下に示す。
・関数呼び出し:<function−name> ([<argument−list>])。<argument−list>は、場合によっては空の、カンマで区切られた、式のリストである。スクリプトのどこかに、出現する順序でこれらの式の戻り型と一致するパラメータをとる関数がなければならない。参照をとる関数の場合、関数呼び出しの<argument−list>内の対応する式は変数に解決されなければならない(複数の変数の定数または算術/論理/関係演算式ではなく)。関数呼び出しの式の型は、対応する関数宣言の戻り型である。
・文字列定数:「sample string\x3f」。これらは、たいていは文字列を含むリテラル文字を表す、引用符で囲まれた文字列値である。この例外はエスケープ文字であり、「\t」はタブ、「\n」は改行、「\r」は復帰、および「\x[0−9a−fA−F][0−9a−fA−F]*」は1つの文字に解決される埋め込まれた16進数符号である。正規表現は単に、例えば、「\x3f−sample」は47(0x3F)の後に「−」、さらに「s」が続き、というようになるだけであることに注意されたい。埋め込まれたゼロ(「\x0」)は、文字列式の中で定数が使用された場合に文字列の終端となるが、バイナリ型の式で使用した場合には、文字列全体が処理されて、エスケープシーケンスに解決され、その後、バイナリ型に変換される。文字列定数は、通常、関数と同じ優先度を持つ。
・char定数:例えば、「A」である。これらは、一重引用符と単一文字であることを除き文字列定数と同じように扱われる(エスケープシーケンスで表すことができる)。
・int定数:これらは、「1048576」のような10進数または「0x100F」のような16進数である。
・++<variable>:変数の値に1を足し、その値を返す。intとcharに作用する。
・−−<variable>:変数の値から1を引き、その値を返す。intとcharに作用する。
・<variable>++:変数の値を返して、その後1を足す。intとcharに作用する。
・<variable>−−:変数の値を返して、その後1を引く。intとcharに作用する。
・−<expression>:<expression>で返されるものを否定し、その値を返す。intとcharに作用する。
・〜<expression>:<expression>で返されるもののビットを反転し、その値を返す。intとcharに作用する。
・!<expression>:<expression>の論理否定。ブール型に作用する。
・sizeof(<typename>または<variable>):<typename>または<variable>によって占有されているスタックセルの個数であるintを返す。
・<structurevariable>.<member>[.<member>...]:一番右の<member>のとる型/値を返す。
・<expression>power<expression>:lvalueおよびrvalueはintまたはcharでなければならない。intおよびcharが混在している場合、charはintに格上げされる。
・<expression>*<expression>:乗算...lvalueおよびrvalueはintまたはcharでなければならない。intおよびcharが混在している場合、charはintに格上げされる。
・<expression>/<expression>:除算...lvalueおよびrvalueはintまたはcharでなければならない。intおよびcharが混在している場合、charはintに格上げされる。
・<expression>%<expression>:剰余...lvalueおよびrvalueはintまたはcharでなければならない。intおよびcharが混在している場合、charはintに格上げされる。
・<expression>+<expression>:加算...乗法演算子と同じ型規則であるが、2つの文字列(文字列を返す)または2つのバイナリ(バイナリを返す)の連結も行う。式の一方が文字列定数で、他方がバイナリ変数の場合、文字列定数はバイナリ定数とみなされる。
・<expression>−<expression>:減算...乗法演算子と同じ型規則であるが、文字列にも作用する(演算子+とは異なりバイナリには適用されない)。文字列の場合、減算を実行すると、rvalueと一致するlvalueからすべての部分文字列が削除され、その結果の文字列が返される。
・<expression> << <expression>:1ビット左シフトする(実際には2を掛ける)。乗法演算子と同じ型規則。
・<expression> >> <expression>:1ビット右シフトする(実際には2で除算し余りを捨てる)。乗法演算子と同じ型規則。最上位ビット(符号ビット)は、次のビットでも繰り返される。
・<expression>&<expression>:ビット毎のAND。乗法演算子と同じ型規則。
・<expression>|<expression>:ビット毎のOR。乗法演算子と同じ型規則。
・<expression>^<expression>:ビット毎の排他的OR。乗法演算子と同じ型規則。
これらの演算子はすべて、通常、演算対象の型に関係なくブール値を返す(演算対象と同じ型を返す大半の演算子とは対照的である)。特に断りのない限り、lvalueおよびrvalueはint/charとint/charまたは文字列と文字列とすることができる。文字列の場合、比較はアルファベットの大文字小文字を区別する。
・<expression> < <expression>:lvalueがrvalueよりも小さい場合に真を返す。
・<expression> <= <expression>:lvalueがrvalue以下の場合に真を返す。
・<expression> > <expression>:lvalueがrvalueよりも大きい場合に真を返す。
・<expression> >= <expression>:lvalueがrvalue以上の場合に真を返す。
・<expression>==<expression>:lvalueとrvalueが等しい場合に真を返す。
・<expression>!=<expression>:lvalueとrvalueが等しくない場合に真を返す。
・<expression>in<expression>:これは、文字列およびバイナリ型の式にのみ作用する。
lvalueがrvalueの中に部分文字列/部分バイナリパターンとして出現した場合に真を返す。
これらの演算子では、lvalueおよびrvalueがブール型を返すことを予期しており、演算子はブール型を返す。
・<expression>||<expression>:「or else」...lvalue が真の場合、rvalueを評価せずに真を返し、真でない場合、rvalueが返すものを返す。
・<expression>&&<expression>:「and then」...lvalue が偽の場合、rvalueを評価せずに偽を返し、真の場合、rvalueが返すものを返す。
これらの演算子は、型互換性を要求する、すなわち、ほとんどの時間、型が等しいことを意味する。例外は、intとcharを混在させたときに、lvalue型が優勢となり、文字列定数をバイナリ変数に代入した場合、文字列定数はバイナリ定数になる。lvalueおよびrvalueは、スカラー型に解決しなければならず、lvalueは変数に解決しなければならない。
・<expression>=<expression>:単純な代入:rvalueをlvalueにコピーする。
・<expression>*=<expression>:
・<expression>/=<expression>:
・<expression>%=<expression>:
・<expression>+=<expression>:
・<expression>−=<expression>:
・<expression> >>= <expression>:
・<expression> <<= <expression>:
・<expression>&=<expression>:
・<expression>|=<expression>:
・<expression>^=<expression>:上の項目はすべて、上で指定された演算子の規則に従ってrvalueの「=」の前の演算子を実行し、その結果をlvalueに入れる。
また、C/C++の条件式と原則的に同一の構文と文法がある。文法は以下のとおりである。
(<expression>)?<expression−eval−if−true>:<expression−eval−if−false>;
かっこ内の式が真に評価されると、疑問符の後の式が実行され、そうでなければ、コロンの後の式が実行される。かっこ内の式は、ブール型に解決しなければならず、他の2つの式は型互換性がなければならない。条件式の戻り型/値は、式の戻り型/値であり、これは、条件式を評価した後実行される。
Whileループ
A while loop is expresses as:
while (<expression>)
{
<statement-list>
}
または、
while (<expression>)
<statement>;
である。
repeat (<expression>)
{
<statement-list>
}
または、
repeat (<expression>)
<statement>;
である。
if (<expression>)
{
<statement-list>
}
または、
if (<expression>)
{
<statement-list>
}
else
{
<statement-list>
}
である。
for (<expression-list>; <expression-list>; <expression-list>)
{
<statement-list>
}
または、
for (<expression-list>; <expression-list>; <expression-list>)
<statement>;
である。
FASL言語の一実施形態の文法/構文要素は上で規定されている。これらだけで、計算を実行し、アルゴリズムを実装するのに十分であるが、ネットワーク経由でデータを送受信するような操作については何もなく、あれば便利なことであるが、これまでに規定した文法では表現できないスカラー型に関してはいくつかの演算があることに注意されたい。このような理由から、この機能にアクセスするためのスクリプトスコープ(言うなれば「メタスコープ」)を所有するスコープ内で宣言された構造体および関数が存在する。本明細書で使用しているように、「Faultline」は、ネットワークセキュリティシステム全体を指している。
すべてのスクリプトは、「FASL」という名前の、型が「FASL_OBJECT」である変数にアクセスすることができる。この変数の型は、以下のように指定される。
--------------
structure FASL_OBJECT
{
private:
string m_szName,
m_szDescription,
m_szSummary,
m_szReturnString;
RETURNVALUE m_eReturnCode;
int m_nDefaultPort,
m_nIPAddress;
ATTACK m_eAttackType;
OPERATINGSYSTEM
m_e0SMajor,
m_eOSMinor;
PROTOCOL m_eDefaultProtocol;
public:
function FASL_OBJECT()
{
m_nDefaultPort = 0;
m_nIPAddress = 0;
m_szReturnString = "Return string not set."
}
function void setScriptName(string s)
{
m_szName = s;
}
function void setScriptVulnerabilityCode (int
nFaultlineID)
{
// This sets the vulnerability id as it exists in the Faultline database that uniquely
// identifies the vulnerability being sought by the script.
m_nFaultlineID = nFaultlineID;
}
function void setScriptDesc (string s)
{
m_szDescription = s;
}
function void setScriptSummary(string s)
{
m_szSummary = s;
}
function void setScriptAttackType(ATTACK e)
{
m_eAttackType = e;
}
function void setScriptReturn(string szReturnString, RETURNVALUE eReturnCode)
{
m_szReturnString = szReturnString;
m_eReturnCode = eReturnCode;
}
function void addValidPort(int n)
{
// When a script successfully compiles, it will execute all these that it finds
// in the main scope. It builds a list of ports on which to run the script.
m_nValidPort = n;
}
function void setScriptPort (int n)
{
m_nDefaultPort = n;
}
function void setScriptOS(OPERATINGSYSTEM eMajor, OPERATINGSYSTEM eMinor)
{
// When a script successfully compiles, it will execute all these that it finds
// in the main scope. It will use this information to decide whether this script
// needs to be run on a given host.
m_eOSMajor = eMajor;
m_eOSMinor = eMinor;
}
function void setScriptProtocol(PROTOCOL e)
{
m_eDefaultProtocol = e;
}
function int getIPAddress ()
{
return m_nIPAddress;
}
function int getScriptPort ()
{
return m nDefaultPort;
}
function string strTok(string& s, string szDelimiters)
{
// Like strtok in UNIX, this skips past any characters at the beginning of the string
// that are in szDelimiters. Return the substring that includes all the leftmost
// characters up to but not including the next instance of a character in
// szDelimiters, or the end of the string whichever comes first. Remove the
// returned string from s (note it is a reference).
return STRTOK(s, szDelimiters);
}
};
-----------
スクリプトが正常にコンパイルされると、メインスコープ内にある「FASL.memberfunction()」という形式のすべてのステートメントは、実行される(この位置では、スクリプト内の他のステートメントは実行されない)。これらのメンバ関数が設定する情報はスクリプトオブジェクトのデータの中に取り込まれ、これにより、システムはスクリプトをいつどのように実行するかに関して理にかなった決定を下すことができる。FASL.addValidPort(nPort)は、何回でも呼び出すことができ、呼び出すことで、一意的なポートのリストが作成される。システムが実行されると、スクリプトのメインスコープ内でFASL.addValidPort(nPort)が呼び出されなかったことを見いだし、その場合、スクリプトはホスト毎に1回実行され、FASL.getScriptPort()はそのスクリプト内で0を返す。FASL.addValidPort(nPort)がスクリプトのメインスコープ内に出現した場合、システムは、所定のホスト上の一意的なポート毎に1回スクリプトを実行し、FASL.getScriptPort()はその実行でシステムが渡すポートを返す。FASL.setScriptOS()も類似の原理で動作する(すなわち、これを呼び出すと、OSが特に指定されているホスト上でのみスクリプトを実行することを要求するが、呼び出さないと、スクリプトはOSに関係なく呼び出される)。これを複数回呼び出しても、addValidPortがポートのリストを作成するようには、OSのリストは作成されない。setScriptOSの最後の呼び出しは、使用された呼び出しである。
これは、メタスコープ内で宣言されている構造体であるが、FASL_OBJECTの場合のようには、メタスコープ内で宣言されているインスタンスはない。ほとんどの場合、通常のFASL構造体と同様であるが、コンストラクタはコンストラクタの第1引数に渡すものに応じてウィンドウTCPまたはUDPソケットを作成し、デストラクタはそのオブジェクトをクリーンアップする。接続が適切であると仮定とすると、メンバ関数を使用して、そのソケット上でデータの送受信を行うことができる。構造体は以下のとおりである(データメンバは、知らなくてもよいので省略されている)。
-----------
structure Socket
{
function Socket(PROTOCOL eProtocol, int nPort)
{
// eProtocol is either TCP or UDP and the port is the IP port
// Creates a windows socket object.
}
function 〜Socket()
{
// Cleans up the Windows socket object associated with this socket.
}
function boolean socketOpen()
{
// Typically must be called before sending or receiving data for either protocol.
// if returns false then it could not open the socket and communication
// will fail.
}
function boolean socketClose()
{
// Close the socket. destructor will do this if not done here.
}
function void BindPort(int nPort)
{
// Use when you want specify the source port explicitly.
BIND_PORT (nPort);
}
function string socketRead(int nBytes, int nTimeout)
{
// Read nBytes from Socket... returns empty string if fail.
}
function string socketReadLine(int nBytes, int nTimeout)
{
// Read nBytes or up to end of line whichever comes first.
// return empty string on fail.
}
function binary socketReadBinary(int nBytes, int nTimeout)
{
// Read nBytes of raw binary data, empty binary on fail.
}
function int socketWrite (string szBuffer, int nLength)
{
// Write nLength characters out of szBuffer. return 0 on fail
// or number of bytes written on success.
}
function int socketWrite(string szBuffer)
{
// Write the entire string (length implicit), otherwise same as above.
}
function int socketWrite(binary bBuffer)
{
// Write the binary raw data... length implicit, otherwise same as above.
}
};
-------------
アクティブ評価に対する脆弱性オブジェクト
このオブジェクトは、アクティブ評価に使用され、そのカスタムビヘイビア−一般的FASLスクリプトには異常な−は自分自身、および後で自分自身を見つけるたために必要とするすべてのデータを、他のスクリプトがデータにアクセスし、その情報を使用して他のマシンに危害を及ぼすことを試みることができる、グローバルデータ領域にコピーする方法を知っているということである。オブジェクトは以下のとおりである。
-------------
structure Vulnerability
{
private:
int m_nFaultlineID,
m_nIPAddress,
m_nExploitIPAddress;
string m_szDescription;
public:
function Vulnerability()
{
m_nFaultlineID = 0;
m_nIPAddress = 0xFFFFFFFF;
m_szDescription = \"Vulnerability
uninitialized.\";
}
function void addToExploitableData(
int nFaultlineID,
int nIPAddress,
int nExploitIPAddress,
string szDescription)
{
// This sets all the member variables of this structure. This function may be
// called from a derived structure and this function will know that. It stores the
// entire contents of the object as well as the object's typename and size in the
// global vulnerability data area.
}
function boolean getExploitableData(int nIndex)
{
// this function searches the global vulnerability
// data area for the nIndex-the instance of a variable of the same type as this (this
// could be and probably will be a derived structure from vulnerability) and copies
// its contents into this object. If there is no nIndex-th object, return false and
// no change to this object's data will have
occurred.
}
// Accessor functions. the members of this structure need to be read only once they
// have been stored with addToExploitableData().
function int getFaultlineID()
{
return m_nFaultlineID;
}
function int getIPAddress()
{
return m_nIPAddress;
}
function int getExploitIPAddress()
{
return m_nExploitIPAddress;
}
function string getDescription()
{
return m_szDescription;
}
};
---------------
このオブジェクトの背後に、一方のスクリプトが、他のマシンに危害を及ぼすために他方のスクリプトで使用できる何かを発見することが可能であるという概念がある。脆弱性はどれも、この実施形態では、この基底クラスに含まれる情報を必要とする。m_nFaultlineIDは、発見された脆弱性の脆弱性IDである。m_nIPAddressは、脆弱性が発見されたマシンである。m_nExploitIPAddressは、この脆弱性を見つけるのに有益であることを実証した、データが発見されたマシンである。m_szDescriptionは、Active−Assessmentレポートに表示したい内容である。m_nExploitIPAddressは、通常、この脆弱性を見つけるために他の脆弱性が使用されていなかった場合に、−1に設定されなければならない。他の脆弱性が使用される場合、そのm_nIPAddress(通常はothervuln.getIPAddress()を使用して)はこの脆弱性のm_nExploitIPAddressに入力される。これにより、レポートがグラフで表示できる監査証跡が定められる。
-----------
int i;
UnicodeVulnerability uv;
for (i = 0; uv.getExploitableData(i); i++)
{
// Attempt to use this data to compromise this host.
if (succeed at compromising this host)
{
// create a vulnerability representing this host's vulnerability that was
// found using the UnicodeVulnerability. Note that this vulnerability
// may or may not be a UnicodeVulnerability... it could be some other
// vulnerability. When you have populated it with its specific data, call:
newvuln. addToExploitableData(
nNewVulnFaultlineID,
FASL.getIPAddress(),
uv.getIPAddress(),
"we got this vuln by exploiting Unicode on another machine");
}
}
-----------
デバッグメッセージ
「debugMessage (<scalar> e)」という関数がすべてのスカラー型についてオーバーロードされる。ほとんどの場合、これは、デバッギングシステムから予想されるものを出力する。intおよびcharは数値として出力され、ブール型は「真」または「偽」として出力され、文字列はその内容を出力する。バイナリの場合、debugMessage(binary B)を通じて、16進ダンプ出力が得られるが、これは、MS−DOSのDEBUG.EXEの「d」オプションで出力されるものとよく似ている。すなわち、それぞれ16バイトを表す行を出力し、行の形式は<4桁16進数オフセット>:<空白で区切られた8個の2桁16進数>−<他の8><印刷可能文字はそのまま表され、印刷不可能文字はピリオドとして表される16個の文字>である。例えば、
「0060: 67 65 6C 73 20 6C 6F 6F−6B 20 6C 69 6B 65 20 74 gels look like t」
である。
------------
function string leftTrim(string s)
{
// Lops off whitespace up to the first non-whitespace character.
}
function string rightTrim(string s)
{
// Lops off all trailing whitespace.
}
function int stringLength(string s)
{
// self-explanatory.
}
function string toLower(string s)
{
// Makes any characters that are upper-case lower-case.
}
function string toUpper(string s)
{
// Makes any characters that are lower-case upper-case.
}
function int stringToInt(string s)
{
// similar to atoi in C
}
function string intToString(int n)
{
// i.e 1048576 becomes string "1048576"
}
function string intToString(char c)
{
// Similar to intToString(int)
}
function string intToHexString(int n)
{
// i.e. 16383 becomes "3FFF"
function int hexStringToInt(string s)
{
// i.e. "3FFF-blahblahblah" becomes 16383.
}
function string intToBinaryString(int n)
{
// i.e. 85 becomes "1010101"
}
function int binaryStringToInt(string s)
{
// i.e. "1010101blahblahblah" becomes 85.
}
function string intToIPString (int n)
{
// i.e. 16777215 becomes "0.255.255.255"
}
function string grep(string sl, string s2)
{
return \"to be implemented\";
}
function int locate (string sl, string s2)
{
// return 0-based position of s1 in s2 or -1 if s1 not in s2.
}
function string subString (string s, int nStart, int nNumChars)
{
// i.e. subString("one law for the lion and ox is oppression", 4, 3} = "law"
// it is smart about boundries ... if you ask for more characters than exist
// you only get the ones that exist.
}
function string garbageString(char c, int nLength)
{
// i.e. garbagestring('Al', 7) = "AAAAAAA"
}
function string garbageString(int nLength)
{
// return string of nLength length whose characters are random
// upper and lower case alphanumerics.
}
----------------
バイナリ関数:
----------------
function int binaryLength(binary b)
{
// self-explanatory.
}
function char binaryNthByte(binary b, int n)
{
// return nth byte numbered from 0. If out of bounds,
// return -1.
}
function boolean binaryChangeByte(binary& b, int n, char c)
{
// Change byte #n in binary b to c. If out of bounds,
// do nothing to b and return false.
}
function binary binaryRight(binary b, int n)
{
// return a binary which is the rightmost n bytes of b.
If there
// are not n bytes in b, you get all of b (not padded to n).
}
function binary binaryLeft(binary b, int n)
{
// same like binaryRight except from left.
}
function binary binaryMid (binary b, int nStart, int nLength)
{
// nStart is 0-based... return binary which is the nLength bytes starting
// at nStart. If there are not nLength bytes, return however many there are.
}
----------
一般グローバル関数:
--------------
function string getLocalHostIP()
{
// return string "xxx.xxx.xxx.xxx" representing the IP
of the machine
// on which the FASL script is running.
}
function string getTargetHostIP()
{
// This is in here for compatibility reasons... you can get the same
// effect by doing:
intToIPString(FASL.getIPAddress());
}
function ant getTargetPort()
{
return FASL.m_nDefaultPort;
}
function boolean RPCCheck(int nRPCProgNum)
{
// Attempt to make an RPC call on the given nRPCProgNum
to see if it exists
// on the target machine. Return true if it does.
}
function boolean SMBCheck(string szUserName, string szPassWord, string szShare)
{
// Attempt to do a "net use" sort of thing on the given share... i.e. "IPC$",
// "\\HOSTNAME\C$", "\\xxx.xxx.xxx.xxx\C$", etc. If it succeeds then
// promptly delete the share and return true, otherwise return false.
}
-------------
FASLスクリプト言語のこの実装では、知られている開いているポートを持つ知られているターゲットコンピュータに潜在的脆弱性のアクティブ評価を実行することができる。例えば、ユニコード脆弱性をテストするFASLスクリプトは以下の形式をとる。
-----------
structure UnicodeVulnerability extends Vulnerability
{
string m_szUnicodeString;
};
function fas1main ()
{
UnicodeVulnerability uv;
uv.m_szUnicodeString = "The unicode string";
uv.addToExploitableData(1, FASL.m_nIPAddress, "the string for reporting purposes");
debugMessage("vulnfind executed.");
}
structure UnicodeVulnerability extends Vulnerability
{
string m_szUnicodeString;
};
function faslmain()
{
UnicodeVulnerability uv;
if (uv.getExploitab1eData(0))
{
debugMessage("getExploitableData()...
m_nFaultlineID = " + intToString(uv.m_nFaultlineID) + ",
m_nIPAddress = " + intToIPString(uv.m_nIPAddress) + ",
m_szDescription = " + uv.m_szDescription + ",
m_szUnicodeString = + uv.m_szUnicodeString);
}
else
{
debugMessage("getExploitableData() failed.");
}
}
-----------------
顕著なことであるが、一実施形態では、正常に行われた脆弱性テストから収集された情報を使用して、ターゲットネットワークおよび個々のターゲットコンピュータの脆弱性をさらにテストすると都合がよい。特に、脆弱性テストが正常に行われた場合、アカウントアクセスの追加ポートまたはレベルがターゲットコンピュータ上で利用可能であるのがふつうである。したがって、他の前の脆弱性テストが失敗した場合であっても、正常に行われた脆弱性テストの後に再試行すると都合がよい。
-----
TABLE: Vulns
COLUMN: BID, TYPE: varchar(10)
COLUMN: CVE, TYPE: varchar(20)
//"Common Vulnerabilities and Exposures" number.
COLUMN: CyberID, TYPE: int(10)
COLUMN: Description, TYPE: text (2147483647}
COLUMN: ExploitDataType, TYPE: varchar(64)
//Name of the FASL type, where applicable, that
contains extra data for this vulnerability.
COLUMN: ExploitDate, TYPE: smalldatetime(16)
COLUMN: ExploitLink, TYPE: varchar(255)
//Site where you can download the exploit/patch.
COLUMN: FaultlineID, TYPE: int(10)
//Primary key field... linked to VulnsFound table.
COLUMN: Impact, TYPE: tinyint (3)
COLUMN: ISSID, TYPE: int(10)
COLUMN: LHF, TYPE: bit(l)
//short term intrusion opportunity.., true or
false.
COLUMN: Name, TYPE: varchar(128)
COLUMN: NID, TYPE: int(10)
COLUMN: Observation, TYPE: text (2147483647}
COLUMN: Person, TYPE: varchar(50)
COLUMN: Popularity, TYPE: tinyint(3)
COLUMN: Recommendation, TYPE: text(2147483647)
COLUMN : Risk, TYPE: tinyint(3)
COLUMN: Risktext, TYPE: text(2147483647)
COLUMN: Simplicity, TYPE: tinyint(3)
COLUMN: Type, TYPE: varchar(50)
//web, rauter, unix, trojan, etc.
TABLE: VulnsFound
COLUMN: ConfigurationID, TYPE: int (10)
COLUMN: CustomerID, TYPE: int(10)
COLUMN: FaultlineID, TYPE: int(10)
COLUMN: HostID, TYPE: int(10)
COLUMN: JobID, TYPE: int(10)
COLUMN: VulnFoundID, TYPE: int identity(10)
-------
VII.ターゲットネットワーク脆弱性の定量的スコアリング
ネットワーク脆弱性は、従来より、「低リスク」、「中リスク」、および「高リスク」の尺度で格付けされてきた。この主観的尺度は、脆弱性によって与えられるターゲットシステムへのアクセスレベル、脆弱性を検出して搾取容易性、脆弱性に関する一般大衆の知識、脆弱性の影響を受けるコンピュータの割合などに基づく。しかし、この主観的尺度は、相対的セキュリティを比較するため他の何らかの形で異なるネットワークを比較することができる客観的印を欠いている。さらに、この主観的な3レベル尺度だと、時間の経過によるセキュリティ改善または追加リスクに関する情報はほとんど得られない。
F=100−V−E (式1)
ここで、
F=FoundScore
V=脆弱性損失
E=暴露損失
である。
PEA(VX)=floor({P(VX)+E(VX)+A(VX)}/3) (式3)
および、
floor(x)は、標準床関数であり、
P(VX)は、1〜3尺度による脆弱性の人気度であり、
E(VX)は、1〜3尺度による脆弱性の搾取容易性であり、
A(VX)は、1〜3尺度による脆弱性により与えられるアクセス/特権のレベルである。
ここで、この尺度でスコアが高いほど、リスクは大きい。
PEA(VX)=R(VX) (式3a)
ここで、R(VX)は、1〜3尺度による脆弱性に関連するリスクである。
V=min(50,Σ(X=1→n){Vw,x}) (式4)
ここで、
n=ターゲットネットワーク上で見つかった脆弱性の個数。
Σ=総和記号
VW,X=上で定義した脆弱性重み、および
min(x,y)=標準最小関数
である。
E=min(50,Σ(y=1→q){10×Uy+5×Iy+Ny+2×My}) (式5)
ここで、
q=ターゲットネットワーク上で見つかった稼働しているターゲットコンピュータの台数。
Uy=DNSを除く、y番目のターゲットコンピュータ上で見つかった開いているUDPポート
Iy=y番目のターゲットコンピュータ上で見つかった開いているICMPポート
Ny=y番目のターゲットコンピュータ上で見つかった非本質的サービス
My=本質的サービスのないターゲットコンピュータに対するペナルティ
Σ=総和記号、および
min(x,y)は標準最小関数
である。
Ealt=[Σ(y=1→q){(5×Uy+2×Iy+2×Ny+2×My)2}]1/2/q (式7)
Valt=[Σ(x=1→n){(Vw,x)2}]1/2/n (式8)
Falt=Ealt+Valt (式9)
ようなものがある。
一般に、従来のネットワークセキュリティシステムでは、テキストダンプ形式で報告情報を出力している。ネットワークトポロジ、ターゲットコンピュータ、脆弱性などに関する収集されたデータレコードは、ASCIIファイルにダンプされるため、解釈するためにかなりの労力を要する。このようなデータダンプが従来から使用されているのは、ネットワークセキュリティユーザに高危険脆弱性があることを知らせること以外に、既存のシステムは、特定の脆弱性を識別し、是正するユーザを支援する見つかったネットワーク、ターゲットコンピュータ、および脆弱を表すデータの対話的で階層的なグラフィック表示を出力しないからである。
Claims (66)
- ネットワークに動作可能に接続されたターゲットコンピュータのオペレーティングシステムを判別するためのシステムであって、
前記ネットワークによりサポートされているプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信される、第1および第2のデータパケットと、
コンピュータ可読媒体に格納されているデータビットを含み、第1のオペレーティングシステムに関連付けられている、第1および第2のオペレーティングシステムの指紋と、
コンピュータ可読媒体に格納されているデータビットを含み、前記第1のデータパケットの前記送信に応答して受信されたデータの少なくとも一部の表示を含む、第1のターゲットコンピュータの指紋と、
コンピュータ可読媒体に格納されているデータビットを含み、前記第2のデータパケットの前記送信に応答して受信されたデータの少なくとも一部の表示を含む、第2のターゲットコンピュータの指紋と、
前記第1のオペレーティングシステムの指紋及び前記第1のターゲットコンピュータの指紋を比較し、前記第2のオペレーティングシステムの指紋及び前記第2のターゲットコンピュータの指紋を比較し、前記第1のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す結果を生成する、コンピュータにより実行可能な、指紋の比較命令とを含むシステム。 - 前記第1のデータパケットの第1のビット範囲が、第1のパラメータ値を表し、
前記第2のデータパケットの前記第1のビット範囲が、前記第1のパラメータ値と異なる第2のパラメータ値を表す請求項1に記載のシステム。 - 前記第2のパラメータ値が、前記第1のデータパケットの前記第1のビット範囲内の1つのビットを変更することにより導かれる請求項2に記載のシステム。
- 前記第1のオペレーティングシステムの指紋と前記第2のオペレーティングシステムの指紋とが異なる請求項2に記載のシステム。
- 第3のデータパケットであって、前記プロトコルに準拠し、該第3のデータパケットの前記第1のビット範囲が、前記第1および第2のパラメータ値と異なる第3のパラメータ値を表し、前記ネットワーク経由で前記ターゲットコンピュータに送信される第3のデータパケットと、
コンピュータ可読媒体に格納されているデータビットを含み、前記第1のオペレーティングシステムに関連付けられている、前記第1および第2のオペレーティングシステムの指紋と異なる、第3のオペレーティングシステムの指紋と、
コンピュータ可読媒体に格納されているデータビットを含み、前記第1のデータパケットの前記送信に応答して受信されたデータの少なくとも一部の表示を含む、第3のターゲットコンピュータの指紋であって、前記比較命令が、前記第3のオペレーティングシステムの指紋及び前記第3のターゲットコンピュータの指紋を比較するために、前記結果を生成する前に、コンピュータにより実行可能である第3のターゲットコンピュータの指紋とを、さらに含む請求項4に記載のシステム。 - コンピュータ可読媒体に格納されているデータビットを含み、第2のオペレーティングシステムに関連付けられている、第4、第5、および第6のオペレーティングシステムの指紋であって、前記第4、第5、および第6のオペレーティングシステムの指紋のうち少なくとも1つが、前記第1、第2、および第3のオペレーティングシステムの指紋のそれぞれ1つと異なり、前記比較命令が、前記第4のオペレーティングシステムの指紋及び前記第1のターゲットコンピュータの指紋を比較し、前記第5のオペレーティングシステムの指紋及び前記第2のターゲットコンピュータの指紋を比較し、前記第6のオペレーティングシステムの指紋及び前記第3のターゲットコンピュータの指紋を比較し、前記第2のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す第2の結果を生成する、コンピュータにより実行可能である、第4、第5、および第6のオペレーティングシステムの指紋をさらに含む請求項5に記載のシステム。
- 前記プロトコルがTCP/IPであり、
前記第1のビット範囲が、最大セグメントサイズを表すパケットフィールドに対応する請求項5に記載のシステム。 - 前記第1のパラメータ値が、ビットをセットしないことで得られ、
前記第2のパラメータ値が、1つのビットをセットすることにより得られ、
前記第3のパラメータ値が、2つのビットをセットすることにより得られる請求項5に記載のシステム。 - 前記第1のパラメータ値が0であり、
前記第2のパラメータ値が128であり、
前記第3のパラメータ値が、128に256の倍数を加算した値である請求項5に記載のシステム。 - 前記第1のビット範囲が、少なくとも2バイトを表し、
前記第2のパラメータの値が、1バイトの中の最後のビットをセットすることにより得られ、
前記第3のパラメータの値が、1バイトの中の最後のビットをセットすることにより得られる請求項5に記載のシステム。 - 前記第3のパラメータが、前記第1のビット範囲内の隣接ビットをセットすることにより得られる請求項10に記載のシステム。
- 前記第1、第2、および第3のデータパケットが、最低パラメータ値を最初とする順序で送信される請求項5に記載のシステム。
- ネットワーク経由でアクセス可能なターゲットコンピュータのオペレーティングシステムを判別するためのシステムであって、
前記ネットワークによりサポートされているプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信される、複数のデータパケットと、
それぞれ、コンピュータ可読媒体に格納されているデータビットを含み、それぞれ、第1のオペレーティングシステムに関連付けられている、第1の複数のオペレーティングシステムの指紋と、
それぞれ、コンピュータ可読媒体に格納されているデータビットを含み、それぞれ、前記複数のデータパケットの前記送信に応答して受信されたデータの少なくとも一部の表示を含む、複数のターゲットコンピュータの指紋と、
前記第1の複数の前記オペレーティングシステムの指紋及び前記複数の前記ターゲットコンピュータの指紋を比較し、前記第1のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す結果を生成する、コンピュータにより実行可能な、指紋の比較命令とを含むシステム。 - 前記プロトコルがTCP/IPであり、
前記複数のデータバケットのそれぞれが、それぞれのパケットフィールド内で表される異なる値を持つ請求項13に記載のシステム。 - 前記パケットフィールドが、最大セグメントサイズフィールドである請求項14に記載のシステム。
- それぞれが、コンピュータ可読媒体に格納されているデータビットを含み、それぞれが、第2のオペレーティングシステムに関連付けられている、第2の複数のオペレーティングシステムの指紋であって、前記指紋の比較命令が、前記第2の複数の前記オペレーティングシステムの指紋及び前記複数の前記ターゲットコンピュータの指紋を比較し、前記第2のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す第2の結果を生成する、第2の複数のオペレーティングシステムの指紋を、さらに含む請求項13に記載のシステム。
- ネットワーク経由でアクセス可能なターゲットコンピュータのオペレーティングシステムを判別するための方法であって、
前記ネットワークによりサポートされているプロトコルに準拠する複数のデータパケットを前記ターゲットコンピュータに送信するステップと、
各々が前記複数のデータパケットの前記送信に応答して前記ネットワーク経由で受信されたデータの少なくとも一部を含む、複数のターゲットコンピュータの指紋を生成するステップと、
前記複数のターゲットコンピュータの指紋を、それぞれ第1のオペレーティングシステムに関連付けられている前記第1の一組の所定のオペレーティングシステムの指紋と比較するステップと、
前記第1のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す結果を生成するステップとを含む方法。 - 前記複数のターゲットコンピュータの指紋を、それぞれ第2のオペレーティングシステムに関連付けられている前記第2の一組の所定のオペレーティングシステムの指紋と比較するステップと、
前記第2のオペレーティングシステムが前記ターゲットコンピュータ上で実行されたか否かを示す結果を生成するステップとを、さらに含む請求項17に記載の方法。 - 前記プロトコルがTCP/IPであり、
前記複数のデータバケットのいくつかが、同じパケットフィールド内で異なる値を持つ請求項17に記載の方法。 - 前記プロトコルがTCP/IPであり、
前記複数のデータパケットのうちの2つのデータパケットのMSSオプションの値が、128で割り切れる請求項17に記載の方法。 - 前記複数のデータパケットのうちの第1のものの最大セグメントサイズオプションが0であり、
前記複数のデータパケットのうちの第2のものの最大セグメントサイズオプションが128であり、
前記複数のデータパケットのうちの第3のものの最大セグメントサイズオプションが384である請求項17に記載の方法。 - ネットワーク経由でターゲットコンピュータのオペレーティングシステムを識別するための方法であって、
前記ネットワークのプロトコルに準拠し、第1のビット範囲内に第1のビットパターンがある第1のデータパケットを、前記ネットワーク経由で前記ターゲットコンピュータに送信するステップと、
前記第1のデータパケットの前記送信に応答して前記ネットワーク経由で受信されたデータの少なくとも一部を表す第1の応答値を生成するステップと、
前記プロトコルに準拠し、第1のビット範囲内に第2のビットパターンがあり、前記第1のパターンと異なる第2のデータパケットを、前記ネットワーク経由で前記ターゲットコンピュータに送信するステップと、
前記第2のデータパケットの前記送信に応答して前記ネットワーク経由で受信されたデータの少なくとも一部を表す第2の応答値を生成するステップと、
前記プロトコルに準拠し、第1のビット範囲内に第3のビットパターンがあり、前記第1または前記第2のパターンと異なる第3のデータパケットを、前記ネットワーク経由で前記ターゲットコンピュータに送信するステップと、
前記第3のデータパケットの前記送信に応答して前記ネットワーク経由で受信されたデータの少なくとも一部を表す第3の応答値を生成するステップと、
前記第1の応答値を、第1のオペレーティングシステムに関連付けられている第1の所定の値と比較するステップと、
前記第2の応答値を、前記第1のオペレーティングシステムに関連付けられている第2の所定の値と比較するステップと、
前記第3の応答値を、前記第1のオペレーティングシステムに関連付けられている第3の所定の値と比較するステップと、
前記第1のオペレーティングシステム及び前記ターゲットコンピュータの関係を示す値を生成するステップとを含む方法。 - 前記第1の応答値を、第2のオペレーティングシステムに関連付けられている第4の所定の値と比較するステップと、
前記第2の応答値を、前記第2のオペレーティングシステムに関連付けられている第5の所定の値と比較するステップと、
前記第3の応答値を、前記第2のオペレーティングシステムに関連付けられている第6の所定の値と比較するステップとを、さらに含む請求項22に記載の方法。 - 前記第1のビットパターン内ではビットは一切セットされず、
前記第2のビットパターン内では1つのビットがセットされ、
前記第3のビットパターン内では2つのビットがセットされる請求項22に記載の方法。 - 少なくとも1つのビットがセットされている前記第2のビットパターン内のバイト数が、少なくとも1つのビットがセットされている前記第1のビットパターン内のバイト数よりも多く、
少なくとも1つのビットがセットされている前記第3のビットパターン内のバイト数が、少なくとも1つのビットがセットされている前記第2のビットパターン内のバイトの個数よりも多い請求項22に記載の方法。 - 前記第1のビットパターン内のどのバイトも、最下位ビットまたは最上位ビットがセットされず、
前記第2のビットパターン内の少なくとも1つのバイトには、最上位ビットがセットされ、
前記第3のビットパターン内の少なくとも1つのバイトには、最下位ビットがセットされている請求項22に記載の方法。 - ターゲットコンピュータがネットワークにつながっているか否かを判別するシステムであって、
コンピュータ可読媒体に格納され、それぞれが、前記ネットワークの第1のプロトコルに準拠するデータパケットを受信するためにコンピュータにより使用されるポートを表し、それぞれが、知られているネットワークサービスに関連付けられているポートを表す、第1の一組のポート識別子と、
それぞれが、前記第1の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第1のプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信される、第1の一組のデータパケットと、
前記第1の一組のデータパケットの前記送信に応答して前記ネットワーク経由で受信される第1の一組の肯定応答パケットと、
ホスト識別子のリストであって、それぞれの前記ホスト識別子が、それぞれのコンピュータに送信されたパケットに応答してデータを送信する前記ネットワークにつながっているコンピュータを表し、前記ホスト識別子が、前記第1の一組の肯定応答パケットが前記ターゲットコンピュータの応答のあることを示す場合に、ホスト識別子の前記リストに追加された前記ターゲットコンピュータを表す、ホスト識別子のリストとを含むシステム。 - コンピュータ可読媒体に格納され、それぞれが、前記ネットワークの第2のプロトコルに準拠するデータパケットを受信するためにコンピュータにより使用されるポートを表し、それぞれが、知られているネットワークサービスに関連付けられているポートを表す、第2の一組のポート識別子と、
それぞれが、前記第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第2のプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信され、少なくとも1つが、前記知られているネットワークサービスに関連付けられているデータを含む第2の一組のデータパケットと、
前記第2の一組のデータパケットの前記送信に応答して前記ネットワーク経由で受信される第2の一組の肯定応答パケットと、
前記第2の一組の肯定応答パケットが前記ターゲットコンピュータに反応があることを示す場合に、ホスト識別子の前記リストに追加された前記ターゲットコンピュータを表すホスト識別子とを、さらに含む請求項27に記載のシステム。 - 前記第1のプロトコルがTCPであり、
前記第2のプロトコルがUDPであり、
前記第2の一組の肯定応答パケットが、UDPデータ応答パケットの非ゼロの集まりである請求項28に記載のシステム。 - コンピュータ可読媒体に格納され、それぞれが、前記ネットワークの第2のプロトコルに準拠するデータパケットを受信するためにコンピュータにより使用されるポートを表し、それぞれが、知られているネットワークサービスに関連付けられているポートを表す、第2の一組のポート識別子と、
それぞれが、前記第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第2のプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信され、少なくとも1つが、前記知られているネットワークサービスに関連付けられているデータを含む第2の一組のデータパケットと、
前記第2の一組のデータパケットの前記送信に応答して前記ネットワーク経由で受信される第2の一組の肯定応答パケットと、
前記第2の一組の肯定応答パケットが前記ターゲットコンピュータの無反応を示さない場合に、ホスト識別子の第2のリストに追加される前記ターゲットコンピュータを表すホスト識別子であって、ホスト識別子の前記第2のリストのそれぞれが無反応であることが知られていないコンピュータを表す、ホスト識別子とを、さらに含む請求項27に記載のシステム。 - 前記第1のプロトコルがTCPであり、
前記第2のプロトコルがUDPであり、
前記第2の一組の肯定応答パケットが、ICMPエラーパケットの空の集まりである請求項30に記載のシステム。 - それぞれが、前記第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第2のプロトコルに準拠し、所定の最大待ち時間いっぱい、前記ターゲットコンピュータに送信される、第3の一組のデータパケットと、
前記第3の一組のデータパケットの前記送信に応答して時間内に最初に受信される第1の応答と、
前記第3の一組のデータパケットの前記送信に応答して時間内に2番目に受信される第2の応答であって、前記第1の応答の前記受信及び前記第2の応答の前記受信の間の時間が、ターゲットコンピュータの待ち時間を定める、第2の応答とを、さらに含む請求項30に記載のシステム。 - 前記第2の一組のデータパケットのそれぞれが、前記ターゲットコンピュータの待ち時間の間に前記ターゲットコンピュータに連続的に送信される請求項32に記載のシステム。
- それぞれが、前記第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第2のプロトコルに準拠し、所定の最大待ち時間いっぱい、前記ターゲットコンピュータに送信される、第3の一組のデータパケットと、
前記第3の一組のデータパケットの前記送信に応答して時間内に最初に受信される第1の応答と、
前記第3の一組のデータパケットの前記送信に応答して時間内に2番目に受信される第2の応答であって、前記第1の応答の前記受信及び前記第2の応答の前記受信の間の時間が、ターゲットコンピュータの待ち時間を定める、第2の応答とを、さらに含む請求項28に記載のシステム。 - 前記第2の一組のデータパケットのそれぞれが、前記ターゲットコンピュータの待ち時間の間に前記ターゲットコンピュータに連続的に送信される請求項34に記載のシステム。
- ネットワーク経由でターゲットコンピュータのアクセス可能性をテストするためのシステムであって、
コンピュータ可読媒体に格納され、それぞれが、UDP準拠ポートを表し、少なくとも1つが、知られているネットワークサービスに関連付けられているポートを表す、一組のポート識別子と、
それぞれが、前記一組のポート識別子の少なくとも1つにより表されるポートに関連付けられている、一組のUDP準拠データパケットであって、前記UDP準拠データパケットのそれぞれが、前記ターゲットコンピュータの待ち時間とほぼ同じ時間の間前記ターゲットコンピュータに連続的に送信され、前記UDP準拠データパケットのうちの少なくとも1つが、前記知られているネットワークサービスに関連付けられているデータを含む、一組のUDP準拠データパケットと、
前記ネットワーク経由でアクセス可能なコンピュータを表し、ゼロでない一組のUDPデータ応答パケットが前記データパケットの前記送信に応答して受信された場合に、前記ターゲットコンピュータを含む、第1のリストと、
前記ネットワーク経由でアクセス不可能であることが知られていないコンピュータを表し、ICMPエラーパケットの空集合が前記データパケットの前記送信に応答して受信された場合に、前記ターゲットコンピュータを含む、第2のリストとを含むシステム。 - ターゲットコンピュータがネットワーク経由でアクセス可能かどうかを判別する方法であって、
TCPポートを識別するステップと、
前記ターゲットコンピュータの前記TCPポートに、それぞれがTCPに準拠している第1のデータパケットを送信するステップと、
前記第1のデータパケットの前記送信に応答して第1の肯定応答パケットを受信するステップと、
前記第1の肯定応答パケットがゼロでない場合に、アクセス可能なコンピュータを表すリストに前記ターゲットコンピュータの表示を追加するステップとを含む方法。 - ネットワークサービスに関連付けられているUDPポートを識別するステップと、
第2のデータパケットを前記ターゲットコンピュータの前記UDPポートに送信し、前記第2のデータパケットの少なくとも1つが、前記ターゲットコンピュータの待ち時間の間中、前記ターゲットコンピュータに連続して送信されるステップと、
前記第2のデータパケットの前記送信に応答して第2の肯定応答パケットを受信するステップと、
前記第2の肯定応答パケットがゼロでないUDPデータ応答パケットである場合に、アクセス可能なコンピュータを表すリストに前記ターゲットコンピュータの表示を追加するステップとを、さらに含む請求項37に記載の方法。 - 前記ターゲットコンピュータにパケットが送信されたことに応答して受信される応答から応答までの時間を測定することにより、前記ターゲットコンピュータの前記待ち時間を決定するステップを含む請求項38に記載の方法。
- 前記ネットワーク経由でアクセス可能でないと知られていないコンピュータを表すリストに前記ターゲットコンピュータの表示を追加するステップであって、前記追加が、前記第2の肯定応答パケットがICMPエラーパケットの空集合を含む場合に、実行されるステップを、さらに含む請求項38に記載の方法。
- ネットワーク経由でターゲットコンピュータの脆弱性を評価するための方法であって、
一組のICMPパケット、一組のTCPパケット、および一組のUDPパケットをネットワーク上のコンピュータ群に送信することにより、ネットワーク上の応答する一組のコンピュータを発見するステップと、
TCPパケットを前記一組の応答するコンピュータのそれぞれの第1のポートに送信し、UDPパケットを前記一組の応答するコンピュータのそれぞれの第2のポートに送信することにより、前記一組の応答するコンピュータのそれぞれでサービスを検出するステップであって、前記第1および第2のポートが一般に、ネットワーク越しにデータパケットを受信するためにコンピュータにより使用され、前記TCPパケットが、前記第1のポートのうちの1つを使用することが知られている少なくとも1つのコンピュータベースのサービスに関連付けられているデータを含み、前記UDPパケットが、前記第2のポートのうちの1つを使用することが知られている少なくとも1つのコンピュータベースのサービスに関連付けられているデータを含む、ステップと、
前記TCPパケットおよび前記UDPパケットの前記送信に応答して受信される応答を使用して、応答するポートのリストを生成するステップとを含む方法。 - 所定の値と、前記一組の応答するコンピュータのそれぞれへの複数のTCP準拠パケットの送信に応答して前記一組の応答するコンピュータのそれぞれから受信された応答の一部とを比較することにより、前記一組の応答するコンピュータのそれぞれにより使用されるオペレーティングシステムを判別するステップを、さらに含む請求項41に記載の方法。
- 自動化脆弱性スクリプトを応答ポートの前記リストで表されるそれぞれの応答ポートに適用することにより、前記ネットワーク上の脆弱性の存在を確認し、前記自動化脆弱性スクリプトのそれぞれにより、特定の応答ポートおよび特定のオペレーティングシステムを含むコンピュータ構成に関連付けられていることが知られている脆弱性をテストするステップを、さらに含む請求項42に記載の方法。
- 前記ネットワークのセキュリティの客観的な印を計算するステップであって、前記計算が、確認された脆弱性の加重総和に基づく、ステップを、さらに含む請求項43に記載の方法。
- 前記ネットワークのトポロジを判別するステップであって、前記トポロジ判別が、さまざまな有効期間(TTL)設定を持つ一組のICMPパケットを送信し、さまざまなTTL設定を持つ一組のTCPパケットを送信することにより実行されるステップを、さらに含む請求項44に記載の方法。
- 前記ネットワークのグラフィック表示を出力するステップであって、前記表示が、前記ネットワークのトポロジマップ、加重された確認済み脆弱性の色分けされた表示、ならびに、前記グラフィック表示及び確認された脆弱性の情報記述子と、前記ネットワーク上のコンピュータとの関連付けを含む、ステップを、さらに含む請求項45に記載の方法。
- ネットワークのグラフィック表示を作成する方法であって、
ネットワーク上のノードのIPアドレスを取得するステップと、
前記ノード間のノード距離および接続関係を取得するステップと、
いくつかのノードをルータとして識別するステップと、
他のノードを前記ルータの1つに接続されている葉ノードとして識別するステップと、
ルータノードのグラフィック表示を生成するステップと、
ルータ毎に、前記それぞれのルータの前記グラフィック表示との空間関係を持つ直接接続されている葉ノードのグラフィック表示を示すことにより、前記直接接続されている葉ノードのグラフィック表示を生成するステップと、
介在するルータを持たないルータ間のリンクを示すステップとを含む方法。 - ルータ毎に、前記それぞれのルータのIPアドレスと、前記直接接続されている葉ノードのそれぞれのIPアドレスとを比較して、直接接続されている葉ノードおよび前記それぞれのルータが、同じノードの2つのネットワーク接続を表すインスタンスを解決するステップを、さらに含む請求項47に記載の方法。
- ネットワークのトポロジ表示を作成する方法であって、
前記ネットワーク上の応答コンピュータを識別するステップと、
それぞれの応答コンピュータに、増大する有効期間(TTL)値を持つパケットのシーケンスを送信することにより、複数のIPアドレスのシーケンスを取得するステップであって、それぞれのIPアドレスのシーケンスが発信元コンピュータと前記応答コンピュータのうちの1つとの間の前記ネットワーク内のノードを表し、各シーケンス内の隣接するIPアドレスが接続されているノードを表し、前記ノードのそれぞれがコンピュータまたはルータを含む、ステップと、
ノード構造のリストを生成するステップであって、前記ノード構造のそれぞれが、ノードを表すデータ及びそれが直接接続する他のノードを示すデータを含み、前記リストが、前記複数のシーケンス内のすべてのIPアドレスを表す、ステップと、
それぞれのIPアドレスに関して距離カウントを判別するステップであって、前記距離カウントが、前記IPアドレスを持つノード及び発信元ノードの間のノード数を表す、ステップと、
ルータを備えるノードを表す、それぞれのノード構造に対するルータ構造を作成するステップと、
前期ルータ構造のそれぞれに、前記それぞれのルータ構造により表されている前記ルータを除いて、他のどのノードにも接続していない、それぞれの接続ノードを表す接続データを関連付けるステップと、
前記それぞれのルータ構造の前記接続データにより表される接続ノードに対応する、1つまたは複数のグラフィック形状に空間的に関係するグラフィック形状を、ルータ構造毎に視覚的に示すステップと、
前記それぞれのルータ構造および異なるルータ構造により表されるルータの前記IPアドレスに関連付けられた距離カウントが直接的接続を示している場合に、前記それぞれのルータ構造に関連付けられたグラフィック形状及び前記異なるルータ構造に関連付けられた他のグラフィック形状の間の接続を、ルータ構造毎に視覚的に示すステップとを含む方法。 - ルータ構造により表されるルータおよび接続データで表される接続ノードが、1つのノードの2つのネットワーク接続を含むか否かをテストするステップを、さらに含む請求項49に記載の方法。
- ルータを表す前記グラフィック形状が球形であり、
前記空間的に関係付けられたグラフィック形状のそれぞれが、前記ルータを表す前記球形の周囲を軌道を描いて回る球形である請求項49に記載の方法。 - 客観的脆弱性スコアを計算する方法であって、
ネットワークの知られている脆弱性を識別するステップと、
搾取容易性または許可されたアクセスのレベルのいずれかに基づいて、前記知られている脆弱性に加重するステップと、
ネットワークの知られている加重脆弱性の組み合わせを数値的に表す脆弱性値を決定するステップとを含む方法。 - ネットワークの客観的セキュリティスコアを計算する方法であって、
ネットワークの知られている脆弱性の組み合わせを数値的に表す脆弱性値を決定するステップと、
前記ネットワーク上のコンピュータのアクセス可能なポートの組み合わせを数値的に表す暴露値を決定するステップと、
前記脆弱性値及び前記暴露値を組み合わせることによりスコアを導くステップとを含む方法。 - 知られている脆弱性の前記組み合わせが、特定の脆弱性の加重数値表示の総和であり、
前記加重が、搾取容易性ランキングおよびそれぞれの脆弱性のアクセス付与ランキングに基づく請求項53に記載の方法。 - 自動化ネットワーク脆弱性攻撃を実施する方法であって、
ネットワーク上のそれぞれの応答コンピュータについて一組の脆弱性攻撃を選択するステップであって、それぞれの応答コンピュータについて選択されたそれぞれの脆弱性攻撃が、アクセス可能であることが知られている前記それぞれのコンピュータのポートに関連付けられ、さらに前記それぞれのコンピュータにより使用されるオペレーティングシステムに関連付けられている脆弱性を暴露するように設計されている、ステップと、
それぞれが一意的な識別子によりデータベースで表示されるように前記一組の脆弱性攻撃を符号化するステップと、
自動化スクリプト言語の命令を使用して前記一組の脆弱性攻撃のそれぞれを表すステップと、
コンピュータで前記命令を処理することにより前記脆弱性攻撃を実行するステップとを含む方法。 - 前記ネットワークのセキュリティを表す客観的スコア、並びに
前記ネットワーク経由でアクセス可能なコンピュータのグラフィック表示および前記複数のコンピュータのうち少なくとも一部のコンピュータの前記脆弱性の色分けしたグラフィック表示を含む、ネットワークトポロジのグラフィック表示を含む第1のレポートレベルと、
前記コンピュータおよびその関連付けられた脆弱性を記述するテキスト形式のリスト、並びに
前記コンピュータのアクセス可能なポートおよびサービスを記述する暴露レポートを含む第2のレポートレベルとを含む階層型ネットワーク脆弱性レポート。 - 変数がすべてスタック変数であり、構文解析ツリーが読み取り専用データ構造として処理されるスレッドセーフ実行アーキテクチャで実行される実行可能スクリプトを作成するために使用される一組のプログラミング言語ステートメントと、
式の中で整数データ型と交換可能な、スクリプトで実現される脆弱性評価オペレーションをサポートするように構成されている一組の定数値をそれぞれが持つ、一組の特別スカラーデータ型と、
前記ネイティブオブジェクトを実行可能スクリプトから利用できるようにするためにスクリプトスコープを所有するメタスコープ内で宣言された一組のネイティブオブジェクトであって、前記ネイティブオブジェクトがネットワーク通信を円滑に行えるようにし、一意的なポートのリストを構築し、スクリプト実行権を特定のホストに送る呼び出し可能メンバ関数を備え、スクリプト用のIPアドレスを供給する、一組のネイティブオブジェクトと、
他のスクリプトがその情報にアクセスして他のマシンを損なうおそれのあるグローバルデータ領域に自分自身をコピーする動作をし、異なるスクリプトにより発見された脆弱性データを1つのスクリプトで使用しやすくする、脆弱性オブジェクトとを含む脆弱性評価言語。 - ターゲットコンピュータ上で知られている脆弱性を自動的に適用する方法であって、
データオブジェクトを含む、知られている脆弱性のデータベースを供給するステップと、
前記データオブジェクトに関連付けられている、実行可能スクリプトを供給するステップと、
前記ターゲットコンピュータのポートで前記知られている脆弱性を実行する、前記実行可能スクリプトを前記ターゲットコンピュータに適用するステップと、
前記実行可能スクリプトの成功、失敗、または他の結果のうちの少なくとも1つを表す値を返すステップとを含む方法。 - 知られている脆弱性をネットワークのターゲットコンピュータに自動的に適用する方法であって、
知られている脆弱性のデータベースを供給するステップと、
知られている脆弱性を指定ターゲットコンピュータに適用するために、それぞれが実行可能な一組の実行可能スクリプトを供給するステップと、
第1の実行可能スクリプトを実行して指定ターゲットコンピュータに脆弱性を適用するステップと、
前記第1の実行可能スクリプトのそれぞれの成功、失敗、または他の結果を表す戻り値を監視するステップと、
前記戻り値を使用して、前記ネットワークのセキュリティレベルを表すレポートを生成するステップとを含む方法。 - 実行時間間隔を識別するステップであって、前記第1の実行可能スクリプトの実行が、前記時間間隔のそれぞれの始まりに開始し、前記時間間隔のそれぞれの終わりに一時停止し、これを前記第1の実行可能スクリプトすべてが実行し終えるまで続けるステップを、さらに含む請求項59に記載の方法。
- 前記第1の実行可能スクリプトの実行が完了したときに、前記第1の実行可能スクリプトの前記実行を自動的に繰り返すステップを、さらに含む請求項60に記載の方法。
- 前記第1の実行可能スクリプトの実行が完了する毎にレポートを生成するステップと、
複数の前記レポートを比較することにより、前記ネットワークのセキュリティトレンドを計算するステップとを、さらに含む請求項61に記載の方法。 - 前記第1の実行可能スクリプトの前記実行時に、第2の実行可能スクリプトを実行して、コンピュータの第2のネットワークに脆弱性を適用するステップを、さらに含む請求項59に記載の方法。
- 前記第2のネットワークが前記ネットワークのサブセットである請求項63に記載の方法。
- 前記第1の実行可能スクリプトが、前記ターゲットコンピュータのすべての第2のポートに脆弱性を適用する前に、前記ターゲットコンピュータのすべての第1のポートに脆弱性を適用するように構成されている請求項59に記載の方法。
- それぞれが、前記実行可能スクリプトの1つによってパケットの非同期送信を可能とする、複数のパケットスロットを割り当てるステップを、さらに含む請求項57に記載の方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2002/001093 WO2003060717A1 (en) | 2002-01-15 | 2002-01-15 | System and method for network vulnerability detection and reporting |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005515541A true JP2005515541A (ja) | 2005-05-26 |
Family
ID=21743216
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003560745A Pending JP2005515541A (ja) | 2002-01-15 | 2002-01-15 | ネットワーク脆弱性の検出および報告のためのシステムならびに方法 |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP1466248A1 (ja) |
JP (1) | JP2005515541A (ja) |
CN (1) | CN1623140A (ja) |
AU (1) | AU2002245262B2 (ja) |
CA (1) | CA2473444C (ja) |
WO (1) | WO2003060717A1 (ja) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011003197A (ja) * | 2009-06-22 | 2011-01-06 | Yokogawa Electric Corp | プラントにおけるセキュリティ脅威レポートを作成する方法及びシステム |
JP2011155706A (ja) * | 2011-05-16 | 2011-08-11 | Fujitsu Ltd | オペレーティングシステムの判定が可能な装置及び方法 |
US8484729B2 (en) | 2007-09-20 | 2013-07-09 | Nec Corporation | Security operation management system, security operation management method, and security operation management program |
KR101497292B1 (ko) | 2012-02-09 | 2015-02-27 | 해리스 코포레이션 | 가변적인 식별 파라미터를 갖는 동적 컴퓨터 네트워크 |
JP2016177371A (ja) * | 2015-03-18 | 2016-10-06 | 株式会社富士通エフサス | 監視装置、監視プログラムおよび監視方法 |
JP2017527044A (ja) * | 2014-09-10 | 2017-09-14 | ハネウェル・インターナショナル・インコーポレーテッド | 制御システムにおけるサイバーセキュリティリスクの動的定量化 |
US10148518B2 (en) | 2015-03-09 | 2018-12-04 | Fujitsu Limited | Method and apparatus for managing computer system |
JP2020201533A (ja) * | 2019-06-05 | 2020-12-17 | 富士通株式会社 | 不正中継監査プログラム、不正中継監査方法および不正中継監査システム |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7664845B2 (en) | 2002-01-15 | 2010-02-16 | Mcafee, Inc. | System and method for network vulnerability detection and reporting |
US7243148B2 (en) | 2002-01-15 | 2007-07-10 | Mcafee, Inc. | System and method for network vulnerability detection and reporting |
US8091117B2 (en) | 2003-02-14 | 2012-01-03 | Preventsys, Inc. | System and method for interfacing with heterogeneous network data gathering tools |
US8984644B2 (en) | 2003-07-01 | 2015-03-17 | Securityprofiling, Llc | Anti-vulnerability system, method, and computer program product |
US20070113272A2 (en) | 2003-07-01 | 2007-05-17 | Securityprofiling, Inc. | Real-time vulnerability monitoring |
US9100431B2 (en) | 2003-07-01 | 2015-08-04 | Securityprofiling, Llc | Computer program product and apparatus for multi-path remediation |
CN1886935B (zh) * | 2003-11-28 | 2014-05-14 | 迈克菲爱尔兰控股有限公司 | 用于收集有关通信网络的信息和用于收集有关在通信网络节点上运行的操作系统的信息的方法和系统 |
WO2006026262A2 (en) * | 2004-08-28 | 2006-03-09 | Streamaware, Llc | Link analysis method and system |
US7793338B1 (en) | 2004-10-21 | 2010-09-07 | Mcafee, Inc. | System and method of network endpoint security |
CN100429890C (zh) * | 2005-09-05 | 2008-10-29 | 北京启明星辰信息技术有限公司 | 网络安全事件的可视化定位方法及系统 |
US7748042B2 (en) * | 2006-09-14 | 2010-06-29 | Genpact Limited | Security vulnerability determination in a computer system |
GB2443459A (en) * | 2006-10-31 | 2008-05-07 | Hewlett Packard Development Co | Data packet incuding computing platform indication |
CN101447991B (zh) * | 2008-11-19 | 2012-10-24 | 中国人民解放军信息安全测评认证中心 | 用于测试入侵检测系统的测试装置及测试方法 |
CN101447898B (zh) * | 2008-11-19 | 2012-12-05 | 中国人民解放军信息安全测评认证中心 | 一种用于网络安全产品的测试系统及测试方法 |
RU2657170C2 (ru) * | 2010-07-01 | 2018-06-08 | Онапсис, Инк. | Автоматизированная оценка безопасности критически важных для бизнеса компьютерных систем и ресурсов |
CN102104605B (zh) * | 2011-02-28 | 2013-06-26 | 中国人民解放军国防科学技术大学 | 一种面向大规模网络脆弱性关联分析的梯度化并行方法 |
CN104426850A (zh) * | 2013-08-23 | 2015-03-18 | 南京理工大学常熟研究院有限公司 | 基于插件的漏洞检测方法 |
US9349246B1 (en) * | 2014-09-15 | 2016-05-24 | Skillz Inc. | Integrations portal for a peer-to-peer game platform |
CN104852921A (zh) * | 2015-05-25 | 2015-08-19 | 烽火通信科技股份有限公司 | 网络设备防开放端口攻击测试系统及方法 |
WO2018031951A1 (en) * | 2016-08-11 | 2018-02-15 | Hopzero, Inc. | Method and system for limiting the range of data transmissions |
CA3093021A1 (en) | 2018-03-05 | 2019-09-12 | EzoTech Inc. | Automated security testing system and method |
US11108805B2 (en) * | 2018-06-27 | 2021-08-31 | Amazon Technologies, Inc. | Automated packetless network reachability analysis |
CN110377518B (zh) * | 2019-07-17 | 2023-07-25 | 招商银行股份有限公司 | 全流程扫描方法、装置、设备及可读存储介质 |
US11716343B2 (en) | 2020-08-11 | 2023-08-01 | Cisco Technology, Inc. | Secure neighborhoods assessment in enterprise networks |
CN112364355B (zh) * | 2020-11-12 | 2024-03-29 | 中国石油天然气集团有限公司 | 主动发现分布式自建系统与扫描安全漏洞的方法 |
US11848956B2 (en) | 2021-04-26 | 2023-12-19 | Orca Security LTD. | Systems and methods for disparate risk information aggregation |
CN113595823B (zh) * | 2021-07-26 | 2024-02-13 | 哈尔滨工业大学(威海) | 基于解析行为的开放域名解析器节能程度评估的方法 |
CN116520882B (zh) * | 2023-04-28 | 2024-02-06 | 北京交通大学 | 一种面向无人机系统的配置缺陷分析方法和系统 |
CN116866055B (zh) * | 2023-07-26 | 2024-02-27 | 中科驭数(北京)科技有限公司 | 数据泛洪攻击的防御方法、装置、设备及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09214493A (ja) * | 1996-02-08 | 1997-08-15 | Hitachi Ltd | ネットワークシステム |
US5892903A (en) * | 1996-09-12 | 1999-04-06 | Internet Security Systems, Inc. | Method and apparatus for detecting and identifying security vulnerabilities in an open network computer communication system |
US6298445B1 (en) * | 1998-04-30 | 2001-10-02 | Netect, Ltd. | Computer security |
US6282546B1 (en) * | 1998-06-30 | 2001-08-28 | Cisco Technology, Inc. | System and method for real-time insertion of data into a multi-dimensional database for network intrusion detection and vulnerability assessment |
-
2002
- 2002-01-15 AU AU2002245262A patent/AU2002245262B2/en not_active Expired
- 2002-01-15 JP JP2003560745A patent/JP2005515541A/ja active Pending
- 2002-01-15 CA CA002473444A patent/CA2473444C/en not_active Expired - Lifetime
- 2002-01-15 CN CNA028285425A patent/CN1623140A/zh active Pending
- 2002-01-15 EP EP02713410A patent/EP1466248A1/en not_active Withdrawn
- 2002-01-15 WO PCT/US2002/001093 patent/WO2003060717A1/en active IP Right Grant
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8484729B2 (en) | 2007-09-20 | 2013-07-09 | Nec Corporation | Security operation management system, security operation management method, and security operation management program |
JP2011003197A (ja) * | 2009-06-22 | 2011-01-06 | Yokogawa Electric Corp | プラントにおけるセキュリティ脅威レポートを作成する方法及びシステム |
JP2011155706A (ja) * | 2011-05-16 | 2011-08-11 | Fujitsu Ltd | オペレーティングシステムの判定が可能な装置及び方法 |
KR101497292B1 (ko) | 2012-02-09 | 2015-02-27 | 해리스 코포레이션 | 가변적인 식별 파라미터를 갖는 동적 컴퓨터 네트워크 |
JP2017527044A (ja) * | 2014-09-10 | 2017-09-14 | ハネウェル・インターナショナル・インコーポレーテッド | 制御システムにおけるサイバーセキュリティリスクの動的定量化 |
US10148518B2 (en) | 2015-03-09 | 2018-12-04 | Fujitsu Limited | Method and apparatus for managing computer system |
JP2016177371A (ja) * | 2015-03-18 | 2016-10-06 | 株式会社富士通エフサス | 監視装置、監視プログラムおよび監視方法 |
JP2020201533A (ja) * | 2019-06-05 | 2020-12-17 | 富士通株式会社 | 不正中継監査プログラム、不正中継監査方法および不正中継監査システム |
Also Published As
Publication number | Publication date |
---|---|
AU2002245262B2 (en) | 2007-03-15 |
AU2002245262A1 (en) | 2003-07-30 |
CA2473444C (en) | 2009-09-08 |
EP1466248A1 (en) | 2004-10-13 |
CA2473444A1 (en) | 2003-07-24 |
CN1623140A (zh) | 2005-06-01 |
WO2003060717A1 (en) | 2003-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005515541A (ja) | ネットワーク脆弱性の検出および報告のためのシステムならびに方法 | |
US7152105B2 (en) | System and method for network vulnerability detection and reporting | |
US7543056B2 (en) | System and method for network vulnerability detection and reporting | |
US7257630B2 (en) | System and method for network vulnerability detection and reporting | |
US7664845B2 (en) | System and method for network vulnerability detection and reporting | |
US7673043B2 (en) | System and method for network vulnerability detection and reporting | |
US6957348B1 (en) | Interoperability of vulnerability and intrusion detection systems | |
US8239951B2 (en) | System, method and computer readable medium for evaluating a security characteristic | |
Leita et al. | Automatic handling of protocol dependencies and reaction to 0-day attacks with ScriptGen based honeypots | |
US20090083854A1 (en) | Syntax-Based Security Analysis Using Dynamically Generated Test Cases | |
JPH11316677A (ja) | コンピュ―タネットワ―クの保安方法 | |
Dayıoglu et al. | Use of passive network mapping to enhance signature quality of misuse network intrusion detection systems | |
Dhanjani et al. | Network Security Tools: Writing, Hacking, and Modifying Security Tools | |
Moon | Practical Black-Box Analysis for Network Functions and Services | |
Salloum | Augmenting NFS and TFTP protocols to an Intrusion Detection System | |
Kipp | Using Snort as an IDS and Network Monitor in Linux | |
Aarseth | Identifying vulnerable services using non-intrusive techniques | |
Haukeli | False positive reduction through IDS network awareness | |
Gökçay | Identifying web application vulnerability scanning tools using IP flow information |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080109 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080409 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080416 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080609 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080723 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081120 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20081126 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20081219 |