JP2005515541A - ネットワーク脆弱性の検出および報告のためのシステムならびに方法 - Google Patents

ネットワーク脆弱性の検出および報告のためのシステムならびに方法 Download PDF

Info

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
Application number
JP2003560745A
Other languages
English (en)
Inventor
スチュアート シー. マクルーア
ジョージ カーツ
ロビン カイル
マーシャル エイ. べドエ
マイカル ジェイ. モートン
クリストファー エム. プロサイス
デヴィッド エム. コール
クリストファー アバッド
Original Assignee
ファウンドストーン インコーポレイテッド
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ファウンドストーン インコーポレイテッド filed Critical ファウンドストーン インコーポレイテッド
Publication of JP2005515541A publication Critical patent/JP2005515541A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1433Vulnerability analysis
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/50Testing arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies

Abstract

オペレーティングシステムの識別、ターゲットネットワークトポロジおよびターゲットコンピュータの識別、開いているターゲットポートの識別、ターゲットポート上の脆弱性の評価(364)、ターゲットコンピュータ(344)から取得された情報に基づく脆弱性のアクティブな評価、ネットワークセキュリティおよび脆弱性の定量的評価、ならびにテストレポート内のターゲットネットワーク、ターゲットコンピュータ、および脆弱性の階層的グラフィック表示を含む、ターゲットネットワーク(310)への侵入の脆弱性に関する包括的で高度に自動化されたテスト機能を提供するシステムと方法である。このシステムおよび方法では、目障りになるのを最小限に抑えた手法を使用して、テスト中またはテスト後のターゲットネットワークへの干渉またはダメージを回避する。

Description

本発明は、ネットワークシステムのセキュリティに関し、より詳細には、ネットワーク脆弱性の自動検出、監視、および報告のためのシステムおよび方法に関する。
ネットワークの信頼性およびセキュリティは、コンピュータネットワークがエンティティ内およびエンティティ間の通信ならびにトランザクションにおける重要要素である世界では必須である。ネットワーク管理者、政府、セキュリティティコンサルタント、およびハッカーは、例えば、ネットワーク上のコンピュータに許可なくリモートからアクセスし、制御できるかどうかなど、ターゲットネットワークの脆弱性をテストするため、さまざまなツールを使用している。ターゲットネットワークは、このような集中的なテストを通じて、共通の脆弱性および秘密の攻撃に対して「強固」にすることができる。しかし、既存のテストシステムは、矛盾のある結果を出力し、未実証の、またはターゲットネットワークを損なう手法を使用し、絶えず変化しているネットワーク環境に反応すること、または新しい脆弱性を検出することができず、理解するのが困難なテキストベースのレポートで結果を報告する。
現在、侵入の可能性に関してネットワーク経路を調べるための周知のネットワークセキュリティツールが存在している。テストポイントから、tracerouteおよびpingなどの単純なコマンドを使用して、ネットワークトポロジを手動でマッピングすれば、コンピュータがネットワーク上で「目覚めている」状態にある、「存続している」ネットワークアドレスをおおよそ突きとめる(すなわち、どのコンピュータが稼働し、ネットワークパケットに応答しているかを判定する)ことができる。ポートスキャナなどのツールを使用して、ターゲットネットワーク上の個々のターゲットコンピュータをテストし、どのようなネットワークポートが開いているかを判別することができる。開いているポートが見つかった場合、これらのポートは、侵入を許すアクセス口となる可能性があり、悪意あるハッカーによって利用されることがあり得る脆弱性を呈するおそれがある。
さまざまなネットワークツールを組み合わせたいくつかのパッケージソフトは、ターゲットネットワーク上のターゲットコンピュータをテストする準自動化プロセスに追随しようとする。これらのパッケージソフトは、上述のツールを変形したものであり、このテストの結果に基づく長い形態のテキストを出力する。これらのセキュリティテストの出力は、きわめて専門技術的であり、結果を解釈し、結果に基づいてアドバイスを与えるためにはネットワーク通信に関する膨大な知識を必要とする。そのため、これらの部分自動化パッケージソフトは、ネットワークを「強固にする」ことを求めるエンティティに対し包括的なセキュリティ対策を提供していない。
さらに、実際に、ターゲットネットワークにかなりのダメージを与える危険を冒すセキュリティパッケージソフトもある。例えば、異常な形式のネットワークパケットを使用してターゲットコンピュータをテストすることによりターゲットからの膨大な情報およびターゲットのセキュリティに関するフィードバックが得られるが、そのような異常な形式のパケットは、予測できない形でターゲットコンピュータを不安定にする。これにより、ときどき、ターゲットコンピュータへの情報が短期間、喪失するか、またはさらに重大な場合には、ターゲットコンピュータのオペレーティングシステム、もしくはハードウェアが完全にクラッシュすることがある。
他の場合には、既存のパッケージソフトで使用しているテスト方法は信頼性が高くない。例えば、ターゲットコンピュータ上で採用されているネットワークポートスキャン方法が、長時間にわたって80%の精度であれば、単一のコンピュータ上の216個のすべてのポートの完全なテストを実行すると、約13,000個のポートが動作中の潜在的に脆弱なサービスとして誤って識別される可能性がある。ターゲットネットワーク全体にわたって、このような「偽陽性」は、ターゲットネットワークの本当のセキュリティレベルを判別することを事実上不可能にする。
既存のテスト方法は、ターゲットネットワークまたはターゲットコンピュータのセキュリティと他のシステムとを客観的に比較する標準的な定量的方法を欠いている。通常、ターゲットネットワークまたはターゲットコンピュータのランク付けは、「高リスク」、「中リスク」、または「低リスク」しかない。しかし、このような3層システムだけでは、経時的なネットワークの変化に関する実質的なフィードバックまたは比較情報、結果的に生じるリスクレベルを判別する際の異なる脆弱性の相対的重み、または、そうでない場合には異種のネットワーク環境の間でのネットワークセキュリティの客観的評価がほとんど得られない。
本発明は、包括的なネットワーク脆弱性テストおよび報告方法、ならびにシステムを通じて上記の問題点およびさらに多くの問題点を解決する。特に、テストシステムの機能は、(1)ターゲットコンピュータのオペレーティングシステムの非破壊識別、(2)アクティブ状態のネットワークアドレスおよびそれらのアドレスでアクティブなポートを判別するための多層ポートスキャニング方法、(3)ターゲットネットワークに関する収集された情報と知られている脆弱性のデータベースとの比較、(4)識別されたターゲットコンピュータの識別されたポート上のいくつかの脆弱な点に関する脆弱性評価、(5)すでに発見されているターゲットコンピュータから発見されたデータを再利用する脆弱性のアクティブな評価、(6)ターゲットネットワークのセキュリティを客観的に比較してランク付けするための定量的スコアの適用、および(7)収集された情報の詳細な結果をターゲットネットワーク、ターゲットコンピュータ、ならびにそこに見つかった脆弱性の階層的、動的、およびグラフィック表示に集約する作業の選択された組み合わせを含む。本明細書では、他の機能も予見され、開示されている。
好ましい実施形態では、テストシステムは、企業イントラネットまたはインターネットなどの現代の多層パケットネットワーク上で稼働する。ネットワークは、通常、1台または複数のコンピュータを含み、コンピュータには、オペレーティングシステムが稼働しているデスクトップステーション、ルータ、サーバ、および/またはTCP/IP(伝送制御プロトコル/インターネットプロトコル)、UDP(ユーザデータグラムプロトコル)などの標準インターネットプロトコルを通じてパケットを送受信できる他のネットワーク接続デバイスが含まれる。このシステムおよび方法は、ターゲットネットワークの外部にある監視コンピュータからリモート実行することができ、またはターゲットネットワークに含まれる監視コンピュータにより実行することができる。ターゲットネットワーク自体は、通常、特定の事前に指定されたサブネットワークアドレス、IPアドレスまたはサブアドレスの範囲、物理的ネットワーク境界、コンピュータ名または一意の識別子、所定のネットワークプロトコルを介した存在の指示または接続などにより束縛されている、相互接続されたコンピュータ群として定義される。ターゲットコンピュータは、ターゲットネットワーク内に見つかったコンピュータの全部または一部を含む。例えば、WAN(ワイドエリアネットワーク)との単純な接続を行うターゲットコンピュータを、単一ピアターゲットネットワークとしてリモートでテストすることができる。より複雑な例では、分散ネットワークプロバイダは、世界中に複数のサブネットワークを地理的に分散させるが、数千台のターゲットコンピュータを備えるWANターゲットネットワークなど、内部プロトコルを介して相互接続される。
ターゲットネットワークは、通常、1つまたは複数のIPベースのネットワークプロトコルで稼働する。通常、プロトコルはTCP/IPおよびUDPである。同様に、テストシステムは、通常、ターゲットネットワークの物理レイヤ構造およびトポロジには関係していない。パケットをブロックしたり、経路変更したり、または変更するファイヤウォールまたはルータなどの構成要素のみ、テストシステムに影響を及ぼす。しかし、テストシステムでは、これらの構成要素に適合しようと試み、一般に、物理的実装にかかわりなく正確な結果を与える。
TCP/IPは、ローカルエリアネットワーク、ワイドエリアネットワーク、およびインターネットなどの世界的規模の通信ネットワーク上でパケットベースのネットワーク通信に使用される基本プロトコルである。TCP/IP SYN(同期)パケットの構成例を表1に示す。
表1:代表的なTCP SYNパケット

