JP4789933B2 - セキュアーソフトウェアを開発し、テストし、監視するための装置および方法 - Google Patents

セキュアーソフトウェアを開発し、テストし、監視するための装置および方法 Download PDF

Info

Publication number
JP4789933B2
JP4789933B2 JP2007515157A JP2007515157A JP4789933B2 JP 4789933 B2 JP4789933 B2 JP 4789933B2 JP 2007515157 A JP2007515157 A JP 2007515157A JP 2007515157 A JP2007515157 A JP 2007515157A JP 4789933 B2 JP4789933 B2 JP 4789933B2
Authority
JP
Japan
Prior art keywords
security
program
analysis
program instructions
instructions
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.)
Expired - Fee Related
Application number
JP2007515157A
Other languages
English (en)
Other versions
JP2008502046A (ja
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
Priority claimed from US11/009,474 external-priority patent/US20050273859A1/en
Priority claimed from US11/009,570 external-priority patent/US20050273860A1/en
Priority claimed from US11/010,146 external-priority patent/US7207065B2/en
Priority claimed from US11/009,572 external-priority patent/US7975306B2/en
Application filed by フォーティファイ ソフトウェア, エルエルシー filed Critical フォーティファイ ソフトウェア, エルエルシー
Publication of JP2008502046A publication Critical patent/JP2008502046A/ja
Application granted granted Critical
Publication of JP4789933B2 publication Critical patent/JP4789933B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/3604Analysis of software for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/3604Analysis of software for verifying properties of programs
    • G06F11/3612Analysis of software for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/04Arrangements for program control, e.g. control units using record carriers containing only program instructions
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)
  • Storage Device Security (AREA)

Description

発明の簡単な説明
[0001]本発明は、一般的には、ソフトウェアセキュリティーに関する。より詳細には、本発明は、ソフトウェアの開発、テスト、および、配置中に、ソフトウェアセキュリティー脆弱性を識別するための総合的な技術に関する。
発明の背景
[0002]ビジネスは、益々、情報技術に依存しつつある。情報システムは、広範囲に分散するネットワークを介して、益々、より複雑になり、より高性能になり、互いに接続され、そして、パートナーおよび顧客に開放的にアクセスできるようになりつつある。ビジネス環境は、益々、直接会って対話するよりも匿名の電子トランザクションへ大きくシフトしつつある。ソフトウェア開発自体が、海外開発制度および企業内共同コンピューティングによって、より分散化されつつある。これらの傾向は、悪用および無許可のアクセスからディジタルデータを団体が保護および防御する能力を弱める。
[0003]今日配置される主たるビジネスに不可欠なプリケーションのほぼすべてが、違法に利用されてビジネスまたはそれが管理する資産に大きな損害を与える可能性がある脆弱性を含む。これらの脆弱性は、アタッカーの利益または悪意のある意図のために、重要な情報を盗み、コンピュータシステムを妨害し、あるいは、処理に悪影響を与えるのに利用されることがある。
[0004]経験豊富なハッカーまたはルージュインサイダーにとって、この目的のためにソフトウェアを巧みに操作することは、オンラインで得ることのできる様々な情報およびツールによって、特に、容易なものとなる。アタッカーの最も大きな好機は、大きなビジネスアプリケーションにおける脆弱性をただ単に見つけ出すことである。さらに悪いことには、ファイアウォールのような主流のコンピュータセキュリティーソリューションは、露出されるという前提に基づくものであり、脆弱なソフトウェアは、外部の脅威からそれを隔離することによって、防御されることがある。ビジネス要件は、いくつかのビジネスに不可欠なアプリケーションが本当に隔離されることを強いる。ほとんどのものは、データ転送インタフェース、リモートプロシージャコール、および、内部および遠隔のユーザを介して、多くのアクセスポイントを有する。ファイアウォールおよびその他のネットワーク指向セキュリティーソリューションは、ビジネスに不可欠なアプリケーションが必要とするような種類のアクセスを阻止するようには構成されていない。実際に、今日のビジネス機能は、このアクセスに大きく依存しているので、これを拒絶されると、機能することができない。例えば、株式市場は、株式仲買人から取引所へのリンクなしに取引を行うことはできず、サプライチェーンは、供給者と生産者との間に流れる情報なしでは破綻し、そして、電気通信は、ビジネスの基盤をなすネットワークまたは課金システムを制御するコンピュータに携帯電話を接続する能力なしでは消滅する。アタッカーは、システムを危険にさらすのに毎日これらの事実を利用する。しかしながら、前提を裏返せば、真の欠陥は、脆弱なソフトウェアは、ともかくも非脆弱なものにすれば、なんとか防御される可能性があるということである。
[0005]このような背景を仮定すれば、当然ながら、それ自体に疑問が生じる。すなわち、なぜネットワークベースコンピュータセキュリティーソリューションが、明らかにソフトウェア問題であることに適用されるのか。1つの答えは、ほとんどの情報セキュリティー専門家は、ネットワークセキュリティー背景を有し、内容のないオペレーション上のセキュリティー問題の解決方法を展開していることであり、コアソフトウェア開発プロセスと向き合うための時間をほとんどとらない。それと同時に、アプリケーション開発者は、セキュリティーを考慮する余裕をほとんど持つことなく、厳しい納期までに新しい特徴を製作することに対して報酬を与えられる。一人の人間が、アプリケーション自体のセキュリティー要素に責任を持つことはめったにないことである。一般的な業務は、開発は、ビジネスに不可欠なアプリケーションを出荷することであり、そして、ネットワークオペレーションチームが、それを保護することであった。これらの役割の二分化は、アタッカーに驚くべき利益をもたらす。なぜなら、ソフトウェアセキュリティーに、より正確には、ビジネスに不可欠なアプリケーションの危険性に真に経験豊富であり、かつ専念している者は、彼らだけであるからである。
[0006]ソフトウェア開発の中心およびその周辺にいる当事者は、ソフトウェアセキュリティーに関して何かをなさなければならないことを次第に認識しつつある。それにもかかわらず、理路整然とした現実的なソリューションは、いまだに認識されていない。ソリューションを認識するのを困難にしているいくつかの要因が存在する。例えば、ソフトウェアセキュリティー脆弱性は、数千行のコード全体に存在する可能性がある微妙な論理的な誤りであり、適切な作業によって正確に検出することを極端に困難にしている。一見して、技術的なチャレンジは、このようなソリューションをコンパイラかまたはニッチ開発ツールにより類似しているように思わせる。しかしながら、大きなソフトウェア開発ツールベンダーは、セキュリティーを彼らの提供品の中核にしていない。彼らの顧客基盤は、依然として、特徴および機能の製作をどのようにして改善するかに大きく集中しており、ベンダーの内部チームは、変化するパラダイムを容易に認識することができずに、彼らの単一目的商品の特徴セットを改善することに努力している。これは、伝統的な革新者のジレンマである。さらに、大量の開発ツールを提供するプロバイダーは、リスク管理システムが必要とする企業型ソリューションを供給することに熟達しておらず、あるいは、そのようなソリューションを提供するのに必要な価格を維持することに熟達していない。実際に、開発ツール価格の現状は、一般的には、セキュリティー共同体が開発者指向ソリューションを構築するのをためらわせてきた。
[0007]開発ツールランドスケープに固有の弱点の他に、ソフトウェアセキュリティーは、絶え間なく変化する分野における特別な専門知識を必要とする。問題は、コードをスキャンするための技術を見つけ出すことに関するだけでなく、これらの脆弱性を検出するためのルールを生成しかつ絶えず更新することを含む。ルールを提供することは、研究およびリアルワールドアーキテクチャーの絶え間なく成長する本体、フレームワーク、使用パターン、および、ビジネスに不可欠なアプリケーションに脆弱性を発生させるその他の多くの要因に関する専門的な知識を必要とする。例えば、オペレーティングシステムまたはライブラリアプリケーションプログラムインタフェース(API)がリリースされるたびに、セキュリティー脆弱性を発生させる新しい事項が発表される。ベンダーは、これらの境界のないマルチプラットフォームアーキテクチャーを考慮に入れたソリューションを提供しなければならない。
[0008]最後に、ソフトウェアセキュリティーが単一ポイントソリューションによって達成できることは考えられない。同様に、ソフトウェアセキュリティーが開発者レベルだけにおいて解決できることは考えられない。ソフトウェアセキュリティーは、主として、リスク管理問題である。このような問題を解決することは、長期にわたって収集された詳細な情報を必要とする。それは、これまでと同様に創造力に富むものにソフトウェア開発者を維持するアプローチ、さらには、開発、テスト、および、配置中に管理するために、セキュリティー計量を可視化するアプローチを必要とする。それは、管理者および団体のための企業ソフトウェア型ソリューションを必要とする。
[0009]上述したことに鑑みて、ソフトウェアセキュリティーのための改善された技術を提供することは、極めて望ましいことである。
発明の概要
[0010]セキュリティー脆弱性に関してプログラム命令を解析する方法は、セキュリティー脆弱性を識別するために、プログラム命令の開発段階において静的な解析をプログラム命令に施すことを含む。セキュリティー脆弱性は、プログラム命令のテスト段階においてセキュリティーテストをプログラム命令に施すのに使用される。セキュリティー脆弱性は、プログラム命令の開発段階においてプログラム命令に適用するためのセキュリティー監視基準を開発するために、解析される。
[0011]添付の図面を参照して以下の詳細な説明を理解することによって、本発明をより完全に理解することができる。
[0019]図面全体を通して、類似する符号は、類似する部分を参照する。
発明の詳細な説明
[0020]図1は、本発明の実施形態に基づいて構成された装置100を示す。装置100は、バス106を介して一組の入出力装置104に接続された中央演算処理装置102を含む。一例として、入出力装置は、キーボード、マウス、コンピュータモニター、プリンターなどを含んでもよい。また、ネットワークインタフェース108が、バス106に接続され、そのネットワークインタフェース108は、ネットワーク110とインタフェースをとるための標準的な装置を使用し、そのネットワーク110は、ローカルエリアネットワーク、イントラネット、インターネットなどであってもよい。
[0021]さらに、メモリー112が、バス106に接続される。メモリー112は、本発明のオペレーションを実施するための一組の実行可能な命令を記憶する。一実施形態においては、実行可能な命令は、3つの主たるモジュール、すなわち、セキュリティー開発モジュール114、セキュリティーテストモジュール116、および、セキュリティー監視モジュール118を含む。
[0022]セキュリティー開発モジュール114は、ソフトウェアの構造に固有のセキュリティー脆弱性を識別するために、ソフトウェアの静的解析を助けるための実行可能な命令を含む。ソフトウェアは、プログラム命令を含む。以下で説明するように、本発明は、多種多様なプログラム命令フォーマットに有効である。例えば、プログラム命令フォーマットは、様々なソースフォーマットまたは実行可能なコードフォーマット、様々なマシン命令フォーマット、および/または、様々なプログラム環境設定ファイルフォーマットであってもよい。プログラム命令は、様々なソフトウェアアプリケーションを形成する。一組のソフトウェアアプリケーションは、ソフトウェアシステムを定義し、そのソフトウェアシステムが、以下で説明されるように、本発明において解析される。一実施形態においては、セキュリティー開発モジュール114は、インタフェースモジュール120、共通フォーマット生成器122、セキュリティー開発ルール123、解析エンジン124、および、レポート生成器126を備えて実施される。
[0023]セキュリティーテストモジュール116は、セキュリティー脆弱性に関してソフトウェアのオペレーションをテストするための実行可能な命令を含む。好ましくは、セキュリティーテストモジュール116は、それのテストプロトコルを洗練するために、セキュリティー開発モジュール114によって収集された情報に頼る。一実施形態においては、セキュリティーテストモジュール116は、攻撃マネージャーモジュール128、攻撃データベース130、セキュリティーテストルール131、障害注入モジュール132、および、テストレポート生成器134を備えて実施される。
[0024]セキュリティー監視モジュール118は、セキュリティー脆弱性を識別するために、ソフトウェアの実行を監視するための実行可能な命令を含む。好ましくは、セキュリティー監視モジュール118は、セキュリティー脆弱性を識別するために、プログラムのローカルな実行および関連するプログラムのグローバルな実行に関連する情報に頼る。一実施形態においては、セキュリティー監視モジュール118は、センサー挿入モジュール136、セキュリティー監視ルール137、監視解析モジュール138、および、監視レポート生成器140を備えて実施される。
[0025]図1の実行可能なプログラムの構成は、典型的な例として示されたものである。これらのモジュールはどのような形で組み合わせられてもよく、また、どのような形でも、例えば、ネットワークを介するような形で、実行されてもよいことがわかるはずである。実際に、本発明の多くの実施形態においては、これらのコンポーネントは、ネットワーク全体に分散される。さらに、個々のサブモジュールによって実行されるオペレーションは、あらゆる形で組み合わせられてもよい。
[0026]本発明の主要な処理オペレーションに言及したので、ここで、これらの主要な処理オペレーションについて詳細に説明する。図1に示されるように、セキュリティー開発モジュール114は、インタフェースモジュール120を含む。インタフェースモジュール120は、インタフェースオペレーションをハンドルするための実行可能なコードを含む。例えば、インタフェースモジュールは、コマンドライン、プルダウンメニュー、IDEプラグインなどを介して、ユーザとの対話をハンドルする。また、インタフェースモジュールは、システムのその他の実行可能なプログラムと対話し、それらのプログラムには、セキュリティーテストモジュール116およびセキュリティー監視モジュール118が含まれる。
[0027]図2は、セキュリティー開発モジュール114のその他の実行可能なモジュールに関連する主要な処理オペレーションを示す。図2に示される第1の処理オペレーションは、ソースまたは実行可能なコードを共通フォーマットに変換することである(200)。このオペレーションは、共通フォーマット生成器122によって実施されてもよい。共通フォーマット生成器122は、解析されるべきすべての階層のアプリケーションのすべてのソースファイルまたは実行可能なコードファイルを共通フォーマットに変換する。ここで開示される例としての共通フォーマットは、Normalized Syntax Tree(NST)フォーマットと呼ばれる。
[0028]そして、アプリケーションシステムモデルが、共通フォーマットから得られる(202)。同様に、共通フォーマット生成器122が、このオペレーションを実行してもよい。より詳細には、実行可能なコードは、NSTファイルからアプリケーションの共通モデルを生成するのに使用される。
[0029]そして、データフロー解析が、システムモデルに対して実行され、セキュリティー脆弱性が、識別される(204)。解析エンジン124が、このオペレーションを実施するのに使用されてもよい。解析エンジン124は、ユーザ入力が危険な機能またはコンストラクに到達する可能性があるプログラム中の予想実行パスを識別する。解析エンジン124は、セキュリティー開発ルール123を呼び出す。典型的には、セキュリティー開発モジュール114が、一組のセキュリティー開発ルール123とともに配置される。これらのルールは、ネットワーク110に接続されたリモートコンピュータから定期的に更新されてもよい。供給されたこれらのルールに加えて、ユーザは、特定のアプリケーションに合わせて特別のセキュリティー開発ルールを作成してもよい。解析エンジン124は、独立した計算処理カーネルであり、したがって、それは、多種多様な一組の標準的なおよびカスタマイズされたセキュリティー開発ルール123とともに使用されてもよい。
[0030]解析エンジン124によって識別されたセキュリティー脆弱性は、ユーザおよび関連するモジュールにレポートされる(206)。レポート生成器126が、このオペレーションを実施するのに使用されてもよい。
[0031]セキュリティー開発モジュール114は、スタックバッファー、汚染された変数、SQLインジェクション、および、顧客定義セキュリティー欠陥のようなセキュリティー脆弱性を見つけ出すために、一種の意味解析を複数の階層および言語にわたって実行する。階層は、オペレーティングシステムから、データベース、ユーザインタフェースへのアプリケーションサーバー、Java、C/C++、HTML、JSP、および、PL/SQLを含む複数の言語に及ぶアプリケーションにわたる。本発明による多種多様なプログラム命令フォーマットおよび複数のソフトウェアアプリケーションを含むシステムの解析は、従来技術によるシステムよりも大きく進歩したものである。
[0032]本発明のセキュリティー開発モジュール114は、市販されている総合開発環境内に組み込まれてもよく、したがって、警告の調査およびセキュリティーエラーの除去は、エディット−コンパイル−デバッグというソフトウェア開発プロセスに含まれる自然なこととなる。
[0033]図1に示されるように、セキュリティー開発モジュール114は、解析エンジン124とともに実施されてもよい。好ましくは、解析エンジン124は静的解析を実行する。静的解析は、ソフトウェアを実行することなくそのソフトウェアを解析するための技術である。静的解析は、極めて複雑であることに昔から悩まされてきた。特に、静的解析は、リアルワールドソフトウェアに適用されたときに、多くの嫌疑を発生させ、あるいは、結果を解釈するのが難しいと言われてきた。
[0034]ソフトウェアセキュリティーオペレーションにおいて静的解析を使用することに関連したいくつかのチャレンジが存在する。第1に、グローバルデータフロー静的解析技術および制御フロー静的解析技術の両方が、正確さを提供するために使用されなければならない。第2に、無数の言語およびフレームワークは、ハンドルされなければならない特殊なケースをもたらす。第3に、セキュリティー解析は、大きな一組のアプリケーション特有脆弱性を取り扱うために、拡張可能なものでなければならない。第4に、セキュリティー解析は、特定の脆弱性クラスの意味論的表現を定義するために、攻撃の研究を必要とし、かつ、それらの攻撃は時間とともに変化するので、それらの研究は最新のものに維持されなければならない。最後に、どのような解析も、現実的な商品要件によって制約されるはずである。商業的環境において満足しなければならない2つの最も厳しい要件は、スケーラビリティーおよびコードアクセスである。スケーラビリティーに関しては、解析は、開発者のデスクトップにおいて極めて小さなオーバーヘッドで動作しなければならず、しかも、徹底的な監査において良好に動作しなければならず、かつ、膨大なコードベース全体にわたって精査しなければならない。さらに、グローバル解析は、多くの場合、コードの全体にアクセスすることなく円滑に実施されなければならない。
[0035]本発明は、従来技術に存在するこれらのチャレンジを解決するものである。セキュリティー開発モジュール114は、ソフトウェアセキュリティー問題だけに指向された新しい形態の静的解析を提供する。セキュリティー開発モジュール114は、ソフトウェアセキュリティーを改善するのに即座に使用することのできる有益な情報を提供する。さらに、それは、テスト段階および監視段階において違法に利用される有益な情報を提供する。
[0036]これらのオペレーションは、例を参照してより完全に理解される。以下の例は、簡単な2階層アプリケーションのためのセキュリティー開発モジュールによって実行されるステップを示す。以下の例は、それがコード脆弱性を識別するのに十分な入力を提供する点において完全なものである。この例は、アプリケーションを実際に実行するためにさらなる標準的なツール、サポートロジック、および、環境設定ファイルが必要とされるという点においては不完全なものである。これらのさらなる要素は、当分野において標準的なものであり、したがって、さらに詳細には説明しない。
[0037]サンプルアプリケーションは、JavaサーブレットおよびPL/SQLパッケージからなる。このアプリケーションの目的は、口座残高をユーザに表示することである。アプリケーションは、以下のように動作する。Javaサーブレットは、“acct”という名前のパラメータを含む「HTTP POST」要求を受け入れる。これは、典型的には、ユーザがウェブページ上のフォームに書き込んで発行したときにウェブブラウザによって生成されるHTTP要求の種類である。“acct”パラメータは、例えば、ドロップダウンリストから口座名を選択するユーザによって設定されてもよい。サーブレットは、“acct”パラメータの値をデータベースクエリーへ渡す。クエリーは、“ACCT.get_balance”という名前のデータベース内に記憶されたプロシージャを呼び出す。記憶されたプロシージャは、SQLクエリーをコンストラクトするために、サーブレットから渡されたパラメータを使用する。クエリーは、“ACCOUNTS”という名前のデータベーステーブルを調査する。それは、渡された口座名に一致する行の“balance”列内に存在する値を戻す。記憶されたプロシージャは、残高値をサーブレットに戻し、そして、サーブレットは、その残高値をユーザに戻す。
[0038]悪意のあるユーザは、見る権限を与えられていない口座残高を彼らが見るために、アプリケーションの脆弱性を違法に利用する可能性がある。脆弱性は、単純なものである。すなわち、アプリケーションは、ユーザが要求した口座番号の残高を見る許可を彼らが有しているかどうかを決して確かめることはしない。この種の脆弱性は、貧弱に書かれたウェブベースアプリケーションではよくあることである。問題は、データフローによって理解できる。すなわち、ユーザによって提供される“acct”値は、検査されずにデータベース内のSQLクエリーに流れ込む。このクラスの脆弱性は、「SQLインジェクション」として既知である。なぜなら、悪意のあるユーザは、彼らが選択した情報をSQLクエリー内へ「注入」する可能性があるからである。
[0039]以下は、口座残高アプリケーションの例としてのJavaコードである。
********************************************************************
import java.sql.*;
importjavax.servlet.http.*;
class AccountViewextends HttpServlet {
privateConnection connection;

public voiddoPost(HttpServletRequest request,
HttpservletResponse response) {
String acctNumber = request.getParameter(“acct”);
CallableStatement stmt = null ;
try {
stmt =
connection.prepareCall(“begin ACCT.get_balance(?, ?); end;”);

// Bind parameter types
stmt.setString(1, acctNumber); // Bind 1st parameter
stmt.registerOutParameter(2, Types.INTEGER); // 2nd is result

// Execute the callable statement
stmt.execute();
int balance = stmt.getInt(2); // get result

response.getWriter().write(“Account balance: “ + balance);
} catch(SQLException ex) { // Trap SQL Errors
response.getWriter().write(“Error: “ + ex.toString() );
} finally {
try {
if (stmt != null) {
stmt.close(); // close the statement
}
} catch (SQLException ex) {
}
}
}
}

