OutSystemsを使用したセキュアなアプリケーション構築
目次
ITプロフェッショナルの多くは、アプリケーションのセキュリティが非常に重要であることを認識しています。ただ、これを実行に移すのは簡単なことではありません。その結果、近年データ侵害の数が増加しています。開発者が何かを見落としてしまったり、過去のセキュリティ基準(最新ではない)に沿ったアプリケーションを開発したりしやすい状況にあるためです。また、開発者やインフラ管理者は、システムをセキュアにできるチェックボックスやワンクリックのボタンなどはないということも忘れがちです。
セキュリティに対するOutSystemsのコミットメント
OutSystemsでは、OutSystemsを使用して生成したアプリケーションのセキュリティを継続的に改善することに努めています。そのため、OutSystemsプラットフォームは、開発者が最小限の労力でセキュアなアプリケーションを構築できるメカニズムを備えています。
脆弱性に関するOWASP Top 10
OWASP(Open Web Application Security Project)は、無料で利用できるオープンなソフトウェアセキュリティコミュニティです。OWASP Top 10には、Webアプリケーションに見られる主な脆弱性がまとめられています。ここでは、そうした脆弱性のないアプリケーションを構築するうえで、OutSystemsがどのように役立つかを紹介します。
インジェクション攻撃(A1)
デフォルトでは、OutSystemsはコンテンツがUIとして表示される前にエスケープします。デフォルトのエスケープメカニズムを無効にする必要がある場合、HTML、JavaScript、SQL、またはURLをエンコードするOutSystemsプラットフォームの機能により、使用状況に基づいた適切なエスケープを行うことが可能です。
また、HTML、JavaScript、およびSQLのサニタイズ機能も備えています。これらの機能によって、ユーザー入力から入り込むか計算される悪意ある可能性のあるコンテンツを、データベースへの保存前、かつWebページでのコンテンツのレンダリング前に削除できます。
さらに、OutSystemsの開発環境は設計時にコードインジェクション攻撃につながる可能性のあるアプリケーションのパターンを警告します。これにより、開発者はアプリケーションのデプロイ前に欠陥に気付くことができます。
認証の不備(A2)
デフォルトでは、OutSystemsは以下のように設定されています。
- URLでセッション識別子を送信しない。
- セッションを有効期限にタイムアウトさせる。
- パスワードを処理する際は、必ず強力な暗号化アルゴリズムを使用する。
同様に、OutSystemsはログインのたびにセッション識別子を透過的に変更し、リクエストごとにこれを検証することで、セッション固定攻撃を防ぎます。
機密データの流出およびセキュリティ設定のミス(A3、A6)
通常、これらの2つの問題は、アプリケーションの設計または実装に問題がある場合に発生します。そのため、OutSystemsでは、プラットフォームのインストールをセキュアに実行する方法を明確かつ簡潔にシステム管理者に指示します。
生成したコードのエラー処理や例外処理を完全に行うため、機密情報がユーザーやブラウザに流出してしまうことはありません。入念な例外処理は、暗号化、認証、認可、監査、およびロギングにも適用されます。
これと同時に、開発者は、あらゆるコンテンツをセキュアな接続経由で送信されるようにするために必要な機能を利用することもできます。また、OutSystemsプラットフォームは既存の暗号化APIとの連携によって、データベースに保存されているデータの安全性も確保します。
XML外部エンティティおよび安全でない逆シリアル化(A4、A8)
アプリケーションを構築する際には、信頼できない外部ソースから入力されるあらゆる種類のデータを慎重に処理する必要があります。そのような外部ソースとしては、管理していない他のサービスだけでなく、ユーザーのブラウザやユーザー入力なども考えられます。いずれにしても、OutSystemsプラットフォームでは、逆シリアル化やXMLプロセッサライブラリの最新バージョンのほか、SOAP 1.2の利用をサポートしています。
アクセス制御の不備(A5)
これは通常、アプリケーションの設計と実装に関連する問題ですが、OutSystemsを使用することで、開発者はどのユーザーにどのアプリケーションリソースへのアクセスを許可するかを、以下のように簡単に定義することができます。
- 所定の画面へのアクセスに必要なユーザーのロール、または所定のアプリケーションへのアクセス権を持つユーザーの定義
- ユーザー権限に基づいた、UI要素の無効化または非表示
- アクション実行時のユーザー権限の検証
- ユーザー権限に応じた特定のロジックの実行やデータのサブセットへのアクセス
すべてのOutSystems管理コンソールおよびAPIでは、ユーザー権限の強力な検証が義務付けられます。そのため、適切なレベルの権限を持つユーザーのみが各操作を実行できます。
クロスサイトスクリプティング(A7)
XSS(クロスサイトスクリプティング)に関する問題は、インジェクションに関する問題と同様に対処できます。OutSystemsには、入力をエンコードし、サニタイズする機能があります。従来の開発とは異なり、OutSystemsのモデル駆動型アプローチではリアルタイムの分析が可能です。この分析では設計時にOutSystemsビジュアルエディタで警告も表示されるため、開発者はアプリケーションのデプロイ前にセキュリティの問題を修正できます。
さらに、アーキテクト、オペレータ、または管理者はOutSystemsのメカニズムを利用してコンテンツのセキュリティポリシーを定義し、アプリケーションページがリソース(画像、CSS、スクリプト、メディア)を取得するドメインを指定できます。この設定は、環境ごとに構成してすべてのアプリケーションに包括的に適用することも、特定のアプリケーションに定義することもできます。アプリケーションがリソースを読み込めるソースを限定することで、悪意のあるサイトからのスクリプト読み込みを要求するXSS攻撃を効果的に軽減することができます。
また、コンテンツのセキュリティポリシーを使用して、アプリケーションページのフレーム埋め込みを防止すると、クリックジャッキングを防ぐこともできます。
既知の脆弱性を持つコンポーネントの使用(A9)
OutSystemsでは定期的にスキャンを実行し、スタックのコンポーネント(オペレーティングシステム、アプリケーションサーバー、データベース管理システム、ランタイム環境、ライブラリ、フレームワーク、およびサンプルのOutSystemsアプリケーション)をすべて更新しています。そのため、ユーザーはスタックベンダーのセキュリティサポートを受けることができます。ユーザーへの通知を含むパッチ管理プロセスが確立されているため、確実に脆弱性に対処し、通知することができます。
ロギングと監視の不備(A10)
OutSystemsは、アプリケーション画面へのアクセスの詳細をすべて追跡します。このログには、アクセスされたコンポーネントと画面、アクセスしたユーザー、アクセスされた日時、および使用されたノードなどが含まれます。
OutSystemsは、Webサービスまたはカスタマイズされた連携ロジックによる外部システムへのアクセスに加えて、プラットフォーム内で実行されているアプリケーションへのWebサービスリクエストをすべてログに記録します。記録される内容は、リクエストをしたユーザー、リクエストのターゲット、呼び出したメソッド、リクエストの所要時間、リクエストの正確な時刻です。これにより、あらゆるセキュリティの問題を効率的に追跡できます。
独自のOutSysmes環境を管理するユーザーは、OutSystems標準ランタイムアーキテクチャのメリットが得られるため、あらゆるシステムコンポーネントのロギングと監視に関するノウハウやツールを活用できます。
OutSystems Cloudのユーザーはサービスにバンドルされているロギング機能と監視機能のメリットが得られます。また、これらの機能を利用する際には、標準構成の安全なベースラインと高度なOutSystems Sentry製品(https://www.outsystems.com/sentry/)のどちらかを選択できます。