Figure 2005515541
コンピュータは、通常、1つまたは複数のオペレーティングシステムで稼働する。通常、これらのオペレーティングシステムには、Microsoft Windows(登録商標)ファミリのオペレーティングシステムなどのMicrosoft(登録商標)が提供するオペレーティングシステム、Apple(登録商標)のMacOS(登録商標)、Linux(登録商標)、NetBSD、FreeBSD、Solaris(登録商標)などのさまざまなUNIXタイプのオペレーティングシステムがある。さらに、ターゲットネットワーク上のデバイスとしては、ルータのオペレーティングシステム、移動体通信デバイスのオペレーティングシステム、パームトップまたはハンドヘルドのオペレーティングシステム、アプライアンスのオペレーティングシステム、セットトップボックスのオペレーティングシステム、ゲーム機のオペレーティングシステム、デジタル権利管理システム、サーベイランスシステム、スマートカードトランザクションシステム、輸送管理システムなどがあり、一意的なまたは一時的なネットワークアドレスを割り当て、ターゲットネットワークからトラフィックを送信および/または受信することができる。
ターゲットコンピュータは、一実施形態では、一意的なまたは一時的に一意的なIP(インターネットプロトコル)アドレスにより、通常は、A.B.C.Dの形式で識別され、A、B、C、およびDはそれぞれ、クラスA、クラスB、クラスC、およびクラスDのサブネットワークを表し、それぞれ0から255の値を持つ。通常、ターゲットネットワークは、ターゲットネットワークにより制御されるIPアドレスの1つまたは複数の範囲により定義されるが、地形的にターゲットネットワークに接続される、しかし所定のIPの範囲または複数の範囲の一部ではない、追加ターゲットコンピュータまたはターゲットサブネットワークを含むことができる。
UDP(ユーザデータグラムプロトコル)は、上記のIP(インターネットプロトコル)を実行する代替え「コネクションレス」通信プロトコルである。UDPは、TCPなどの接続ベースのプロトコルの誤り訂正および肯定応答機能を欠いている。ICMP(インターネット制御メッセージプロトコル)は、IPネットワーク上のホスト間の制御通信を実行できる(通常、ICMP PING要求を通じて)IPのもう1つの拡張機能である。
本発明の他の態様は、ターゲットコンピュータのターゲットオペレーティングシステムの非破壊および比較的非侵入の識別を含む。
本発明の他の態様は、ターゲットネットワーク上の複数のターゲットコンピュータの並行テストを含む。
本発明の他の態様は、ターゲットネットワーク上の特定のターゲットコンピュータが活動状態であるかどうかを判別するための改善されたテスト方法を含む。
本発明の他の態様は、一組の一般に使用されるポートがターゲットコンピュータ上で開いているかどうかを判別するための改善された方法を含む。
本発明の他の態様は、一組の一般に使用されるUDPポートがターゲットコンピュータ上で開いているか閉じられているかを信頼できる形で判別するための改善された方法を含む。
本発明の他の態様は、ターゲットコンピュータ上で開いていることがわかったポートを一組の知られている脆弱性に関連付ける方法を含む。
本発明の他の態様は、複数のポートおよび複数のターゲットコンピュータの同時並行テストを含む。
本発明の他の態様は、ターゲットコンピュータでの知られているいくつかの脆弱性のアクティブな評価を含む。
本発明のさらに他の態様は、客観的定量的スコアをターゲットネットワーク上に見つかった脆弱性に適用することを含む。
本発明のさらに他の態様は、概要および詳細ドキュメントの両方を含む階層レポートの中でネットワークトポロジ、ネットワークコンピュータ、およびネットワーク脆弱性を表す動的でグラフィカルなレポートの編集を含む。
一実施形態では、本発明は、ネットワークに接続され動作可能なターゲットコンピュータのオペレーティングシステムを判別するためのシステムである。システムは、(1)ネットワークによりサポートされているプロトコルに準拠し、ネットワーク経由でターゲットコンピュータに送信される、第1および第2のデータパケット、(2)コンピュータ可読媒体に格納されているデータビットを含み、第1のオペレーティングシステムに関連付けられている、第1および第2のオペレーティングシステムの指紋、(3)コンピュータ可読媒体に格納されているデータビットを含み、第1のデータパケットの送信に応答して受信されたデータの少なくとも一部の表示を含む、第1のターゲットコンピュータの指紋、(4)コンピュータ可読媒体に格納されているデータビットを含み、第2のデータパケットの送信に応答して受信されたデータの少なくとも一部の表示を含む、第2のターゲットコンピュータの指紋、および(5)第1のオペレーティングシステムの指紋と第1のターゲットコンピュータの指紋とを比較し、第2のオペレーティングシステムの指紋と第2のターゲットコンピュータの指紋とを比較し、第1のオペレーティングシステムがターゲットコンピュータ上で実行されていたかどうかを示す結果を生成するためにコンピュータにより実行可能な指紋比較命令を含む。好ましい一態様では、本発明はさらに、(6)第3のデータパケットであって、プロトコルに準拠し、第3のデータパケットの第1のビットの範囲は第1および第2のパラメータ値と異なる第3のパラメータ値を表し、ネットワーク経由でターゲットコンピュータに送信される、第3のデータパケット、(7)コンピュータ可読媒体に格納されているデータビットを含み、第1のオペレーティングシステムに関連付けられている、第1および第2のオペレーティングシステムの指紋と異なる、第3のオペレーティングシステムの指紋、および(8)コンピュータ可読媒体に格納されているデータビットを含み、第1のデータパケットの送信に応答して受信されたデータの少なくとも一部の表示を含む、第3のターゲットコンピュータの指紋であって、比較命令は第3のオペレーティングシステムの指紋と第3のターゲットコンピュータの指紋とを比較してから結果を生成するためにコンピュータにより実行可能である、第3のターゲットコンピュータの指紋を含む。他の好ましい一態様では、本発明はさらに、(9)コンピュータ可読媒体に格納されているデータビットを含み、第2のオペレーティングシステムに関連付けられている、第4、第5、および第6のオペレーティングシステムの指紋であって、第4、第5、および第6のオペレーティングシステムの指紋のうち少なくとも1つは第1、第2、および第3のオペレーティングシステムの指紋のそれぞれ1つと異なる、第4、第5、および第6のオペレーティングシステムの指紋、第4のオペレーティングシステムの指紋と第1のターゲットコンピュータの指紋とを比較し、第5のオペレーティングシステムの指紋と第2のターゲットコンピュータの指紋とを比較し、第6のオペレーティングシステムの指紋と第3のターゲットコンピュータの指紋とを比較し、第2のオペレーティングシステムがターゲットコンピュータ上で実行されていたかどうかを示す第2の結果を生成するためにコンピュータにより実行可能な比較命令を含む。本実施形態の好ましい態様は、(10)第1のパラメータ値はビットをいっさいセットしないことにより得られ、第2のパラメータ値は1つのビットをセットすることにより得られ、第3のパラメータ値は2つのビットをセットすることにより得られるか、または(11)第1のパラメータ値は0、第2のパラメータ値は128、第3のパラメータ値は128に256の倍数を加えた値である態様である。
他の実施形態では、本発明は、ネットワーク経由でアクセス可能なターゲットコンピュータのオペレーティングシステムを判別するためのシステムである。このシステムは、(1)ネットワークによりサポートされているプロトコルに準拠し、ネットワーク経由でターゲットコンピュータに送信される、複数のデータパケット、(2)それぞれ、コンピュータ可読媒体に格納されているデータビットを含み、それぞれ、第1のオペレーティングシステムに関連付けられている、第1の複数のオペレーティングシステムの指紋、(3)それぞれ、コンピュータ可読媒体に格納されているデータビットを含み、それぞれ、複数のデータパケットの送信に応答して受信されたデータの少なくとも一部の表示を含む、複数のターゲットコンピュータの指紋、および(4)第1の複数のオペレーティングシステムの指紋と複数のターゲットコンピュータの指紋とを比較し、第1のオペレーティングシステムがターゲットコンピュータ上で実行されていたかどうかを示す結果を生成するためにコンピュータにより実行可能な指紋比較命令を含む。本実施形態の好ましい態様は、プロトコルがTCP/IPである態様である。本実施形態の他の好ましい態様は、さらに、(5)それぞれが、コンピュータ可読媒体に格納されているデータビットを含み、それぞれが、第2のオペレーティングシステムに関連付けられている、第2の複数のオペレーティングシステムの指紋であって、指紋比較命令は第2の複数のオペレーティングシステムの指紋と複数のターゲットコンピュータの指紋とを比較し、第2のオペレーティングシステムがターゲットコンピュータ上で実行されていたかどうかを示す第2の結果を生成する、第2の複数のオペレーティングシステムの指紋を含む。
本発明の他の実施形態は、ネットワーク経由でアクセス可能なターゲットコンピュータのオペレーティングシステムを判別する方法である。この方法は、(1)ネットワークによりサポートされているプロトコルに準拠する複数のデータパケットをターゲットコンピュータに送信するステップ、(2)複数のターゲットコンピュータの指紋を生成し、それぞれ複数のデータパケットの送信に応答してネットワーク経由で受信されたデータの少なくとも一部を含むステップ、(3)複数のターゲットコンピュータの指紋と、それぞれ第1のオペレーティングシステムに関連付けられている第1の一組の所定のオペレーティングシステムの指紋とを比較するステップ、および(4)第1のオペレーティングシステムがターゲットコンピュータ上で実行されたかどうかを示す結果を生成するステップを含む。好ましい一態様では、本実施形態は、さらに(5)複数のターゲットコンピュータの指紋と、それぞれ第2のオペレーティングシステムに関連付けられている第2の一組の所定のオペレーティングシステムの指紋とを比較するステップ、および(6)第2のオペレーティングシステムがターゲットコンピュータ上で実行されたかどうかを示す結果を生成するステップを含む。本実施形態の好ましい一態様は、プロトコルがTCP/IPで、複数のデータパケットのうちの2つのデータパケットのMSSオプションの値が128で割り切れる場合の態様である。本実施形態の他の好ましい態様は、複数のデータパケットのうちの第1のものの最大セグメントサイズオプションが0であり、複数のデータパケットのうちの第2のものの最大セグメントサイズオプションが128であり、複数のデータパケットのうちの第3のものの最大セグメントサイズオプションが384である態様である。
本発明のさらに他の実施形態は、ネットワーク経由でターゲットコンピュータのオペレーティングシステムを判別する方法であって、(1)ネットワーク経由で第1のデータパケットをターゲットコンピュータに送信するステップ(ここで、第1のデータパケットはネットワークのプロトコルに準拠し、第1のビット範囲内に第1のビットパターン内にある)、(2)第1のデータパケットの送信に応答してネットワーク経由で受信されたデータの少なくとも一部を表す第1の応答値を生成するステップ、(3)ネットワーク経由で第2のデータパケットをターゲットコンピュータに送信するステップ(ここで、第2のデータパケットはプロトコルに準拠し、第1のビット範囲内に第2のビットパターンを持ち、第2のビットパターンは第1のパターンと異なる)、(4)第2のデータパケットの送信に応答してネットワーク経由で受信されたデータの少なくとも一部を表す第2の応答値を生成するステップ、(5)ネットワーク経由で第3のデータパケットをターゲットコンピュータに送信するステップ(ここで、第3のデータパケットはプロトコルに準拠し、第1のビット範囲内に第3のビットパターンを持ち、第3のビットパターンは第1または第2のパターンと異なる)、(6)第3のデータパケットの送信に応答してネットワーク経由で受信されたデータの少なくとも一部を表す第3の応答値を生成するステップ、(7)第1の応答値と、第1のオペレーティングシステムに関連付けられている第1の所定の値とを比較するステップ、(8)第2の応答値と、第1のオペレーティングシステムに関連付けられている第2の所定の値とを比較するステップ、(9)第3の応答値と、第1のオペレーティングシステムに関連付けられている第3の所定の値とを比較するステップ、および(10)第1のオペレーティングシステムとターゲットコンピュータとの関係を示す値を生成するステップを含む方法である。本実施形態の好ましい一態様は、さらに、(11)第1の応答値と、第2のオペレーティングシステムに関連付けられている第4の所定の値とを比較するステップ、(12)第2の応答値と、第2のオペレーティングシステムに関連付けられている第4の所定の値とを比較するステップ、および(13)第3の応答値と、第2のオペレーティングシステムに関連付けられている第6の所定の値とを比較するステップを含む。本実施形態の好ましい一態様は、第1のビットパターン内ではビットは一切セットされず、第2のビットパターン内では1つのビットがセットされ、第3のビットパターン内では2つのビットがセットされる態様である。本実施形態の他の好ましい態様は、少なくとも1つのビットがセットされている第2のビットパターン内のバイトの個数は少なくとも1つのビットがセットされている第1のビットパターン内のバイトの個数よりも多く、少なくとも1つのビットがセットされている第3のビットパターン内のバイトの個数は少なくとも1つのビットがセットされている第2のビットパターン内のバイトの個数よりも多い態様である。
本発明のさらに他の実施形態は、ターゲットコンピュータがネットワークにつながっているかどうかを判別するシステムであって、(1)コンピュータ可読媒体に格納され、それぞれネットワークの第1のプロトコルに準拠するデータパケットを受信するためコンピュータにより使用されるポートを表し、それぞれ知られているネットワークサービスに関連付けられているポートを表す、第1の一組のポート識別子、(2)それぞれ第1の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれ第1のプロトコルに準拠し、ネットワーク経由でターゲットコンピュータに送信される、第1の一組のデータパケット、(3)第1の一組のデータパケットの送信に応答してネットワーク経由で受信される第1の一組の肯定応答パケット、および(4)ホスト識別子のリストであって、それぞれのホスト識別子が各コンピュータに送信されたパケットに応答してデータを送信するネットワーク上のコンピュータを表し、ホスト識別子が第1の一組の肯定応答パケットがターゲットコンピュータの反応を示した場合にホスト識別子のリストに追加されるターゲットコンピュータを表すホスト識別子のリストを含むシステムである。本実施形態の他の好ましい一態様は、さらに、(5a)コンピュータ可読媒体に格納され、それぞれネットワークの第2のプロトコルに準拠するデータパケットを受信するためコンピュータにより使用されるポートを表し、それぞれ知られているネットワークサービスに関連付けられているポートを表す、第2の一組のポート識別子、(6a)それぞれ第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれ第2のプロトコルに準拠し、ネットワーク経由でターゲットコンピュータに送信される、第2の一組のデータパケットであって、そのうち少なくとも1つは知られているネットワークサービスに関連付けられているデータを含む第2の一組のデータパケット、(7a)第2の一組のデータパケットの送信に応答してネットワーク経由で受信される第2の一組の肯定応答パケット、および(8)第2の一組の肯定応答パケットがターゲットコンピュータに反応があることを示す場合ホスト識別子のリストに追加されるターゲットコンピュータを表すホスト識別子を含む。本実施形態の好ましい一態様は、第1のプロトコルがTCPであり、第2のプロトコルがUDPであり、第2の一組の肯定応答パケットがUDPデータ応答パケットの非ゼロの集まりである態様である。本実施形態の他の好ましい一態様は、さらに、(5b)コンピュータ可読媒体に格納され、それぞれネットワークの第2のプロトコルに準拠するデータパケットを受信するためコンピュータにより使用されるポートを表し、それぞれ知られているネットワークサービスに関連付けられているポートを表す、第2の一組のポート識別子、(6b)それぞれ第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれ第2のプロトコルに準拠し、ネットワーク経由でターゲットコンピュータに送信される、第2の一組のデータパケットであって、そのうち少なくとも1つは知られているネットワークサービスに関連付けられているデータを含む第2の一組のデータパケット、(7b)第2の一組のデータパケットの送信に応答してネットワーク経由で受信される第2の一組の肯定応答パケット、および(8b)第2の一組の肯定応答パケットがターゲットコンピュータが無反応であることを示さない場合ホスト識別子の第2のリストに追加されるターゲットコンピュータを表すホスト識別子であって、ホスト識別子の第2のリストのそれぞれが無反応であることが知られていないコンピュータを表す、ホスト識別子を含む。本実施形態の好ましい一態様は、第1のプロトコルがTCPであり、第2のプロトコルがUDPであり、第2の一組の肯定応答パケットがICMPエラーパケットの空集合である態様である。他の実施形態の他の好ましい一態様は、さらに、(9)それぞれ第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれ第2のプロトコルに準拠し、所定の最大待ち時間いっぱい、ターゲットコンピュータに送信される、第3の一組のデータパケット、(10)第3の一組のデータパケットの送信に応答して時間内に最初に受信される第1の応答と、(11)第3の一組のデータパケットの送信に応答して時間内に第2に受信される第2の応答であって、時間は第1の応答の受信からターゲットコンピュータの待ち時間を定める第2の応答の受信までの間である、第2の応答を含む。実施形態の他の好ましい態様は、第2の一組のデータパケットのそれぞれがターゲットコンピュータの待ち時間の間にターゲットコンピュータに連続的に送信される態様である。
本発明のさらに他の実施形態は、ネットワーク経由でターゲットコンピュータにアクセス可能であるかどうかをテストするシステムである。このシステムは、(1)コンピュータ可読媒体に格納され、それぞれUDP準拠ポートを表す一組のポート識別子であって、その少なくとも1つが知られているネットワークサービスに関連付けられているポートを表す、一組のポート識別子、(2)それぞれ一組のポート識別子の少なくとも1つにより表されるポートに関連付けられている一組のUDP準拠データパケットであって、UDP準拠データパケットのそれぞれがターゲットコンピュータの待ち時間とほぼ同じ時間の間ターゲットコンピュータに連続的に送信され、UDP準拠データパケットのうちの少なくとも1つが知られているネットワークサービスに関連付けられているデータを含んでいる、一組のUDP準拠データパケット、(3)ネットワーク経由でアクセス可能なコンピュータを表し、ゼロでない一組のUDPデータ応答パケットがデータパケットの送信に応答して受信された場合にターゲットコンピュータを含む、第1のリスト、および(4)ネットワーク経由でアクセス不可能であることが知られていないコンピュータを表し、ICMPエラーパケットの空集合がデータパケットの送信に応答して受信された場合にターゲットコンピュータを含む、第2のリストを含む。
本発明の他の実施形態は、ネットワーク経由でターゲットコンピュータがアクセス可能かどうかを判別する方法である。この方法は、(1)TCPポートを識別するステップ、(2)ターゲットコンピュータのTCPポートに、それぞれTCPに準拠している第1のデータパケットを送信するステップ、(3)第1のデータパケットの送信に応答して第1の肯定応答パケットを受信するステップ、および(4)第1の肯定応答パケットがゼロでない場合にアクセス可能なコンピュータを表すリストにターゲットコンピュータの表示を追加するステップを含む。本実施形態の好ましい一態様は、さらに、(5)ネットワークサービスに関連付けられているUDPポートを識別するステップ、(6)第2のデータパケットをターゲットコンピュータのUDPポートに送信するステップ(ここで、第2のデータパケットの少なくとも1つがターゲットコンピュータの待ち時間の間中、ターゲットコンピュータに連続して送信される)、(7)第2のデータパケットの送信に応答して第2の肯定応答パケットを受信するステップ、および(8)第2の肯定応答パケットがゼロでないUDPデータ応答パケットの場合にアクセス可能なコンピュータを表すリストにターゲットコンピュータの表示を追加するステップを含む。本実施形態の他の好ましい一態様は、さらに、(9)ターゲットコンピュータにパケットが送信されたことに応答して受信される応答から応答までの時間を測定することによりターゲットコンピュータの待ち時間を判別するステップを含む。本実施形態の他の好ましい一態様は、さらに、(10)ネットワーク経由でアクセス可能でないと知られていないコンピュータを表すリストにターゲットコンピュータの表示を追加するステップ(ここで、追加は第2の肯定応答パケットがICMPエラーパケットの空集合を含む場合に実行される)を含む。
本発明の他の実施形態は、ネットワーク経由でターゲットコンピュータの脆弱性を評価する方法である。この方法は、(1)一組のICMPパケット、一組のTCPパケット、および一組のUDPパケットをネットワーク上のコンピュータ群に送信することによりネットワーク上の応答する一組のコンピュータを発見するステップ、(2)TCPパケットを応答する一組のコンピュータのそれぞれの第1のポートに送信し、UDPパケットを応答する一組のコンピュータのそれぞれの第2のポートに送信することにより一組の応答するコンピュータのそれぞれでサービスを検出するステップ(ここで、第1および第2のポートは一般に、ネットワーク越しにデータパケットを受信するためコンピュータにより使用され、TCPパケットは第1のポートのうちの1つを使用することが知られている少なくとも1つのコンピュータベースのサービスに関連付けられているデータを含み、UDPパケットは第2のポートのうちの1つを使用することが知られている少なくとも1つのコンピュータベースのサービスに関連付けられているデータを含む)、および(3)TCPパケットおよびUDPパケットの送信に応答して受信される応答を使用して応答するポートのリストを生成するステップを含む。本実施形態の好ましい一態様は、さらに、(4)所定の値と一組の応答コンピュータのそれぞれへの複数のTCP準拠パケットの送信に応答して一組の応答コンピュータのそれぞれから受信された応答の一部とを比較することにより、一組の応答コンピュータのそれぞれにより使用されるオペレーティングシステムを判別するステップを含む。本実施形態の他の好ましい一態様は、さらに、(5)自動化脆弱性スクリプトを応答ポートのリストで表されるそれぞれの応答ポートに適用することにより、ネットワーク上の脆弱性の存在を確認し、自動化脆弱性スクリプトのそれぞれにより、特定の応答ポートおよび特定のオペレーティングシステムを含むコンピュータ構成に関連付けられていることが知られている脆弱性をテストするステップを含む。本実施形態のさらに他の好ましい一態様は、さらに、(6)ネットワークのセキュリティの客観的な印を計算するステップ(ここで、計算は確認された脆弱性の加重総和に基づく)を含む。本実施形態の好ましい一態様は、さらに、(7)ネットワークのトポロジを判別するステップ(ここで、トポロジ判別は、さまざまな有効期間(TTL)設定を持つ一組のICMPパケットを送信し、さまざまなTTL設定を持つ一組のTCPパケットを送信することにより実行される)を含む。本実施形態の他の好ましい一態様は、さらに、(8)ネットワークのグラフィック表示を出力するステップ(ここで、この表示はネットワークのトポロジマップ、加重された確認済み脆弱性の色分けされた表示、ならびにネットワーク上の確認された脆弱性およびコンピュータを記述するグラフィック表示と情報との関連付けを含む)を含む。
本発明の他の実施形態は、ネットワークのトポロジ表示を作成する方法である。この方法は、(1)ネットワーク上の応答コンピュータを識別するステップ、(2)それぞれの応答コンピュータに、増大するTTL値を持つパケットのシーケンスを送信することにより複数のIPアドレスのシーケンスを取得するステップ(ここで、それぞれのIPアドレスのシーケンスは発信元コンピュータと応答コンピュータのうちの1つとの間のネットワーク内のノードを表し、各シーケンス内の隣接するIPアドレスは接続されているノードを表し、ノードのそれぞれはコンピュータまたはルータを含む)、(3)ノード構造のリストを生成するステップ(ここで、ノード構造のそれぞれは直接の接続先である他のノードを示すノードおよびデータを表すデータを含み、リストが複数のシーケンス内のすべてのIPアドレスを表す)、(4)それぞれのアドレスに関して距離カウントを判別するステップ(ここで、距離カウントがIPアドレスを持つノードと発信元ノードとの間のノード数を表す)、(5)ルータを備えるノードを表すそれぞれのノード構造に対するルータ構造を作成するステップ、(6)それぞれのルータ構造により表されるルータを除く他のどのノードにも接続しないそれぞれの接続ノードを表すルータ構造のそれぞれに接続データを関連付けるステップ、(7)ルータ構造毎に、それぞれのルータ構造の接続データにより表される接続ノードに対応する1つまたは複数のグラフィック形状に空間的に関係するグラフィック形状を視覚的に示すステップ、および(8)それぞれのルータ構造および異なるルータ構造により表されるルータのIPアドレスに関連付けられた距離カウントが直接的接続を示している場合、ルータ構造毎にそれぞれのルータ構造に関連付けられたグラフィック形状と異なるルータ構造に関連付けられた他のグラフィック形状との接続を視覚的に示すステップを含む。本実施形態の好ましい一態様は、さらに、(9)ルータ構造により表されるルータおよび接続データで表される接続ノードが1つのノードの2つのネットワーク接続を含むかどうかをテストするステップを含む。本実施形態の他の好ましい態様は、ルータを表す図形が球形であり、空間的に関係付けられた図形のそれぞれがルータを表す球形の周囲を軌道を描いて回る球である。
本発明のさらに他の実施形態は、ネットワークの客観的セキュリティスコアを計算する方法である。この方法は、(1)ネットワークの知られている脆弱性の組み合わせを数値で表す脆弱性値を決定するステップ、(2)ネットワーク上のコンピュータのアクセス可能なポートの組み合わせを数値で表す暴露値を決定するステップ、および(3)脆弱性値と暴露値とを組み合わせることによりスコアを導くステップを含む。本実施形態の好ましい態様は、知られている脆弱性の組み合わせが特定の脆弱性の加重数値表示の総和であり、加重が、それぞれの脆弱性に関する搾取容易性ランキングおよびアクセス付与ランキングに基づく。
本発明のさらに他の実施形態は、自動化ネットワーク脆弱性攻撃を実行する方法であって、(1)ネットワーク上のそれぞれの応答コンピュータについて一組の脆弱性攻撃を選択するステップ(ここで、それぞれの応答コンピュータについて選択されたそれぞれの脆弱性攻撃はアクセス可能であることが知られているそれぞれのコンピュータのポートに関連付けられ、さらにそれぞれのコンピュータにより使用されるオペレーティングシステムに関連付けられている脆弱性を暴露するように設計されている)、(2)それぞれが一意的な識別子によりデータベースで表示されるように一組の脆弱性攻撃を符号化するステップ、(3)自動化スクリプト言語の命令を使用して一組の脆弱性攻撃のそれぞれを表すステップ、および(4)コンピュータで命令を処理することにより脆弱性攻撃を実行するステップを含む。
本発明の更なる一実施形態は、階層型ネットワーク脆弱性レポートである。このレポートは、(1)第1のレポートレベルであって、(a)ネットワークのセキュリティを表す客観的スコア、および(b)ネットワーク経由でアクセス可能なコンピュータのグラフィック表示および複数のコンピュータのうち少なくとも一部のコンピュータの脆弱性の色分けしたグラフィック表示を含む、ネットワークトポロジのグラフィック表示を含む第1のレポートレベル、ならびに(2)第2のレポートレベルであって、(a)コンピュータおよびその関連付けられた脆弱性を記述するテキスト形式のリスト、および(b)コンピュータのアクセス可能なポートおよびサービスを記述する暴露レポートを含む第2のレポートレベルを含む。
本発明の他の実施形態は、脆弱性評価言語である。脆弱性評価言語は、(1)すべての変数がスタック変数であり、構文解析ツリーは読み取り専用データ構造として処理されるスレッドセーフ実行アーキテクチャで実行される実行可能スクリプトを作成するために使用される一組のプログラミング言語ステートメント、(2)式の中で整数データ型と交換可能な、スクリプトで実現される脆弱性評価オペレーションをサポートするように構成されている一組の定数値をそれぞれが持つ一組の特別スカラーデータ型、(3)ネイティブオブジェクトを実行可能スクリプトから利用できるようにするためスクリプトスコープを所有するメタスコープ内で宣言された一組のネイティブオブジェクトであって、ネイティブオブジェクトはネットワーク通信を円滑に行えるようにし、一意的なポートのリストを構築し、スクリプト実行権を特定のホストに送る呼び出し可能メンバ関数を備え、スクリプト用のIPアドレスを供給する、一組のネイティブオブジェクト、および(4)他のスクリプトがその情報にアクセスして他のマシンを損なうおそれのあるグローバルデータ領域に自分自身をコピーする動作をし、異なるスクリプトにより発見された脆弱性データを1つのスクリプトで使用しやすくする、脆弱性オブジェクトを含む。
本発明の他の実施形態は、ターゲットコンピュータ上で知られている脆弱性を自動的に適用する方法である。この方法は、(1)データオブジェクトを含む知られている脆弱性のデータベースを供給するステップ、(2)データオブジェクトに関連付けられている実行可能スクリプトを供給するステップ、(3)ターゲットコンピュータのポートで知られている脆弱性を実行する、実行可能スクリプトをターゲットコンピュータに適用するステップ、および(4)実行可能スクリプトの成功、失敗、または他の結果のうちの少なくとも1つを表す値を返すステップを含む。
本発明のさらに他の実施形態は、ネットワークの知られている脆弱性をターゲットコンピュータに自動的に適用する方法である。この方法は、(1)知られている脆弱性のデータベースを供給するステップ、(2)知られている脆弱性を指定ターゲットコンピュータに適用するためにそれぞれが実行可能な一組の実行可能スクリプトを供給するステップ、(3)第1の実行可能スクリプトを実行して指定ターゲットコンピュータに脆弱性を適用するステップと、(4)第1の実行可能スクリプトのそれぞれの成功、失敗、または他の結果を表す戻り値を監視するステップ、および(5)戻り値を使用して、ネットワークのセキュリティレベルを表すレポートを生成するステップを含む。本実施形態の好ましい一態様は、さらに、(6)実行時間間隔を識別するステップ(ここで、第1の実行可能スクリプトの実行がこの時間間隔のそれぞれの始まりに開始し、時間間隔のそれぞれの終わりに一時停止し、これを第1の実行可能スクリプトすべてが実行し終えるまで続ける)を含む。本実施形態の好ましい一態様は、さらに、(7)第1の実行可能スクリプトの実行が完了したときに第1の実行可能スクリプトの実行を自動的に繰り返すステップを含む。本実施形態の好ましい他の態様は、さらに、(8)第1の実行可能スクリプトが完了する毎にレポートを生成するステップ、および(9)複数のレポートを比較することによりネットワークのセキュリティトレンドを計算するステップを含む。本実施形態の他の好ましい態様は、さらに、(10)第1の実行可能スクリプトの実行中に、第2の実行可能スクリプトを実行して、コンピュータの第2のネットワークに脆弱性を適用するステップを含む。本実施形態の他の好ましい態様は、第2のネットワークがネットワークの部分集合である態様である。本実施形態のさらに他の好ましい態様は、第1の実行可能スクリプトはターゲットコンピュータのすべての第2のポートに脆弱性を適用する前に、ターゲットコンピュータのすべての第1のポートに脆弱性を適用するように構成されている態様である。本実施形態の他の好ましい態様は、複数のパケットスロットを割り当て、それぞれのパケットスロットでは実行可能スクリプトの1つでパケットの非同期送信が可能である、他のステップを含む。
本発明の好ましい実施形態について以下に図面を参照して説明する。
I.基本的な実装、構造、および制御言語
図1は、ターゲットネットワークの一実施形態を示す。本発明のネットワークセキュリティシステム100は、一実施形態では、Windows 2000オペレーティングシステム上で稼働している少なくとも1つのIntelベースのサーバであるが、IPネットワークを扱うことができ、また大規模データ処理が可能なコンピュータシステムまたはオペレーティングシステムであればどのようなものでも使用できる。ネットワークセキュリティシステム100は、ターゲットネットワーク102の外側にあっても、ターゲットネットワークの内側にあってもよい(図に示されていない)。いずれの場合も、システム100は、1つまたは複数のノード104を介して、インターネットなどのネットワークを通じてターゲットネットワーク102に接続される。ターゲットネットワーク102は、一実施例では、中央イントラネットハブ106を備えるイントラネットからなる。ターゲットネットワーク102は、さらに、ターゲットネットワーク102に入るトラフィックまたはターゲットネットワーク102から出るネットワークトラフィックの一部をブロックするファイヤウォール108を含む。ターゲットネットワークは、さらに、インターネットプロトコル(IP)アドレスの所定の範囲内にあるとして定義されている、多数のホスト110を含む。場合によっては、外部ホスト112は、ターゲットネットワークの外側に置かれていてもよいが、それでも、ターゲットネットワーク102に接続することが可能である。
図2は、ターゲットネットワークにつながっているターゲットコンピュータの一実施形態の図である。一般に、ホストIPアドレスは、ターゲットネットワークで使用されている場合には、以下でより一般的に定義されているように、ターゲットコンピュータを表す。ホスト110のターゲットコンピュータ200の簡素化された表示において、ターゲットコンピュータ200では、オペレーティングシステム202が実行されている。オペレーティングシステムは、好ましくはターゲットコンピュータ200とネットワークとの間のロウ(raw)ソケット206を実現するインターフェースを備える、パケット転送を実現する少なくとも1つのネットワークTCP/IPスタック204を含むのが好ましい。ネットワーク208との物理的接続は、一実施形態では、ネットワークインターフェースカード(NIC)210により実行される。IPネットワークでは、ターゲットコンピュータ200の65,536個の論理ポート212のうちどれか1つでパケットを受信できる。同様に、任意の数のネットワークサービス214を提供することが可能である。
図3は、本発明の一実施形態による包括的テスト方法の一実施形態を示す。図3は、この方法の概要を示している。方法の他の詳細は、図4〜11に関して以下で説明する。
図3の第1のステップまたはルーチン310において、このテスト方法により、ターゲットネットワークが定義され、またIPアドレスのスキャンリストが作成される。スキャンリストは、スキャンリストデータベース312に格納される。その後、この方法では、ルーチン314において、スキャンリストデータベース312からIPアドレスの第1のバッチを取得し、ブロック320で始まるホスト発見ルーチンを実行することによりターゲットネットワークの詳細分析を開始する。
ホスト発見ルーチンは、ICMPホスト発見ルーチン322を含むが、これについては、以下で詳述する。ICMPホスト発見ルーチン322の実行中に、この方法は、IPアドレスの現在のバッチで識別されたターゲットコンピュータにpingを実行する。ICMPホスト発見ルーチン322は、応答または応答無しに基づいて、特定のターゲットコンピュータが「稼働している」かまたは「おそらく稼働している」ことを判別することができ、その判別に従って、関連付けられているIPアドレスがそれぞれの稼働しているデータベース324またはおそらく稼働しているデータベース326に追加される。
ICMPホスト発見ルーチン322を完了した後、この方法は、決定ルーチン328を実行し、そこで、IPアドレスの現在のバッチでのすべてのIPアドレスがすでに発見されているかどうか(すなわち、すべてのIPアドレスが稼働しているデータベース324またはおそらく稼働しているデータベース326に割り当てられているかどうか)を判別する。IPアドレスが発見されなかった場合、この方法は、TCPホスト発見ルーチン330に進むが、これについて以下で詳述する。TCPホスト発見ルーチン330の実行中に、この方法は、IPアドレスの現在のバッチで識別された残りのターゲットコンピュータにTCPパケットを送信する。TCPホスト発見ルーチン330は、応答または応答無しに基づいて、残りのターゲットコンピュータのうちの特定のターゲットコンピュータが「稼働している」かまたは「おそらく稼働している」ことを判別することができ、その判別に従って、関連付けられているIPアドレスがそれぞれの稼働しているデータベース324またはおそらく稼働しているデータベース326に追加される。
TCPホスト発見ルーチン330を完了した後、この方法は、決定ルーチン332を実行し、そこで、IPアドレスの現在のバッチでのすべてのIPアドレスがすでに発見されているかどうか(すなわち、すべてのIPアドレスが稼働しているデータベース324またはおそらく稼働しているデータベース326に割り当てられているかどうか)を判別する。IPアドレスが発見されなかった場合、この方法は、インテリジェント型UDPホスト発見ルーチン334に進むが、これについて以下で詳述する。インテリジェント型UDPホスト発見ルーチン334の実行中に、この方法は、IPアドレスの現在のバッチで識別された残りのターゲットコンピュータにUDPパケットを送信する。インテリジェント型UDPホスト発見ルーチン334は、応答または応答無しに基づいて、残りのターゲットコンピュータのうちの特定のターゲットコンピュータが「稼働している」かまたは「おそらく稼働している」ことを判別することができ、その判別に従って、関連付けられているIPアドレスがそれぞれの稼働しているデータベース324またはおそらく稼働しているデータベース326に追加される。
インテリジェント型UDPホスト発見ルーチン334を完了した後、この方法は、決定ルーチン336を実行し、そこで、IPアドレスの現在のバッチでのすべてのIPアドレスがすでに発見されているかどうか(すなわち、すべてのIPアドレスが稼働しているデータベース324またはおそらく稼働しているデータベース326に割り当てられているかどうか)を判別する。IPアドレスが発見されなかった場合、この方法は、一実施形態では、集約的UDPホスト発見ルーチン338に進むが、これについて以下で詳述する。集約的UDPホスト発見ルーチン338の実行中に、この方法は、IPアドレスの現在のバッチで識別された残りのターゲットコンピュータに追加UDPパケットを送信する。集約的UDPホスト発見ルーチン338は、応答または応答無しに基づいて、残りのターゲットコンピュータのうちの特定のターゲットコンピュータが「稼働している」かまたは「おそらく稼働している」ことを判別することができ、その判別に従って、関連付けられているIPアドレスがそれぞれの稼働しているデータベース324またはおそらく稼働しているデータベース326に追加される。集約的UDPホスト発見ルーチン338は、オプションであり、すべての実施形態に含めなくてもよい。
集約的UDPホスト発見ルーチン338を完了した後、この方法は、ブロック340から始まるサービス発見ルーチンに進むのが好ましい。それとは別に、いくつかの実施形態では、前述のホスト発見ルーチン322、330、334、338は、ターゲットコンピュータに対応する追加IPアドレスを活動しているデータベース324およびおそらく活動しているデータベース326に割り当てることができるかどうかを判別するために繰り返すと都合がよい。このような他の実施形態では、この方法は、ホスト発見ルーチンを最大所定回数繰り返してから、サービス発見ルーチン340に進む。どの方法も応答を受信していないこれらのIPアドレスは、一実施形態では、ホストの不稼働リスト339に追加される。
サービス発見ルーチンでは、この方法は、TCPサービス発見ルーチン342を実行するが、これについては、以下で詳述する。TCPサービス発見ルーチン342では、この方法は、TCPパケットを稼働しているリスト324およびおそらく稼働しているリスト326内の発見されたターゲットコンピュータの選択されたポートに送信し、応答が来ないか監視する。TCP発見ルーチン342は、応答または応答無しに基づいて、ターゲットコンピュータの開いているポートに関する情報をターゲットコンピュータデータベース344に追加する。
この方法は、TCPサービス発見ルーチン342を実行した後、UDPサービス発見ルーチン346を実行するが、これについて以下で詳述する。UDPサービス発見ルーチン346では、この方法は、UDPパケットを稼働しているリスト324およびおそらく稼働しているリスト326内の発見されたターゲットコンピュータの選択されたポートに送信し、応答が来ないか監視する。UDP発見ルーチン346は、応答または応答無しに基づいて、ターゲットコンピュータの開いているポートに関する情報をターゲットコンピュータデータベース344に追加する。他の実施形態では、開いている追加ポートが発見されているかどうかを判別するために限られた回数だけTCPサービス発見ルーチン342およびUDPサービス発見ルーチン346を繰り返すと都合がよい。
UDPサービス発見ルーチン346を完了した後(またはそのルーチンを限られた回数繰り返して完了した後)、この方法は、オペレーティングシステム(OS)識別ルーチン350に進み、そこで、開いているポートを持つ稼働しているコンピュータのそれぞれに存在しているオペレーティングシステムの種類およびバージョンを判別する。以下で詳しく説明するが、この方法は、2つまたはそれ以上の(好ましくは3つの)RFC準拠TCPパケットをターゲットコンピュータに送信する。TCPパケットは、少なくとも1つの選択されたフィールド内に所定のデータを格納している。それぞれのターゲットコンピュータは、TCPパケットのそれぞれに応答する。それぞれのコンピュータからの応答情報は、それぞれのコンピュータの「指紋」として取り扱われる。それぞれのコンピュータの指紋を指紋データベース352内の指紋と比較し、その比較結果を使用して高い精度でターゲットコンピュータを識別する。
ターゲットコンピュータのオペレーティングシステム識別ルーチン350を完了した後、この方法は、ブロック354から始まるtracerouteルーチンに進む。tracerouteルーチンでは、この方法はまず、ICMP traceroute手法を使用するICMP tracerouteルーチン356を実行するが、これについては、以下で詳述する。特に、この方法では、TCP/IPヘッダの中にさまざまなTTL(有効期間)値を入れた複数のICMPエコー要求パケットをターゲットコンピュータに送信する。この方法は、知られているTTL値、システムとターゲットコンピュータとの間の「ホップ」回数、および各「ホップ」でのルータ/ホストに基づいてネットワークトポロジを作成する。ICMP tracerouteルーチン356からの情報が、ネットワークマップデータベース358に追加される。送信されたすべてのパケットが到着するか、到着できなかったか、またはタイムアウトになった場合、tracerouteステップはそのターゲットコンピュータについては完了する。ICMP tracerouteステップは、完了トレースが受信されるか、または選択された所定の最大回数のパスが完了するまで、繰り返される。
所定の回数のICMP tracerouteパスが完了した後、この方法は、決定ルーチン360に進み、そこで、ターゲットコンピュータのトレースが完了しているか不完了であるかを判別する。トレースが完了している場合、この方法は、TCP tracerouteルーチン362に進む。そうでない場合、この方法は、TCP tracerouteルーチンをバイパスし、直接、脆弱性評価ルーチン364に進む。
以下で詳述するように、TCP tracerouteルーチン362は、TCP SYNパケットがターゲットコンピュータに送信されることを除きICMP tracerouteルーチン354と同様の動作をする。ICMP tracerouteを実行した場合のように、各SYNパケット内のTTL値は漸次増加し、ICMP到達不能パケットおよびSYN ACKパケットが戻るかどうかが、スキャニングシステムとターゲットホストの間のすべての「ホップ」に関して監視される。ICMP tracerouteとTCP tracerouteを組み合わせることで、各ターゲットコンピュータへの完全なマップ、および合わせて、ターゲットネットワークトポロジの比較的完全なマップを作成し、ネットワークマップデータベース358内に格納すると都合がよい。
TCP tracerouteルーチン362を完了した後、この方法は、脆弱性評価ルーチン364に進む。以下で詳述するように、脆弱性評価ルーチン364では、この方法は、知られている脆弱性を稼働しているターゲットコンピュータの開いているポートに適用する脆弱性スクリプトを実行して、ターゲットコンピュータのポートに潜在的脆弱性があるかどうかを判別する。この方法は、知られている脆弱性データベース366内に格納されている情報を使用して、アクティブなポート毎に実行するために脆弱性スクリプトを選択する。脆弱なターゲットコンピュータから収集された情報は、ターゲットコンピュータデータベース344に格納すると都合がよい。
一実施形態では、脆弱性評価ルーチン364は、オペレーティングシステム識別ルーチン350およびサービス発見ルーチン340により判別されたとおり、ターゲットコンピュータの識別されたオペレーティングシステムおよび開いているポートに関連付けられている脆弱性チェックのみを実行するのが好ましい。オペレーティングシステムが最終的に識別されない場合、通常、ターゲットコンピュータの開いているポートに対してルーチンは知られているすべての脆弱性評価を実行する。
一実施形態では、この方法は、アクティブな評価ルーチン365に進む。以下で詳述するように、アクティブな評価ルーチン365では、脆弱性評価ルーチン364内のターゲットコンピュータから収集された情報を使用して、稼働しているターゲットコンピュータの開いているポートにさらに脆弱性スクリプトを実行する。特に、アクティブな評価ルーチン365は、知られている脆弱性およびターゲットコンピュータから収集された情報を再利用して、ターゲットコンピュータのポートに潜在的脆弱性があるかどうかを判別する作業を続け、その際に、知られている脆弱性データベース366からの情報およびターゲットコンピュータデータベース344内の収集された情報を使用する。
アクティブな評価ルーチン365を完了した後、この方法は、決定ルーチン368に進み、この方法で潜在的ターゲットコンピュータすべてを分析したかどうかを判別する。特に、決定ルーチン368では、この方法は、IPアドレスの最後のバッチが分析されているかどうかを判別する。まだ分析されていないターゲットコンピュータのバッチがまだあれば、この方法は、ルーチン314に進み、IPアドレスの次のバッチを取得する。そうでない場合、この方法は、スコアリングルーチン370に進む。
この方法は、以下で詳述するスコアリングルーチン370において、アクティブな評価の結果に基づき、また知られている脆弱性データベース366内の脆弱性情報に基づいて、各ターゲットコンピュータおよびネットワークの脆弱性スコアを確定する。次にこの方法は、さらに以下で詳述する報告ルーチン372に進み、そこで、スキャニング、アクティブな評価、およびスコアリングの結果を報告する。
この方法は、ターゲットネットワーク上で連続して繰り返すと都合がよく、この方法が時間をかけて実行されるようにスケジュールを所定のスキャン時間枠内に設定することができる。例えば、好ましい実施形態では、ネットワークの使用頻度が低い可能性がそれほど高くないときに、混雑していない時間帯にスキャンするようにこの方法をスケジュールする。特に好ましい実施形態では、この方法は、混雑していない時間帯の終わりに中断可能であり、次の混雑していない時間帯の始めに一時停止したところから再開する。特に都合のよい実施形態では、この方法は、複数のターゲットネットワーク上でネットワーク資源を共有するスレッド実行により同時に動作する。
II.非破壊オペレーティングシステム識別
ターゲットコンピュータの脆弱性およびアクセスは、どの特定のオペレーティングシステムがコンピュータ上で実行されているかがわかれば、高めることができる。ターゲットコンピュータのオペレーティングシステムの識別は、ネットワーク上で受信するデータパケットに対するオペレーティングシステムの応答を調べることにより実行できる。パケットの形式およびそれらのパケットへの応答は、ネットワークプロトコルに従って生成される。インターネット上での通信に使用されるプロトコルの定義は、Internet Request for Comment(RFC)文書で規定され、文書化されている。例えば、TCP/IPプロトコルは、一部、参照により本明細書に組み込まれているRFC793で定義されており、ネットワーク越しのTCPパケット通信の標準モデルを含む。事実上すべてのオペレーティングシステムがTCP/IPスタックを備えているが、それぞれのTCP/IPスタックの実装は少しずつ異なる。したがって、特定のオペレーティングシステムに特有のTCP/IPスタックからの知られている応答を「指紋」として使用して、ターゲットコンピュータの実際のオペレーティングシステムを判別することができる。
オペレーティングシステムの検出は、従来、RFC準拠TCPパケットと非RFC準拠TCPパケットの組み合わせを送出することにより、実行されてきた。そのため従来のシステムでは、ターゲットコンピュータから一意的な非標準応答を収集し、その応答をTCP/IPスタックおよび関連するオペレーティングシステムの知られているデータベースにマッピングする。しかし、この方法は、ターゲットコンピュータの特定のパケット形状およびTCP/IPスタックに大きく依存し、不正確になる傾向があり、高い信頼度でターゲットオペレーティングシステムを識別するためには多数のパケットを必要とする。この方法は、ターゲットコンピュータでのセキュリティまたはファイヤウォールアラームをトリガし、より詳しくいうと、この方法は、大部分ターゲットに送信された非RFC準拠パケットのせいでターゲットコンピュータに干渉したり、あるいは実際にクラッシュさせたりする可能性がある。
本システムは、通常、ターゲットコンピュータのオペレーションへの侵入と干渉を最小限に抑えながらオペレーティングシステム検出の精度を最大にするため独自の一組の新しい機能を採用している。一実施形態では、本発明は、RFC準拠TCP「SYN」(同期)パケットをターゲットコンピュータに送信する。RFC準拠TCPパケットを使用すると、検出パケットがルータまたはファイヤウォールによりブロックされる確率が低くなり、検出パケットがターゲットコンピュータに損傷を引き起こす原因となる、またはクラッシュする確率が大幅に小さくなり、都合がよい。特に好ましい一実施形態では、本発明は、3つのRFC準拠TCPパケットだけを使用する。したがって、ネットワークの歪みは、ターゲットネットワークにつながる多数のターゲットコンピュータのオペレーティングシステムを検出する際に著しく低減される。
一実施形態では、送信された第1のパケットは、ターゲットコンピュータ上の開いているポートに対する完全に標準的なTCP SYNである。第1のパケットのオプションフィールド内のMSS(最大セグメントサイズ)オプションは、0に設定される(すなわち、MSSオプションで設定されているビットはない)。図5を参照されたい。肯定応答パケット、SYN ACKパケットがターゲットコンピュータから検出システムにより受信されると、そのパケットからの特定のビットがシステムによって保存される。例えば、一実施形態では、TCP広告ウィンドウ、TTL(有効期間)、オプション、フラグ、およびDF(断片化しない)フィールドは第1の指紋に保存される。
この実施形態では、その後、第2のパケットが送信される。第2のTCP SYNパケットは、これもまた、標準TCP SYNパケットであるが、MSSオプションは第2のパケット内で128に設定される(MSSオプション内の単一ビットの設定に対応する)。ターゲットコンピュータからの応答SYN ACKの一部(好ましくは、TCP広告ウィンドウ、TTL、およびDFビット)もまた、第2の指紋に保存される。最後に、第3のTCP SYNパケットが送信される。第3のパケットも、標準TCP SYNパケットであるが、MSSオプションは第3のパケット内で384に設定される(MSSオプション内の2つのビットの設定に対応する)。ここでもまた、ターゲットコンピュータからの応答SYN ACKの一部(好ましくは、TCP広告ウィンドウ、TTL、およびDFビット)は、第3の指紋に保存される。
一実施形態では、指紋は次の形式で保存される。
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フラグ
である。
その後、指紋は、さまざまなオペレーティングシステムおよびオペレーティングシステムバージョンに関連付けられている指紋の知られているデータベースと比較される。知られている指紋は、上記の方法を、テストの前に特定のオペレーティングシステムを持つことが知られているさまざまなターゲットコンピュータに適用することにより編集することができる。例えば、さまざまなバージョンのSolaris(登録商標)オペレーティングシステムが実行される知られているコンピュータのテストにより、以下のオペレーティングシステムの指紋が得られる。
表2:SolarisおよびBSDオペレーティングシステムのOS指紋例
Figure 2005515541
複数のOS指紋がそれぞれのオペレーティングシステムに関連付けられている場合があるが、異なるオペレーティングシステムの指紋同士の衝突は、それほど頻繁に見られたわけではない。他のオペレーティングシステムについては、表2に示されているのと同様に、表を作成することができる。時間がたつうちにオペレーティングシステムのバージョンが変わり、人気も移り変わるのに合わせて、指紋データベースを定期的に更新して、パッチ、バージョン変更、および新しいオペレーティングシステムに対応するようにすると都合がよい。上に示されている指紋スタイルは、そのようなデータベースの1つの実施形態にすぎず、変更されたTCPオプション、通常ターゲットコンピュータに送信されるパケットの個数、認識用に格納される他のTCPフィールド、および特定のオペレーティングシステムおよびバージョンなどを表すために使用される識別フィールドに基づいて、オペレーティングシステム指紋を格納する効率的な方法を使用できる。一実施例では、特定のオペレーティングシステムに対する一意的なデータ列は、MD5などのダイジェストアルゴリズムを使用して圧縮され格納される。他の例については、指紋の完全な照合を必要としない、すなわち、システムでは、例えば、2つの指紋の間の90%の類似性などのパーセンテージ照合を採用することができ、これはターゲットコンピュータを特定のオペレーティングシステムを持つか、または少なくともオペレーティングシステムの特定のファミリ内にあるものとして識別するのに十分である。
以下に、OS識別の実行時のパケットの交換例を示す。3つの標準TCP SYNパケットがリモートホストに送信される。第1のパケットは、データが入っていない、またIPもTCPオプションもないSYNパケットである。パケット2は、TCP SYNパケットでもあるが、TCPオプションフィールドのTCP最大セグメントサイズは128に設定される。ここでもまた、第3およびさ最後のパケットは、TCP SYNパケットであるが、TCPオプションフィールドにおいてTCP最大セグメントサイズは384に設定される。
上記のように、3個のパケットからの返信を分析することにより、次のようにテキスト形式で表示される指紋を組み立てる。
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フラグの単一文字表示
である。
以下の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値を変更することは、パケット内の他の値を変更することに比べてターゲットコンピュータのオペレーションへの干渉の可能性も低い。
前記のオペレーティングシステム識別方法は、図4に要約されて示されている。上述のように、図4の方法により、ネットワークセキュリティシステム410はまず、矢印線420で表されている第1のパケット伝送を介して、第1のRFC準拠TCP SYNパケットをターゲットコンピュータ412に送信する。第1のTCP SYNパケットでは、TCPオプション最大セグメントサイズ(MSS)が値0に設定されている(すなわち、すべてのビットがクリアされている)。ターゲットコンピュータ412は、矢印線422で表されている第1のSYN ACKパケットで第1のTCP SYNパケットに応答する。上述のように、ターゲットコンピュータ412から受け取った第1のSYN ACKパケットに含まれている情報の少なくとも一部が、ターゲットコンピュータ内412のTCP/IPスタック内のデータにより判別され、データは、少なくとも一部は、ターゲットコンピュータ412上で実行されている特定のオペレーティングシステムにより判別される。
ネットワークセキュリティシステム410は次に、矢印線430で表されている第2のパケット伝送を介して、第2のRFC準拠TCP SYNパケットをターゲットコンピュータ412に送信する。第1のTCP SYNパケットでは、TCPオプション最大セグメントサイズ(MSS)が値128に設定されている(すなわち、ビット7がセットされている)。ターゲットコンピュータ412は、矢印線432で表されている第2のSYN ACKパケットで第2のTCP SYNパケットに応答する。上述のように、ターゲットコンピュータ412から受け取った第2のSYN ACKパケットに含まれている情報の少なくとも一部も、ターゲットコンピュータ412内のTCP/IPスタック内のデータにより判別され、データは、少なくとも一部は、ターゲットコンピュータ412上で実行されている特定のオペレーティングシステムにより判別される。
ネットワークセキュリティシステム410は次に、矢印線440で表されている第3のパケット伝送を介して、第3のRFC準拠TCP SYNパケットをターゲットコンピュータ412に送信するのが好ましい。第1のTCP SYNパケットでは、TCPオプション最大セグメントサイズ(MSS)が値384に設定されている(すなわち、ビット7および8がセットされている)。ターゲットコンピュータ412は、矢印線442で表されている第3のSYN ACKパケットで第3のTCP SYNパケットに応答する。上述のように、ターゲットコンピュータ412から受け取った第3のSYN ACKパケットに含まれている情報の少なくとも一部も、ターゲットコンピュータ412内のTCP/IPスタック内のデータにより判別され、データは、少なくとも一部は、ターゲットコンピュータ412上で実行されている特定のオペレーティングシステムにより判別される。
それとともに、TCP SYNパケットに応答してターゲットコンピュータ412からネットワークセキュリティシステム410により受信した3つのSYN ACKパケット内の情報は、図3に関して上で説明されている指紋データベース352と比較される指紋を含む。
図5は、図3のオペレーティングシステム識別方法で使用されるTCP SYNパケット500の一実施例の図である。より上位の(IP)レイヤでは、パケットは通常、送信元および送信先のインターネットプロトコルアドレスおよび一意的なネットワークアドレス(図に示されていない)を運ぶ。TCPレベルでは、パケットには、パケットの送信元である送信元ポート510およびパケットの送信先であるターゲットコンピュータ上の送信先ポート512が含まれる。32ビットシーケンス数514は、データウィンドウ内でパケットに含まれるデータの開始点を記述し、32ビット肯定応答数516は、ターゲットコンピュータにより受信された最終バイトを含む。データオフセット518および予約セクション520も、パケットの一部である。
TCPフラグ522は、パケットに関する重要な情報であることを示す。特に、SYNは、新しいストリーム内の第1のパケットを表し、シーケンス514および516内のスペースは、通常、TCPフラグ領域522内の単一ビットのほかのSYNフラグ用に予約されている。ウィンドウ524には、TCPパケット通信で末端コンピュータの1つにおけるバッファに転送できるデータ量が示される。チェックサム526および緊急ポインタ528が含まれる。TCPオプション530は、通常、最大セグメントサイズを含む。パケットパディング532の後に、パケットにより運ばれる実際のデータ534が付加される。
III.ターゲットコンピュータ識別およびターゲットポート識別のための多層ポートスキャニング
ポートスキャニングは、ネットワークセキュリティを確実なものとするための欠かせないツールである。通常、不審な侵入者は、ポートスキャナを選択されたターゲットコンピュータに適用して、開いているポートを見つけようと試みる。これらの開いているポートを通じて、侵入者は知られているまたは知られていない脆弱性を利用してターゲットコンピュータへのアクセス権を取得することを望む可能性がある。ネットワークセキュリティコンテキストに関しては、通常のポートスキャナをターゲットネットワークにつながっているそれぞれのターゲットコンピュータ上の216個すべての(65,536個の)ポートに適用することは、ネットワーク資源を著しく枯渇させ、途方もない時間を要す可能性があり、そのためターゲットコンピュータの実際の脆弱性を正確に突きとめられない場合がある。
一実施形態では、本発明は、ホスト発見およびサービス発見のオペレーションの少なくとも2つの段階を含む反復ポートスキャニングシステムを採用している。ターゲットネットワーク内のIPアドレス範囲の特定の集まり(「スキャンリスト」)について、ホスト発見では、どのIPアドレスが稼働しているターゲットコンピュータ(すなわち、ネットワークパケットに応答するコンピュータ)かを判別し、それぞれのそのようなアドレスを「稼働しているリスト」に追加し、どのIPアドレスが後述のように、部分的に応答するコンピュータを表すかを判別し、それぞれのそのようなドレスを「潜在的に稼働しているリスト」に追加し、どのIPアドレスが非応答のコンピュータを表すかを判別し、それぞれのそのようなアドレスを「不稼働リスト」に追加する。サービススキャンでは、ホスト発見段階で稼働していると報告されたそれぞれのターゲットコンピュータは、トラフィックに対して開いている可能性のある知られている一組のポートのスキャニングを受ける。
A.ホスト発見
以下で詳述するが、ホスト発見段階では、1つ、2つ、または3つの異なるテストをスキャンリスト上の各IPアドレスに適用する。バッチでスキャンリストをスキャンし、そこでIPアドレスのそれぞれのバッチが(以下で詳述するように)並行してスキャンされ、ホストコンピュータ(すなわち、稼働しているターゲットコンピュータ)を識別する。
i.第1のテスト(ICMP ping要求)
第1のホスト発見テストでは、標準のICMPパイプ要求を各ターゲットコンピュータに送信する。応答を受信すると、ターゲットコンピュータは、スキャンリストから外され、稼働しているリストに入れられる、一実施形態では、これは、ICMPエコー要求パケットをそれぞれのホストに送信することを引き起こす。複数のICMPパケットは、並行して、バッチ内の複数のIPアドレスに送出できると都合がよい。通常、システムは、ICMPエコー返信がバッチ内のすべてのIPアドレスから受信されるか、またはICMPエコー要求がタイムアウトになるまでシステムは待機する。このプロセスの結果として、スキャンリスト上のIPアドレスのバッチ毎に、ICMPエコー要求に応答するIPアドレスのリストがスキャンリストから削除され、稼働しているリスト上に置かれる。
ii.第2のテスト(TCPパケットの送信)
第1のテストでリストに載っている1つまたは複数のIPアドレスから応答を受け取らなかった場合、第2のホスト発見テストとしてスキャンリスト内の残りのターゲットコンピュータに一組のTCPパケット(単一のSYNパケットまたは完全TCP接続シーケンス(「TCP完全接続」))が送信される。特に、一実施形態では「TCP発見ポート」のリストが選択されている。選択は、開いている可能性が最も高いTCPポートに基づく。TCP発見ポートリストは、比較的短いと都合がよく、HTTP(Hypertext Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)などの周知のサービスポートを含むのが好ましい。TCPホスト発見リストの非独占的な一実施例を表3に示した。
表3:TCP発見リスト例
Figure 2005515541
リストに他の共通ポートを追加したり、そこから削除したりすることができ、例えば、特定のポートが他のポートよりも使用される可能性が高い特定のネットワーク環境に合わせてリストを手直しすることができる。この例では、File Transfer Protocol(FTP)、Secure Shell(SSH)、Telnet、Simple Mail Transfer Protocol(SMTP)、HyperText Transfer Protocol(HTTP)、Post Office Protocol(POP3)、NetBios、Secure Sockets Layer(SSL)、およびPoint−to−Point Tunneling Protocol(PPTP)を使用すると都合がよい。
一実施形態では、各ターゲットIPアドレス(ターゲットコンピュータ)のTCPホスト発見リストに載っているポートの一部または全部に標準のTCP SYNパケットが送信される。従来のICMP pingテストの場合のように、好ましい一実施形態において、並行して(すなわち、バッチで)複数のIPアドレスをテストすると都合がよい。ターゲットコンピュータがTCP SYN ACKで応答した場合、ターゲットコンピュータは稼働しているリストに追加される。そうでない場合、ターゲットへのTCP SYN要求はタイムアウトになる(すなわち、ターゲットコンピュータから応答がないまま最大期間が経過する)。
TCPスキャンテストの他の実施形態では、標準のTCP完全接続要求が標準のWindows(登録商標)Winsockインターフェースを使用して開始される。オペレーティングシステム側で、TCP三方向ハンドシェークが完了したことを確認すると、ターゲットコンピュータは稼働しているリストに追加される。ターゲットがTCP RST ACK、あいまいな応答で応答した場合、ターゲットコンピュータは「潜在的に稼働している」リストに追加される。そうでない場合、ターゲットへのTCP要求はタイムアウトになる。
前述のテストの結果、稼働しているターゲットコンピュータ(IPアドレス)のリストが稼働しているリストに入る。稼働しているリストに載っているターゲットコンピュータは、スキャンリストから削除される。「稼働しているリスト」または「潜在的に稼働しているリスト」上で確認されていないIPアドレスがある場合、ターゲットコンピュータ上の選択されたUDPポートをスキャンする第3のステップが、スキャンリスト上に残っているIPアドレスについて実行される。
iii.第3のテスト(インテリジェント型UDPポートスキャニング)
IPアドレス(すなわち、ターゲットコンピュータ)が第1の2つのテストの後もスキャンリストに残っている場合、インテリジェント型UDPポートスキャニングの第3のテストが残りのアドレスに対して実行される。後述のように、インテリジェント型UDPポートスキャニングは、不正確なことで悪名の高いUDPポートの従来型スキャニングとは異なる。TCPポートをスキャンする場合、ターゲットコンピュータからの応答により、ターゲットコンピュータ上のターゲットポートが開いていることが示される。それとは対照的に、UDPポートをスキャンしている間、ターゲットコンピュータから応答があっても、ターゲットポートが開いていることを示さず、スキャンされたUDPポートが閉じられた場合にのみ応答(ICMPエラーメッセージ)が送信される。UDPポートをスキャンする従来の方法では、「偽陽性」がかなりの回数発生し、その場合UDPスキャンの結果、応答がない(開いているポートを示唆する)が、スキャンされたUDPポートは実際には閉じられている。例えば、これは、ファイヤウォールまたはルータがターゲットコンピュータから返るICMPエラーメッセージをブロックした場合に発生するか、またはターゲットコンピュータから返送中にICMPエラーメッセージが単に喪失しただけの場合にも発生する。数千回の試験を行うと、そのようなエラーが発生する可能性がある。
ときには、侵入者は、ターゲットコンピュータからの応答を「強制する」ために、不正な形式のパケットをターゲットポートに送信する場合がある。このような知られている手法によりターゲットコンピュータ上の開いているUDPポートを識別できる可能性が高まるが、この手法では、不正な形式のパケットによりターゲットコンピュータがダメージをかなり受けるおそれもある。さらに、ファイヤウォールまたはルータは、不正な形式のパケットを検出して除去することができ、そのようなパケットがあった場合、セキュリティ違反の試みのあったことをターゲットネットワークに警告することができる。
本発明のこの実施形態によるインテリジェント型UDPポートスキャニングテストでは、ターゲットコンピュータ上のUDPポートをスキャンするために効率のよい、侵入性が低く、より正確な方法を採用している。TCPスキャニングの場合と同様に、一般的に使用されるUDPポートのUDPホスト発見リストを作成する。
UDP発見リストの一例を表4に示す。
表4:UDPホスト発見リスト例
Figure 2005515541
従来のUDPポート検出パケット内のデータとは異なり、本発明により送信されたUDPパケットに含まれるデータは、特に、UDPポートに通常関連するサービスを知っているということに基づいてスキャンされたホスト(すなわち、ターゲットコンピュータ)からの応答を促すように設計されている。UDPポートに関する情報が得られない場合、標準のデータ(例えば、単純なASCII復帰文字または制御文字を表すデータ)がUDPパケット内に入れられる。一実施形態では、UDPデータプローブパケット例は、ポート137でUDPプロトコル上で通常実行されるNetBiosネームサービスに応答を求めるように設計されている。UDPポート137に対するUDPデータプローブ例を表5に示す。この場合、プローブは、NetBiosノードステータス要求であると都合がよく、その結果、通常、UDPポートから知られている応答がある。
表5:UDPデータプローブ例
Figure 2005515541
Internet Requests For Comment(RFC)の周知の情報、プライベートな標準に関する公刊されている仕様書、知られているポートでのトラフィックの分析および監視、または正しく定められているリバースエンジニアリング手法に基づいて、特定のサービスに関連することが知られている他のUDPポートについて、類似のUDPデータプローブパケットを作成することができる。特定のプロトコルおよび特定のUDPポートは、規格、技術、オペレーティングシステムなどの変更により、時間がたつうちにかなり変更される可能性がある。知られているプロトコルからのデータプローブが特定のUDPポートについて利用できない場合、少なくとも1つの単純なASCII復帰改行を表すデータを含む標準のUDPパケットが送信される。
TCPポートスキャニングの場合と同様、複数のUDPポートを並行してスキャンできると都合がよい。通常、システムは、それぞれのターゲットコンピュータ上の一組のUDPポートにUDPデータプローブパケットを送信する。システムは、1つまたは複数のターゲットコンピュータからUDPデータ応答を受信するか、または送信されたパケットが「タイムアウト」になるまで待機する。ICMP到達不能応答を受信した場合、ホストは「潜在的に稼働している」リストに追加される。ICMP、TCP、およびUDPスキャニングの後、稼働しているまたは潜在的に稼働しているターゲットコンピュータに対応するとまだ判別されていないターゲットコンピュータのIPアドレスのみがスキャンリスト上に残される。
3ステップ発見段階は、ICMP、TCP、およびUDPスキャニングステップを採用しており、オプションにより、複数回適用し、ターゲットネットワークにつながっている稼働しているターゲットコンピュータの識別の性能を高めることもできる。一実施形態では、3つのステップすべてを通じて初期パスを実行した後、「稼働しているリスト」または「潜在的に稼働しているリスト」上で識別されていないターゲットコンピュータのIPアドレスがスキャンリスト上に残っている場合、少なくともICMPおよびTCPのステップは、それらの残っているスキャンリストのターゲットコンピュータについて所定の回数だけ繰り返される。オプションにより、UDPステップを繰り返すこともできる。特に好ましい実施形態では、より多くのポート、異なるデータプローブパケット、またはより多くのデータパケットを採用している、より集約的なUDPスキャニング手法を、スキャンリスト上に残っているターゲットコンピュータに適用することにより、ネットワークにつながっている稼働しているターゲットコンピュータのより限定的なリストを提供することができる。それとは別に、不正な形式のパケットを使用する従来のUDPスキャニングも試みることができる。
UDPスキャニングの有用性に対する障害の1つは、いくつかのターゲットコンピュータが、約250ミリ秒から約1秒までの範囲の所定の「応答待ち時間」の間に送信されるICMP応答の数を制限することである。したがって、ターゲットコンピュータが1回の応答待ち時間で20個のUDP要求をさまざまなポートに送信した場合、テストされた20個のポートすべてが閉じられているとしても、ポートが閉じられていることを示す1つまたは2つのICMPエラー応答のみを送信することができる。このため、UDPポートステータスに関してかなりあいまいになる。特に、従来のUDPスキャニング手法を適用する場合、多くの「偽陽性」(すなわち、開いていると誤って報告されたポート)があり得る。
本発明は、(1)ターゲットコンピュータの待ち時間を動的に判別し、(2)少なくとも1つの待ち時間まるまる(またはICMPエラー応答もしくはUDPデータ応答が受信されるまで)各ターゲットポートのUDPポートスキャニングを続行し、無応答UDPポートが実際には開いており、単に応答待ち時間によりマスクされていないことを保証することにより前記の問題を有利に克服できる。待ち時間は、UDPポート、好ましくは、閉じていることが知られているUDPポートを選択して、所定の最大応答待ち時間の間(すなわち、少なくともターゲットコンピュータの不稼働時間程度の間(特定の実施形態では2秒ほど))UDPデータグラム要求を送信することにより、決定される。応答ICMPエラーメッセージの間の時間またはUDP応答パケットの間の時間は、標準待ち時間を表す。このテストを繰り返して、待ち時間(不稼働時間)を確認することができる。
待ち時間が決定されたら、少なくとも所定の待ち時間の間またはICMPエラー応答もしくはUDPデータ応答を受信するまでUDP要求を連続的にターゲットポートに送信することにより応答の有効性を確認する。ICMPエラー応答を受信した場合、プロンプトUDP要求に関連するポートは閉じていると想定することができる。UDPデータ応答を受信した場合、関連するポートは開いていると想定することができる。待ち時間いっぱい、応答が受信されない場合、関連するポートは、ルータ、ファイヤウォール、またはパケット喪失がUDPポート応答に干渉していない限り、開いていると想定することができる。
前述の3ステップ発見段階およびオプションの集約的UDPスキャニングステップは、図6のプロセスフローチャートに例示されている。上述のように、また図6に例示されているように、発見段階はスキャンリスト610から始まり、このリストを解析してIPアドレス612のバッチに入れると都合がよい。ステップ620で、処理のためIPアドレスのバッチを取得する。ステップ630で、ICMP pingテストが上述のように実行される。このテスト結果に応じて、それぞれのIPアドレスが稼働しているリスト632に追加されるか、またはIPアドレス612の現在のバッチ内に残る。例示されているように、このプロセスは、さらに、潜在的に稼働しているリスト634および不稼働リスト636とともに動作する。
ICMP pingテストを実行した後、このプロセスは、決定ステップ638で、現在のバッチ内のどれかのIPアドレスが稼働しているリストに追加されていないかどうかを判別する。残っているIPアドレスがなければ、このプロセスは、決定ステップ640に進み、そこで、IPアドレスのすべてのバッチがスキャンされたかどうかを判別する。IPアドレスのバッチが残っている場合、このプロセスは、ステップ620に戻り、IPアドレスの新しいバッチを取得する。そうでない場合、プロセスは終了する。
このプロセスは、決定ステップ638で、1つまたは複数のIPアドレスが稼働しているリストに追加されていないと判定した場合、ステップ650に進み、そこで、TCP発見ポートリスト652を使用して、上述のTCP発見スキャンを実行する。IPアドレスは、スキャンの結果に応じて、稼働しているリスト632に追加されるか、または潜在的に稼働しているリスト634に追加される。その後、決定ステップ654で、このプロセスは、現在のバッチ内のIPアドレスのどれかが稼働しているリストまたは潜在的に稼働しているリストに追加されていないかどうかを判別する。IPアドレスが残っていなければ、プロセスは、上述の決定ステップ640に進む。
このプロセスは、決定ステップ654で、1つまたは複数のIPアドレスが稼働しているリストまたは潜在的に稼働しているリストに追加されていないと判定した場合、ステップ660に進み、そこで、UDP発見ポートリスト662を使用して、上述のインテリジェント型UDP発見スキャンが実行される。IPアドレスは、スキャンの結果に応じて、稼働しているリスト632、潜在的に稼働しているリスト634、または不稼働リスト636に追加される。その後、決定ステップ664で、このプロセスは、現在のバッチ内のIPアドレスのどれかが稼働しているリスト、潜在的に稼働しているリスト、または不稼働リストに追加されていないかどうかを判別する。IPアドレスが残っていなければ、プロセスは、上述の決定ステップ640に進む。
このプロセスは、決定ステップ662で、1つまたは複数のIPアドレスが稼働しているリスト、潜在的に稼働しているリスト、または不稼働リストに追加されていないと判定した場合、ステップ670に進み、そこで、スキャンする追加ポートを含んでいると都合がよい、第2のUDPポートリスト672を使用して、上述の集約的UDP発見スキャンが実行される。一実施形態では、第2のUDPポートリスト672は有利な形で以下で説明されているUDPサービスポートリストであるが、UDPポートの任意の組み合わせを使用することができる。ここでもまたIPアドレスは、集約的スキャンの結果に応じて、稼働しているリスト632、潜在的に稼働しているリスト634、および不稼働リスト636に追加される。その後、このプロセスは、決定ステップ674で、発見テストを繰り返す必要があるかどうかを決定する。すべてのIPアドレスが3つのリストのうちの1つに追加されており、どのIPアドレスも残っていなければ、プロセスは、上述の決定ステップ640に進む。リストの1つに追加されていない残っているIPアドレスが残る場合、このプロセスにおいて、IPアドレスの現在のバッチについて、スキャニングステップを所定の回数実行したかどうかを判別する。これらのステップが所定の回数実行された場合、このプロセスは、決定ステップ640に進む。そうでない場合、このプロセスは、ICMP pingテスト630に戻り、再び、残っているIPアドレスを処理する。
上述のように、集約的UDP発見スキャン670はオプションである。集約的UDP発見スキャン670が含まれていない場合、インテリジェント型UDP発見スキャン660の後に続く決定ステップ664は、スキャニングプロセスが所定の回数実行されたかどうかに基づき、スキャニングプロセスを繰り返すかどうかの追加決定を含むと都合がよい。
B.サービス発見
一実施形態では、本発明はさらに進み、それぞれのホスト(すなわち、ターゲットコンピュータ)をより詳しく調べるが、その際に、稼働しているリストを使用し、またオプションにより、潜在的に稼働しているリストも使用する。サービス発見では、一組の共通TCPサービスポートおよび一組の共通UDPサービスポートがスキャンされる。TCPサービス発見リストおよびUDPサービス発見リストは、通常、TCPホスト発見リストおよびUDPホスト発見リストに比べてかなり大きい。それぞれのリストは、通常、通信に一般に使用されるポートの何らかの部分集合を含む。例えば、それぞれのリストは、数個から数百までの任意のポートを含むことができる。通常、それぞれのリストは、表6に示されているようなポートを含む(Windows(登録商標)2000に関してMicrosoft(登録商標)社が公開報告している既定のポートのリスト例)。このリストは、網羅しているわけではなく、技術、プロトコル、ネットワーク基盤、およびオペレーティングシステムが変わると、ポートの要件も変更されるのがしばしばである。
表6:サービス発見のUDPおよびTCPポート群の例
Figure 2005515541
それぞれのターゲットコンピュータは216(65,536)個のポートを備えることが可能なので、一般に時間の制約により、特に大きなネットワークでは、それぞれのターゲットコンピュータ上のすべてのポートをスキャンすることができないため、ポートの部分集合を選択するのが好ましい。同様に、それぞれのターゲットコンピュータ上でポートをランダムに選択することが有益である可能性はまったくないが、それは、平均的なターゲットコンピュータでは、実行されるサービスの数は10数個未満であり、まれなケースでは、数十あるいは数百個であって、ポートをランダムに選択して開いているポートに当たる確率は、非効率で不正確なものとなる。
本発明の好ましい実施形態によれば、TCPサービス発見では、TCPサービススキャンポートの大きなリストを使用し、それぞれのターゲットコンピュータ上のそれぞれのターゲットポートに接続を試みるが、それらのスキャンポートの一部のみ上に示されている。上述のホスト発見の場合と同様、標準のTCP SYNスキャニングでは、それぞれのターゲットポートからのSYN ACK応答を待つ必要があるか、またはTCP「完全接続」スキャニングでは、ターゲットコンピュータとスキャニングシステムとの間の3方向ハンドシェークが完了したことを示すオペレーティングシステムメッセージが来るのを待つ必要がある。これらの攻撃のいずれかに肯定的に応答するターゲットコンピュータは、脆弱性のあるコンピュータのリストに追加され、見つかったそれぞれの開いているターゲットポートについて脆弱性評価を受ける。
本発明の好ましい実施形態によれば、UDPサービス発見では、UDPサービススキャンポートの大きなリストを使用し、それぞれのターゲットコンピュータ上のそれぞれのターゲットポートに接続を試みるが、それらのスキャンポートの一部のみ上に示されている。上述のホスト発見の場合と同様に、本発明では、特定のサービスに一般に関連付けられていると認識されている任意のポートに対して改良されたUDPデータプローブパケットを使用することができ都合がよい。それとは別に、1つまたは複数のASCII復帰文字などの標準文字を表すデータを含むパケットを使用することもできる。この攻撃に肯定的に応答するターゲットコンピュータは、脆弱性のあるコンピュータのリストに追加され、見つかったそれぞれの開いているターゲットポートについて脆弱性評価を受ける。使用される脆弱性は、通常、すでに述べたオペレーティングシステム識別システムおよびターゲットコンピュータ上に見つかった、開いているポートに関連付けられた脆弱性により発見されたターゲットコンピュータのオペレーティングシステムに関連するものに限定される。ターゲットコンピュータのオペレーティングシステムが最終的に識別できない場合、本明細書で説明されているサービス発見システムの実行中にターゲットコンピュータ上で開いている見つかったポートに関連付けられた通常すべての脆弱性がターゲットコンピュータに対してテストされる。
ホスト発見の場合と同様、より集約的なUDPスキャニング方式を、単純なUDPデータプローブパケットに応答しないターゲットコンピュータに適用することができる。より集約的なUDPスキャニング方式では、例えば、上述のオプションの待ち時間解決方式と従来のUDPポートスキャニングとを併用すると都合がよい。
脆弱性評価の後、ターゲットコンピュータのオプションのアクティブな評価が実行される。アクティブな評価では、ターゲットコンピュータのオペレーティングシステム、開いているポート、ならびに脆弱性評価時にターゲットネットワークから復旧された情報を知っているということを適用し、各ターゲットコンピュータに対し知られている脆弱性をさらにテストする。
複数のポートの並列処理
好ましい一実施形態では、本発明は個々のポートの直列スキャニングを次から次へと完了して行くのではなく、ポートスキャニングを「バッチ」で実行するので都合がよい。このため、大きなスキャンの小さな断片を完了し、データベースに保存することができ、大きなスキャンの結果全体をすべて一度にメモリ内に保持する必要はない。例えば、クラスAネットワークをテストする場合、ただ単にホスト発見のためだけに、数億個のポートをスキャンする必要がある。旧いネットワーク機器の技術的制限にシステムを適合させ、複数の著しいIPアドレス範囲を持つ非常に大きなターゲットネットワーク内のコンピュータのポートをスキャンするようにできると都合がよい。ネットワークまたはシステムの障害が発生した場合、システムは最後に知られている正常に完了したバッチの後に特に大きなスキャンを再開する。
ポートスキャニングプロセスの実行中に、本発明の好ましい実施形態により、例えば、スキャン範囲内で表されている64台のターゲットコンピュータを含む、IPアドレスのスキャン範囲全体の小さな部分または「バッチ」を識別する。ホスト発見では、ターゲットコンピュータの第1のバッチの使用を開始する。第1のバッチ内の稼働しているすべてのホストが発見された場合、TCPおよびUDPサービスのサービス発見は、本明細書で説明されている、オペレーティングシステム識別、ネットワークトポロジのtracerouteの実行、および脆弱性のアクティブな評価などの他のテストサービスとともに、第1のバッチで稼働しているホストに対して実行される。バッチが完了すると、結果が脆弱性データベースに格納される。その後、64台のターゲットコンピュータの次のバッチも同様に、処理され、スキャンリスト全体がターゲットネットワークに対して処理されるまで続けられる。
単一または少数のターゲットコンピュータ上で並列に多数のポートをテストするのではなく、1つまたは少数のポート上で並列に多数のターゲットコンピュータをテストするのが好ましい。通常、前者の方法では、単一のターゲットコンピュータへの過度の負荷の防止、ネットワークの過負荷の防止、およびターゲットネットワークセキュリティアラートのトリガのリスク低減が行われる。ときには、例えば、少数のターゲットコンピュータがスキャニングの対象として選び出された場合には、後者の方法が好ましいこともあり得る。
より具体的には、一実施例では、本発明は、同時に、640個のパケットスロットを一組として使用する。パケットスロットは、応答を待つ間または送信されたパケットがタイムアウトになるのを待つ間、送信済みパケットを追跡する、メモリ内の都合よく割り当てられた空間である。したがって、1バッチ分のターゲットコンピュータを処理する場合、最大640個までのICMP要求パケットを同時に処理することができるが、640個よりも多いまたは少ない、異なる個数のスロットを同時に割り当てて使用することも可能であることを理解されたい。送信されたパケットの1つについてICMP応答が受信されると、またはパケットがタイムアウトになった後、そのパケットに割り当てられているスロットを割り当て直して、新しいパケットを送信し応答がないか、またはタイムアウトになっていないかを監視する。そこで、1つのパケットを送信してから別のパケットの応答および/またはタイムアウトを受け取るまでの間の平均的遅延時間は短いので、パケットの移動を高速に保つことができる。例えば、640番目のICMP要求パケットが送信されるまでに、送信されたパケットの1つに対する応答が受信され、それにより、関連付けられているスロットが解放され、他のパケットの処理に使用できるようになると思われる。一般にTCP SYNパケット、UDPホスト発見、およびサービス発見の処理に対し類似の方法を適用する。当業者であれば、オペレーティングシステム識別およびtraceroute実行で、類似のバッチ並列ポート監視を使用できることを理解するであろう。これらのプロセスでは、使用されるスロットの数は、640に限られず、プログラミングまたはスキャニングの効率に応じて変更することができる。
例えば、本発明の一実施形態では、同時スキャニングに100台のターゲットコンピュータのバッチサイズを使用する。ホスト発見のため、ICMPスキャニングプロセスは100個のICMPエコー要求を送信し、応答およびタイムアウトを監視する。これはこの実施形態の640個のパケットスロットよりも少ないため、すべてのICMP要求パケットを送出することができ、すべてのパケットに対する応答またはタイムアウトを同時に監視することができる。10個のTCPポートのTCPホスト発見リストを仮定すると、TCPホスト発見スキャナは、最終的に、1000個のパケット(100台のターゲットコンピュータ×10個のポート=1000パケット)をリストに挙がっているすべてのコンピュータのリストに挙がっているすべてのポートをプローブするために送出する。この実施形態では、スキャナは、最初に、640個すべてのパケットスロットを使用して逐次バーストで640個のパケットを送出する。しかし、上述のように、640番目のパケットが送信されるまでに、(タイムアウトの設定およびシステムが受け取る応答の数に応じて)640個のすでに送信されているパケットのうちの少なくとも1つは、応答またはタイムアウトを生成しており、残り360個のパケットのうちの1つを送信できるようにそのバケットスロットを解放する可能性がある。応答パケットおよびタイムアウトの受信を常時監視することにより、ターゲットコンピュータのリスト全体をテストすることができ、しかも無駄な時間はほとんどかからない。
より大きなバッチサイズおよびより多くのパケットスロットを使用することができるが、そのような使用の効率は、稼働しているホスト、タイムアウト値、ネットワーク応答時間、メモリおよびその他のシステム資源などを含むターゲットネットワークの個数にもよる。一般に、非常に大きなバッチサイズだと、それに応じてホスト発見段階が長くなり、システムがサービススキャニング段階で発見されたホストのスキャニングを開始するまでに、ターゲットコンピュータが何らかの形で変更されている可能性が高い。
上述のサービス発見段階は、図7のプロセスフローチャートに示されている。プロセスは、都合よく図6により例示されているホスト発見プロセスにより生成された稼働しているリスト632に対応している、稼働しているリスト710から始まる。このプロセスは、さらに、図6で生成された潜在的に稼働しているリスト634も含むことができるが、説明を簡単にするため、潜在的に稼働しているリストは図7に示されていない。稼働しているリスト710内のIPアドレスは、解析してIPアドレス712のバッチにまとめると都合がよい。後述のように、図7のプロセスはターゲットコンピュータ脆弱性データベース714および知られている脆弱性データベース716に作用する。
図7の第1の決定ステップ720で、このプロセスは、TCP SYNスキャニングまたはTCP「完全接続」スキャニングが実行されているかどうかを判別する。上述のように、TCP完全接続スキャニングプロセスでは、プロセスはターゲットコンピュータとスキャニングシステムとの間の3方向ハンドシェークが確立されていることを示すオペレーティングシステムメッセージの届くのを待つ必要がある。TCP SYNスキャニングプロセスでは、このプロセスは、それぞれのターゲットポートからSYN ACK応答が来るのを待ち、その場合、上述のように、ターゲットコンピュータは並列処理することができる。いずれの場合も、プロセスは、ステップ722に進み、第1のバッチの稼働している(または潜在力に稼働している)ターゲットコンピュータを表す第1のバッチのIPアドレスを取得する。TCP完全接続スキャニングが実行されている場合、このプロセスは、ターゲットコンピュータにつながっている比較的少数のポートを1度に操作する。このプロセスは決定ステップ730に進む。
決定ステップ730で、このプロセスは、すべての稼働しているターゲットコンピュータがTCP完全接続スキャニングで処理されているか、または稼働しているターゲットコンピュータのすべてのバッチがTCP SYNスキャニングで指示されているかを判別する。すべてのターゲットコンピュータまたはすべてのバッチのターゲットコンピュータがすでに処理されている場合、このプロセスは終了する。そうでない場合、このプロセスはTCPサービススキャンルーチン740に進み、そこで、TCPサービス発見リスト742を使用してターゲットコンピュータ毎に調査すべきTCPサービスポートを識別する。上述のように、TCPパケットは、各ターゲットコンピュータの識別されたTCPサービスポートに送信され、ターゲットコンピュータ脆弱性データベース714は、応答が受信されたか、あるいはスキャンされたそれぞれのTCPサービスポートについてそれぞれのターゲットコンピュータから受信されないかに応じて、知られている脆弱性データベースを使用して開いていると判別される特定のTCPサービスポートに関する脆弱性情報を取得することで、ターゲットコンピュータ毎に更新される。
TCPサービススキャンルーチン740を実行した後、プロセスはオプションのUDP待ち時間テスト750に進み、そこで、それぞれのターゲットコンピュータの待ち時間が判別され、待ち時間データベース752に格納される。プロセスは、待ち時間テスト750または直接TCPサービススキャンルーチン740からUDPサービススキャン760に進み、そこで、UDPサービス発見リスト762を使用してターゲットコンピュータ毎に調査すべきUDPサービスポートを識別する。上述のように、UDPパケットは、各ターゲットコンピュータの識別されたUDPサービスポートに送信され、ターゲットコンピュータ脆弱性データベース714は、応答が受信されたか、あるいはスキャンされたそれぞれのUDPサービスポートについてそれぞれのターゲットコンピュータから受信されないかに応じて、知られている脆弱性データベースを使用して開いていると判別される特定のUDPサービスポートに関する脆弱性情報を取得することで、ターゲットコンピュータ毎に更新される。
UDPサービススキャンルーチン760を完了した後、プロセスは、決定ステップ770に進み、そこで、スキャンされたすべてのサービスポートから応答が受信されたかどうかを判別する。受信されていない場合、プロセスは、現在のターゲットコンピュータまたはバッチのターゲットコンピュータのスキャンが所定の回数、実行されたかどうかを判別する。スキャンされたすべてのサービスポートが応答したか、またはスキャニングが所定回数、実行された場合に、プロセスは、ステップ720に戻る。そうでない場合、プロセスは、TCPサービススキャンルーチン740に戻り、応答しなかったサービスポートをスキャンする。
C.バナーグラビング
「バナーグラビング」は、ターゲットコンピュータから受信されたパケットから関連する情報を剥ぎ取る方法である。一実施形態では、稼働しているリスト内のターゲットコンピュータ毎に、サービススキャン段階で発見されたそれぞれの開いているTCPポートおよびそれぞれの開いているUDPポートに対してバナーグラビングの実行を試みる。情報が応答TCPまたはUDPパケットから正常に受信された場合、この情報は、取得元のターゲットコンピュータと関連してデータベースに格納される。その後、格納されている情報は、ターゲットコンピュータ上の脆弱性情報を収集するために使用され、脆弱性情報はさらに、データベースにも格納される。
サービス発見段階で特定された開いているTCPポート毎に、そのポートが特定のサービスに通常関連付けられていることが知られている場合にTCPデータプローブはそのポートに送信される。そこで、例えば、TCPデータプローブをターゲットコンピュータ上のターゲットTCPポート80に送信する場合、TCPポート80がHTTPの共通サービスポートとしてよく知られていれば、システムは、HTTP準拠GET要求を送信し、ターゲットコンピュータから送り返されたTCP応答パケットから有用な情報を剥ぎ取る。上の表に示されているように、周知のサービスが実行されている状態で類似のコマンドを他のポートについても使用することができる。得られた有用な情報は、読み取り可能な、もしくは処理可能な形式(例えば、テキスト)に変換または翻訳し、後で報告できるように格納しておくと都合がよい。
サービス発見段階で発見されたUDPポート毎に、通常サービスに関連付けられていることが知られているターゲットコンピュータ上の各UDPポートに類似のUDPデータプローブが送信される。したがって、例えば、前述の表から、UDPポート137は、NetBIOSサービスに関連付けられていることが知られる。一実施形態では、このシステムは、例えば、NetBIOSノードステータスコマンドを送信し、ターゲットコンピュータにより送信された応答パケットから有用な情報を剥ぎ取って格納する。ここでもまた、このようにして得られた有用な情報は、読み取り可能な、もしくは処理可能な形式(例えば、テキスト)に変換または翻訳し、後で報告できるように格納しておくと都合がよい。
IV.Tracerouteの実行
一実施形態では、稼働しているリスト内のターゲットコンピュータ毎に、システムとターゲットコンピュータとの間のICMP tracerouteの実行を試みる。ICMP tracerouteが不完全な場合、システムとターゲットコンピュータとの間のTCP tracerouteの実行を試みる。それぞれのターゲットコンピュータに対するtracerouteの結果に基づいて、ターゲットネットワークトポロジのマップが作成され、データベースに格納される。
最初に、従来のICMP tracerouteが実行される。TCP/IPヘッダ内に、TTL 1から始まる、さまざまなTTL(有効期間)値を入れて、ターゲットコンピュータに多数のパケットが送信される。ICMPエコー要求パケットが送信先ターゲットコンピュータに到達できなかった場合、これは、パケットの送信元のルータ/ホストのIPアドレスを含むICMP送信先到達不能パケットを返す。ターゲットコンピュータ自体に到着したパケットは、ICMPエコー返信パケットを返す。知られているTTL値に基づいて、システムとターゲットコンピュータとの間の「ホップ」回数および各「ホップ」でのルータ/ホストをマッピングすることができる。すべてのパケットが到着するか、またはタイムアウトになった場合、システムとターゲットコンピュータとの間のそれぞれの「ホップ」に関連付けられているルータ/ホストおよびIPアドレスがあれば、tracerouteステップはそのターゲットコンピュータについて完了する。ICMP tracerouteは、完了トレースが受信されるか、または最大回数のパスが完了するまで、所定の回数のパスを続行する。所定の回数のパスの後、ターゲットコンピュータのtracerouteが不完全であれば、TCP tracerouteが試みられる。
TCP tracerouteは、TCP SYNパケットが使用されるのを除き、ICMP tracerouteと同様の動作をする。場合によっては、例えば、ICMPパケットはファイヤウォールまたはルータによってブロックされることもあるため、TCPパケットは、他の方法では不完全なトレースを完了させる場合により信頼性が高い。通常、選択されたTCPポートは、tracerouteの対象であるターゲットコンピュータについて発見された開いているポートのリストから取り出される。ICMP tracerouteを実行した場合のように、各SYNパケット内のTTL値は漸次増加し、ICMP到達不能パケットおよびSYN ACKパケットが戻るかどうかが、スキャニングシステムとターゲットホストの間のすべての「ホップ」に関して監視される。ICMP tracerouteとTCP tracerouteを組み合わせることで、各ターゲットコンピュータへの完全なマップ、および合わせて、ターゲットネットワークトポロジの比較的完全なマップを作成すると都合がよい。
ネットワークマップは、tracerouteを実行する方法で発見されたとおりにネットワークのトポロジをできる限り簡潔に表そうとする試みである。基本的に、パケットはスキャンされたネットワーク内で発見されたそれぞれのホストに送信され、その際に、有効期間フィールドはホップカウントのせいで送信できないことを示すパケットがスキャニングマシンから数ホップ離れているマシンにより送信されるホップカウントに設定される。TTLを高くし、注目されているホストから応答を取得するまで応答するマシンのIPを格納することにより、そのホストに至るマシンを表すIP文字列を構築する。この手順は完全と言うにはほど遠い。所定のホップでのマシンは、tracerouteアルゴリズムにより期待される時間内に応答しないか、またはtracerouteパケットをブロックするファイヤウォールである場合に全く応答しないことがある。存在し得るアプローチでは、このような不確定性を何らかの方法で処置しなければならない。一実施形態では、未知の対象物をファイヤウォールと想定する。
採用されるアルゴリズムは、通常、一組の発見されたホストを与えられ、それぞれのホストはtracerouteアルゴリズムでホストに至るマシンであると最初に判別するものを表すIPアドレスを含む。この文字列は、0xFFFFFFFFまたは255.255.255.255で示される未知の対象物を含むことができる。アルゴリズムは以下のように動作する。
・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を持ち、それぞれの中にそのROUTERに接続されているその一組の葉を持つ。精密化について詳述する前に、マップレンダラは、それぞれのROUTERを球体として描き、その葉すべてをROUTER球の回りの軌道内のリングに埋め込まれた小さな球として描くことを指摘しておく。次に、アルゴリズムは、m_nDistFromInternetフィールドがこのROUTERのm_nDistFromInternetよりも小さい他のROUTERを探す(すなわち、このROUTERに直接接続され、それに先行するROUTERを探す)。このアルゴリズムは、見つかった最大のm_nDistFromInternetルータを取り、それにこのROUTERを視覚的に接続する。先行するROUTERが見つからない場合には、このROUTERをマップの中央に描かれているインターネットの雲に接続する。この精密化されたアルゴリズムは、それでも、上述のことをすべて実行するが、通常は、少し処理を行ってからである。
・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、...など」とプリントできるように番号が振られる。
このようにして、ネットワークマップ全体を比較的正確に、内部に格納し、報告できるように視覚的表示に変換することができる。
V.脆弱性識別およびアクティブな評価
知られているそれぞれのTCPポート、UDPポート、およびオペレーティングシステムについて、その構成に対する知られている脆弱性は、脆弱性識別符号に基づいて脆弱性データベースに格納される。脆弱性識別データベース内の多くの脆弱性項目について、脆弱性をテストするための方法を自動スクリプトに書き込むことができ、これで、疑わしい脆弱性に照らしてターゲットシステムの実際の弱点を評価すると都合がよい。一実施形態では、これらのスクリプトは、評価セキュリティスクリプト言語で作成され、またFASLで作成されるのが好ましい。FASLは、一実施形態では、C++およびJava実装に基づくスクリプト言語である。FASLは、さまざまな脆弱性に関するセキュリティテストを行うための調整可能な自動化言語を実装している。複数のFASLスクリプトを並列実行できるため都合がよい。例えば、一実施形態では、最大8個までのスクリプトを同時に実行することができる。例えば、それぞれのFASLスクリプトは、所定の脆弱性識別符号に照らしてターゲットコンピュータに脆弱性があったかどうかを示す成功または失敗の結果で応答する。FASLスクリプトによりターゲットコンピュータから収集された情報、およびこの試みの成功または失敗の情報は、後で報告できるようにターゲットコンピュータに関係するデータベースに格納され、さらに脆弱性テストで使用したり、これで追加テストを繰り返したりする。
VI.FASLスクリプト言語
FASL言語の実装は、構文の面でC++と類似している。一実施形態では、FASLは構造体オブジェクトのメンバ関数、構造体オブジェクトのコンストラクタおよびデストラクタ、構造体オブジェクトの継承、スカラー型の配列、新しいスカラー型「バイナリ」および関連関数、埋め込みゼロバイトを含む埋め込み16進数符号をサポートする文字列定数、RPCおよびNetBIOSチェック用のRPCCheck()およびSMBCheck()関数、バイナリ型で16進数出力するすべてのスカラー型に対するdebugMessage()、再帰、関数オーバーロード、参照パラメータ、ならびにActive−Assessmentのサポートを含む。
FASLの特定の一実装では、すべての変数はスタック変数である。再帰を許可することに加えて、さらに、構文解析ツリーを1回作成し、その後、これを使用して、複数のスレッドにより同じスクリプトを実行することができる。FASLの実行アーキテクチャでは、構文解析ツリーを読み取り専用データ構造として扱う。したがって、同じターゲットコンピュータのIPおよびポート上でSocketをインスタンス化することを試みる同じスクリプトの2つのインスタンスなどの考慮事項以外に(実際には、発生しないであろう)、FASLは完全にスレッドセーフである。
A.スカラーデータ型
スカラーデータ型は、実行スタック上でスロットを1つ占有する、言語にネイティブの型である。基本的に、宣言することが可能な変数はスカラー型、スカラー型の配列、または構造体のインスタンスである。スカラー型は次のとおりである。
表7:FASLデータ型

