GeneXusにおけるWebアプリケーションセキュリティ対策 - OWASP 2010 Top10 Security Risks in GeneXus Applications

最近よく質問を頂きます「GeneXus Webアプリケーションにおけるセキュリティ対策」に関して、OWASP Top10をベースに説明します。


まず、OWASPとはOpen Web Application Security Projectの略で、Webアプリケーションのセキュリティ向上を目的としてプロジェクトです。その中のOWASP Top 10プロジェクトがWebアプリケーションの脆弱性トップ10を公開しています。前回公開されたのが2010年版で、現在(2013年5月)は2013年版がRC(Release Candidate:リリース候補)版となっています。日本でもOWASP Japanとして活動しています。


一方、GeneXusとしてのWebアプリケーションセキュリティ対策状況はArtechのwikiサイト「OWASP 2010 Top 10 Security Risks in GeneXus Applications」にて公開されています。そのタイトルの通り2010年版がベースになります。今回はこの情報を元に対応状況を説明します。なにぶん英語の説明が回りくどいので直訳ではなく意訳をしています。翻訳や表現的に誤りを見つけた方はご連絡下さい。


又、説明の中で(Security Scanner #番号)という記述がありますが、これはArtech社が公開しているSecurity ScannerというGeneXusの拡張モジュールで、ナレッジベース内のセキュリティチェックを行いレポートしてくれるツールです。Security Scanner自身については別の機会に説明をしたいと思います。




A1-インジェクション:Injection


説明:Description:

SQLインジェクション、OSコマンドインジェクション、LDAPインジェクションなど、ブラウザからの信頼できないデータ(チェックされていないデータ)をそのままパラメータとしてコマンドやクエリーを実行している場合に発生する。攻撃者の悪意のデータにより開発者の意図しないコマンドを実行したり、権限のないデータにアクセスしたりする事ができる状態。

対応:Actions:

GeneXusでの対応:
  • パラメータSQLを生成(プリペアドステートメント)。GeneXusでのFor eachコマンド、Gridコントロール、BC(ビジネス・コンポーネント)など、データベースにアクセスするクエリーはプリペアドステートメントSQLになっている。Generation of parameterized SQL statements. 
  • ダイナミックSQLステートメントのエンコーディング(when句を使用するとダイナミックSQLが生成されます)。Encoding of dynamic SQL statements (i.e., those generated in case of using when clause).

開発者の対処:
インジェクション対策の基本はブラウザからの入力値をそのままコマンドやクエリに渡さない事です。データベースクエリに関しては、上記にあるようにGeneXusがサポートしていますが、それ以外に関しては入力チェックやエスケープ処理を必ず盛り込んで下さい。
  • SQLコマンドの使用は避ける。使用する場合は入力値(パラメータ)のチェックやエスケープを盛り込む。Avoid using SQL Command (Security Scanner #103).
  • Shellファンクションの使用をチェック。Check the usage of the Shell Function (Security Scanner #114).
  • 「Form.HeaderRowHTML」と「Form.JScriptSrc」プロパティの使用を最小限にする。Minimize the use of the Form.HeaderRawHTML (Security Scanner #117) and Form.JScriptSrc properties (Security Scanner #118).
  • ネイティブコード(C#やJavaでのインラインコーディング)による記述をチェック。Check the commands used to include native code (Security Scanner #108).
  • ユーザーコントロールの使用をチェック。Check External User Controls usage (Security Scanner #121).
  • HttpResponse データ型の使用をチェック。HTTPレスポンスとして直接HTMLをクライアントに送信している場合など。Check the HttpResponse Data Type usage (Security Scanner #109).
  • LDAPClient データ型のGetAttributeメソッドの使用をチェック。Check the LDAPClient Data Type GetAttribute method usage (Security Scanner #110).
  • XMLReader データ型のValidation Typeプロパティの使用をチェック。When using the XMLReader Data Type use the ValidationType property (Security Scanner #113).
  • SDTにてtoXMLメソッドの使用をチェック。特にWebセッションやWebサービスにデータをセットする場合。Check the usage of the ToXML method when using SDTs, in particular when setting data within the WebSession or WebService usage (Security Scanner partial detection #122).


A2-クロスサイトスクリプティング:Cross Site Scripting (XSS)


説明:Description:

XSSは信頼されていないデータをバリデーションチェックやエスケープをせずにWebブラウザーに送信することにより発生する。XSSにて攻撃者はブラウザ上でスクリプトを実行し、ユーザーセッションをハイジャックしたり、Webサイトを改ざんしたり、悪意のあるサイトにユーザーをリダイレクトする事ができる。

対応:Actions:

GeneXusでの対応:
  • 項目属性、変数、テキストブロックなどはサーバーからクライアントへの全ての情報をエンコードして送信して。(ディフォルトでHTMLタグをエスケープ)Encoding of all information sent by the server to the client.

開発者の対処:
  • Form上のコントロールの「Format」プロパティ値として”HTML”や”Raw HTML”を使用するのを避ける("HTML"や"RawHTML"を指定するとHTMLタグがエスケープされずそのままクライアントへ送信される)。使用する場合は、ブラウザからの入力値をそのままセットせずエスケープ処理を加える。Avoid using “HTML” or “Raw HTML” in the Format property of Form controls (Security Scanner #101).
  • URLパラメータの暗号化「Encrypt URL Parameters」プロパティ。Encrypt parameters (Security Scanner #100).
  • 「Ajax Requests Security」プロパティを”High”に設定。(Evolution1の場合。Evolution2の場合はディフォルトでAjax通信パラメータは暗号化) Set Ajax Requests Security property with “High” value (Security Scanner #106).



A3-不完全な認証とセッション管理:Broken Authentication and Session Management


説明:Description:

認証とセッション管理に関する機能が適切に実装されていない。攻撃者はパスワード、キー、セッショントークンなど(ユーザーのアイデンティティ)を実装の不備を悪用して特定する事ができる。

対応:Actions:

GeneXusでの対応:
  • 適用なし:Does not applies

開発者の対処:
  • 資格情報を保護。Protect credentials information.
  • URLパラメータの暗号化。「Encrypt URL Parameters」プロパティ。Encrypt parameters (Security Scanner #100).
  • 「Ajax Requests Security」プロパティを”High”に設定。(Evolutin1の場合。Evolution2の場合はディフォルトでAjax通信パラメータは暗号化) Set Ajax Requests Security property with “High” value (Security Scanner #106).
  • GAM(GeneXus Access Manager)の使用(Evolution2から可能)。Use GAM (from Evolution 2, Security Scanner).
  • セッションタイムアウトをAPサーバーに設定する。「On Session Timeout」プロパティの設定確認(Evolution2の場合) Set a valid Session Timeout value for your application, complement it with the On Session Timeout property.



A4-安全でないオブジェクトの直接参照:Insecure Direct Object References


説明:Description:

適切なアクセス制御チェックや保護がされておらず、攻撃者が不正にデータにアクセスする、又は本来見えないはずのファイル、ディレクトリやデータベースに直接アクセスし操作することができる状態。

対応:Actions:

GeneXusでの対応:
  • 適用なし:Does not applies

開発者の対処:
  • URLパラメータの暗号化。「Encrypt URL Parameters」プロパティ。Encrypt parameters (Security Scanner #100).
  • GAM(GeneXus Access Manager)の使用(Evolution2から可能)。Use GAM (from Evolution 2, Security Scanner).
  • Directory データ型とFile データ型の使用をチェック。Check Directory (Security Scanner #111) and File (Security Scanner #112) data type usage.
  • ユーザーコントロールと外部オブジェクトの使用をチェック。Check User Controls (Security Scanner #121) and External Objects (Security Scanner #120) usage.



A5-クロスサイトリクエストフォージェリ:Cross Site Request Forgery (CSRF)


説明:Description:

CSRF攻撃は、被害者のブラウザからログオンしている脆弱なWebアプリケーションに対し被害者のセッションクッキーや自動的に含まれる認証情報を含む偽造HTTPリクエストを強制的に送信する。これにより攻撃者は脆弱なアプリケーションに対し被害者からの予期しない操作を強制することができます。

対応:Actions:

GeneXusでの対応:
  • 適用なし:Does not applies

開発者の対処:
  • URLパラメータの暗号化。「Encrypt URL Parameters」プロパティ。Encrypt parameters (Security Scanner #100).
  • Form上のコントロールのFormatプロパティ値として”HTML”や”Raw HTML”を使用するのを避ける。使用する場合は、ブラウザからの入力値をそのままセットせずエスケープ処理を加える。Avoid using “HTML” or “Raw HTML” in the Format property of Form controls (Security Scanner #101).
  • 入力値をそのままパラメータとして動的Linkコマンドを使用することは避ける。Avoid using dynamic Link commands without parameters (Security Scanner #104).



A6-セキュリティ設定の不備:Security Misconfiguration


説明:Description:

安全な設定やデプロイをアプリケーションやフレームワーク、サーバー(アプリケーション/Web/データベースなど)に施していない。ソフトウェアやミドルウェアなどに(セキュリティ対策が施されている)最新版を適用していない。

対応:Actions:

GeneXusでの対応:
  • 適用なし:Does not applies

開発者の対処:
  • セキュリティ通信(SSL)の使用。(Security Scanner#105 はGeneXusのProtcol Specificationプロパティをチェックするが、これはWebサーバーレベルでHTTPSを使用しているか否かのチェックではなく、アプリケーションレベルでURLにHTTPS指定をしているか否かのチェックです)Security protocol (Security Scanner can check GeneXus property Protocol Specification, but it does not mean that the server is using HTTPS).
  • プラットフォームのアップデートや設定の確認(ディフォルト状態で使用しない)Updated platform and verificable configuration.
  • 不必要なデバッグ用アクセスポイントを削除する。(バックドア) Delete unnecessary and debug access points (backdoors).
  • SetCokkieファンクションの使用をチェック。(パスワードやキーなどセキュリティ情報をクッキーに保持しない) Check the SetCookie function usage (Security Scanner #116).



A7-セキュアではない暗号ストレージ:Insecure Cryptographic Storage


説明:Description:

適切な暗号処理を使ってクレジットカード番号やパスワードなどの機密データが保護されていない。

対応:Actions:

GeneXusでの対応:
  • 暗号化キーを使用(データベース接続情報(ログイン、パスワード)の暗号化、URLパラメータの暗号化)。Default encryption keys.

開発者の対処:
  • 暗号化キーを変更。application.keyファイルを使用するか、アセンブリのカスタマイズ(C#のみ)。(GeneXusが標準で使用している暗号化処理のキーを変更する為の対処)Modify encryption keys, using application.key file (more info in SAC #29369) or a customized assembly (only C#, more info in SAC #29874).
  • パスワード項目に関連するGeneXusコードをチェック。Security Scannerはコントロールの“IsPassword”プロパティの利用をチェックするが、ビジネスロジック上のチェックはマニュアルで行う必要がある。Check GeneXus code associated to fields where a password is set. The Security Scanner (#119) can check for the GeneXus "IsPassword" control property, but business logic must be checked manually.
  • カード番号や個人情報などの機密情報はGeneXusの暗号化処理(Encrypt64)を使って暗号化する。(ロジックに依存するためSecurityScannerのチェック対象外)
  • SetCokkieファンクションの使用をチェック。(パスワードやキーなどセキュリティ情報をクッキーに保持しない) Check the SetCookie function usage (Security Scanner #116).
  • Randomファンクションの使用をチェック。Check Random Function usage (Security Scanner #115).



A8-URLアクセス制限の不備:Failure to Restrict URL Access


説明:Description:

アプリケーションの画面を表示する時にアクセス権のチェックをせずに制限が必要なリンクやボタンをレンダリングしている。直接URLを指定した場合にもアクセス制限を掛けておらず画面が表示されてしまう。

対応:Actions:

GeneXusでの対応:
  • 適用なし:Does not applies

開発者の対処:
  • 認証(ログイン)と承認(アクセス権のチェック)機能の実装。Have an authentication and authorization method (Security Scanner #102).
  • GAM(GeneXus Access Manager)の使用(Evolution2から可能)。Use GAM (from Evolution 2, Security Scanner).
  • WebコンポーネントのURL Accessプロパティをチェック。Check web components URL Access property (Security Scanner #107).
  • LDAPClient Data TypeのGetAttributeメソッドの使用をチェック。Check LDAPClient Data Type GetAttribute method usage (Security Scanner #110).



A9-不十分なトランスポート層の保護:Insufficient Transport Layer Protection


説明:Description:

Webアプリケーションの通信に適切な暗号化処理を施していない。暗号化をしていても弱いアルゴリズムを使用していたり、期限切れや無効な証明書を使用している。

対応:Actions:

GeneXusでの対応:
  • 適用なし:Does not applies

開発者の対処:
  • SSLを使った暗号化通信。サーバー証明書とキー保護のチェック。(アプリケーションではなくWebサーバーレイヤーでの対処)Verified certificates and key protection.
  • SetCokkieファンクションの使用をチェック。(パスワードやキーなどセキュリティ情報をクッキーに保持しない) Check the SetCookie function usage (Security Scanner #116).



A10-セキュアでないリダイレクトとフォワード:Unvalidated Redirects and Forwards


説明:Description:

適切な検証がなく、攻撃者は指定したフィッシング詐欺やマルウェアのサイト、または不正なページにアクセスするようリダイレクトを使用することができる。

対応:Actions:

GeneXusでの対応:
  • 適用なし:Does not applies

開発者の対処:
  • 入力値をそのままパラメータとして動的Linkコマンドを使用することは避ける。Avoid using dynamic Link commands without parameters (Security Scanner #104).



コメント

このブログの人気の投稿

データプロバイダーを使いこなそう - 応用編その4 スケジューラー 補足編

HTMLヘッダーにあれこれ直接追加したいとき