セキュリティ等の非機能要件を自動実装

OutSystemsは、アプリケーション、ITチーム、エンドユーザー向けのセキュリティ機能を組み込んでおり、OutSystemsで作られたアプリケーションは、全ライフサイクルに渡ってセキュアに守られています。

security_overview

アプリケーションの脆弱性の対策と検出

OutSystemsで作られた全てのアプリケーションは、アプリケーションの開発やデプロイなど、異なるライフサイクルのステージにおいて、脆弱性対策を含んでいます。

アプリケーションの設計

アプリケーションの設計において、データの暗号化や認証、認可は下記のように行うことができます。

  • データの暗号化が求められるとき、ページ毎、ウェブサービス毎にHTTP/SSL暗号化
  • Windows Integrated Authentication が、OSのクレデンシャル情報を用いて特定のページやアプリケーションへ自動的にログイン (OutSystemsのオンプレミス環境で利用可能)
  • Active Directory/LDAP認証により、全エンドユーザーのログイン情報を、ひとつのActive Directory/LDAPサーバーに一元管理
  • ロールベースのアクセス制御を設けることで、特定のページへのアクセスを制限
  • 特定のIPアドレスへのアクセス制限が必要な場合、ネットワークベースのセキュリティを使用

開発者は、「ロール」と呼ばれるモデルを使うことで、アプリケーションレベルでのアクセス制御を定義したり、アクセス権限によって使える機能を設定したりすることができます。
例えば、この機能を用いることで、特定のデータベーステーブルの変更を伴う全てのアプリケーションページへのアクセスをまとめることができます。さらに、特定のリソースへのアクセス権限がないユーザーの制御を、アクセス制御ロジックを作ることで実装することも可能です。

アプリケーションの検証

security_app_validation

アプリケーションをコードジェネレーターやデプロイサービスへ移す前に、数多くのセキュリティチェックを含む検証プロセスを行えます。

  • クエリを別のデータベースに定義するとき、データ分離の違反の可能性がある場合、警告が出る
  • 各開発者がアプリケーションをデプロイしたり、生成したりできるよう、開発者のアクセス制御検証を行う。この検証は、外部コンポーネントやAPI、データベースを使用する際に行われる。

コード生成、最適化及びコンパイル

OutSystemsはC#及びJavaのコードを生成、最適化、コンパイルします。
この際にはベースとなるフレームワークへの強化や、セキュアなコードパターンが適用されます。
こうした機能には、以下が含まれます。

  • セッションのハイジャックや盗聴を防止するためのHTTPSサポート
  • Java及び.NETフレームワークから提供される強力なセッションID検証メカニズムにより、複数のデバイスから既存のセッションへ侵入することを防ぐ
  • クロスサイトスクリプティング防止ため、開発者がHTMLを直書きした場合には、生成されたHTMLの自動処理機能及びビルトイン機能により、HTMLを無害化する
  • データベース接続時に暗号化パスワードのオプションが選択でき、データベース接続の作成や管理がセキュアに行える
  • SQLのパラメータ化及びビルトイン機能により、開発者がクエリに含めた文字列を無害化し、SQLインジェクションを防ぐ
  • コンパイル前のコードへの遅延バインディングや実行時アクセスを禁止し、C#及びJavaコードのインジェクションを防ぐ
  • 各アプリケーションとデータベースのペア毎に分離された専用データベース接続をまとめ、クロスアプリケーションやクロスデータベースのアクセスを防ぐ
  • ローレベルプロセスやスレッド構成が分からないよう、コード生成パターンを用いて完全なランタイム分離や隠蔽を実現
  • 生成されるコードでの完全な例外処理を実現し(暗号化、認証及び認可を含む)、後々の監視のためにログ情報を保管することで、特定の例外パターンやブラウザーに送られるレスポンス情報におけるエラーコードなどを活用されることを防ぐ

アプリケーションのデプロイ

OutSystemsのデプロイエンジンは、アプリケーション設計とセキュリティのベストプラクティスを適用している、MicrosoftのInternet Information Services (IIS)セキュリティ設定を用いています。
このセキュリティ設定には、下記が含まれます。

  • SSL証明書を、サイト毎、仮想ディレクトリ毎、またはページレベル毎に構築できる
  • クライアント側のSSL証明書管理や設定が行えるため、選択したクライアントのより強力な認証が可能に
  • Windows Authenticationを、サイト毎、または仮想ディレクトリ毎に構築できる
  • 仮想ディレクトリに置かれたファイルの、セキュリティ及びアクセス制御設定を上書きすることで、IISの持つ「デフォルト」の脆弱性を防ぐ
  • (オンプレミス環境において)アプリケーションを異なるネットワークゾーンでの複数の環境にデプロイする場合、一元管理された設定に基づき、イントラネット機能のバイナリが、インターネットやエクストラネットのサーバーにインストールされないように保障
  • OSのクレデンシャル情報を使い、アプリケーションプロセスを実行できるオプション
  • データベースネットワークのデータ暗号化

OutSystemsは、OracleのRC4アルゴリズムを用いたネットワークデータ暗号化と完全に動作させることができます。このアルゴリズムは、256ビットまでの高速データ暗号化の国際基準となっています。

生成コードの脆弱性スキャン

   security-fortify  

高いセキュリティ水準を確保するため、生成されるコードには、すべてHP Fortify による静的な検証が行われています。 HP Fortify Static Code Analyzerとの連携は自動的にセットアップされ、リグレッション・テスト中、コードの脆弱性スキャンが自動的に行われます。 こうしたテストはリリース受入れの高い水準によってサポートされ、報告される危険性・脆弱性の高いコードを修正します。
これにより、生成されるコードが一貫してセキュアな状態であることを確保します。 生成されるコードに新しく脆弱性が見つかるたび、アプリケーションを修正するためのセキュリティパッチが発行されます。

ITセキュリティ管理と監査

OutSystemsは、全てのアプリケーションリソースに対するアクセス制御管理を備えており、 特定のリソースにアクセス権利を柔軟に与えられるようになっています。 これにより、多くの開発者を抱えるチームであっても管理しやすくなり、複数の環境に渡る、プラットフォームとの連携や アセンブリ、デプロイ及び機能やサービス変更であっても、明確にアクセスを分けることができます。
さらに、システム監査に要求される、ITレベルのSOX/ITIL制御やデプロイゾーンへの制御が完全に行えます。

ロールベースのリソースアクセス制御

OutSystemsでは、各ロールにどのアプリケーションにアクセスできるかを設定し、アプリケーションを作ったり変更したりすることができます。組み込みでのアクセスレベルには、どのリソースがあるか、というListの閲覧のみの設定から、ITユーザーがリソースの変更や管理及びデプロイを完全に行えるFull Controlまでが含まれています。

   security-rollbase-access-control  

各組み込みのアクセスレベルは、ITユーザーの持つロールが使用できる、開発及び管理機能を定義する際、増加的に別のアクセスレベルの上に構築されます。

ITプロセス監査

開発者やアプリケーションマネージャー、システム管理者によって行われるアクティビティは、全てシステムのログとして管理され、将来的な監査にも使えるようになっています。
追跡できるイベントには、以下が含まれます。

  • アプリケーションやコンポーネントの新バージョンを保存する
  • アプリケーションやコンポーネントを削除する
  • 新しいバージョンをデプロイする
  • ユーザー設定を修正する
  • システムへログインする

さらに、システム監査やOutSystemsのサブシステムのバージョンコントロールにより、アプリケーションへの修正・変更が、いつ、どのユーザーによって行われたかが識別できるようになるほか、OutSystemsのService Studioを使った変更の監査や検証も行えます。

IT実行時における監査

OutSystemsは、Webサービスやカスタムされた連携ロジックを使った外部システムへのアクセスを全てログ記録しているだけでなく、OutSystemsのアプリケーションへ向けられたWebサービスリクエストの記録もログとして保存しています。
誰がそのリクエストをしたか、リクエストのターゲットは何か、使用されたメソッドは何か、リクエストにどれくらい時間がかかったか、リクエストされた正確な時間はいつか、といった情報を、全て記録に残すことができます。
セキュリティ問題が起こった場合も、この記録から効果的かつ効率的に、原因を探ることが可能です。

ネットワークゾーン管理

OutSystemsを使うことで、インターネットやイントラネット、エクストラネットなど、多様に構成されたネットワークにおいて、どのようにフロントエンドサーバーが分散されるかを設定することができます。
さらに、どのアプリケーションをどのフロントエンドサーバーのクラスターへデプロイするかを定義することも可能です。 内部アプリケーションは内部ネットワークゾーンにのみ実行でき、ウェブサイトはDMZで実行するよう設定する、などの例が挙げられます。

   security-network-zone  

各組み込みのアクセスレベルは、ITユーザーの持つロールが使用できる、開発及び管理機能を定義する際、増加的に別のアクセスレベルの上に構築されます。

エンドユーザーセキュリティ管理と監査

ユーザーがアプリケーション利用のために登録されると、適切なアクセス制御を設け、権限のあるユーザーのみが特定の機能を使えるように設定する必要が出てきます。OutSystemsでは、下記の設定を設けることが可能です。

ロールベースのアクセス制御

ユーザーに対しては、一つかそれ以上のロールへのアクセス権限を付与することができ、プロビジョニングも行えます。
ユーザー管理はバックオフィスから行えますが、APIを用いることでアプリケーションからも行うことが可能です。 また、アプリケーションの管理者はメタデータを使い、特定のユーザーロールを作り、設定することができます。
ユーザーロールの定義は完全に動的であり、アプリケーションの開発フェーズとは独立しています。

シングルサインオン

OutSystemsのシングルサインオン機能を使うことで、選択したアプリケーションへのログイン回数を、 一度のみに設定することが可能です。 これにより、ユーザーは複数のアプリケーションであっても、追加のログインをする必要がなくなります。

   security-singlesignon  

エンドユーザーアクセス監査

アプリケーションスクリーンへのアクセスは、デフォルトで全て詳細にOutSystemsに記録されます。 こうしたログ記録には、アクセスされたコンポーネントやスクリーン、どのユーザーがアクセスしたか、いつそのアクセスが発生したか、またどのノードが使用されたか、といった情報が含まれます。