Figure 2005515541
通常、文字列はNULL終端である。すなわち、文字列は、内部的に、末尾を示すゼロを含む文字の列として表されるということである。しかし、このゼロは、常に、暗黙のうちに存在する。すなわち、ゼロを返す文字列関数はないということである。文字列の長さは、ゼロの位置までの(ゼロを含まない)文字の個数をカウントすることにより計算される。これでなんとかうまくゆくので、定数が、例えば、「this is a string\x0 with stuff beyond the zero.」という文字列に割り当てられた場合、その文字列の値は「this is a string」となり、長さは16である。バイナリ型では、通常、内部表示内では0または他の区切り文字を使用しない。0が埋め込まれている文字列定数の例では、バイナリの中にもあるゼロの後にすべてがある。
例えば、
binary b=“1234”;// 長さ=4
string s=“1234”;// 長さ=4
binary b=“zzzz\x0ssss”;// 値=“zzzz\x0ssss”,長さ=9
string s=“zzzz\x0ssss”;// 値=“zzzz”,長さ=4
である。
intと同等の型(intを含む式の中で交換可能)は以下のとおりである。
表8:intに似た追加FASL型

Figure 2005515541
所定の型の定数値を示すキーワードは以下のとおりである。
表9:追加FASL定数

Figure 2005515541
intと同等の上の型はさらに、それらの型の定数値を示すキーワードを持つ。例えば、これらは(上記に関して)以下のとおりである。
表10:FASL型定数