********************************************************************
[0040]同じ例に頼って、以下は、口座残高アプリケーションのPL/SQLコードである。
********************************************************************
CREATE OR REPLACEPACKAGE ACCOUNT IS

TYPE CURSORTYPE IS REF CURSOR;

FUNCTION get_balance(
NAME VARCHAR2
)
RETURN CURSORTYPE;

END;
/

-- Package bodyTEST
CREATE OR REPLACEPACKAGE BODY TEST IS

FUNCTION get_balance(
NAME VARCHAR2
) RETURN CURSORTYPE IS
CURSORRET CURSORTYPE;
N1 VARCHAR2;
BEGIN
N1:= NAME;
OPEN CURSORRET FOR
SELECT balance
FROM ACCOUNTS
WHERE (ACT_NUMBER = N1);
RETURN CURSORRET;
END;
END;
/
commit;
show errors;

exit;

********************************************************************
[0041]上述したように、セキュリティー開発モジュールによって実行される初期オペレーションは、すべての階層のアプリケーションのすべてのソースファイルまたは実行可能なコードファイルをNormalized Syntax Tree(NST)フォーマットと呼ばれる共通フォーマットに変換することである。
[0042]このステップは、それぞれのソースファイルまたは実行可能なコードファイルをそれが書かれた言語に基づいて構文解析し、そして、構文解析された情報をNSTフォーマットに翻訳することを含む。このステップは、コンパイラがソースファイルまたは実行可能なコードファイルから高級中間言語を生成する最近の高級言語コンパイラ(Gnu Cコンパイラ、gccのような)によって実行される第1の段階に極めて類似している。高級言語は、プログラマーに与えられる自由および表現力と、言語を実行可能な形態に効率的に翻訳するためにコンパイラに必要なルールおよび制約とのバランスをとるように設計される。人間は、NSTフォーマットを書くことはないので、それは、通常プログラマーに提供される素晴らしさおよび手っ取り早さを供給しない。NSTフォーマットは、いくつかの異なる高級言語から生成されるので、それは、言語間における最大公約数を目標としている。当然ながら、それは、すべての言語におけるすべてのコンストラクトの意味を捕捉するのに十分な表現力を提供しなければならない。コンパイラ研究者は、プログラムモデルを組み立てるためにうまく受け入れられる方法を定義している。例えば、Ahoら,Compilers,Principles,Techniques and Tools,Pearson Higher Education(1985)の第3章、第4章、および、第8章を参照されたい。
[0043]高級言語からNSTフォーマットへの翻訳は、翻訳される高級言語に特有の一組の翻訳ルールによって管理される。例えば、JavaからNSTへの変換を制御するいくつかのルールには、以下のようなものがある。
[0044]・NSTは、Javaのimport文のようなコンストラクトを含まない。Javaのimport文は、NSTにおいて明示的表現を持たない。
[0045]Javaは、名前が潜在的に曖昧でない限り、変数名、クラス名、および、メソッド名をプログラマーが完全に修飾することを必要としない。NSTは、すべての名前が完全に修飾されることを必要とし、そのために、曖昧さを検査する必要がない。名前が、JavaからNSTへ翻訳されるとき、それは、完全に修飾された形態に翻訳される。Javaにおける型およびメソッドの変換は、Java言語仕様書(第15.12節、http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#20448)に説明されるルールおよび命令に従うことによって達成される。
[0046]Javaにおいては、すべてのオブジェクトは、ポインタによって参照される。オブジェクトを参照するための方法は1つしか存在しないので、Javaにおいては、ポインタ表記は必要としない。NSTは、オブジェクトが直接にかまたはポインタによって参照されてもよいCおよびC++のような言語を表現するのに使用されるので、すべてのJavaオブジェクト参照は、NSTにおいては、明示的ポインタ参照表記を含むように翻訳される。
[0047]Javaにおいては、member関数は、キーワード“this”を用いて、それのオブジェクトに作用することができる。NSTは、“this”キーワードを持たない。その代わりに、member関数に関連するオブジェクトは、関数への第1の引数として明示的に表現される。
[0048]以下のテキストは、文法型コンストラクトを用いて、NST構文を記述する。以下の約束が、使用される。すなわち、
プロダクション − プレーンワードは、別のプロダクションを参照する。
識別子 − イタリック体のワードは、識別子である。
<トークン> − 括弧によって囲まれたワードまたは文字は、トークンである。
<token_class> − 括弧によって囲まれたイタリック体のワードは、トークンのクラスを参照する。

CompilationUnit:
(ClassDecl|VarDecl|FunDecl|)*

ClassDecl :
<modifier>*name(ExtendsList)? (ImplementsList)? <{>
(FieldDecl)*
(FunDecl)*
<}>

ExtendsList :
<extends>(Type)+

ImplementsList:
<implements>(Type)+

FieldDecl :
<modifier>*Type name <;>

FunDecl :
<modifier>*Type name <(> (( VarDecl ( <,> VarDecl )* (<,><…>)?)|<…>?<)> <:>
unique_name(Block|<;> )

VarDecl :
Type name<;>

Type :
(
<modifier>*(<primitive_type>|typename)<*>*(<[>numeric_literal?<]>)*
|<modifier>*(<primitive_type>|typename)<*>*(<[>numeric_literal?<]>)*<(> (
VarDecl(<,>VarDecl )*)? <)>
)

Statement :
(label<:>)?
(AssignmentStmt|IfElseStmt|WhileStmt|Gotostmt|DeclStmt|ReturnStmt|CallStmt|Block)
<;>

Block :
<{>
(Statement)*
<}>

AssignmentStmt:
(Location)<=> Expression

DeclStmt :
VarDecl

IfElse :
<if> <(>Expression <)> Block
(<else>Block)?

WhileStmt :
<while><(> Expression <)> Block

ReturnStmt :
<return>Expression

CallStmt :
FunCall

Expression :
(Location|FunCall|Allocation|OpExp|TypeCastExp|LiteralExp)
|<(>Expression <)>

Location :
(
(VarAccess|FieldAccess)(Index)*
|FunIdentifier
)
FunCall :
(
<->>unique_name
|<-->> Expression
この場合、式は、関数ポインタを評価することが要求される。
)
<(>Arg(<,> Arg)* <)>

GotoStmt :
<goto> label

Arg :
(Expression)

Allocation :
<new> Type(Index)*

VarAccess :
name

FieldAccess :
(<[> Type<]>)? (Expression) <.> name
注意:ここで、Typeは、アクセスされるフィールドの取り囲み型を表現する。
FunIdentifier :
<->> unique_name

Index :
<[>(Location|LiteralExp) <]>

OpExp :
((<unary_op>Expression)|(Expression <bin_op> Expression))

TypeCastExp :
<<>Type<>> Expression

Literlexp :
<literal>

Directive :(directiveは、単独でどのラインに現れてもよい)
<#> (<source-type>|<source-file>|<source-line> )

a. Terminals
modifier :
:public:
:private:
:protected:
:static:
:final:
:strictfp:
:abstract:
:transient:
:volatile:
:vitulal:
:inline:
:extern:
:const:

primitive_type :
:int:
:long:
:float:
:double:
:boolean:
:short:
:byte:
:char:
:void:
:short char:
:unsigned char:
:unsigned short:
:unsigned int:
:unsigned long:
:long long:
:unsigned long long:
:long double:
[0049]NSTは、解析のためにプログラムを表現するように設計される。それは、コンパイルされるように、あるいは、人が読むことのできる使いやすい形態を有するようには設計されない。そのようなものとして、それは、それが表現する言語(例えば、C、C++、Java)の多くの使いやすい特徴をサポートしない。単一文宣言および初期化、式における代入、short−circuit演算子、typedefなどのような特徴は、NSTの要素ではない。むしろ、フロントエンドトランスレータが、ソースまたは実行可能な言語からNSTに変換中に、これらの複雑な表現をより簡単な文からなる等価なシーケンスに変換する責任を有する。次の表は、例としての高級言語コンストラクトとNST形態によるそれらの等価な翻訳とを一覧表にしたものである。これらの翻訳の多くは、一時的な変数をNSTに導入する必要があることに注意されたい。
Figure 0004789933

Figure 0004789933
[0050]NSTにおける型、変数、フィールド、および、関数を変換するために、次のルールが使用され、それらの対応する宣言に戻る。
********************************************************************
VarDecl resolveVar(VarAccess v)
Scope s = v.getScope()
while(s.getVarDecl(v.name) =null)
s =s.getParentScope()
return s.getDecl(v.name)

FieldDecl resolveField(FieldAccess f)
returnresolveType(f.type).getFieldDecl(f.fieldName)

FunDecl resolveFun(FunCall f)
if(f.type != null)
returnresolveType(f.type).getFunDecl(f.funSig)
else
retuenf.getScope() .getRootScope().getFunDecl(f.funSig)

TypeDecl resolveType(Type t)
returnglobalScope.getTypeDecl(f.typeName)

********************************************************************
[0051]上述した高級言語コンストラクトNST訳語およびルールを用いて、口座残高例のための例としてのJavaコードが、次の例としてのNSTリストに変換される。ライン番号が使用されるので、以下の説明において個々のラインを参照することができる。
********************************************************************
1 #source-file/home/sean/scratch/patent/AccountView.java
2 #source-type java
3 :class: AccountView :extends:javax.servlet.http.HttpServlet {
4 :private: java.sql.Connection * connection ;
5 :public: void doPost ( AccountView * this- ,
javax.servlet.http.HttpServletRequest *request ,
javax.servlet.http.HttpServletResponse *response ) :
AccountView_doPost_LAccountViewLjavax_servlet_http_HttpServletRequestLjavax_selvlet_http_HttpServletResponse{
6 java.lang.String * acctNumber ;
7 acctNumber =
8 ->
javax_servlet_ServletRequest__getParameter_Ljavax_servlet_ServletRequestLjava_lang_String( request , “acct” ) ;
9 java.sql.CallableStatement * stmt ;
10 stmt = :null: ;
11 {
12 stmt = ->
java_sql_Connection__prepareCall_Ljava_sql_ConnectionLjava_lang_String( [ AccountView ] ( this- ) . connection , “begin ACCT.
13 get_balance (?, ?) ; end;" ) ;
14java_sql_PreparedStatement__setString__Ljava_sql_PreparedStatementILj ava_lang_String( stmt , 1 , acctNumber ) ;
15java_sql_CallableStatement__registerOutParameter_Ljava_sql_CallableS tatementII( stmt , 2 , [ java.sql.Types ] INTEGER ) ;
16java_sql_PreparedStatement_execute_Ljava_sql_PreparedStatement ( stmt ) ;
17 int balance ;
18 balance = ->java_sql_CallableStatement__getInt_Ljava_sql_CallableStatementI ( Stmt , 2 ) ;
19java_io_PrintWriter__write_Ljava_io_PrintWriterLjava_lang_String ( - >javax_servlet_ServletResponse__getWriter_Ljavax_servlet_ServletRespo nse (response ) , ( "Account balance: " + balance ) ) ;
20 }
21 return ;
22 }
23 :-public : void init^ ( AccountView *this- ) : AccountView init^_LAccountView {
24 javax_servlet_http_HttpServlet__init ^_Ljavax_servlet_http_HttpServlet ( this- ) ; 25 return ;
26 }
27 :public : static void clinit^ ( ) :AccountView__clinit^_S_ {
28 return ;
29 }
30 }

********************************************************************
[0052]同様に、同じ高級言語コンストラクトNST訳語およびルールを用いて、口座残高アプリケーションのためのPL/SQLコードの例としての表現が、次の例としてのNST表現に変換される。
********************************************************************
31 #source-file/home/sean/scratch/patent/account.sql
32 #source-type java
33 static CURSORTYPE * TEST.get_balance (:sql:varchar2 : NAME ) TEST.get_balance
34 {
35 CURSORTYPE * CURSORRET ;
36 :sql:varchar2 : Nl ;
37 Nl = NAME ;
38 SELECT ( ( ACT_NUMBER == Nl ) ) ;
39 return ;
40 }
41 :sql:varchar2 : ACT_NUMBER ;

********************************************************************
[0053]ここで、この例に関連するJavaからNSTへの変換の一部が、説明される。口座残高アプリケーション例の第4ラインに存在するJava文“private Connection connection”の場合、変換は、NST訳語文“:private:java.sql.Connection*connection”をもたらし、それは、上記の第4ラインに存在する。この翻訳を達成するために、3つのルールが、適用される。第1に、Javaキーワード“private”は、NSTキーワード“:private:”に翻訳されている。第2に、型識別子“Connection”は、完全に変換され、“java.sql.Connection”となっている。Javaにおいては、この宣言は、変数がオブジェクトの参照であることを指定するための表記を必要としない。なぜなら、プリミティブ型でないJavaにおけるすべての変数は、オブジェクトの参照であるからである。適用される第3のルールは、本発明の一実施形態において、NSTが、参照を明示的なものにすることを必要とすることに関し、そのために、“*”が、型識別子の後に付加される。
[0054]別の変換例は、Java文“int balance=stmt.getInt(2);//get result”からNST文“balance=−>java_sql_CallableStatement_getInt_Ljava_sql_CallableStatementI(stmt,2)”への変換である。最初に、ラインの最後に存在するコメントが、廃棄されていることに注意されたい。Java関数コールは、コールの最初に“−>”を付加することによって、NSTコール表記に翻訳されている。関数名は、完全に変換されており、そのために、“getInt”は、“java_sql_CallableStatement_getInt_Ljava_sql_CallableStatementI”となる。Javaのオブジェクト表記は、NSTの明示的な引数表記に翻訳されている。オブジェクト名“stmt”は、関数に渡される第1の引数となるように移動させられている。
[0055]別の例は、口座残高アプリケーションのための例としてのPL/SQLコードの最後の“END”文に関連する。この文は、“return;”命令に変換される。NSTフォーマットは、フローを制御するためのすべての変更は、明示的になされることを必要とするので、関数中の制御フローパスの終了点は、いかなる場合にも、return文で終結しなければならない。
[0056]この時点において、すべてのソースファイルまたは実行可能なファイルは、対応するNST表現を有することになるので、セキュリティー開発モジュールは、すべてのNSTファイルを読み込むことによって、アプリケーションの均質なモデルを生成することができる。この時点におけるシステムモデルの生成は、共通フォーマットであるので、容易なことである。したがって、既知のシステムモデル化技術が、使用されてもよい。例えば、システムコールグラフが、関数コールサイトを、呼び出された関数の定義に調和させることによって、生成される。ソースまたは実行可能な言語またはフォーマットのルールに基づいてコールグラフノードをともにリンクすることに加えて、フレームワーク規定の知識、ランタイム呼び出し機構、アプリケーションプロトコル、リモートプロシージャコール、および、プロシージャ間プログラム対話のためのその他の機構が、言語とプロセス空間との間隙に橋をかけるシステムのモデルを生成するのに使用される。場合によっては、これは、プログラムソースまたは実行可能なコードの解析だけでなくランタイム環境設定の解析を必要とする。様々な規格本体が、これらのフレームワーク、インタフェース、規定、および、プロトコルを管理する。例として、次のものは、Javaにとって重要である。すなわち、
− EJB(http://java.sun.com/products/ejb/docs.htmlを参照)。
− JDBC(http://java.sun.com/products/jdbc/reference/index.htmlを参照)。
− Java Reflection(java.lang.reflect APIdocumentation:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/relect/package-summary.htmlを参照)。
− RMI(java.rmi APIdocumentation:http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/package-summary.htmlを参照)。
[0057]そして、最初に、外部から入力がなされたプログラムロケーションを識別することによって、データフロー解析が、実行される。この場合、ユーザ入力は、1つのプログラムロケーション、すなわち、String acctNumber=request.getParameter(“acct”)文に到着するだけである。一組の入力エントリーポイントから開始して、入力は、代入、関数コール、および、プログラムによって実行されるオペレーションを介してトレースされる。このプロセスは、「汚染伝播」と呼ばれることもある。図2Aは、この例における汚染伝播パスを示す。図2Aにおいて、下線付きの数は、上に示されるNSTコードのライン番号に対応する。番号付きの矢印は、NSTコードにおいて次々に発生する汚染伝播を示す。この例においては、データフロー解析器は、ライン8にあるjavax_servlet_ServletRequest_getParameter_Ljavax_servlet_ServletRequestLjava_lang_Stringをコールすることによって入力がプログラムに到着したこと、および、関数の戻り値が入力値を含むことを決定するために、セキュアーコーディングルールのそれのライブラリーを使用する。したがって、それは、潜在的に汚染されているものとしてコールの戻り値を取り扱う。次に、それは、ライン7にある変数代入を判断し、そして、NSTフォーマットのセマンティクスは、CおよびJavaのような多くの標準的なプログラミング言語の場合と同じものであるので、データフロー解析器は、矢印#1によって示されるように、汚染をライン7にある代入文の左側に伝播する。変数acctNumberは、この時点において、汚染される。次に、データフロー解析器は、汚染された変数acctNumberが代入の後に使用されるプログラムのロケーションに汚染を伝播する。この例においては、矢印#2によって示されるように、acctNumberは、ライン7における代入の後に、1つの場所でしか使用されない。その他のセキュアーコーディングルールによって、データフロー解析器は、矢印#3によって示されるように、汚染を第3の関数引数(acctName)からライン14にある第1の関数引数(stmt)に伝播する。ここで、データフロー解析器は、acctNameからstmtへの汚染の後に、変数stmtのすべての使用を判断する。stmatのそのような1つの使用は、ライン16において発生し、そこでは、executeメソッドが、コールされ、stmtが、引数として渡される。システムモデルは、データベースとアプリケーションコードとの関係を考慮するので、コールグラフは、executeコールからget_balance関数へのリンクを含む。これによって、データフロー解析器は、矢印#4によって示されるように、実行するためのコールからget_balance関数の第1のかつ唯一の引数NAMEに汚染を伝播する。代入に関する知識を再び適用するとき、データフロー解析器は、NAMEは、汚染されており、汚染をライン37における代入の左側に伝播し、N1は、矢印#5によって示されるように、汚染されるという事実を使用する。そして、データフロー解析器は、代入の後のすべてのN1の使用を判断する。N1は、ライン38におけるSELECT関数に渡される引数の一部であるので、また、データフロー解析器は、汚染された値がSELECT関数への引数として現れることはセキュリティー侵犯であると断定するセキュアーコーディングルールを備えているので、データフロー解析器は、この時点において、潜在的なセキュリティー侵犯をレポートする。
[0058]ユーザ入力が、危険であると指定されている関数に伝播される可能性があるならば、脆弱性が、検出されたことになり、静的解析エンジンは、その脆弱性をユーザにレポートする。静的解析エンジン124は、脆弱性を識別するために、1つかまたはそれ以上のセキュリティー開発ルール123に頼ることに注意されたい。この例においては、SQLselect関数は、セキュリティー開発ルールによって危険であると指定されるので、静的解析エンジンは、それが、ユーザ入力がPL/SQL関数として定義されたSQLselect呼び出しに到達する可能性があることを決定すると、脆弱性をレポートする。より詳細には、この例においては、出力は、少なくとも以下の情報を含む。
・ 脆弱性の検出 : SQLインジェクション、
・ エントリーポイント : AccountView.doPost:request.getParameter、
・ 流れ込み先 : AccountView.doPost:stmt.execute、
・ 流れ込み先 : ACCOUNT.get_balance、
・ 流れ込み先 : ACCOUNT.get_balance:SELECT。
[0059]出力は、また、検出された脆弱性のクラス、どのようにして問題を解決することができるかに関する提案、および、さらなる読み込みに関する参照の詳細な説明を含む。セキュリティー開発モジュールは、プロシージャ間で動作してもよい。すなわち、それは、関数コールから関数の実施までユーザ入力をトレースすることもできる。すべての関数は、共通NSTフォーマットで表現されるので、これは、セキュリティー開発モジュールの静的解析エンジンは言語間およびアプリケーション階層間で動作していることを意味する。
[0060]セキュリティー開発モジュールは、ソースまたは実行可能なコードにおける特定のセキュリティー関連脆弱性を検出するのを助けることに注意されたい。より詳細には、それは、プラットフォーム間および異なるコンピュータ言語間においてこの機能を達成する。したがって、本発明は、グローバルな意味解析を提供する。本発明は、上述した例によって示されるように、エンドツーエンドソリューションを提供し、それは、ウェブ形式からデータベースにわたるものである。
[0061]本発明は、C−バッファーオーバーフロー、C/Javaの汚染された入力、C/Javaの動的SQL、および、順序問題を含む様々な脆弱性を識別する。好ましくは、セキュリティー開発ルールは、危険なデータ変換をトレースするためのルール、データ処理エンドポイント解析を実行するためのルール、および、潜在的なデータ処理エンドポイントを精査するためのルールを含む。好ましくは、セキュリティー開発モジュールは、スタックバッファーオーバーフロー、ヒープバッファーオーバーフロー、フォーマットストリング攻撃、SQLインジェクション、および、公共ライブラリおよび第三者ソフトウェアにおいて既知である問題のような、汚染伝播問題を識別するように構成される。さらに、セキュリティー開発モジュールは、順序問題(例えば、競合状態、適切なアクセス制御/認証)、疑わしいコード、共通暗号プロトコルの悪用、非暗号乱数発生器、および、悪い種の使用のような、順序制約問題を識別するように構成される。好ましくは、セキュリティー開発モジュールは、また、アーキテクチャー解析のための複雑さ計量および意味論的パターンマッチングをサポートする。本発明の実施形態は、次の言語の処理をサポートする。すなわち、C、C++、Java、および、JAR/クラス(バイトコード解析)、JSPのようなJavaフレームワーク、J2EE/EJB、Struts、および、Tapestryを含む。本発明の実施形態は、また、PHP、Perl、Python、DLL、Unixライブラリ、オブジェクトコード、および、アセンブリコードをサポートする。セキュリティー開発モジュールからの出力は、一般的なXMLフォーマットであってもよい。
[0062]上述した例は、静的データフロー解析技術に関する。当業者は、その他の静的解析技術が本発明において使用されてもよいことがわかるはずである。例えば、字句解析技術が、使用されてもよい。字句解析技術は、プログラムを備えるトークンだけを考察することを含む。本発明において使用されてもよい字句解析技術の例は、トークンストリーム内における関数の名前を認識することによって、プログラムが危険なまたは廃止予定の関数を呼び出したロケーションを識別することである。また、意味解析技術が、使用されてもよい。意味解析技術は、プログラミング言語のセマンティクスを理解することに基づくものである。本発明において使用されてもよい意味解析技術の例は、オブジェクトの型、オブジェクトのための継承階層、および、オブジェクトの継承階層内における危険なまたは廃止予定のメソッドを理解することによって、プログラムが、危険なまたは廃止予定の関数から得られるobject member関数を呼び出したロケーションを識別することである。さらに、プログラム制御フロー解析が、本発明とともに使用されてもよい。プログラム制御フロー解析は、実行される可能性があるアプリケーションにおける潜在的な制御フローパスを評価すること、および、セキュリティー脆弱性を表現する可能性があるパスを探索することを含む。制御フロー解析によって識別される可能性がある脆弱性の1つの例は、TOCTOU(検査時が使用時)脆弱性と呼ばれる。プログラムが、制御フローパスを含み、その制御フローパスにおいて、そのプログラムが、ファイルのパーミッションを検査し、その後に、同じ制御フローパス上で、ファイルが変更されていないことをなんらかの方法で確認することなくそのファイルをオープンしたならば、そのプログラムは、TOCTOU脆弱性を含む。TOCTOU脆弱性を識別するための制御フロー解析技術は、最初に、ファイルパーミッション検査が実行されたプログラムロケーションを識別し、そして、この技術は、その同じファイルがその後にオープンされたかどうかを決定するために、それらのロケーションから前方へすべての潜在的な制御フローパスを辿る。
[0063]セキュリティー開発モジュール114について十分に説明したので、ここで、セキュリティーテストモジュール116に注目する。セキュリティーテストモジュール116は、脆弱性に関してアプリケーションを動的にテストし、既知の弱点の存在を確認し、そして、既存のツール内において動作するテストケースを自動的に生成するための実行可能なコードを含む。上述したように、セキュリティーテストモジュール116は、攻撃マネージャーモジュール128、攻撃データベース130、セキュリティーテストルール131、障害注入モジュール132、および、テストレポート生成器134によって実施されてもよい。
[0064]図3は、セキュリティーテストモジュール116の実施形態に関連する処理オペレーションを示す。初期オペレーションは、ソースまたは実行可能なコード300内の潜在的なセキュリティー脆弱性を識別することである。攻撃マネージャーモジュール128が、このオペレーションを実行するのに使用されてもよい。より詳細には、攻撃マネージャーモジュールは、攻撃計画を生成および管理し、攻撃を提案する解析モジュールを選択し、そして、攻撃を市販のテスト商品にエクスポートする能力をユーザに提供する。図3に示されるように、セキュリティー開発モジュール入力302、および、攻撃データベース130およびセキュリティーテストルール131からの情報303が、潜在的な脆弱性を識別するのに使用される。攻撃データベース130は、既知のエクスプロイトおよびユーザ定義エクスプロイトを含む、好ましくは、攻撃データベースは、リモートコンピュータから定期的に更新される。さらに、攻撃データベース130は、好ましくは、テスト中のアプリケーションに対する特定の攻撃によってカスタマイズされる。セキュリティーテストルール131は、標準的な攻撃ルールおよび特定のアプリケーションのためにカスタマイズされたユーザ定義攻撃ルールを含む。セキュリティーテストルール131は、また、リモートコンピュータから定期的に更新されてもよい。
[0065]攻撃マネージャーモジュール128によって識別される潜在的な脆弱性は、脆弱性テストをソフトウェアに施すために(図3のオペレーション306)、障害注入モジュール132によって処理される。障害注入モジュール132は、既知の攻撃およびカスタマイズされた攻撃に対するコードの脆弱な部分を体系的にテストするための障害注入実行可能コードを含む。例えば、障害注入モジュール132は、入力フィールド、クッキー、ヘッダーなどにエクスプロイトを適用する。そして、これらの環境下におけるコードの動作が、解析される(図3のオペレーション308)。障害注入モジュール132が、この解析を実行するのに使用されてもよい。最後に、結果が、ユーザにレポートされる(オペレーション310)。テストレポート生成器134の実行可能なコードが、このレポートする機能に使用されてもよい。また、結果は、さらなる脆弱性を識別するために、攻撃マネージャー128に配信されてもよい(図3のオペレーション300)。また、結果を報告するオペレーション310は、テストアプリケーションによって実行されるべきスクリプトとして動作結果をレポートすることを含んでもよい。
[0066]ここで、本発明のセキュリティー監視モジュール118に注目する。セキュリティー監視モジュール118は、監視されるソースまたは実行可能なコードの選択された位置にセンサーを挿入するためのセンサー挿入モジュール136を含む。また、セキュリティー監視モジュール118は、詐欺行為およびその他の異常行為を検出しそしてそれに対応するために、センサーからのデータを解析するための監視解析モジュール138の形で実行可能コードを含む。監視解析モジュール138は、一組のセキュリティー監視ルール137を呼び出す。セキュリティー監視ルール137は、標準的なセキュリティールールおよびユーザ定義セキュリティールールを含んでもよい。好ましくは、セキュリティー監視モジュールは、また、監視レポート生成器140を含む。
[0067]図4は、セキュリティー監視モジュール118の実施形態に関連する処理オペレーションを示す。センサーが、ソースまたは実行可能コード内に挿入される(400)。センサー挿入モジュール136が、このオペレーションを実行するのに使用されてもよい。図4に示されるように、セキュリティー開発モジュール入力402およびセキュリティーテストモジュール入力404が、コード内におけるセンサー位置を決定するのに使用されてもよい。それぞれのセンサーは、元々のソースまたは実行可能コードに関連する選択された動作基準を識別およびレポートするための実行可能コードである。
[0068]そして、コードは、センサー406とともに実行される。センサーは、セキュリティーイベントのストリームを生成する。そして、コードの動作は、セキュリティーの観点から監視される(408)。より詳細には、センサーからのセキュリティーイベントのストリームは、詐欺行為および悪用を検出するために、処理される。監視解析モジュール138およびセキュリティー監視ルール137が、このオペレーションを実行するのに使用されてもよい。そして、結果は、監視レポート生成器140を用いてレポートされてもよい。その代わりに、あるいは、それに加えて、結果は、センサー挿入プロセスを洗練するために、または、アプリケーションのビヘイビアを修正するために、センサー挿入モジュール136にフィードバックされてもよい(図4のオペレーション400)。
[0069]図5は、セキュリティー監視モジュール118のオペレーションを示す。より詳細には、図5は、センサー500とともにコードを実行することのブロック図を示す。実行されるコード内に存在するセンサーは、セキュリティーイベント502を生成し、そのセキュリティーイベント502は、監視解析モジュール138に適用される。監視解析モジュール138は、対策コマンド504を生成する。監視解析モジュール138のこの実施形態においては、ローカル監視解析モジュール506は、セキュリティーイベント502を処理するために、ローカル監視処理ルール508に頼る。ローカル監視処理ルール508は、実行しているアプリケーションに適したビヘイビアを管理する一組の実行可能なルールを定義する。また、グローバル監視処理ルール512に頼るグローバル監視解析モジュール510が、使用されてもよい。グローバル監視処理ルールは、一組の実行しているアプリケーションに適したビヘイビアを管理する一組の実行可能なルールを定義する。したがって、例えば、関連するプログラムまたはオペレーションにおいて識別されたセキュリティー脆弱性が、識別され、この情報が、ローカルプログラムの実行中に類似する問題が発生しているかどうかを評価するのに使用される。したがって、セキュリティー監視モジュール118は、大きな組のビヘイビアおよび環境に頼るように実施されてもよい。警報514が、ローカル監視解析モジュール506とグローバル監視解析モジュール510との間で交換されてもよい。さらに、クエリーおよび応答516が、これらのモジュールの間で交換されてもよい。
[0070]センサー挿入モジュール136は、様々な基準を考慮する。例えば、センサー挿入モジュールは、アプリケーションが受ける可能性のある攻撃の種類をソースまたは実行可能コードおよび使用されるライブラリに基づいて決定するための実行可能コードを有する。階層間解析が、防御されるべき特定の関数、モジュール、または、プログラム領域を識別するのに使用されてもよい。例えば、パスワードが、HTML/JSPから環境設定を介してJavaで記述されたログインコードまでトレースされてもよい。また、データフロー解析が、プログラム内においてユーザ入力が現れる可能性のある場所をトレースするのに使用されてもよい。センサーは、好ましくは、ユーザ入力が信頼できるデータとなる箇所に付加される。制御フロー解析が、実行することのできないパスをインストルメントするのを回避するのに使用されてもよい。また、ユーザ入力が、インストルメンテーションプロセスを案内するのに使用されてもよい。例えば、ユーザは、範囲内に存在する変数のリストを提供してもよく、ユーザは、ユーザがセンサーを生成したとき、型を検査してもよく、あるいは、ユーザは、プログラムの特定の態様に関連する可能性があるメソッドのリストを提供してもよい。
[0071]セキュリティー監視モジュール118は、コードをインストルメントするための最良の箇所および実行されるべき最も適切な種類の解析を決定するために、環境設定ファイル、統計的解析、および、セキュリティー開発モジュール114およびセキュリティーテストモジュール116からの情報を含む多種多様なソフトウェアセキュリティー関連情報に関する情報を収集およびレポートする。セキュリティー監視モジュール118は、多くのレベルで様々な検出機構を使用する。一実施形態においては、セキュリティー監視モジュール118は、署名、パターンマッチング、および、統計的解析を使用する。
[0072]アプリケーションが配置される前にセキュリティー脆弱性をすべて除去できるとは限らないので、セキュリティー監視モジュール118が、使用される。一個のソフトウェアが長い間にどのような形で悪用されあるいは詐欺的に使用される可能性があるかをすべて予見することは特に難しいことである。さらに、悪用を検出しかつそれに対応するのに必要なコードは、多くの場合、複雑であり、かつ、アプリケーションの機能とはほとんど無関係である。さらに悪いことには、最近のアプリケーションは、一般的には、多数のコンピュータ間で実行される異質のコンポーネントからなる。
[0073]セキュリティー監視モジュール118は、既存のプログラムの上に動的なセキュリティービヘイビアを積み重ねることによって動作する。この技術は、攻撃および悪用の両方にリアルタイムに対応する機構を提供する。このアプローチは、アスペクト指向プログラミング、ランタイムインストルメンテーション、リアルタイムイベント相関、および、アプリケーションベース侵入検出を組み合わせることに基づいたものである。
[0074]一般的な侵入検出システムは、ネットワークトラフィックかまたはアプリケーションが残したログファイルおよびその他のアーチファクトのいずれかに作用する。ネットワークトラフィックが、暗号化されていれば、ネットワークベース侵入検出は、コンテンツを解析することができない。非暗号化データに作用する場合でも、ネットワークパケットまたはログファイルエントリーのコンテンツを解釈するのは、侵入検出システムの義務である。ほとんどの場合、これは、一般的な侵入検出システムが、犯行後に、かつ、アプリケーションの内部構造がわからないまま、イベントを解析させられることを意味する。結果は、損害を加えられて初めて、実際の攻撃に関する多くの正しくない警報および通知となる。なによりも悪いことには、アプリケーションの内部がわからないことは、検出される可能性がある攻撃または悪用の種類を大きく制限する。
[0075]セキュリティー監視モジュール118は、防御ビヘイビアを付加するためのフレームワークをランタイム時にアプリケーションに提供することによって、これらの制限を克服する。セキュリティー開発者は、プログラムが実行されているときに、内部プログラム変数の値、実行パス、および、動作特性を調査することができる。セキュリティー関連イベントは、バンドの外側で、あるいは、セキュリティー要件および動作要件によって決定されるようなプログラム制御フローに沿って、解析することができる。複数のマシンからのイベントは、システムの状態の大きな概観を提供するために、互いに相関をとることができる。
[0076]セキュリティー監視モジュール118は、多くのレベルで様々な検出機構を使用する。このモジュールは、アプリケーションレベルの検出に適した新しい組の機構を使用することに加えて、今日のネットワークおよびホストベース侵入検出システム(IDS)において使用される様々な技術、すなわち、署名およびパターンマッチングおよび統計的解析を合成する。既存のIDSとは対照的に、セキュリティー監視モジュール118は、悪用に極めて関係している。セキュリティー監視モジュール118は、権限を与えられていないユーザを締め出すための手段を使用するが、それの最も強力な特徴の1つは、権限を与えられたユーザによる悪用の検出である。これは、権限を与えられていないユーザによる悪用に対してほとんど無力である既存の技術(例えば、アプリケーションファイアウォールおよびデータベースIDS)とは対照的なものである。
[0077]セキュリティー監視モジュール118による攻撃の検出は、多くの異なるレベルで発生する。攻撃は、単一イベントの簡単な解析から、低いレベルにおいて明白なものもある。ある攻撃は、ステートフル解析を必要とするものもあり、イベントの相関は、時間およびロケーションにおいて本質的に異なり、したがって、検出は、システム資源をかなり必要とする。検出は、攻撃と必ずしも同時に発生するとは限らないので、様々な応答機構を使用しなければならない。セキュリティー監視モジュールは、ある環境においては、即座に応答し、また、別の環境においては、遅れた応答を発生させ、人間のオペレータが応答を発生させかつそれを無効にすることのできる機構を提供する。
[0078]セキュリティー監視モジュール118は、それの環境をトレースするように、また、できるだけ自己設定するように、実施される。したがって、例えば、セキュリティー監視モジュール118は、コードをインストルメントするための最良の箇所および実行されるべき最適な種類の解析を決定するために、それが得ることのできるものであればどのような情報(例えば、環境設定ファイル、イントロスペクション、統計的解析、セキュリティー開発モジュールおよびセキュリティーテストモジュールからの情報、アーキテクチャーから得ることのできる仮定)でも利用する。文脈的認識とともに、セキュリティー監視モジュール118は、好ましくは、柔軟性および拡張性が得られるように構成される。セキュリティー監視モジュールアドミニストレータが、アプリケーションにおける何らかの弱点または重要なネクサスを認識していれば、設定可能な命令が、この問題を解決するために、利用可能である。
[0079]セキュリティー監視モジュール118の上述した特徴化は、セキュリティー監視モジュール118によって実行される特定のオペレーションのいくつかの例を参照してより完全に理解される。これらの例は、いくつかのさらなる概念を導入することを必要とする。図6は、セキュリティー監視モジュール118を実施するのに使用されてもよい実行可能なコードコンポーネントを示す。この図面は、一組のセンサー600_A〜600_Nを示す。これらのセンサーは、イベント602_A〜602_Nを生成する。例として、これらのイベントのあるものは、トランシーバ(例えば、トランシーバ604_Aおよび604_B)に転送され、また、あるものは、解析モジュール(例えば、606)に転送される。トランシーバ604は、以下で説明するように、メッセージ、イベント602、または、イベント処理ルール(EPR)614を生成する。解析モジュール606は、警報616を生成する。トランシーバ620_A〜620_Nからなるさらなる階層が、この情報を処理するのに使用される。最終的には、トランシーバは、ディレクターまたはトランシーバ622にレポートする。ディレクター622は、EPR614をトランシーバ階層の上から下へ転送する。EPR614は、また、トランシーバ(例えば、604、620)、センサー(例えば、600)、および、解析モジュール(例えば、606)を制御するのに使用される。これらのオペレーションは、以下の説明からより完全に理解される。
[0080]メッセージは、トランシーバ間で転送されるデータのための一般的なコンテナである。メッセージは、データおよび/または命令を含む。例えば、メッセージは、イベント処理ルール(EPR)をトランシーバ階層の上から下へおよび下から上へ配信する。
[0081]さらなる概念は、イベント602の概念である。イベント602は、データの基本単位である。イベントは、センサー600から発生し、時刻、種類(イベントの一般的な種類、すなわち、ログイン、データベースクエリー、データベース更新、など)、ソース(それが生成されたセンサーの名前)、および、コンテクスト(アプリケーションおよびサーバーの名前)によって識別される。イベントは、センサーによって記録された情報(例えば、関数パラメータ、ユーザ、セッション情報、スタックトレース、投げられた例外など)をカプセル化する。警報616は、特殊な種類のイベントであり、それは、センサーからのイベントに応じて、解析モジュール606によって生成される。
[0082]イベント処理ルール(EPR)614は、イベントをどのようにハンドルするかに関する指示をトランシーバに提供する。EPRは、3つの形の中の1つによって、すなわち、スタートアップ環境設定の一部として、管理コンソールを介してアドミニストレータによってランタイム時に動的に、あるいは、何か(通常、侵入の検出または嫌疑による)に応じて動的に、発生させられるが、大きな負荷を加えられている様々なトランシーバにかかる処理負荷を調節するのに使用することができる。本発明の一実施形態においては、EPRは、以下の能力、すなわち、イベントのコンテンツを調査し、イベントのコンテンツを変更し、イベントを廃棄(フィルタリング)するようにトランシーバに指示し、設定された時間の後に満了し、解析モジュールをインスタンス化およびパラメータ化し、イベントを解析モジュールに送り、解析モジュールからの応答を送り、トランシーバ内に記憶された状態にアクセスし、センサーをイネーブルまたはディスエーブルし、同期して動作するようにセンサーに指示し、EPRが適用されるべき単一のまたは一組のトランシーバを指定し、および/または、正規表現を評価する能力を有する。
[0083]EPRは、システムユーザによって書かれてもよく、自動化されたツールによって開発されてもよく、あるいは、イベントに応じて、システムコンポーネントによって合成することができる。EPRは、典型的には、人間が読むことのできるフォーマットを有し、しかもまた、効率的な解釈をもたらすランタイム表現をサポートする。
[0084]セキュリティー監視モジュール118に関連する別の概念は、トランシーバ604の概念である。トランシーバ604は、階層内に配置され、そして、イベントおよびEPRを送信する責任を有する。センサーは、トランシーバの特殊なクラスであり(それらのセンサーは、イベントを生成する)、ディレクター622もまた、トランシーバの特殊なタイプである。トランシーバの階層は、多くのシステム間に、場合によっては、同じシステム上の異なるプロセス間に、そして、単一アプリケーション内の多くのスレッド間に、分散する。トランシーバ階層は、侵入検出が必要とする集中的な作業負荷の分散を助ける。トランシーバは、イベントを、フィルタリングし、相関をとり、そして、処理することができる。
[0085]典型的なトランシーバ階層は、多くのレベルのトランシーバを含む。センサーは、実際のデータを収集し、それをアプリケーションレベルのトランシーバまで転送する。単一マシン上で実行されている複数のアプリケーションが存在するならば、マシンレベルのまたは仮想マシンレベルのトランシーバが存在してもよい。アプリケーションレベルのトランシーバは、メッセージをマシン上のより高いレベルのトランシーバへ送信するのに必要な何らかのIPCに対して責任を有する。最も高いレベルのトランシーバは、メッセージをネットワークを介してディレクターまたは親トランシーバへ送信する責任を有する。処理負荷を下げるために、より迅速なイベント相関を可能にするために、あるいは、ディレクターよりも下におけるフィルタリング能力を増大させるために、さらなるトランシーバレベルが、ディレクターの下に付加されてもよい。
[0086]EPRは、トランシーバのビヘイビアを指示する。EPRは、親トランシーバから子へ上から下に転送される。中間トランシーバの場合、EPRは、フィルタリングを実施するのに使用されてもよく、あるいは、特定の種類の解析をイネーブルまたはディスエーブルするのに使用することができる。センサーの場合、EPRは、アプリケーションのビヘイビアを動的に変更する方法を提供する(例えば、権限を与えられていないユーザが、ログインすることを試みると、例外を投げる)。
[0087]解析モジュール606は、どのトランシーバ604にプラグインすることができる。大多数のモジュールは、ディレクターによって実行されるが、階層のより低いレベルに存在するいくつかのより簡単なステートレスモジュールを実行することが望ましいこともある。モジュールは、イベントがトランシーバチェーンを下から上へ転送される前または転送された後に、イベントに基づいて実行され、判断はEPRによって決定することができる。
[0088]センサー600は、本発明のセキュリティー監視モジュール118とともに使用されるさらなるコンポーネントである。センサーは、特殊なクラスのトランシーバである。すなわち、センサーは、イベントを生成する。上述したように、センサーは、ランタイム時にアプリケーション内に組み込まれる。それらは、コード内に埋め込まれるので、それらは、動きが軽くかつフォールトトレラントでなければならない。センサーは、アプリケーションを中断させてはならない。センサーの通常オペレーションは、コンテクストデータがイベントに関連しているものなら何でもパッケージし、それのEPRがイベントとマッチングするかどうかを検査し、そして、イベントをそれの親トランシーバに渡すことである。
[0089]また、セキュリティー監視モジュール118は、ディレクター622とともに動作する。ディレクターは、最上位のレベルのトランシーバである(すべてのイベントの目的地)。ほとんどの解析モジュールは、ディレクターレベルで実行される。ディレクターは、解析モジュールによってアクセスすることのできる共有状態を記録しかつ維持し、そして、警報をレポートする責任を有する。
[0090]解析モジュールは、到着するイベントに明確な種類の解析を実行する設定可能なユニットである。できるだけ多くの種類の侵入を検出するために、様々な異なる解析モジュールが、デフォルト設定によって使用される。好ましくは、解析モジュールは、カスタマイズされた検出機構を記述するのを助けるために、関連するアプリケーションプログラムインタフェース(API)を有する。本発明の一実施形態においては、解析モジュールは、ルールベース解析(論理的テスト、しきい値、および、パターンマッチング)および統計的解析を含む。イベントが、解析モジュールをトリガーすると、それは、警報を生成し、その警報をそれが含むトランシーバへ渡す。警報の重大度レベルに依存して、モジュールは、EPRを生成してもよく、そのEPRは、トランシーバ階層の上から下へ伝播される。
[0091]本発明の一実施形態においては、解析モジュールは、簡単なインタフェースをEPR614へエクスポートする。EPRは、初期化時に、および、それぞれのイベントが発生したときに、一組の環境設定パラメータを提供する。解析モジュール自体は、極めて簡単なものであってもよく、あるいは、下部において、極めて複雑なものであり得る。あるものは、解析を実行するための一組の予め定められたパラメータを利用し、また、あるものは、それらが使用されるときにアプリケーションに関して適応学習し、および、学習された統計的パターンからはっきりと浮き出てくるイベントに反応する。解析モジュールをより柔軟性のあるものかつ再利用可能なものにするために、1つの解析モジュールは、別の解析モジュールをインスタンス化しかつそれを呼び出すことを許可される(例えば、ユーザ入力の値の妥当な範囲を学習するモジュールは、妥当性を実際に確認する範囲検査モジュールを利用することができる)。例として、解析モジュールは、値のしきい値検査器、イベント頻度のしきい値検査器、セットの比較、正規表現検査器、ステートフルパターンマッチング、統計的モーメント解析、および、マルコフモデル解析(すなわち、状態遷移の確率)を含んでもよい。
[0092]上述した概念に頼って、セキュリティー監視モジュール118のオペレーションのいくつかの例を示す。“Joe”は、通常、日中に彼のシステムにログインすると仮定する。ある日、彼が、3:00AMにログインする。この状況において、セキュリティー監視モジュール118は、このイベントを記録し、そして、Joeによって実行されるすべてのオペレーションに周到な注意を払う。次に、Joeは、海外口座へ極めて大きなトランザクションをなすことを試みる。彼は、通常、国内口座間で小さなトランザクションしか行わないので、セキュリティー監視モジュール118は、一時的に彼をロックアウトし、アドミニストレータに通知する。
[0093]もう1つの例は、“Fred”が10文字のストリングをパラメータとして備える関数をコールする場合である。これまでには、この関数は、必ず、4文字のストリングを備えてコールされた。この場合、セキュリティー監視モジュール118は、トランザクションをブロックしないが、そのことを怪しい行動としてログに記録する。また、セキュリティー監視モジュール118は、電子メールをアドミニストレータに送信してもよい。
[0094]さらなる例は、データベーストランザクションが開始される場合である。この場合、すべてのパラメータは、正常に見えるが、スタックトレースが、異常である。したがって、警報が、生成される。さらに別の例は、特定の医者が、いつも、特定のIPアドレスからログインする場合である。ある日、彼が、東欧のどこかのIPアドレスからログインする。この場合、セキュリティー監視モジュール118は、ユーザは旅行中である可能性があると認識し、あるいは、誰かがパスワードを盗んだ可能性があると認識する。その結果として、警報が、生成される。
[0095]この最後の例を考える。Sally Hackerは、医療記録サイトにログインし、弱点がないかサイトを探索する。彼女は、ビューレコードページへの要求上においてレコードid番号を人手で編集する方法を見つけ出し、データベースから任意のレコードをアプリケーションに検索させる。そして、Sallyは、データベース内のすべてのレコードを検索するために、2行のPERLスクリプトを書き込む。より詳細には、Sallyのスクリプトは、/viewrecord.jsp?id=1001を得るためのHTTP要求を作成する。サーブレットエンジン内のセンサー(ServletSensor)は、イベントを生成し、そのイベントは、ディレクターまでトランシーバ階層を下から上に転送される。イベントは、ディレクター内の一連のEPRを通過する。1つのEPRは、頻度しきい値を検出するための解析モジュールにイベントを送る。以下は、このオペレーションを実施するための例としてのコードである。
********************************************************************
<epr name="TooFast">
<host>Director</host>
<module type="RateThreshold" name="rt">
<param name="rate">l</param>
<!-- Trigger at 1/s ->
<param name="history">5</param>
<!-- Remember 5 requests, need 5 to trigger -->
</module>
<clause>
<condition>
<equals field="event. sensor" value="ServletSensor"/>
</condition>
<action>
<analyze module="rt" />
</action>
</clause>
</epr>
********************************************************************
[0096]数秒後に、Sallyのスクリプトは、第5の要求(/viewrecord.jsp?id=1005)を作成し、ServletSensorは、イベントを生成する。ディレクターにおいて、TooFastが、それの“rt”モジュールにイベントを送り、そのモジュールは、高速のページ要求によってトリガーされる。解析モジュールは、EPRを生成し、トランシーバ階層の上から下にそれを送信する。以下のコードが、これらのオペレーションを実施するのに使用されてもよい。
********************************************************************
<epr name="IntrustionResponse.l">
<expires> Wed Nov 27 14:30:15 PDT 2004</expires>
<host>ServletSensor</host>
<clause>
<condition>
<or>
<equals field="event.username" value="sally.hacker"/>
<equals field="event.remoteaddr" value="136.205.62.161"/>
</or>
<condition>
<action>
<exception message=" Account Blocked" />
</action>
</clause>
</epr>

********************************************************************
[0097]EPRは、ServletSensorに到着し、EPRのそれのチェーンに付加される。ディレクターに戻ると、解析モジュールは、警報を生成し、その警報は、管理コンソールに送信される。Sallyのスクリプトは、/viewrecord.jsp?id=1005を要求する。ServletSensorにおいて、InstrustionResponse 1 EPRが、イベントを検出し、例外を投げるようにセンサーに命令し、ページ要求をブロックする。
[0098]すぐに、システムアドミニストレータは、管理コンソールにおいて、高い優先順位の警報に気がつく。アドミニストレータは、Sallyのスクリプトによってなされた要求を調査し、5つの要求のすべてが、その他の患者の記録を戻したことに気がつく。アドミニストレータは、ここで、システムにおけるこの弱点を迅速にパッチしなければならない。すなわち、SallyのIPアドレスおよびアカウントをブロックすることは、長期間にわたってSallyまたはその他のハッカーを締め出すことはない。アプリケーション開発者およびセキュリティー監視モジュールアドミニストレータを含む小さなチームが、素早く召集される。パッチを開発し、テストし、そして、配置できるまで、彼らは、問題を解決するための一組のEPRを書き込む。1つのEPR(A)は、EJBコンテナのJDBC要求を監視するセンサーを含むいくつかのセンサーからのイベントを監視する。このEPRは、アプリケーションレベルトランシーバにおいて実行されるので、それは、それが必要とするすべてのセンサーからのイベントにアクセスする。第2のEPR(B)は、このトランシーバ内にある解析モジュールを起動し、その解析モジュールは、イベント相関を実行し、単一ユーザトランザクションからの複数のイベントを互いにリンクする。最後に、EPR(C)が、EJBコンテナのセンサーに書き込まれ、そのEPR(C)は、処理する前に、アプリケーショントランシーバからの応答を待つようにそのセンサーに命令する。ビューレコードページへの悪意のある要求は、この時点において、以下のシーケンスを開始する。
[0099]アプリケーションエントリーポイントにおけるセンサーは、ユーザトランザクションの開始を指示するイベントを生成する。アプリケーショントランシーバにおいては、EPR(B)は、このイベントを相関モジュールへ送り、その相関モジュールは、新しいイベント列を発行し始める。
[0100]アプリケーション内にあるセンサーは、要求イベントを生成し、そのイベントは、セッションid、ユーザアカウント、要求パス、および、その他の様々なパラメータを含む。アプリケーショントランシーバにおいては、このイベントは、第1のイベントと相関がとられる。EJBコンテナ内にあるセンサーは、JDBC要求によって戻されたレコードに関する情報を有するイベントを生成する。EPR(C)は、続行する前に、アプリケーショントランシーバからの応答を待つようにセンサーに命令する。アプリケーショントランシーバにおいては、イベントは、このトランザクションからのその他のイベントと相関がとられる。そして、EPR(A)は、戻されたレコードからのuserid(イベント1)が実際のuserid(イベント2)と一致するかどうかを確認する。すべてが、OKであれば、EPR(A)は、待っているセンサーに続行するように命令する。useridが、一致しなければ、EPR(A)は、待っているセンサーに例外を投げるように命令し、警報を生成する。
[0101]本発明の一実施形態においては、セキュリティー監視モジュール114は、ユーザのオンラインビヘイビアを監視するセキュリティー監視ルール137を含む。与えられたあらゆる場合におけるユーザのオンラインビヘイビアは、ユーザのこれまでのビヘイビア傾向を特徴づけるルールと比較される。これらの2つのビヘイビア間にしきい値を超える差があれば、強化されたセキュリティーが、呼び出される。例えば、ユーザのビヘイビアは、ユーザのブラウザ、ユーザが働いている時間帯、アプリケーションの中でのユーザの流れなどに関して監視されてもよい。与えられた時刻におけるビヘイビアが、これまでのビヘイビア傾向と矛盾していれば、チャレンジ応答シーケンスのようなセキュリティーイベントが、呼び出される。
[0102]当業者は、本発明のセキュリティー監視モジュール118に関連する多くの利点がわかるはずである。セキュリティー監視モジュール118は、プログラムを書き換えることなく、既存のプログラムの上に動的なセキュリティービヘイビアを積み重ねるのを助ける。この技術は、攻撃および悪用の両方にリアルタイムに応答するための機構を提供する。このアプローチは、アスペクト指向プログラミング、ランタイムインストルメンテーション、リアルタイムイベント相関、および、アプリケーションベース侵入検出を組み合わせることに基づいたものである。本発明は、ソフトウェアプログラムの使用を開発者が意図した機能にのみ限定するために、その実行されているソフトウェアプログラムを防御する方法を提供する。
[0103]本発明の一実施形態は、様々なコンピュータ実施型オペレーションを実行するためのコンピュータコードをそこに有するコンピュータ可読媒体を備えるコンピュータストレージプロダクトに関係する。媒体およびコンピュータコードは、本発明のために特別に設計されコンストラクトされたものであってもよく、あるいは、それらは、コンピュータソフトウェアの当業者が利用できる周知の種類のものであってもよい。コンピュータ可読媒体の例は、限定はしないが、ハードディスク、フロッピーディスク、および、磁気テープのような磁気媒体、CD−ROMおよびホログラフィック素子のような光媒体、フロプティカルディスクのような磁気光学媒体、および、特定用途向け集積回路(“ASIC”)、プログラマブルロジックデバイス(“PLD”)、および、ROMデバイスおよびRAMデバイスのようなプログラムコードを記憶および実行するように特別に構成されたハードウェアデバイスを含む。コンピュータコードの例は、コンパイラによって生成されたようなマシンコード、および、インタプリタを用いてコンピュータによって実行されるより高いレベルのコードを含むファイルを含む。例えば、本発明の実施形態は、Java、C++、または、その他のオブジェクト指向プログラミング言語および開発ツールを用いて実施されてもよい。本発明の別の実施形態は、マシン実行可能ソフトウェア命令の代わりに、あるいは、マシン実行可能ソフトウェア命令と組み合わせて、ハードワイヤ回路で実施されてもよい。
[0104]説明のためのこれまでの記述は、本発明を十分に理解するために特定の用語を使用したが、当業者には、特定の細部は、本発明を実施するのに必要とされないことは明らかである。したがって、本発明の上述した特定の実施形態は、説明および記述のために提供されたものである。それらは、本発明を完全に網羅すること、あるいは、開示された形態そのものに本発明を限定することを意図するものではない。当然ながら、上述した教示を考慮して、多くの変更および変形が、可能である。それらの実施形態は、本発明の原理および本発明を実際に適用することを最も良く説明するために、選択され、かつ、説明されたものであり、それによって、それらは、その他の当業者が、予想される特定の使用方法に合わせた様々な変更を備える本発明および様々な実施形態を最良の形でうまく利用するのを可能にする。添付の特許請求の範囲に記載される請求項およびそれらに等価なものは、本発明の範囲を定義することを意図したものである。
本発明の実施形態に基づいて構成された装置を説明する図である。 本発明のセキュリティー開発モジュールの実施形態に関連する処理オペレーションを説明する図である。 本発明の実施形態に基づいて使用される例として共通コードフォーマット中における汚染伝播をトレースするためにデータフローセキュリティーオペレーションを説明する図である。 本発明のセキュリティーテストモジュールの実施形態に関連する処理オペレーションを説明する図である。 本発明のセキュリティー監視モジュールの実施形態に関連する処理オペレーションを説明する図である。 本発明の実施形態に基づいて構成されたセキュリティー監視モジュールのオペレーションを説明する図である。 本発明の実施形態に基づいて構成されたセキュリティー監視モジュールのコンポーネントを説明する図である。
符号の説明
100…装置、102…中央演算処理装置、104…入出力装置、106…バス、108…ネットワークインタフェース、110…ネットワーク、112…メモリー。

Claims (12)

  1. 多種多様なプログラム命令フォーマットのうちのいずれか1つで書かれたプログラム命令のセキュリティー脆弱性に関する解析をプロセッサに実行させるための実行可能な命令を含むコンピュータ可読記憶媒体であって、
    前記プログラム命令のフォーマットを共通フォーマットに変換し(200)、
    前記共通フォーマットのプログラム命令からシステムモデルを導き出し(202)、
    前記システムモデルに対し、静的な解析として、静的データフロー解析、字句解析、意味解析、及びプログラム制御フロー解析のうちのいずれか1つを実施し、それによって前記プログラム命令のセキュリティー脆弱性に関する情報を生成し(204)、
    攻撃データベースからの既知のエクスプロイト及びユーザ定義エクスプロイトに関する情報、並びに前記静的な解析から得られた前記セキュリティー脆弱性に関する情報に基いて、前記プログラム命令の潜在的なセキュリティー脆弱性を識別し(300)、
    前記潜在的なセキュリティー脆弱性を使用して、前記プログラム命令に対し動的脆弱性テストを適用し、
    前記動的テスト中における前記プログラム命令の動作を解析し(308)
    前記解析の結果をレポートする(310)
    ための実行可能な命令を備える、コンピュータ可読記憶媒体。
  2. 前記多種多様なプログラム命令フォーマットは、多種多様なソースフォーマットまたは実行可能なコード命令フォーマット含む、請求項に記載のコンピュータ可読記憶媒体。
  3. 前記多種多様なプログラム命令フォーマットは、多種多様なマシン命令フォーマット含む、請求項に記載のコンピュータ可読記憶媒体。
  4. 前記多種多様なプログラム命令フォーマットは、多種多様なプログラム環境設定ファイルフォーマット含む、請求項に記載のコンピュータ可読記憶媒体。
  5. 前記実行可能な命令が、前記プログラム命令から構成された複数のソフトウェアアプリケーションを備えるソフトウェアシステムに使用される、請求項1に記載のコンピュータ可読記憶媒体。
  6. 前記多種多様なプログラム命令フォーマットのうちのいずれか1つで書かれたプログラム命令のセキュリティー脆弱性に関する解析をプロセッサに実行させるための実行可能な命令は、
    プログラム命令のセキュリティー監査を実行し(404)
    前記セキュリティー監査に基いて、センサーを前記プログラム命令の中に挿入し(400)
    前記プログラム命令を実行し、それによって、前記センサーが、セキュリティーイベントのストリームを生成し(406)
    セキュリティーイベントの前記ストリームを監視し(408)
    セキュリティー実施結果をレポートする(410)
    ための実行可能な命令をさらに含む、請求項1に記載のコンピュータ可読記憶媒体。
  7. 多種多様なプログラム命令フォーマットのうちのいずれか1つで書かれたプログラム命令のセキュリティー脆弱性に関する解析をプロセッサに実行させるための実行可能な命令を含むコンピュータプログラムであって、
    前記プログラム命令のフォーマットを共通フォーマットに変換し(200)、
    前記共通フォーマットのプログラム命令からシステムモデルを導き出し(202)、
    前記システムモデルに対し、静的な解析として、静的データフロー解析、字句解析、意味解析、及びプログラム制御フロー解析のうちのいずれか1つを実施し、それによって前記プログラム命令のセキュリティー脆弱性に関する情報を生成し(204)、
    攻撃データベースからの既知のエクスプロイト及びユーザ定義エクスプロイトに関する情報、並びに前記静的な解析から得られた前記セキュリティー脆弱性に関する情報に基いて、前記プログラム命令の潜在的なセキュリティー脆弱性を識別し(300)、
    前記潜在的なセキュリティー脆弱性を使用して、前記プログラム命令に対し動的脆弱性テストを適用し、
    前記動的テスト中における前記プログラム命令の動作を解析し(308)、
    前記解析の結果をレポートする(310)
    ための実行可能な命令を備える、コンピュータプログラム。
  8. 前記多種多様なプログラム命令フォーマットは、多種多様なソースフォーマットまたは実行可能なコード命令フォーマットを含む、請求項7に記載のコンピュータプログラム。
  9. 前記多種多様なプログラム命令フォーマットは、多種多様なマシン命令フォーマットを含む、請求項7に記載のコンピュータプログラム。
  10. 前記多種多様なプログラム命令フォーマットは、多種多様なプログラム環境設定ファイルフォーマットを含む、請求項7に記載のコンピュータプログラム。
  11. 前記実行可能な命令が、前記プログラム命令から構成された複数のソフトウェアアプリケーションを備えるソフトウェアシステムに使用される、請求項7に記載のコンピュータプログラム。
  12. 前記多種多様なプログラム命令フォーマットのうちのいずれか1つで書かれたプログラム命令のセキュリティー脆弱性に関する解析をプロセッサに実行させるための実行可能な命令は、
    プログラム命令のセキュリティー監査を実行し(404)、
    前記セキュリティー監査に基いて、センサーを前記プログラム命令の中に挿入し(400)、
    前記プログラム命令を実行し、それによって、前記センサーが、セキュリティーイベントのストリームを生成し(406)、
    セキュリティーイベントの前記ストリームを監視し(408)、
    セキュリティー実施結果をレポートする(410)
    ための実行可能な命令をさらに含む、請求項7に記載のコンピュータプログラム。
JP2007515157A 2004-06-04 2005-05-12 セキュアーソフトウェアを開発し、テストし、監視するための装置および方法 Expired - Fee Related JP4789933B2 (ja)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US57706604P 2004-06-04 2004-06-04
US60/577,066 2004-06-04
US11/009,474 US20050273859A1 (en) 2004-06-04 2004-12-10 Apparatus and method for testing secure software
US11/009,570 US20050273860A1 (en) 2004-06-04 2004-12-10 Apparatus and method for developing, testing and monitoring secure software
US11/009,570 2004-12-10
US11/009,474 2004-12-10
US11/010,146 US7207065B2 (en) 2004-06-04 2004-12-10 Apparatus and method for developing secure software
US11/010,146 2004-12-10
US11/009,572 US7975306B2 (en) 2004-06-04 2004-12-10 Apparatus and method for monitoring secure software
US11/009,572 2004-12-10
PCT/US2005/016756 WO2005121953A1 (en) 2004-06-04 2005-05-12 Apparatus and method for developing, testing and monitoring secure software

Publications (2)

Publication Number Publication Date
JP2008502046A JP2008502046A (ja) 2008-01-24
JP4789933B2 true JP4789933B2 (ja) 2011-10-12

Family

ID=35503246

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007515157A Expired - Fee Related JP4789933B2 (ja) 2004-06-04 2005-05-12 セキュアーソフトウェアを開発し、テストし、監視するための装置および方法

Country Status (5)

Country Link
US (1) US9400889B2 (ja)
EP (1) EP1756708A4 (ja)
JP (1) JP4789933B2 (ja)
KR (1) KR101150653B1 (ja)
WO (1) WO2005121953A1 (ja)

Families Citing this family (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090070459A1 (en) * 2005-04-18 2009-03-12 Cho Young H High-Performance Context-Free Parser for Polymorphic Malware Detection
US7757282B2 (en) * 2005-05-20 2010-07-13 Microsoft Corporation System and method for distinguishing safe and potentially unsafe data during runtime processing
WO2007025279A2 (en) * 2005-08-25 2007-03-01 Fortify Software, Inc. Apparatus and method for analyzing and supplementing a program to provide security
JP4587976B2 (ja) * 2006-02-27 2010-11-24 日立ソフトウエアエンジニアリング株式会社 アプリケーションの脆弱性検査方法および装置
US20070245327A1 (en) * 2006-04-17 2007-10-18 Honeywell International Inc. Method and System for Producing Process Flow Models from Source Code
US20080083012A1 (en) * 2006-06-26 2008-04-03 Dachuan Yu Program instrumentation method and apparatus for constraining the behavior of embedded script in documents
EP2092424B1 (en) 2006-10-19 2015-12-30 Checkmarx Ltd. Locating security vulnerabilities in source code
EP2012237A1 (de) * 2007-07-02 2009-01-07 Siemens Aktiengesellschaft Verfahren zur Auswertung mindestens eines Kennwertes
US8176464B2 (en) * 2007-12-24 2012-05-08 Infosys Technologies Limited Method and framework for securing a source code base
US9686288B2 (en) 2008-01-25 2017-06-20 Ntt Docomo, Inc. Method and apparatus for constructing security policies for web content instrumentation against browser-based attacks
US8341607B2 (en) * 2008-03-13 2012-12-25 International Business Machines Corporation Condensing pattern matcher generation for intermediate language patterns
US9779234B2 (en) * 2008-06-18 2017-10-03 Symantec Corporation Software reputation establishment and monitoring system and method
US20100205014A1 (en) * 2009-02-06 2010-08-12 Cary Sholer Method and system for providing response services
JP5303795B2 (ja) 2010-06-02 2013-10-02 株式会社日立製作所 アプリケーションの解析方法、解析システム及び解析プログラム
US8819637B2 (en) * 2010-06-03 2014-08-26 International Business Machines Corporation Fixing security vulnerability in a source code
US20110314337A1 (en) * 2010-06-18 2011-12-22 International Business Machines Corporation Method and Apparatus for Locating Input-Model Faults Using Dynamic Tainting
US8782435B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time using control flow signatures
JP5501156B2 (ja) * 2010-08-23 2014-05-21 キヤノン株式会社 情報処理装置、情報処理方法、及びプログラム
US9141806B2 (en) 2010-08-24 2015-09-22 Checkmarx Ltd. Mining source code for violations of programming rules
US20120054724A1 (en) * 2010-08-31 2012-03-01 International Business Machines Corporation Incremental static analysis
US8914890B2 (en) * 2011-01-31 2014-12-16 International Business Machines Corporation Determining the vulnerability of computer software applications to privilege-escalation attacks
US8539466B2 (en) 2011-05-23 2013-09-17 International Business Machines Corporation Determining suitable insertion points for string sanitizers in a computer code
CN102811140B (zh) * 2011-05-31 2015-04-08 国际商业机器公司 测试基于浏览器的应用的方法和系统
US9971896B2 (en) 2011-12-30 2018-05-15 International Business Machines Corporation Targeted security testing
US9135147B2 (en) 2012-04-26 2015-09-15 International Business Machines Corporation Automated testing of applications with scripting code
CA2777434C (en) 2012-05-18 2019-09-10 Ibm Canada Limited - Ibm Canada Limitee Verifying application security vulnerabilities
US9501646B2 (en) 2012-09-26 2016-11-22 Mitsubishi Electric Corporation Program verification apparatus, program verification method, and computer readable medium
US8966636B2 (en) * 2012-10-16 2015-02-24 International Business Machines Corporation Transforming unit tests for security testing
US9690945B2 (en) * 2012-11-14 2017-06-27 International Business Machines Corporation Security analysis using relational abstraction of data structures
WO2014137324A1 (en) * 2013-03-05 2014-09-12 Mcafee, Inc. Execution profile assembly using branch records
US9569334B2 (en) * 2013-03-14 2017-02-14 Whitehat Security, Inc. Techniques for traversing representations of source code
US20140373157A1 (en) 2013-06-14 2014-12-18 International Business Machines Corporation After-the-Fact Configuration of Static Analysis Tools Able to Reduce User Burden
RU2568295C2 (ru) 2013-08-07 2015-11-20 Закрытое акционерное общество "Лаборатория Касперского" Система и способ временной защиты операционной системы программно-аппаратных устройств от приложений, содержащих уязвимости
EP2835757B1 (en) * 2013-08-07 2017-08-16 Kaspersky Lab, ZAO System and method protecting computers from software vulnerabilities
US12124586B2 (en) * 2013-09-13 2024-10-22 Omnissa, Llc Risk assessment for managed client devices
WO2015155028A1 (en) * 2014-04-11 2015-10-15 Arima Software Design S.L.L. Detection of manipulation of applications
US10423793B2 (en) 2014-06-19 2019-09-24 Entit Software Llc Install runtime agent for security test
US10331894B2 (en) 2014-08-29 2019-06-25 Entit Software Llc Static program analysis in an object-relational mapping framework
US10657262B1 (en) * 2014-09-28 2020-05-19 Red Balloon Security, Inc. Method and apparatus for securing embedded device firmware
US9785777B2 (en) * 2014-12-19 2017-10-10 International Business Machines Corporation Static analysis based on abstract program representations
US10069855B1 (en) * 2015-09-23 2018-09-04 Wells Fargo Bank, N.A. Automated security analysis of software libraries
KR101645019B1 (ko) * 2016-01-15 2016-08-02 지티원 주식회사 소프트웨어 보안취약점 검출을 위한 규칙명세언어
US9959154B2 (en) 2016-02-16 2018-05-01 International Business Machines Corporation Identifying defunct nodes in data processing systems
US10594733B2 (en) * 2016-04-06 2020-03-17 Rapid7, Inc System and method for application software security and auditing
WO2017196381A1 (en) * 2016-05-12 2017-11-16 Synopsys, Inc. Systems and methods for model-based analysis of software
US10162966B1 (en) * 2016-10-19 2018-12-25 Trend Micro Incorporated Anti-malware system with evasion code detection and rectification
EP3401827A1 (en) 2017-05-10 2018-11-14 Checkmarx Ltd. Method and system of static and dynamic data flow analysis
US10740470B2 (en) 2017-05-31 2020-08-11 Shiftleft Inc. System and method for application security profiling
US10956562B2 (en) 2017-06-14 2021-03-23 International Business Machines Corporation Developing applications using precise static security analysis
US10853488B2 (en) * 2017-07-10 2020-12-01 Dell Products, Lp System and method for a security filewall system for protection of an information handling system
US10705868B2 (en) 2017-08-07 2020-07-07 Modelop, Inc. Dynamically configurable microservice model for data analysis using sensors
US20190052602A1 (en) * 2017-08-14 2019-02-14 Onapsis, lnc. Generating rules to detect security vulnerabilities based on vulnerability primitives with entry point finder
US10956574B2 (en) 2017-10-07 2021-03-23 Shiftleft Inc. System and method for securing applications through an application-aware runtime agent
US20190129828A1 (en) * 2017-10-31 2019-05-02 International Business Machines Corporation Gathering coverage metrics for static program analysis tools
US11074362B2 (en) 2017-12-04 2021-07-27 ShiftLeft, Inc. System and method for code-based protection of sensitive data
CN110096873B (zh) * 2018-01-31 2025-03-25 开利公司 通过补丁变换的自动诱饵推导
CN108459964B (zh) * 2018-03-06 2021-05-04 平安科技(深圳)有限公司 测试用例选择方法、装置、设备以及计算机可读存储介质
US10990685B2 (en) * 2018-05-02 2021-04-27 Spectare Systems, Inc. Static software analysis tool approach to determining breachable common weakness enumerations violations
US12019742B1 (en) 2018-06-01 2024-06-25 Amazon Technologies, Inc. Automated threat modeling using application relationships
CN109684160A (zh) * 2018-09-07 2019-04-26 平安科技(深圳)有限公司 数据库巡检方法、装置、设备及计算机可读存储介质
US10657025B2 (en) 2018-10-18 2020-05-19 Denso International America, Inc. Systems and methods for dynamically identifying data arguments and instrumenting source code
US10628286B1 (en) 2018-10-18 2020-04-21 Denso International America, Inc. Systems and methods for dynamically identifying program control flow and instrumenting source code
US12174963B1 (en) * 2018-10-29 2024-12-24 Amazon Technologies, Inc. Automated selection of secure design patterns
US11514172B2 (en) 2018-11-15 2022-11-29 Grabango Co. System and method for information flow analysis of application code
CN109726133A (zh) * 2019-01-04 2019-05-07 华北理工大学 一种基于计算机性能的数据保护与优化方法
CN110162474B (zh) * 2019-05-10 2020-09-15 北京理工大学 一种基于抽象语法树的智能合约重入漏洞检测方法
CN110381204B (zh) * 2019-07-16 2021-01-08 维沃移动通信有限公司 一种信息显示方法、移动终端及计算机可读存储介质
US20210365564A1 (en) * 2020-05-22 2021-11-25 Disney Enterprises, Inc. Techniques for monitoring computing infrastructure
US11836258B2 (en) 2020-07-28 2023-12-05 Checkmarx Ltd. Detecting exploitable paths in application software that uses third-party libraries
US11610000B2 (en) 2020-10-07 2023-03-21 Bank Of America Corporation System and method for identifying unpermitted data in source code
US12160442B2 (en) 2021-03-23 2024-12-03 Target Brands, Inc. Validating network security alerting pipeline using synthetic network security events
TWI774503B (zh) * 2021-08-06 2022-08-11 瑞昱半導體股份有限公司 除錯管理平台與其運作方法
EP4396715B1 (de) * 2021-10-15 2026-03-04 Siemens Aktiengesellschaft Automatische analyse einer ausnutzbarkeit von schwachstellen eines software-images
DE102021211676A1 (de) * 2021-10-15 2023-04-20 Siemens Aktiengesellschaft Automatische Analyse einer Ausnutzbarkeit von Schwachstellen eines Software-Images
US11928221B2 (en) 2021-11-29 2024-03-12 Bank Of America Corporation Source code clustering for automatically identifying false positives generated through static application security testing
US11941115B2 (en) 2021-11-29 2024-03-26 Bank Of America Corporation Automatic vulnerability detection based on clustering of applications with similar structures and data flows
US20230315862A1 (en) * 2022-03-30 2023-10-05 WhiteSource Ltd. Method and apparatus for identifying dynamically invoked computer code using literal values
US12039304B2 (en) * 2022-07-01 2024-07-16 Microsoft Technology Licensing, Llc Syntax subtree code strengthening
US20250193246A1 (en) * 2023-12-08 2025-06-12 Palo Alto Networks, Inc. Security rule conversion and performance evaluation

Family Cites Families (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4667290A (en) 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
IL100990A (en) 1991-02-27 1995-10-31 Digital Equipment Corp Multilanguage optimizing compiler using templates in multiple pass code generation
US5339238A (en) 1991-03-07 1994-08-16 Benson Thomas R Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph
IL99927A0 (en) 1991-11-01 1992-08-18 Ibm Israel Restriction checker generator
US5355492A (en) * 1991-11-05 1994-10-11 Thinking Machines Corporation System for compiling parallel communications instructions including their embedded data transfer information
US5502815A (en) * 1992-03-30 1996-03-26 Cozza; Paul D. Method and apparatus for increasing the speed at which computer viruses are detected
US5473767A (en) 1992-11-03 1995-12-05 Intel Corporation Method and apparatus for asynchronously stopping the clock in a processor
US5440723A (en) * 1993-01-19 1995-08-08 International Business Machines Corporation Automatic immune system for computers and computer networks
US5699507A (en) 1995-01-17 1997-12-16 Lucent Technologies Inc. Method of identifying similarities in code segments
US7140005B2 (en) * 1998-12-21 2006-11-21 Intel Corporation Method and apparatus to test an instruction sequence
US6647400B1 (en) 1999-08-30 2003-11-11 Symantec Corporation System and method for analyzing filesystems to detect intrusions
US6408382B1 (en) 1999-10-21 2002-06-18 Bops, Inc. Methods and apparatus for abbreviated instruction sets adaptable to configurable processor architecture
US6523173B1 (en) * 2000-01-11 2003-02-18 International Business Machines Corporation Method and apparatus for allocating registers during code compilation using different spill strategies to evaluate spill cost
US6687873B1 (en) 2000-03-09 2004-02-03 Electronic Data Systems Corporation Method and system for reporting XML data from a legacy computer system
US7093239B1 (en) 2000-07-14 2006-08-15 Internet Security Systems, Inc. Computer immune system and method for detecting unwanted code in a computer system
US7069589B2 (en) * 2000-07-14 2006-06-27 Computer Associates Think, Inc.. Detection of a class of viral code
US7636945B2 (en) * 2000-07-14 2009-12-22 Computer Associates Think, Inc. Detection of polymorphic script language viruses by data driven lexical analysis
CA2321018A1 (en) * 2000-09-27 2002-03-27 Ibm Canada Limited-Ibm Canada Limitee Optimizing compilation by forward store movement
US6487701B1 (en) 2000-11-13 2002-11-26 International Business Machines Corporation System and method for AC performance tuning by thereshold voltage shifting in tubbed semiconductor technology
US7284274B1 (en) 2001-01-18 2007-10-16 Cigital, Inc. System and method for identifying and eliminating vulnerabilities in computer software applications
US6907430B2 (en) 2001-10-04 2005-06-14 Booz-Allen Hamilton, Inc. Method and system for assessing attacks on computer networks using Bayesian networks
CA2363795A1 (en) * 2001-11-26 2003-05-26 Cloakware Corporation Computer system protection by communication diversity
US7401359B2 (en) * 2001-12-21 2008-07-15 Mcafee, Inc. Generating malware definition data for mobile computing devices
US6655554B2 (en) 2002-01-11 2003-12-02 Huhtamaki Consumer Packing, Inc. Wide pattern laminated end disk for food dispensing gun and cartridge for implementing same
US7664845B2 (en) * 2002-01-15 2010-02-16 Mcafee, Inc. System and method for network vulnerability detection and reporting
US7302707B1 (en) * 2002-01-18 2007-11-27 Cigital, Inc. Systems and methods for detecting software buffer security vulnerabilities
AU2003210900A1 (en) 2002-02-07 2003-09-02 Empirix Inc. Automated security threat testing of web pages
US6892901B2 (en) 2002-02-08 2005-05-17 Automatic Bar Controls, Inc. Sauce pumping apparatus
US7058925B2 (en) 2002-04-30 2006-06-06 Microsoft Corporation System and method for generating a predicate abstraction of a program
US6952779B1 (en) * 2002-10-01 2005-10-04 Gideon Cohen System and method for risk detection and analysis in a computer network
US7051322B2 (en) 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US7594111B2 (en) 2002-12-19 2009-09-22 Massachusetts Institute Of Technology Secure execution of a computer program
US7412723B2 (en) * 2002-12-31 2008-08-12 International Business Machines Corporation Method and system for morphing honeypot with computer security incident correlation
US7210066B2 (en) 2002-12-31 2007-04-24 Sun Microsystems, Inc. Method and system for determining computer software test coverage
US7483972B2 (en) 2003-01-08 2009-01-27 Cisco Technology, Inc. Network security monitoring system
US7418734B2 (en) * 2003-04-18 2008-08-26 Ounce Labs, Inc. Method and system for detecting privilege escalation vulnerabilities in source code
EP1627303A4 (en) * 2003-04-18 2009-01-14 Ounce Labs Inc METHOD AND SYSTEM FOR DETECTING VULNERABILITIES IN A SOURCE CODE
US7788652B2 (en) 2003-06-27 2010-08-31 Microsoft Corporation Representing type information in a compiler and programming tools framework
US20050010896A1 (en) 2003-07-07 2005-01-13 International Business Machines Corporation Universal format transformation between relational database management systems and extensible markup language using XML relational transformation
US20050015752A1 (en) 2003-07-15 2005-01-20 International Business Machines Corporation Static analysis based error reduction for software applications
US7739737B2 (en) 2003-07-29 2010-06-15 Wisconsin Alumni Research Foundation Method and apparatus to detect malicious software
US7272821B2 (en) 2003-08-25 2007-09-18 Tech Mahindra Limited System and method of universal programming language conversion
US7437718B2 (en) * 2003-09-05 2008-10-14 Microsoft Corporation Reviewing the security of trusted software components
US7478365B2 (en) 2004-01-13 2009-01-13 Symphony Services Corp. Method and system for rule-based generation of automation test scripts from abstract test case representation
US7555777B2 (en) 2004-01-13 2009-06-30 International Business Machines Corporation Preventing attacks in a data processing system
US20050273860A1 (en) 2004-06-04 2005-12-08 Brian Chess Apparatus and method for developing, testing and monitoring secure software
US7603715B2 (en) * 2004-07-21 2009-10-13 Microsoft Corporation Containment of worms
US20060178941A1 (en) 2005-02-04 2006-08-10 Purnell John H Iii Method, system, and software for retrieval and analysis of service data
US7779399B2 (en) * 2005-05-16 2010-08-17 Armorize Technologies, Inc. System and method for securing web application code and verifying correctness of software

Also Published As

Publication number Publication date
US20070240138A1 (en) 2007-10-11
US9400889B2 (en) 2016-07-26
JP2008502046A (ja) 2008-01-24
KR20070043707A (ko) 2007-04-25
EP1756708A4 (en) 2010-04-07
EP1756708A1 (en) 2007-02-28
KR101150653B1 (ko) 2012-05-29
WO2005121953A1 (en) 2005-12-22

Similar Documents

Publication Publication Date Title
JP4789933B2 (ja) セキュアーソフトウェアを開発し、テストし、監視するための装置および方法
US7207065B2 (en) Apparatus and method for developing secure software
US7975306B2 (en) Apparatus and method for monitoring secure software
US20050273859A1 (en) Apparatus and method for testing secure software
US20050273860A1 (en) Apparatus and method for developing, testing and monitoring secure software
Datta et al. Valve: Securing function workflows on serverless computing platforms
Shahriar et al. Mitigating program security vulnerabilities: Approaches and challenges
Wei et al. Preventing SQL injection attacks in stored procedures
Almorsy et al. Supporting automated vulnerability analysis using formalized vulnerability signatures
Wagner Static analysis and computer security: New techniques for software assurance
Zhang et al. Malicious package detection in npm and pypi using a single model of malicious behavior sequence
Baranwal Approaches to detect SQL injection and XSS in web applications
Gaire et al. Systematization of knowledge: Security and safety in the Model Context Protocol ecosystem
Bühler et al. Securing AI Agent Execution
Livshits et al. SecuriFly: Runtime protection and recovery from Web application vulnerabilities
Felendler et al. From Tool Orchestration to Code Execution: A Study of MCP Design Choices
Nunes Blended security analysis for web applications: Techniques and tools
Anwer et al. Security testing
He et al. Co-RedTeam: Orchestrated Security Discovery and Exploitation with LLM Agents
CN118551370A (zh) 具有语法攻击检测模板的注入攻击传感器
Canlas et al. ASP. NET Core 5 Secure Coding Cookbook
Rödiger Merging Static Analysis and model checking for improved security vulnerability detection
Padrão Blind Auditing Security Testing Blind Auditing of Web Vulnerabilities in Encrypted Javascript Code Repository
Cheng et al. Remodeling vulnerability information
Brunnegård et al. Cross-Language Dependency Analysis for VS Code Extension Ecosystem

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080410

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101214

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110314

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110322

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110414

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110421

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110516

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110523

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20110526

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20110527

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110526

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110614

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110527

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110705

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110719

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140729

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4789933

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees