アプリケーションセキュリティの概要を知る
学習の目的
この単元を完了すると、次のことができるようになります。
- アプリケーションとは何かを説明する。
- アプリケーションセキュリティと、アプリケーション開発との関連におけるその役割を定義する。
アプリケーションとは?
コンピューターを使用したことがあれば、アプリケーションを使用したことがあります。アプリケーションとは、1 つ以上のタスクを実行し、ユーザーの直接操作が可能なコンピューターソフトウェアパッケージです。アプリケーションの例とその使用方法を見ながら、実際にどのようなものかを詳しく確認しましょう。
アプリケーションには、データベースプログラム、Web ブラウザー、メールクライアント、スプレッドシート、メディアプレーヤー、ワードプロセッサー、画像/写真編集ソフトウェアなど、多くの種類があります。それぞれのソフトウェアパッケージでは、ユーザーがアプリケーションを直接操作できます。たとえば、ワープロソフトウェアでは、アプリケーションを直接操作してテキストの入力、削除、コピー/貼り付けを行います。アプリケーションの操作にはさまざまな方法があります。コンピューターで Photoshop のような写真編集ソフトウェアパッケージを使用する場合、スマートフォンでモバイルアプリケーションを操作する場合、Web ベースのバンキングアプリケーションでビジネストランザクションを実行する場合などです。わかりやすいでしょう?
開発者がアプリケーションを作成するには、2 つの方法があります。組織以外とは共有しない占有コードを開発する場合と、オープンソースプロジェクトでコードを開発する場合です。オープンソースプロジェクトでは公開コラボレーション方式で開発者が協力して設計や開発を行います。
オープンソースアプリケーションでは、開発者にソフトウェアを使用、調査、変更する権限が付与されるため、さまざまなユースケースへの適応や適用が可能です。オープンソースプロジェクト開発専用のコミュニティがあります。アプリケーションセキュリティエンジニアになることに興味がある場合、オープンソースプロジェクトにコントリビュートすることで、アプリケーション開発やセキュリティについて実践的な経験を積みながらスキルを磨き、自分のスキルを証明することができます。そのため、アプリケーションがどう開発されて機能するかについて理解を深め、コーディングやソフトウェア開発ライフサイクルにおけるアプリケーションセキュリティの役割を徐々に理解できます。
アプリケーションセキュリティの役割
組織のテクノロジースタックにおいて、アプリケーションレイヤーはユーザーに最も近いレイヤーです。ユーザーとのインタラクションが可能であるため、侵入者にきわめて大きな攻撃面を与えることになります。そのせいで、比較的多くのセキュリティ侵害がアプリケーションの脆弱性から発生しています。
アプリケーションは、名前、国民識別データ (社会保障番号など)、メールアドレスのような個人識別情報 (PII) をはじめとする個人データの宝庫であり、攻撃者は好んでこの個人データを接種、改ざん、破壊します。こうしたデータ損失のリスクや、データ損失が組織とその顧客に与える金銭、評判、プライバシー、法律面での悪影響を最小限にするためには、アプリケーションを保護することがサイバーセキュリティにおいて重要になります。
アプリケーションセキュリティエンジニアは、攻撃者ならどうするかを考えてアプリケーションの不正使用方法を理解すると共に、正規ユーザーによる入力がアプリケーションで安全にサニタイズ、検証、処理されることを確認します。
アプリケーションセキュリティエンジニアは、アプリケーションの保護に注力し、攻撃者による機密データへのアクセスを防止します。ソフトウェア開発の早い段階であれば、はるかに簡単に少ないコストでセキュリティの欠陥を見つけることができるため、設計や開発の作業を開始する前にセキュリティ要件を収集する必要があります。
アプリケーションセキュリティエンジニアは、開発チームやビジネスユニットと協力して、セキュアなアプリケーションの設計、作成、ドキュメント化、コーディング、テスト、デプロイ、メンテナンスをサポートします。アプリケーションの設計と作成のプロセスはソフトウェア開発ライフサイクル (SDLC) と呼ばれます。アプリケーション開発者は、このプロセスのドキュメント化とプログラミング (コーディング) のステップの責任を負います。また、アプリケーションに目的のタスクを実行させるソースコードを記述します。アプリケーションセキュリティエンジニアは SDLC 全体を通してアプリケーション開発者やその他のメンバーと連携し、アプリケーションを保護するために、アプリケーションセキュリティの脆弱性の診断、ドキュメント化、修復を行います。
通常、組織のアプリケーション開発者の主な目標は、機能するコードをできるだけ短期間で作成してビジネス要件を満たすことです。結果的にセキュアなコードを記述することは後付けになることがあります。そこで、アプリケーションセキュリティエンジニアが開発プロセスにセキュリティを組み込んで機密データが常に保護されるようにサポートします。その際、アプリケーションでいわゆる CIA、つまり Confidentiality (機密性)、Integrity (整合性)、Availability (可用性) を提供することを目指します。
たとえば、開発者が設計してデプロイするアプリケーションでは適切な認証を要求し (データの機密性保護)、機密情報は改ざん防止のためにセキュアに送信し (整合性)、ユーザーがデータにアクセスできる (可用性) ようにします。
多くの場合、アプリケーションセキュリティエンジニアはアプリケーション開発チームに配属され、設計者や開発者のアドバイザーを務めます。アプリケーション要件にセキュリティに関する考慮事項が含まれていることを確認し、設計フェーズではセキュアな認証プロトコルを提案し、コードレビューを実施して一般的なセキュリティの脆弱性がないかチェックし、デプロイ前にアプリケーションをテストし、脆弱性のパッチ適用のタイミングと方法を助言します。
この単元では、アプリケーションとは何か、アプリケーション開発とセキュリティ機能が実際にはどう連携するかを学習しました。次の単元では、アプリケーションセキュリティがビジネスに与える影響、アプリケーションセキュリティエンジニアに必要なスキル、一般的なアプリケーションセキュリティのシナリオについて学習します。