Figure 2005515541
B.ステートメント
FASLスクリプトは、通常、ステートメントのリストである。これらのステートメントは、一般に、セミコロンによって区切られる。この規則の例外は、ブロックを含むステートメント({と}で囲まれている他のステートメントリスト)は、通常、区切るためにセミコロンを必要としないという点である。セミコロンは、有効な(空)ステートメントとなり、したがって、ブロックを伴うステートメントの後にセミコロンを入れても何ら問題はなく、何も実行されないだけである。新しいブロックは、新しいスコープを表す。そのスコープ内で宣言されている変数は、そのスコープ内でのみアクセス可能であり、デストラクタがある場合には、それらのデストラクタはスコープの終わりで呼び出される。変数は、変数が宣言されているスコープを閉じるスコープ内の変数と同じ名前で宣言することができる。これらは、外側のスコープ内の変数をオーバーライドするが、これらの変数は閉じられているスコープから他の方法でアクセス可能である。しかし、同じスコープ内の他の変数と同じ名前の変数があると、エラーが発生する。ステートメントは、以下のうちの1つであり、それぞれ以下で詳しく説明する。
・関数宣言:スコープ内で宣言された変数としてステートメントのリストに現れるが、その値は式からコピーされるか、さもなければ、式の型である関数呼び出しにより供給される変数を参照する、パラメータを持つステートメントの名前付きリスト。関数宣言は、スクリプトの最上位のスコープ内にのみ出現できる。
・構造体宣言:データメンバおよびメンバ関数の両方を持つことができるエンティティの宣言。メンバ関数はすべて、関数が呼び出されるオブジェクトインスタンスへの参照である暗黙の第1のパラメータを持つ。
・変数宣言:変数が宣言されていたスコープ内に存在する変数の宣言。変数は、単に宣言することができるか、あるいはその宣言の一部として、式に代入することにより初期化するか、または変数の後のかっこ内にコンストラクタパラメータを入れることにより作成できる。スカラー型にはコンストラクタはないことに注意されたい。コンストラクタを持つ型では、パラメータリストは、その型に対して存在するコンストラクタと一致していなければならない。
・式:これは、関数呼び出し、定数値、変数、メンバ選択(メンバ変数またはメンバ関数のいずれか)、ならびに変数、定数などの算術および論理演算とすることができる。
・Whileループ:これは、所定の条件(式)が真に解決される場合に実行されるブロック/ステートメント/スコープを持つ制御構造である。
・Repeatループ:これは、式が解決される整数値を実行回数としてブロックを実行する制御構造である。
・Ifステートメント:これは、式が真に評価されるとブロックを実行し、偽であればオプションのelseブロックを実行する制御構造である。
・Forループ:この制御構造は、かっこで囲まれた、セミコロンで区切られた、式の3つのリストを持つ。リスト内で(空の場合も、式を1つ持つ場合も、複数の場合もある)、複数の式がある場合、それらはカンマで区切る。最初に第1のリストが実行される。次は、ブロックが実行されるには真でなければならない(式のリスト内ですべて真でなければならない)条件であり、最後は、ループを通る毎に実行される式のイテレータリストである。
・ブロック:多数のステートメントがブロックを所有することに注意されたい。ブロックは、制御ステートメントまたは関数宣言により所有されなくてもそのまま存在していてよい。所有されないブロックは、何かの作成と破壊を、「通常の」スコープ内で遂行できない与えられた位置で実行する必要がある状況でコーディングすることができる。
C.関数宣言
関数は、「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>:関数がこの変数に対し実行するものは、呼び出しの中で与えられる対応する変数に反映される。呼び出しでは、この引数に対応する変数に縮小する式を与えなければならない(すなわち、変数、あるいは変数に縮小する構造体メンバ選択のみ)。
(場合によっては空の)<body>は、ステートメントのリストからなる。「return <expression>」というステートメントがこのボディのどこかにあった場合、関数の実行はその位置で停止し、制御権は関数の呼び出し側に返され、返される値は関数が、その関数を含む式に与える値となる。関数は、返す値を使用しなくても呼び出せる。
例えば、
----------------------
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;」と宣言することができる。
<var>は、以下のうちの1つである。
・<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];
-----------
である。
D.構造体宣言
構造体は、「structure」キーワードを使用して宣言される。これらは、以下のように、
structure <structurename> [extends <parentstructurename>]
{
<member-list>
};
と宣言される。
パラメータ<member−list>は場合によっては空の<member>のリストである。<member>は、通常、関数宣言または変数宣言のいずれかである。構造体宣言で使用したときとそうでないときのこれらの構文上の唯一の違いは、メンバ変数がイニシャライザ式またはコンストラクタパラメータを持つことができないという点である。ただし、メンバ変数は配列であってもよい。
「extends」が使用されている場合、この構造体は親のすべてのメンバを「継承」する。親構造体の中にあるのと同じ名前およびシグネチャであるこの構造体の中のメンバ関数は、その親構造体の関数をオーバーライドする。
「コンストラクタ」は、構造体変数が宣言されたときに呼び出されるメンバ関数であり、「デストラクタ」は、変数がスコープを抜けたときに呼び出されるメンバ関数である。
名前が<structurename>であるメンバ関数はコンストラクタであり、パラメータを持つ場合も持たない場合もある。名前が〜<structurename>であり、パラメータを持たない0または1つのメンバ関数があり得、これはデストラクタである。すぐにはわからないいくつかの微妙な点を以下に示す。この構造体はコンストラクタおよび/またはデストラクタを持つ、あるいはコンストラクタおよび/またはデストラクタを持つ構造体であるメンバ変数を持つオブジェクトを拡張する場合、このオブジェクト内のそれぞれのコンストラクタは暗黙のうちに、親および/または所有されるオブジェクト内の既定のコンストラクタへの呼び出しを含み、また同様に、このオブジェクトのデストラクタは親/所有されたオブジェクトのデストラクタへの呼び出しを持つ。さらに、親オブジェクトまたは所有されたオブジェクトがコンストラクタおよび/またはデストラクタを持ち、このオブジェクトはそうでない場合、親/所有されたオブジェクトのすべてのコンストラクタ/デストラクタを呼び出すためにこのオブジェクト内に1つ作成される。コンストラクタおよびデストラクタは、「function <structurename>...」または「function〜<structurename>...」(すなわち、戻り型がない)として宣言しなければならない。
宣言された構造体変数の使用は、「.」文字を使用したメンバ選択により実行される。例えば、
------------
OBJECT o;
o.m_intmember = 5;
o.m_ownedstructuremember.m_x = 8;
o.DoSomething(5, 6, "stuff");
------------
である。
E.式
式は、変数、関数呼び出し、定数、メンバ選択、およびこれらとコネクタとして使用される演算子との組み合わせである。ここでの説明のために、式を再帰的に、例えば、<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つの式は型互換性がなければならない。条件式の戻り型/値は、式の戻り型/値であり、これは、条件式を評価した後実行される。
F.制御構文
Whileループ
A while loop is expresses as:
while (<expression>)
{
<statement-list>
}
または、
while (<expression>)
<statement>;
である。
これは、ブール型を返さなければならない<expression>を評価し、<statement−list>または<statement>を実行し、その後、<expression>が真を返す限り、<expression>を再評価する。最初に<expression>が偽を返した場合、<statement−list>または<statement>は決して実行されることはない。
Repeatループ
repeat (<expression>)
{
<statement-list>
}
または、
repeat (<expression>)
<statement>;
である。
これは、<expression>を1回評価し(ブロックを実行する前に毎回「イテレータ」式を実行する大半のループ構文とは対照的に)、ブロックを何回実行するかを示すintまたはcharを返さなければならない。その後、その回数だけブロックが実行される。この関係が明確でない場合があり、whileループ内で、例えば、ループの本体は、最後に<expression>が偽に評価される式を実行しなければならず、そうでないと、いつまでもループを回り続けることになることに注意されたい。しかし、repeatループのブロックが<expression>が別の値に評価されるようなものを実行する場合、<expression>はブロックが実行される前に1回だけ評価されるので、何ら違いはない。したがって、「v=2;repeat(v){v=5;}」とすれば、無限ループに入ることはない。というよりは、vに5を2回代入することになる。
Ifステートメント
if (<expression>)
{
<statement-list>
}
または、
if (<expression>)
{
<statement-list>
}
else
{
<statement-list>
}
である。
簡単のため、単一の<statement>を{<statement−list>}の変わりに使用する場合の可能なすべてのオプションを列挙してはいないが、そのようなオプションは存在している。ブール型に解決しなければならない<expression>が真に評価された場合、第1のブロックが実行される。偽に評価され、elseブロックが存在していれば、そのブロックが実行され、存在していなければ、ブロックは何も実行されない。
Forループ
for (<expression-list>; <expression-list>; <expression-list>)
{
<statement-list>
}
または、
for (<expression-list>; <expression-list>; <expression-list>)
<statement>;
である。
<expression−list>は全くないか、または単一の<expression>であるか、またはカンマで区切られた式のリストである。第1の<expression−list>は、最初に呼び出され、戻り値は無視されるので式のどのような混合でもよい。真ん中の<expression−list>は、ブロックを実行するかどうか、ループが繰り返しを続けるかどうかを決定する条件である。このリスト内のすべての式は、ブール型を返さなければならず、すべて、ブロックが実行される順序で真を返さなければならない。最後の<expression−list>は、式の混合でよく、毎回ブロックが実行された後に実行される。
古典的な例は、「for(x=0; x<8; x++){<statement−list>}」である。xを0に設定し、xが8未満かどうか検査し、真であることがわかると、ブロックを実行し、xを1にインクリメントし、xが8未満か検査し、それが真であることがわかると、ブロックを実行し、...と、xが8になり、条件が偽になり、ループ実行が終了するまで続ける。
G.ネイティブオブジェクト
FASL言語の一実施形態の文法/構文要素は上で規定されている。これらだけで、計算を実行し、アルゴリズムを実装するのに十分であるが、ネットワーク経由でデータを送受信するような操作については何もなく、あれば便利なことであるが、これまでに規定した文法では表現できないスカラー型に関してはいくつかの演算があることに注意されたい。このような理由から、この機能にアクセスするためのスクリプトスコープ(言うなれば「メタスコープ」)を所有するスコープ内で宣言された構造体および関数が存在する。本明細書で使用しているように、「Faultline」は、ネットワークセキュリティシステム全体を指している。
FASLオブジェクト
すべてのスクリプトは、「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変数のm_nIPAddressメンバは、FASLスクリプトが実行されるときのターゲットマシンのIPアドレスに設定されている。FASLスクリプトで実行されるすべてのネットワーク活動では、このIPアドレスを宛て先として使用するので、これから指定しようとしている関数およびオブジェクトでは、IPアドレスは決してパラメータではない。FASL.setScriptReturn(string,RETURNVALUE)を呼び出すと、m_szReturnStringメンバが設定され、その後、スクリプトの実行が完了した後、スクリプト実行コマンドラインアプリケーション「fasl.exe」により出力される。他の呼び出し、最も顕著なsetScriptOS()が、Faultline.exeにより使用される情報を設定し、所定のホストでスクリプトを実行するかしないかを決定する。すなわち、システムは、スクリプト内の「FASL.xxx()」ステートメントのみを実行し、その後、システムはメタデータを調べて、そのIPアドレスでスクリプト全体を実行するかどうかを決定する。一実施形態では、FASL_OBJECTのコンストラクタは、実際には、FASL変数については呼び出されない。そこで、m_nIPAddress以外の変数は、ときには、最初は何にも設定されない。構造体は、FASL_OBJECTから派生することができ、型FASL_OBJECTの変数を初期化することができ、その場合、コンストラクタが呼び出される。また、FASLのメンバ変数はスクリプトコード(プライベートと宣言されている)により直接アクセスできないことにも注意されたい。
Socketオブジェクト
これは、メタスコープ内で宣言されている構造体であるが、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に入力される。これにより、レポートがグラフで表示できる監査証跡が定められる。
この一般的な使い方は、脆弱性から構造を派生させることである(すなわち、「structure UnicodeVulnerability {//extra info specific to unicode vuln that can be used by other scripts};」)。一例ではユニコード脆弱性が見つかった場合、「UnicodeVulnerability uv;」などの変数が作成され、「uv.AddToExploitableData(...)」への呼び出しを介して特別データが設定され追加される。この呼び出しの後、この特定の脆弱性を利用しようとする他のスクリプトは、以下のものに似たコードを持つ。
-----------
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」
である。
関数を指定することになっている場合、容易に他の型を文字列に変換し、式全体に対しdebugMessageを実行することができる。すなわち、debugMessage(“here is what x equals:”+ intToString (hex));を実行する。通常は、スクリプトのシステム実行ではデバグ出力を無視するのがふつうなので、「サインオフ」されたスクリプトの中のdebugMessage呼び出しを削除することもコメントアウトすることも必要ない。
文字列関数
------------
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.");
}
}
-----------------
顕著なことであるが、一実施形態では、正常に行われた脆弱性テストから収集された情報を使用して、ターゲットネットワークおよび個々のターゲットコンピュータの脆弱性をさらにテストすると都合がよい。特に、脆弱性テストが正常に行われた場合、アカウントアクセスの追加ポートまたはレベルがターゲットコンピュータ上で利用可能であるのがふつうである。したがって、他の前の脆弱性テストが失敗した場合であっても、正常に行われた脆弱性テストの後に再試行すると都合がよい。
図8は、ターゲットネットワークにつながっているターゲットコンピュータの脆弱性のアクティブな評価の一実施形態の図である。簡単のため、ネットワークは、ターゲット1コンピュータ800およびターゲット2コンピュータ802を備えるように示されている。簡単のため、単一の脆弱性を2台のコンピュータのすべてのTCPおよびUDPポートに適用すると仮定する。単一の脆弱性「TEST」を、両方のターゲットコンピュータ上のさまざまなTCPおよびUDPポート上でテストする。以前のホスト発見およびポート発見では、ターゲット1データ804およびターゲット2データ806が得られており、これらは、各ターゲットコンピュータ上で見つかった開いているポートの識別を含む。特に、図8に示されている例では、TCPポート80ならびにUDPポート5000および53は、ターゲット1コンピュータ800上で開いていることが判明しており、TCPポート23および80ならびにUDPポート500、53、および1721はターゲット2コンピュータ802上で開いていることが判明している。アクティブ評価プロセスは、ステップ806で始まり、まず、TESTルーチン808を実行し、TEST脆弱性をターゲット1コンピュータ800上の各ポートに適用することによって始まる。図8の例では、ターゲット1コンピュータ800をテストする第1ラウンド810で、ポート80、5000、および53をテストすると、脆弱性の適用は成功しない。その後、システムは、ターゲット2コンピュータをテストする第1ラウンド812に入り、そこでは、ポート80および53のテストは成功しないが、ポート23、5000、および1721のテストは成功している。テストが成功すると、ターゲットコンピュータから有用な情報を剥ぎ取る試みが行われ、取り出された情報がターゲット2データ806内に格納される。取り出された新しい情報に基づいて、ターゲット1コンピュータをテストする第2ラウンド814が試みられる。この試みで、ポート80のテストはまだ不成功であるが、ポート5000および53のテストは今度は成功しており、ターゲット2データ806から収集された追加情報が含まれる。このようにして、ターゲット2コンピュータをテストする第2ラウンド816が試みられる。テストのラウンドは、脆弱性評価がターゲットネットワーク全体に対して前向きに完了できるまで繰り返される。
知られている脆弱性は、通常、データベース内に格納され、脆弱性評価検証、アクティブ評価、および報告に取り込まれる。一実施形態では、「static data」という名前の「Vulns」テーブルは、新しいパッチを展開するときにのみ変更され、新しい脆弱性を取り込む。これは、例えば、新しい脆弱性が発見され、既存の現場システムインストールにおいて認識するようにする必要がある場合に行われる。一実施例では、本システムは、以下のVulnsFoundテーブルを使用して、特定のスキャンで見つかった脆弱性を示す。VulnsFoundは、Vulnsテーブルの単なるインデックスであるが、これを使用すると、同じデータを何回も繰り返し、領域を無駄にすることがなくて済む。
-----
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レベル尺度だと、時間の経過によるセキュリティ改善または追加リスクに関する情報はほとんど得られない。
一実施形態では、本システムは、ターゲットネットワークの全体的セキュリティの客観的で定量的な印を与える。この定量的印は、十分な精度の定量的尺度となり得、1〜10、1〜100などの範囲で、時間が経過したときのネットワーク脆弱性の変化があっても意味のある区別を行うことができ、都合がよい。さらに、この客観的印では、標準的公式をターゲットネットワークおよびネットワーク構成で発見されたさまざまな脆弱性に適用し、他の何らかの形で異なるネットワーク構成、オペレーティングシステム、およびコンピュータのセキュリティの有効な比較を行うことができる。
例えば、客観的印は、FoundScore Fなどのリスク測定アルゴリズムである。図9のフローチャートに例示されている一実施形態では、FoundScore Fは以下のように定義される。
F=100−V−E (式1)
ここで、
F=FoundScore
V=脆弱性損失
E=暴露損失
である。
より具体的には、好ましい一実施形態において、脆弱性損失Vは、ターゲットネットワーク上に見つかったそれぞれの脆弱性に割り当てられた値の総和として定義される。ターゲットネットワーク上に見つかったn個の脆弱性のそれぞれについて、その脆弱性に重みが割り当てられる。
したがって、特定の脆弱性Vについて、1≦x≦nとすると、脆弱性重みVw,xは以下のように定義される。
Figure 2005515541
ここで、
PEA(V)=floor({P(V)+E(V)+A(V)}/3) (式3)
および、
floor(x)は、標準床関数であり、
P(V)は、1〜3尺度による脆弱性の人気度であり、
E(V)は、1〜3尺度による脆弱性の搾取容易性であり、
A(V)は、1〜3尺度による脆弱性により与えられるアクセス/特権のレベルである。
ここで、この尺度でスコアが高いほど、リスクは大きい。
それとは別に、脆弱性は、単に、次のような脆弱性に関連付けられているリスクレベルとして定義することができる。
PEA(V)=R(V) (式3a)
ここで、R(V)は、1〜3尺度による脆弱性に関連するリスクである。
通常、特定の脆弱性についてPEA(V)を決定するために使用される係数は、前述の脆弱性データベースから得られる。他の実施形態では、脆弱性基本関数(例えば、PEA(V))は、例えば、脆弱性分布の容易さ、脆弱性防止の容易さなど、多数の異なる変数から定義することができる。したがって、脆弱性スコア合計Vは、一実施形態では、以下に等しい。
V=min(50,Σ(X=1→n){Vw,x}) (式4)
ここで、
n=ターゲットネットワーク上で見つかった脆弱性の個数。
Σ=総和記号
W,X=上で定義した脆弱性重み、および
min(x,y)=標準最小関数
である。
一実施形態では、暴露スコア合計Eは以下のように定義される。
E=min(50,Σ(y=1→q){10×U+5×I+N+2×M}) (式5)
ここで、
q=ターゲットネットワーク上で見つかった稼働しているターゲットコンピュータの台数。
=DNSを除く、y番目のターゲットコンピュータ上で見つかった開いているUDPポート
=y番目のターゲットコンピュータ上で見つかった開いているICMPポート
=y番目のターゲットコンピュータ上で見つかった非本質的サービス
=本質的サービスのないターゲットコンピュータに対するペナルティ
Σ=総和記号、および
min(x,y)は標準最小関数
である。
特に、稼働しているターゲットコンピュータの台数qは、通常、上述のホスト発見プロセスから推論される。y番目のターゲットコンピュータ上に見つかった開いているUDPポートUの個数は、通常、上で説明したサービス発見およびアクティブ評価プロセスから推論される。y番目のターゲットコンピュータ上に見つかった非本質的サービスNの個数は、通常、TCPおよびUDPポートのサービス発見から推論され、好ましい一実施形態では、特定の所定のサービスを除き、それぞれのターゲットコンピュータ上に見つかったすべての開いているポートをカウントする。表11は、本発明の一実施形態によよる非本質的サービスNのカウントに含まれない所定のサービスの例をまとめたものである。
表11:Nカウントに含まれない本質的サービスの例

Figure 2005515541
オペレーティングシステム、プロトコルなどの変更に基づいて、本質的サービスの他の組み合わせも可能である。最後に、N>0である各ターゲットコンピュータについて1に設定されている本質的サービスペナルティフラグMはなく、また表7に示されているように本質的サービスも実行されていない。そうでなければ、Mは0に設定される。
その結果、FoundScore F=100−V−Eから、0から100までの範囲の定量的スコアが得られ、これはターゲットコンピュータの相対的セキュリティの客観的印を表す。一般に、Foundscoreが高いほど(すなわち、Fが高いほど)、ターゲットネットワークの相対的セキュリティは大きくなる。他の実施形態も可能であり、例えば、
alt=[Σ(y=1→q){(5×U+2×I+2×N+2×M}]1/2/q (式7)
alt=[Σ(x=1→n){(Vw,x}]1/2/n (式8)
alt=Ealt+Valt (式9)
ようなものがある。
この他のスコアリング方式では、Faltスコアが高いほど、ターゲットネットワークのセキュリティは悪化する。
図9は、ターゲットネットワークのセキュリティスコアを判定する方法の一実施形態の図である。第1の決定ステップ900で、この方法は、ターゲットネットワーク内に見つかったすべての脆弱性をカウントしたかどうかを判別する。カウントしていなければ、この方法は、ステップ902で、脆弱性データベース904に格納されている所定の値に基づく脆弱性の数値xについて、上のPEA(V)(式3)またはその変更形態を計算する。PEA(V)の値は、ステップ906で、脆弱性xに対する加重脆弱性VW,x(式2)を計算するために使用される。通常、この後、特定の実施形態で必要ならば、ステップ908で脆弱性カウンタがインクリメントされる。この後、この方法は、決定ステップ900に戻り、再びすべての脆弱性がカウントされたかどうかを判定する。
すべての脆弱性がカウントされた後、好ましい実施形態では、ステップ910で脆弱性総計Vを計算する。上述のように、この実施形態では、脆弱性総計Vは50またはすべての加重脆弱性スコアVw,xの総和のいずれか小さい方である。それとは別に、他のスコアも可能であり、また総スコアVの表を従来のループと組み合わせることもできる。
この後、決定ステップ912で、この方法は、ターゲットネットワーク内に見つかったすべてのターゲットコンピュータがカウントされているかどうかを判別する。カウントされていない場合、ステップ914で暴露値を決定する。好ましい実施形態では、暴露値はU(ポート53のDNSを除く、y番目のターゲットコンピュータ上に見つかった開いているUDPポート)、I(y番目のターゲットコンピュータ上に見つかった開いているICMPポート)、およびN(y番目のターゲットコンピュータ上に見つかった非本質的サービス)を含み、決定される。暴露値は、ネットワークセキュリティテストに基づいて動的に決定され、一実施形態では、ターゲットコンピュータの脆弱性データベース904または他のデータベースに格納される。ステップ916で、ペナルティMは、本質的サービスが存在しないターゲットコンピュータについて決定される。その後、ステップ918で暴露カウンタがインクリメントされ、この方法は決定ステップ912に戻り、すべてのターゲットコンピュータがカウントされたかどうかを判別するのが好ましい。
すべてのターゲットコンピュータがカウントされたら、ステップ920で、暴露合計Eが50または見つかった暴露値の加重総和のいずれか小さい方として計算される。その後、好ましい実施形態では、ステップ992で、100から脆弱性および暴露スコア合計を引いた値としてスコアFを計算し、ネットワークセキュリティスコアの表示を出力する。好ましい実施形態では、Fの値が大きいほど、客観的尺度ではネットワークセキュリティが高くなる。
他の実施例は、脆弱性スコアリングおよび暴露スコアリングに関連する係数のさまざまな順列を適用し、また同様に、本明細書の開示の範囲内に予見される。
VIII.ターゲットネットワークトポロジおよび脆弱性のグラフィック階層報告
一般に、従来のネットワークセキュリティシステムでは、テキストダンプ形式で報告情報を出力している。ネットワークトポロジ、ターゲットコンピュータ、脆弱性などに関する収集されたデータレコードは、ASCIIファイルにダンプされるため、解釈するためにかなりの労力を要する。このようなデータダンプが従来から使用されているのは、ネットワークセキュリティユーザに高危険脆弱性があることを知らせること以外に、既存のシステムは、特定の脆弱性を識別し、是正するユーザを支援する見つかったネットワーク、ターゲットコンピュータ、および脆弱を表すデータの対話的で階層的なグラフィック表示を出力しないからである。
本システムは、セキュリティテスト時に発見されたデータを、グラフィック情報階層に配置され対話的に利用できるドキュメント集合体に編集し、さまざまな詳細レベルで文書としてレビューできるようにしている。したがって、本発明の一実施形態では、レポートエンジンは(1)ネットワークトポロジ、見つかったターゲットコンピュータ、およびターゲットネットワーク全体を通して見つかった脆弱性を表す動的グラフィック表示、(2)ターゲットコンピュータ、見つかった脆弱性、および脆弱性説明の包括的リスト、(3)ターゲットネットワークの近似的セキュリティ格付けを記述する客観的スコアリングレポート、(4)ポート、サービスを記述する暴露レポート、ならびに(5)マシン毎、ポート毎、または脆弱性毎にテスト結果を記述する詳細情報を出力する。組織内の特定の個人は、異なる詳細レベルを望むことがある。例えば、上級管理職は、ターゲットネットワークの近似的セキュリティ格付けを記述する客観的スコアリングレポート(3)のみをほしがる場合がある。それとは対照的に、ネットワーク管理者は、すべてのレポート、特に、管理者側で是正する必要のあるマシンおよびマシン上のポートを識別するのに使用できる詳細情報レポート(5)を受け取ることを望む。
例えば、レポートエンジンにより生成されるレポートの機能的表示は、通常、(1)実際のスコア、(2)スコア暴露の色分け表示、および(3)定量的スコアのグラフィック表示をはじめとする、定量的スコア表示を含む。実際のスコアは、Fスコアまたは、例えば、すでに説明したように1から100の数値格付けなどの他の実施形態である。色分け表示は、スコアの全体的な脆弱性範囲を表す。したがって、一実施形態では、1から33までの範囲のスコアは高い脆弱性を示す赤色、34から66までのスコアは中間の脆弱性を示す黄色、66よりも高いスコアは低い脆弱性を示す緑色とする。他の色、範囲、および表示、例えば、アイコンまたは絵を使用して脆弱性レベルを表示することなども予見される。
図10は、例えば、ユーザが見られるように、表示装置上に表示された階層型セキュリティレポート1000の一実施形態を示している。階層型セキュリティレポートは、相対的に高いリスクに対応する値15を示す、Foundstoneスコアの表示1010を含む。このセキュリティレポートは、さらに、稼働しているターゲットコンピュータおよびターゲットコンピュータ上に配置されているサービスを含む、マッピングされたネットワークトポロジのグラフィック表示1020を含む。このセキュリティレポートは、さらに、発見されたホストのリスト1030、および発見されたサービスのリスト1040を含む。
ユーザは、図10に示されているレポート(または図に示されていない他のレポート)のいずれかを選択し、さらに詳細内容を要求することができる。図11は、例えば、2台のターゲットコンピュータの脆弱性に関してさらに詳しい内容を示す階層型セキュリティレポート1100の一実施形態を示している。例えば、表示の上部分では、ウィンドウ1110により表される第1の開いているポートおよびウィンドウ1120により表される第2の開いているポートを備える第1のターゲットコンピュータ(IPアドレス255.255.255.255の“localhost.local.net”)を識別する。第1のターゲットコンピュータの開いている各ポートは、それぞれ脆弱性を持ち、脆弱性を低減するためにターゲットコンピュータ上にインストールする脆弱性パッチを識別することができる。他の例として、セキュリティレポート1100の下位部分では、ウィンドウ1130により表される単一のを開いているポートを備える第2のターゲットコンピュータ(IPアドレス254.255.255.255の“localhost2.local.net”)を識別する。ウィンドウ1130内の情報は、ポート上のサービスが期限切れになっていることを示し、削除すべきであることを示唆しており、サービスが保持される場合にインストールする脆弱性パッチを識別すると都合がよい。
C++には「オブジェクトレイヤ」が実装されており、FASLスクリプト言語に関して上で説明したように、システムで扱うデータオブジェクトの階層を表す。すべてのオブジェクトは、1)データメンバとしてそのオブジェクトに直接関係するデータを含む(これらは、データベース内の行を持つ1対1対応である)、2)場合によっては、本発明に従う他のオブジェクトのリストを含むモデルに従う。それぞれのオブジェクトは、データベースとの間でロードまたは保存を行うことによりオブジェクトが直接かかわるデータを扱うLOAD()およびSAVE()メンバを持つ。「子」オブジェクトリストでは、UpdateToDatabase()およびUpdateFromDatabase()メンバ関数が使用される。これらは、オブジェクトのSave()またはLoad()メンバをそれぞれ呼び出す。次に、再帰的に子リストのUpdateToDatabase()またはUpdateFromDatabase()メンバを呼び出す。このようにして、オブジェクトとその子を階層内の任意の位置から選択的にロードすることができる。このように実行されるのは、オジェクトは一般に大きすぎて、すべて一度に扱えないためである。
データがロードされると、単一のスキャンを表すオブジェクトはGenerateReportメンバ関数を持つが、これにより、レポートに含まれるすべてのhtml、gif、jpg、およびpngファイルをプログラムにより生成できる。htmlファイルは、文例集ソースおよびキーワードを含む「template」htmlファイルをロードし、キーワードをそのレポートデータを表すhtmlソースで置き換えることにより生成される。gifおよびjpgは、単なる背景グラフィックスであり、レポートが変わっても変わらず、したがって、gifおよびjpg符号化の詳細を知らなくてもレポートメカニズムを使わずそのまま作成される。動的に計算する必要がある画像については、pngグラフィックス形式を使用する。これは、パブリックライブラリが存在するパブリック(ライセンスのない)形式であり、われわれはこのライブラリをシステム実行可能ファイルにリンクしている。画像は、Windows HDC(表示デバイスを表すウィンドウソフトウェアオブジェクト)上に描画され、固有の形式でオブジェクトをラップするカスタムクラスによりpngに変換される。
スキャンサマリレポートの例を以下の付録Aに掲載した。対応するFoundScoreレポートの例を以下の付録Bに掲載した。対応するネットワークトポロジレポートの例を以下の付録Cに掲載した。
本発明の説明はシステムの少なくとも1つの実施形態を含むが、本明細書の請求項で定義されている本発明の精神と範囲から逸脱することなく、システムにさまざまな変更、置き換え、および改変を加えることができることは理解されるであろう。例えば、上述のこの方法の他の実施形態はその例が図12に示されている。
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
Figure 2005515541
ターゲットネットワークの一実施形態を示す図である。 ターゲットネットワーク上のターゲットコンピュータの一実施形態を示す図である。 包括的テスト方法の一実施形態を示す図である。 オペレーティングシステム識別方法の一実施形態を示す図である。 図3のオペレーティングシステム識別方法で使用されるTCP SYNパケットの一実施例を示す図である。 どのようなターゲットコンピュータが稼働状態であるかを判別するため行う第1段階のスキャニングの一実施形態を示す図である。 ターゲットコンピュータ上でどのようなポートが開いているかを判別するために行う第2段階のスキャニングの一実施形態を示す図である。 ターゲットネットワーク上のターゲットコンピュータの脆弱性のアクティブな評価の一実施形態を示す図である。 ターゲットネットワークのセキュリティスコアを判定する方法の一実施形態を示す図である。 ネットワークトポロジおよびネットワーク脆弱性のグラフィック表示を含む、階層型セキュリティレポートの一実施形態を示す図である。 階層型セキュリティレポートの第2の実施形態を示すより詳細な図である。 包括的テスト方法の第2の実施形態を示す図である。 包括的テスト方法の第2の実施形態を示す図である。 包括的テスト方法の第2の実施形態を示す図である。 包括的テスト方法の第2の実施形態を示す図である。 包括的テスト方法の第2の実施形態を示す図である。

Claims (66)

  1. ネットワークに動作可能に接続されたターゲットコンピュータのオペレーティングシステムを判別するためのシステムであって、
    前記ネットワークによりサポートされているプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信される、第1および第2のデータパケットと、
    コンピュータ可読媒体に格納されているデータビットを含み、第1のオペレーティングシステムに関連付けられている、第1および第2のオペレーティングシステムの指紋と、
    コンピュータ可読媒体に格納されているデータビットを含み、前記第1のデータパケットの前記送信に応答して受信されたデータの少なくとも一部の表示を含む、第1のターゲットコンピュータの指紋と、
    コンピュータ可読媒体に格納されているデータビットを含み、前記第2のデータパケットの前記送信に応答して受信されたデータの少なくとも一部の表示を含む、第2のターゲットコンピュータの指紋と、
    前記第1のオペレーティングシステムの指紋及び前記第1のターゲットコンピュータの指紋を比較し、前記第2のオペレーティングシステムの指紋及び前記第2のターゲットコンピュータの指紋を比較し、前記第1のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す結果を生成する、コンピュータにより実行可能な、指紋の比較命令とを含むシステム。
  2. 前記第1のデータパケットの第1のビット範囲が、第1のパラメータ値を表し、
    前記第2のデータパケットの前記第1のビット範囲が、前記第1のパラメータ値と異なる第2のパラメータ値を表す請求項1に記載のシステム。
  3. 前記第2のパラメータ値が、前記第1のデータパケットの前記第1のビット範囲内の1つのビットを変更することにより導かれる請求項2に記載のシステム。
  4. 前記第1のオペレーティングシステムの指紋と前記第2のオペレーティングシステムの指紋とが異なる請求項2に記載のシステム。
  5. 第3のデータパケットであって、前記プロトコルに準拠し、該第3のデータパケットの前記第1のビット範囲が、前記第1および第2のパラメータ値と異なる第3のパラメータ値を表し、前記ネットワーク経由で前記ターゲットコンピュータに送信される第3のデータパケットと、
    コンピュータ可読媒体に格納されているデータビットを含み、前記第1のオペレーティングシステムに関連付けられている、前記第1および第2のオペレーティングシステムの指紋と異なる、第3のオペレーティングシステムの指紋と、
    コンピュータ可読媒体に格納されているデータビットを含み、前記第1のデータパケットの前記送信に応答して受信されたデータの少なくとも一部の表示を含む、第3のターゲットコンピュータの指紋であって、前記比較命令が、前記第3のオペレーティングシステムの指紋及び前記第3のターゲットコンピュータの指紋を比較するために、前記結果を生成する前に、コンピュータにより実行可能である第3のターゲットコンピュータの指紋とを、さらに含む請求項4に記載のシステム。
  6. コンピュータ可読媒体に格納されているデータビットを含み、第2のオペレーティングシステムに関連付けられている、第4、第5、および第6のオペレーティングシステムの指紋であって、前記第4、第5、および第6のオペレーティングシステムの指紋のうち少なくとも1つが、前記第1、第2、および第3のオペレーティングシステムの指紋のそれぞれ1つと異なり、前記比較命令が、前記第4のオペレーティングシステムの指紋及び前記第1のターゲットコンピュータの指紋を比較し、前記第5のオペレーティングシステムの指紋及び前記第2のターゲットコンピュータの指紋を比較し、前記第6のオペレーティングシステムの指紋及び前記第3のターゲットコンピュータの指紋を比較し、前記第2のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す第2の結果を生成する、コンピュータにより実行可能である、第4、第5、および第6のオペレーティングシステムの指紋をさらに含む請求項5に記載のシステム。
  7. 前記プロトコルがTCP/IPであり、
    前記第1のビット範囲が、最大セグメントサイズを表すパケットフィールドに対応する請求項5に記載のシステム。
  8. 前記第1のパラメータ値が、ビットをセットしないことで得られ、
    前記第2のパラメータ値が、1つのビットをセットすることにより得られ、
    前記第3のパラメータ値が、2つのビットをセットすることにより得られる請求項5に記載のシステム。
  9. 前記第1のパラメータ値が0であり、
    前記第2のパラメータ値が128であり、
    前記第3のパラメータ値が、128に256の倍数を加算した値である請求項5に記載のシステム。
  10. 前記第1のビット範囲が、少なくとも2バイトを表し、
    前記第2のパラメータの値が、1バイトの中の最後のビットをセットすることにより得られ、
    前記第3のパラメータの値が、1バイトの中の最後のビットをセットすることにより得られる請求項5に記載のシステム。
  11. 前記第3のパラメータが、前記第1のビット範囲内の隣接ビットをセットすることにより得られる請求項10に記載のシステム。
  12. 前記第1、第2、および第3のデータパケットが、最低パラメータ値を最初とする順序で送信される請求項5に記載のシステム。
  13. ネットワーク経由でアクセス可能なターゲットコンピュータのオペレーティングシステムを判別するためのシステムであって、
    前記ネットワークによりサポートされているプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信される、複数のデータパケットと、
    それぞれ、コンピュータ可読媒体に格納されているデータビットを含み、それぞれ、第1のオペレーティングシステムに関連付けられている、第1の複数のオペレーティングシステムの指紋と、
    それぞれ、コンピュータ可読媒体に格納されているデータビットを含み、それぞれ、前記複数のデータパケットの前記送信に応答して受信されたデータの少なくとも一部の表示を含む、複数のターゲットコンピュータの指紋と、
    前記第1の複数の前記オペレーティングシステムの指紋及び前記複数の前記ターゲットコンピュータの指紋を比較し、前記第1のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す結果を生成する、コンピュータにより実行可能な、指紋の比較命令とを含むシステム。
  14. 前記プロトコルがTCP/IPであり、
    前記複数のデータバケットのそれぞれが、それぞれのパケットフィールド内で表される異なる値を持つ請求項13に記載のシステム。
  15. 前記パケットフィールドが、最大セグメントサイズフィールドである請求項14に記載のシステム。
  16. それぞれが、コンピュータ可読媒体に格納されているデータビットを含み、それぞれが、第2のオペレーティングシステムに関連付けられている、第2の複数のオペレーティングシステムの指紋であって、前記指紋の比較命令が、前記第2の複数の前記オペレーティングシステムの指紋及び前記複数の前記ターゲットコンピュータの指紋を比較し、前記第2のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す第2の結果を生成する、第2の複数のオペレーティングシステムの指紋を、さらに含む請求項13に記載のシステム。
  17. ネットワーク経由でアクセス可能なターゲットコンピュータのオペレーティングシステムを判別するための方法であって、
    前記ネットワークによりサポートされているプロトコルに準拠する複数のデータパケットを前記ターゲットコンピュータに送信するステップと、
    各々が前記複数のデータパケットの前記送信に応答して前記ネットワーク経由で受信されたデータの少なくとも一部を含む、複数のターゲットコンピュータの指紋を生成するステップと、
    前記複数のターゲットコンピュータの指紋を、それぞれ第1のオペレーティングシステムに関連付けられている前記第1の一組の所定のオペレーティングシステムの指紋と比較するステップと、
    前記第1のオペレーティングシステムが前記ターゲットコンピュータ上で実行されていたか否かを示す結果を生成するステップとを含む方法。
  18. 前記複数のターゲットコンピュータの指紋を、それぞれ第2のオペレーティングシステムに関連付けられている前記第2の一組の所定のオペレーティングシステムの指紋と比較するステップと、
    前記第2のオペレーティングシステムが前記ターゲットコンピュータ上で実行されたか否かを示す結果を生成するステップとを、さらに含む請求項17に記載の方法。
  19. 前記プロトコルがTCP/IPであり、
    前記複数のデータバケットのいくつかが、同じパケットフィールド内で異なる値を持つ請求項17に記載の方法。
  20. 前記プロトコルがTCP/IPであり、
    前記複数のデータパケットのうちの2つのデータパケットのMSSオプションの値が、128で割り切れる請求項17に記載の方法。
  21. 前記複数のデータパケットのうちの第1のものの最大セグメントサイズオプションが0であり、
    前記複数のデータパケットのうちの第2のものの最大セグメントサイズオプションが128であり、
    前記複数のデータパケットのうちの第3のものの最大セグメントサイズオプションが384である請求項17に記載の方法。
  22. ネットワーク経由でターゲットコンピュータのオペレーティングシステムを識別するための方法であって、
    前記ネットワークのプロトコルに準拠し、第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のオペレーティングシステム及び前記ターゲットコンピュータの関係を示す値を生成するステップとを含む方法。
  23. 前記第1の応答値を、第2のオペレーティングシステムに関連付けられている第4の所定の値と比較するステップと、
    前記第2の応答値を、前記第2のオペレーティングシステムに関連付けられている第5の所定の値と比較するステップと、
    前記第3の応答値を、前記第2のオペレーティングシステムに関連付けられている第6の所定の値と比較するステップとを、さらに含む請求項22に記載の方法。
  24. 前記第1のビットパターン内ではビットは一切セットされず、
    前記第2のビットパターン内では1つのビットがセットされ、
    前記第3のビットパターン内では2つのビットがセットされる請求項22に記載の方法。
  25. 少なくとも1つのビットがセットされている前記第2のビットパターン内のバイト数が、少なくとも1つのビットがセットされている前記第1のビットパターン内のバイト数よりも多く、
    少なくとも1つのビットがセットされている前記第3のビットパターン内のバイト数が、少なくとも1つのビットがセットされている前記第2のビットパターン内のバイトの個数よりも多い請求項22に記載の方法。
  26. 前記第1のビットパターン内のどのバイトも、最下位ビットまたは最上位ビットがセットされず、
    前記第2のビットパターン内の少なくとも1つのバイトには、最上位ビットがセットされ、
    前記第3のビットパターン内の少なくとも1つのバイトには、最下位ビットがセットされている請求項22に記載の方法。
  27. ターゲットコンピュータがネットワークにつながっているか否かを判別するシステムであって、
    コンピュータ可読媒体に格納され、それぞれが、前記ネットワークの第1のプロトコルに準拠するデータパケットを受信するためにコンピュータにより使用されるポートを表し、それぞれが、知られているネットワークサービスに関連付けられているポートを表す、第1の一組のポート識別子と、
    それぞれが、前記第1の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第1のプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信される、第1の一組のデータパケットと、
    前記第1の一組のデータパケットの前記送信に応答して前記ネットワーク経由で受信される第1の一組の肯定応答パケットと、
    ホスト識別子のリストであって、それぞれの前記ホスト識別子が、それぞれのコンピュータに送信されたパケットに応答してデータを送信する前記ネットワークにつながっているコンピュータを表し、前記ホスト識別子が、前記第1の一組の肯定応答パケットが前記ターゲットコンピュータの応答のあることを示す場合に、ホスト識別子の前記リストに追加された前記ターゲットコンピュータを表す、ホスト識別子のリストとを含むシステム。
  28. コンピュータ可読媒体に格納され、それぞれが、前記ネットワークの第2のプロトコルに準拠するデータパケットを受信するためにコンピュータにより使用されるポートを表し、それぞれが、知られているネットワークサービスに関連付けられているポートを表す、第2の一組のポート識別子と、
    それぞれが、前記第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第2のプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信され、少なくとも1つが、前記知られているネットワークサービスに関連付けられているデータを含む第2の一組のデータパケットと、
    前記第2の一組のデータパケットの前記送信に応答して前記ネットワーク経由で受信される第2の一組の肯定応答パケットと、
    前記第2の一組の肯定応答パケットが前記ターゲットコンピュータに反応があることを示す場合に、ホスト識別子の前記リストに追加された前記ターゲットコンピュータを表すホスト識別子とを、さらに含む請求項27に記載のシステム。
  29. 前記第1のプロトコルがTCPであり、
    前記第2のプロトコルがUDPであり、
    前記第2の一組の肯定応答パケットが、UDPデータ応答パケットの非ゼロの集まりである請求項28に記載のシステム。
  30. コンピュータ可読媒体に格納され、それぞれが、前記ネットワークの第2のプロトコルに準拠するデータパケットを受信するためにコンピュータにより使用されるポートを表し、それぞれが、知られているネットワークサービスに関連付けられているポートを表す、第2の一組のポート識別子と、
    それぞれが、前記第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第2のプロトコルに準拠し、前記ネットワーク経由で前記ターゲットコンピュータに送信され、少なくとも1つが、前記知られているネットワークサービスに関連付けられているデータを含む第2の一組のデータパケットと、
    前記第2の一組のデータパケットの前記送信に応答して前記ネットワーク経由で受信される第2の一組の肯定応答パケットと、
    前記第2の一組の肯定応答パケットが前記ターゲットコンピュータの無反応を示さない場合に、ホスト識別子の第2のリストに追加される前記ターゲットコンピュータを表すホスト識別子であって、ホスト識別子の前記第2のリストのそれぞれが無反応であることが知られていないコンピュータを表す、ホスト識別子とを、さらに含む請求項27に記載のシステム。
  31. 前記第1のプロトコルがTCPであり、
    前記第2のプロトコルがUDPであり、
    前記第2の一組の肯定応答パケットが、ICMPエラーパケットの空の集まりである請求項30に記載のシステム。
  32. それぞれが、前記第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第2のプロトコルに準拠し、所定の最大待ち時間いっぱい、前記ターゲットコンピュータに送信される、第3の一組のデータパケットと、
    前記第3の一組のデータパケットの前記送信に応答して時間内に最初に受信される第1の応答と、
    前記第3の一組のデータパケットの前記送信に応答して時間内に2番目に受信される第2の応答であって、前記第1の応答の前記受信及び前記第2の応答の前記受信の間の時間が、ターゲットコンピュータの待ち時間を定める、第2の応答とを、さらに含む請求項30に記載のシステム。
  33. 前記第2の一組のデータパケットのそれぞれが、前記ターゲットコンピュータの待ち時間の間に前記ターゲットコンピュータに連続的に送信される請求項32に記載のシステム。
  34. それぞれが、前記第2の一組のポート識別子の少なくとも1つにより表されるポートに送られ、それぞれが、前記第2のプロトコルに準拠し、所定の最大待ち時間いっぱい、前記ターゲットコンピュータに送信される、第3の一組のデータパケットと、
    前記第3の一組のデータパケットの前記送信に応答して時間内に最初に受信される第1の応答と、
    前記第3の一組のデータパケットの前記送信に応答して時間内に2番目に受信される第2の応答であって、前記第1の応答の前記受信及び前記第2の応答の前記受信の間の時間が、ターゲットコンピュータの待ち時間を定める、第2の応答とを、さらに含む請求項28に記載のシステム。
  35. 前記第2の一組のデータパケットのそれぞれが、前記ターゲットコンピュータの待ち時間の間に前記ターゲットコンピュータに連続的に送信される請求項34に記載のシステム。
  36. ネットワーク経由でターゲットコンピュータのアクセス可能性をテストするためのシステムであって、
    コンピュータ可読媒体に格納され、それぞれが、UDP準拠ポートを表し、少なくとも1つが、知られているネットワークサービスに関連付けられているポートを表す、一組のポート識別子と、
    それぞれが、前記一組のポート識別子の少なくとも1つにより表されるポートに関連付けられている、一組のUDP準拠データパケットであって、前記UDP準拠データパケットのそれぞれが、前記ターゲットコンピュータの待ち時間とほぼ同じ時間の間前記ターゲットコンピュータに連続的に送信され、前記UDP準拠データパケットのうちの少なくとも1つが、前記知られているネットワークサービスに関連付けられているデータを含む、一組のUDP準拠データパケットと、
    前記ネットワーク経由でアクセス可能なコンピュータを表し、ゼロでない一組のUDPデータ応答パケットが前記データパケットの前記送信に応答して受信された場合に、前記ターゲットコンピュータを含む、第1のリストと、
    前記ネットワーク経由でアクセス不可能であることが知られていないコンピュータを表し、ICMPエラーパケットの空集合が前記データパケットの前記送信に応答して受信された場合に、前記ターゲットコンピュータを含む、第2のリストとを含むシステム。
  37. ターゲットコンピュータがネットワーク経由でアクセス可能かどうかを判別する方法であって、
    TCPポートを識別するステップと、
    前記ターゲットコンピュータの前記TCPポートに、それぞれがTCPに準拠している第1のデータパケットを送信するステップと、
    前記第1のデータパケットの前記送信に応答して第1の肯定応答パケットを受信するステップと、
    前記第1の肯定応答パケットがゼロでない場合に、アクセス可能なコンピュータを表すリストに前記ターゲットコンピュータの表示を追加するステップとを含む方法。
  38. ネットワークサービスに関連付けられているUDPポートを識別するステップと、
    第2のデータパケットを前記ターゲットコンピュータの前記UDPポートに送信し、前記第2のデータパケットの少なくとも1つが、前記ターゲットコンピュータの待ち時間の間中、前記ターゲットコンピュータに連続して送信されるステップと、
    前記第2のデータパケットの前記送信に応答して第2の肯定応答パケットを受信するステップと、
    前記第2の肯定応答パケットがゼロでないUDPデータ応答パケットである場合に、アクセス可能なコンピュータを表すリストに前記ターゲットコンピュータの表示を追加するステップとを、さらに含む請求項37に記載の方法。
  39. 前記ターゲットコンピュータにパケットが送信されたことに応答して受信される応答から応答までの時間を測定することにより、前記ターゲットコンピュータの前記待ち時間を決定するステップを含む請求項38に記載の方法。
  40. 前記ネットワーク経由でアクセス可能でないと知られていないコンピュータを表すリストに前記ターゲットコンピュータの表示を追加するステップであって、前記追加が、前記第2の肯定応答パケットがICMPエラーパケットの空集合を含む場合に、実行されるステップを、さらに含む請求項38に記載の方法。
  41. ネットワーク経由でターゲットコンピュータの脆弱性を評価するための方法であって、
    一組のICMPパケット、一組のTCPパケット、および一組のUDPパケットをネットワーク上のコンピュータ群に送信することにより、ネットワーク上の応答する一組のコンピュータを発見するステップと、
    TCPパケットを前記一組の応答するコンピュータのそれぞれの第1のポートに送信し、UDPパケットを前記一組の応答するコンピュータのそれぞれの第2のポートに送信することにより、前記一組の応答するコンピュータのそれぞれでサービスを検出するステップであって、前記第1および第2のポートが一般に、ネットワーク越しにデータパケットを受信するためにコンピュータにより使用され、前記TCPパケットが、前記第1のポートのうちの1つを使用することが知られている少なくとも1つのコンピュータベースのサービスに関連付けられているデータを含み、前記UDPパケットが、前記第2のポートのうちの1つを使用することが知られている少なくとも1つのコンピュータベースのサービスに関連付けられているデータを含む、ステップと、
    前記TCPパケットおよび前記UDPパケットの前記送信に応答して受信される応答を使用して、応答するポートのリストを生成するステップとを含む方法。
  42. 所定の値と、前記一組の応答するコンピュータのそれぞれへの複数のTCP準拠パケットの送信に応答して前記一組の応答するコンピュータのそれぞれから受信された応答の一部とを比較することにより、前記一組の応答するコンピュータのそれぞれにより使用されるオペレーティングシステムを判別するステップを、さらに含む請求項41に記載の方法。
  43. 自動化脆弱性スクリプトを応答ポートの前記リストで表されるそれぞれの応答ポートに適用することにより、前記ネットワーク上の脆弱性の存在を確認し、前記自動化脆弱性スクリプトのそれぞれにより、特定の応答ポートおよび特定のオペレーティングシステムを含むコンピュータ構成に関連付けられていることが知られている脆弱性をテストするステップを、さらに含む請求項42に記載の方法。
  44. 前記ネットワークのセキュリティの客観的な印を計算するステップであって、前記計算が、確認された脆弱性の加重総和に基づく、ステップを、さらに含む請求項43に記載の方法。
  45. 前記ネットワークのトポロジを判別するステップであって、前記トポロジ判別が、さまざまな有効期間(TTL)設定を持つ一組のICMPパケットを送信し、さまざまなTTL設定を持つ一組のTCPパケットを送信することにより実行されるステップを、さらに含む請求項44に記載の方法。
  46. 前記ネットワークのグラフィック表示を出力するステップであって、前記表示が、前記ネットワークのトポロジマップ、加重された確認済み脆弱性の色分けされた表示、ならびに、前記グラフィック表示及び確認された脆弱性の情報記述子と、前記ネットワーク上のコンピュータとの関連付けを含む、ステップを、さらに含む請求項45に記載の方法。
  47. ネットワークのグラフィック表示を作成する方法であって、
    ネットワーク上のノードのIPアドレスを取得するステップと、
    前記ノード間のノード距離および接続関係を取得するステップと、
    いくつかのノードをルータとして識別するステップと、
    他のノードを前記ルータの1つに接続されている葉ノードとして識別するステップと、
    ルータノードのグラフィック表示を生成するステップと、
    ルータ毎に、前記それぞれのルータの前記グラフィック表示との空間関係を持つ直接接続されている葉ノードのグラフィック表示を示すことにより、前記直接接続されている葉ノードのグラフィック表示を生成するステップと、
    介在するルータを持たないルータ間のリンクを示すステップとを含む方法。
  48. ルータ毎に、前記それぞれのルータのIPアドレスと、前記直接接続されている葉ノードのそれぞれのIPアドレスとを比較して、直接接続されている葉ノードおよび前記それぞれのルータが、同じノードの2つのネットワーク接続を表すインスタンスを解決するステップを、さらに含む請求項47に記載の方法。
  49. ネットワークのトポロジ表示を作成する方法であって、
    前記ネットワーク上の応答コンピュータを識別するステップと、
    それぞれの応答コンピュータに、増大する有効期間(TTL)値を持つパケットのシーケンスを送信することにより、複数のIPアドレスのシーケンスを取得するステップであって、それぞれのIPアドレスのシーケンスが発信元コンピュータと前記応答コンピュータのうちの1つとの間の前記ネットワーク内のノードを表し、各シーケンス内の隣接するIPアドレスが接続されているノードを表し、前記ノードのそれぞれがコンピュータまたはルータを含む、ステップと、
    ノード構造のリストを生成するステップであって、前記ノード構造のそれぞれが、ノードを表すデータ及びそれが直接接続する他のノードを示すデータを含み、前記リストが、前記複数のシーケンス内のすべてのIPアドレスを表す、ステップと、
    それぞれのIPアドレスに関して距離カウントを判別するステップであって、前記距離カウントが、前記IPアドレスを持つノード及び発信元ノードの間のノード数を表す、ステップと、
    ルータを備えるノードを表す、それぞれのノード構造に対するルータ構造を作成するステップと、
    前期ルータ構造のそれぞれに、前記それぞれのルータ構造により表されている前記ルータを除いて、他のどのノードにも接続していない、それぞれの接続ノードを表す接続データを関連付けるステップと、
    前記それぞれのルータ構造の前記接続データにより表される接続ノードに対応する、1つまたは複数のグラフィック形状に空間的に関係するグラフィック形状を、ルータ構造毎に視覚的に示すステップと、
    前記それぞれのルータ構造および異なるルータ構造により表されるルータの前記IPアドレスに関連付けられた距離カウントが直接的接続を示している場合に、前記それぞれのルータ構造に関連付けられたグラフィック形状及び前記異なるルータ構造に関連付けられた他のグラフィック形状の間の接続を、ルータ構造毎に視覚的に示すステップとを含む方法。
  50. ルータ構造により表されるルータおよび接続データで表される接続ノードが、1つのノードの2つのネットワーク接続を含むか否かをテストするステップを、さらに含む請求項49に記載の方法。
  51. ルータを表す前記グラフィック形状が球形であり、
    前記空間的に関係付けられたグラフィック形状のそれぞれが、前記ルータを表す前記球形の周囲を軌道を描いて回る球形である請求項49に記載の方法。
  52. 客観的脆弱性スコアを計算する方法であって、
    ネットワークの知られている脆弱性を識別するステップと、
    搾取容易性または許可されたアクセスのレベルのいずれかに基づいて、前記知られている脆弱性に加重するステップと、
    ネットワークの知られている加重脆弱性の組み合わせを数値的に表す脆弱性値を決定するステップとを含む方法。
  53. ネットワークの客観的セキュリティスコアを計算する方法であって、
    ネットワークの知られている脆弱性の組み合わせを数値的に表す脆弱性値を決定するステップと、
    前記ネットワーク上のコンピュータのアクセス可能なポートの組み合わせを数値的に表す暴露値を決定するステップと、
    前記脆弱性値及び前記暴露値を組み合わせることによりスコアを導くステップとを含む方法。
  54. 知られている脆弱性の前記組み合わせが、特定の脆弱性の加重数値表示の総和であり、
    前記加重が、搾取容易性ランキングおよびそれぞれの脆弱性のアクセス付与ランキングに基づく請求項53に記載の方法。
  55. 自動化ネットワーク脆弱性攻撃を実施する方法であって、
    ネットワーク上のそれぞれの応答コンピュータについて一組の脆弱性攻撃を選択するステップであって、それぞれの応答コンピュータについて選択されたそれぞれの脆弱性攻撃が、アクセス可能であることが知られている前記それぞれのコンピュータのポートに関連付けられ、さらに前記それぞれのコンピュータにより使用されるオペレーティングシステムに関連付けられている脆弱性を暴露するように設計されている、ステップと、
    それぞれが一意的な識別子によりデータベースで表示されるように前記一組の脆弱性攻撃を符号化するステップと、
    自動化スクリプト言語の命令を使用して前記一組の脆弱性攻撃のそれぞれを表すステップと、
    コンピュータで前記命令を処理することにより前記脆弱性攻撃を実行するステップとを含む方法。
  56. 前記ネットワークのセキュリティを表す客観的スコア、並びに
    前記ネットワーク経由でアクセス可能なコンピュータのグラフィック表示および前記複数のコンピュータのうち少なくとも一部のコンピュータの前記脆弱性の色分けしたグラフィック表示を含む、ネットワークトポロジのグラフィック表示を含む第1のレポートレベルと、
    前記コンピュータおよびその関連付けられた脆弱性を記述するテキスト形式のリスト、並びに
    前記コンピュータのアクセス可能なポートおよびサービスを記述する暴露レポートを含む第2のレポートレベルとを含む階層型ネットワーク脆弱性レポート。
  57. 変数がすべてスタック変数であり、構文解析ツリーが読み取り専用データ構造として処理されるスレッドセーフ実行アーキテクチャで実行される実行可能スクリプトを作成するために使用される一組のプログラミング言語ステートメントと、
    式の中で整数データ型と交換可能な、スクリプトで実現される脆弱性評価オペレーションをサポートするように構成されている一組の定数値をそれぞれが持つ、一組の特別スカラーデータ型と、
    前記ネイティブオブジェクトを実行可能スクリプトから利用できるようにするためにスクリプトスコープを所有するメタスコープ内で宣言された一組のネイティブオブジェクトであって、前記ネイティブオブジェクトがネットワーク通信を円滑に行えるようにし、一意的なポートのリストを構築し、スクリプト実行権を特定のホストに送る呼び出し可能メンバ関数を備え、スクリプト用のIPアドレスを供給する、一組のネイティブオブジェクトと、
    他のスクリプトがその情報にアクセスして他のマシンを損なうおそれのあるグローバルデータ領域に自分自身をコピーする動作をし、異なるスクリプトにより発見された脆弱性データを1つのスクリプトで使用しやすくする、脆弱性オブジェクトとを含む脆弱性評価言語。
  58. ターゲットコンピュータ上で知られている脆弱性を自動的に適用する方法であって、
    データオブジェクトを含む、知られている脆弱性のデータベースを供給するステップと、
    前記データオブジェクトに関連付けられている、実行可能スクリプトを供給するステップと、
    前記ターゲットコンピュータのポートで前記知られている脆弱性を実行する、前記実行可能スクリプトを前記ターゲットコンピュータに適用するステップと、
    前記実行可能スクリプトの成功、失敗、または他の結果のうちの少なくとも1つを表す値を返すステップとを含む方法。
  59. 知られている脆弱性をネットワークのターゲットコンピュータに自動的に適用する方法であって、
    知られている脆弱性のデータベースを供給するステップと、
    知られている脆弱性を指定ターゲットコンピュータに適用するために、それぞれが実行可能な一組の実行可能スクリプトを供給するステップと、
    第1の実行可能スクリプトを実行して指定ターゲットコンピュータに脆弱性を適用するステップと、
    前記第1の実行可能スクリプトのそれぞれの成功、失敗、または他の結果を表す戻り値を監視するステップと、
    前記戻り値を使用して、前記ネットワークのセキュリティレベルを表すレポートを生成するステップとを含む方法。
  60. 実行時間間隔を識別するステップであって、前記第1の実行可能スクリプトの実行が、前記時間間隔のそれぞれの始まりに開始し、前記時間間隔のそれぞれの終わりに一時停止し、これを前記第1の実行可能スクリプトすべてが実行し終えるまで続けるステップを、さらに含む請求項59に記載の方法。
  61. 前記第1の実行可能スクリプトの実行が完了したときに、前記第1の実行可能スクリプトの前記実行を自動的に繰り返すステップを、さらに含む請求項60に記載の方法。
  62. 前記第1の実行可能スクリプトの実行が完了する毎にレポートを生成するステップと、
    複数の前記レポートを比較することにより、前記ネットワークのセキュリティトレンドを計算するステップとを、さらに含む請求項61に記載の方法。
  63. 前記第1の実行可能スクリプトの前記実行時に、第2の実行可能スクリプトを実行して、コンピュータの第2のネットワークに脆弱性を適用するステップを、さらに含む請求項59に記載の方法。
  64. 前記第2のネットワークが前記ネットワークのサブセットである請求項63に記載の方法。
  65. 前記第1の実行可能スクリプトが、前記ターゲットコンピュータのすべての第2のポートに脆弱性を適用する前に、前記ターゲットコンピュータのすべての第1のポートに脆弱性を適用するように構成されている請求項59に記載の方法。
  66. それぞれが、前記実行可能スクリプトの1つによってパケットの非同期送信を可能とする、複数のパケットスロットを割り当てるステップを、さらに含む請求項57に記載の方法。
JP2003560745A 2002-01-15 2002-01-15 ネットワーク脆弱性の検出および報告のためのシステムならびに方法 Pending JP2005515541A (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Cited By (8)

* Cited by examiner, † Cited by third party
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