アプリケーションセキュリティエンジニアのスキルについて学ぶ
学習の目的
この単元を完了すると、次のことができるようになります。
- アプリケーションセキュリティがビジネスに与える影響について説明する。
- アプリケーションセキュリティプロフェッショナルになるために必要な主要スキルを挙げる。
- 一般的なアプリケーションセキュリティのシナリオについて説明する。
アプリケーションセキュリティがビジネスに与える影響
アプリケーションセキュリティが不十分だと、組織に大きな負の影響を与えます。サイバー侵入者は、金銭、企業情報、知的財産を抜き出して自分の資金を増やそうと日々さまざまな組織を攻撃しています。攻撃者は奪ったデータを利用して、不正な購入をしたり、消費者の個人情報を盗んだりします。
報道で見かけるように、攻撃者はアプリケーションを侵害して、小売企業、信用調査会社、航空会社、エンターテイメント企業、政府機関、教育機関、その他多くの組織のコンピューターシステムに保存されているデータにアクセスしています。あるケースでは、ホテルチェーンが外国から侵害されました。別のケースでは、SQL インジェクション攻撃 (後述) により、会社のコンピューターにスパイウェアがインストールされて、顧客のクレジットカード情報が暴露されました。複数のケースで、侵入者は弱いデータ暗号化システムを利用してクレジットカードデータを盗み出しました。これらの攻撃により、合計で数億人もの顧客の個人情報が暴露されました。
このようなセキュリティ侵害が発生すると、不正行為や盗難による直接の経済的影響がありますが、評判の低下などの間接的な経済的影響が生じることもあります。その結果、顧客を失い、株主からの信頼が低下し、ブランドイメージが損なわれてビジネスがさらに経済的影響を被ることがあります。セキュリティ侵害が法規制上の問題となり、罰金や制裁が科せられる可能性もあります。
アプリケーションセキュリティエンジニアは、顧客データをビジネスアプリケーションで適切に保護するうえで非常に重要な役割を果たします。そのため、幅広い能力が必要です。アプリケーションセキュリティエンジニアに必要なスキルについて、もう少し詳しく見てみましょう。
アプリケーションセキュリティエンジニアのスキル
これから休暇で遠く離れた南の島に飛行機で行くところを想像してください。搭乗する前に、空港のセキュリティチェックポイントをいくつも通過する必要があります。セキュリティ担当者が ID と搭乗券をチェックします。あなたは金属探知機を通り抜け、荷物は X 線検査されます。空港のセキュリティ犬の前を通過します。警備員が TV 画面で不審な活動がないか監視しています。これは目的地まで安全に移動するための空港のセキュリティレイヤーです。空港のセキュリティ担当者と同様に、アプリケーションセキュリティエンジニアは攻撃者のエントリポイントを認識し、アプリケーションの開発とデプロイの各フェーズで脆弱性に対して必要な安全策を講じる必要があります。
セキュリティ団体の (ISC)² と Information Systems Security Association International (ISSA) の報告書によると、ここ数年サイバーセキュリティスキルを持つ人材の不足が進んでおり、セキュリティインシデントの増加に伴い、アプリケーションとデータを保護するためのアプリケーションセキュリティプロフェッショナルの確保が喫緊の課題となっています。このように需要が増加し、アプリケーション開発者よりも必要なトレーニングが多いことを考えると、アプリケーションセキュリティエンジニアは開発者よりも高い報酬を得られる可能性があります。
アプリケーションセキュリティエンジニアは、アプリケーションのソフトウェア開発ライフサイクル (SDLC) の各フェーズでさまざまな技法を採用してセキュリティの脆弱性を明らかにします。そのため、アプリケーションセキュリティエンジニアは、次のような多くの技術的スキルを身に付けておく必要があります。
- 脅威モデリング: 攻撃者がどのようにシステムを侵害できるか、それに対してどのような保護が必要かを検討する
- セキュアソフトウェア開発ライフサイクル (SSDLC): 開発者が脆弱性を最小限に抑えるセキュアなコードを記述できるように、セキュアなコーディング標準、技法、ベストプラクティスを実装する
- セキュリティコードレビュー: アプリケーションを本番環境にデプロイする前に、ソースコードに含まれるセキュリティの脆弱性を特定する
- 脆弱性テストおよび分析: アプリケーションのデプロイ後に弱点を見つけ、開発者チームに修復を助言する
アプリケーションセキュリティエンジニアはさまざまなメンバー (アプリケーション開発者、テスター、設計者など) と共同で作業するため、よいコラボレーター兼コミュニケーターである必要があります。技術的な発見事項を説明するドキュメントを作成するため、よいライターであることも必要です。場合によっては、説得力を発揮して、アプリケーションのデプロイ前に特定のセキュリティ機能をインストールすべき理由をマネジメントに納得してもらわなければなりません。また、クリティカルシンキングスキルを使用して、侵入者がアプリケーションへの攻撃を試みるさまざまな方法を判別して、起こり得る攻撃を阻止するためのクリエイティブなソリューションを見つける必要があります。侵入が発生した場合は、インシデントを調査して侵害源を特定し、以降の攻撃に備えてアプリケーションを強固にします。
上記のスキルに加え、次の認定でアプリケーションセキュリティエンジニアの知識を強化できます。
- GIAC Web Application Defender (Web アプリケーションディフェンダー) (GWEB)
- Certified Secure Software Lifecycle Professional (認定セキュアソフトウェアライフサイクルプロフェッショナル) (CSSLP)
- Secure Software Practitioner (セキュアソフトウェアプラクティショナー) (SSP)
- Certified Application Security Engineer (認定アプリケーションセキュリティエンジニア) (CASE)
- Advanced Web Attacks and Exploitation (高度な Web 攻撃と不正利用)
アプリケーションセキュリティプロフェッショナルとしてのキャリアを検討している場合、大学でコンピューターサイエンスの学位を取得するとそのパスを進みやすくなります。アプリケーションセキュリティエンジニアの多くは、まずアプリケーション開発者になり、その後でサイバーセキュリティ分野に移っています。複数の大学でサイバーセキュリティの学位を取得することもできます。間違いなく、多くの機会がある刺激的な分野です。
アプリケーションセキュリティエンジニアになるために必要なスキルがわかったところで、次は、アプリケーションセキュリティエンジニアが遭遇する一般的なセキュリティシナリオとそうした状況でアプリケーションを保護する方法を見てみましょう。
一般的なアプリケーションセキュリティのシナリオ
サイバー犯罪者は、最も簡単にアクセスしてデータを窃盗、変更、破壊でき、最小の労力で最大の見返りがある攻撃対象を探しています。アプリケーションが複雑なほど、セキュリティの脆弱性が含まれる確率が高くなります。アプリケーション、特に Webアプリケーションはサイバー犯罪者の標的です。それは、比較的簡単に不正利用できる大きな攻撃面 (ユーザーインターフェース) があり、そこから侵入者がコンピューターに保存されている機密情報にアクセスできるからです。しかも侵入者が Web アプリケーションを攻撃するのに特別なツールは必要ありません。必要なのはコンピューターとインターネット接続だけです。
アプリケーションに侵入する方法を解明しようとする攻撃者に対し、アプリケーションセキュリティエンジニアはアプリケーションコードの脆弱性を最小化し、アプリケーションコンポーネントをセキュアに設定して顧客のアカウントやデータへの不正アクセスを防止します。アプリケーションセキュリティリスクをレビューするときに参照すべき貴重なリソースが Open Web Application Security Project (オープン Web アプリケーションセキュリティプロジェクト) (OWASP) です。OWASP は、ソフトウェアのセキュリティ改善を中心とする無料で利用できる情報を提供する国際組織です。
アプリケーションセキュリティエンジニアが遭遇する可能性がある一般的なリスクは何でしょうか? まず挙がるのがインジェクション攻撃で、アプリケーション入力のサニタイズが不適切な場合に発生します。インジェクション攻撃では、侵入者がアプリケーションの入力処理ロジック (エンドユーザーインターフェースとデータベース間の通信を管理するコード) に、想定される入力データではなくコードを挿入します。
アプリケーションの記述が不適切だと、攻撃者が挿入したコードが実行されます。たとえば、SQL (Structured Query Language) が Web ページのメールアドレス項目に入力される場合があります。SQL はプログラミングに使用される言語で、データを管理するために設計されています。入力項目に対するチェックがなければ、攻撃者が SQL コードを使用してアプリケーションのデータベースから情報 (健康カルテなど) を抜き取れる場合があります。
ユーザーの入力をサニタイズするには、アプリケーションがユーザー入力をコマンドではなくデータとして処理し、許可リストに登録された文字のみが含まれるようにする必要があります (許可リストとは、システムへのアクセスが許可されている文字のリスト)。許可リストを使用する場合、許可リストに登録されていて長さが最大データ項目長以下のエンティティを除く、その他すべてのエンティティがアクセスを拒否されます。
アプリケーションセキュリティエンジニアはその他の責務として、上記のインジェクション攻撃を防止するために開発プロセス中にコードをレビュー、テスト、検証してユーザー入力が適切にサニタイズされたことを確認します。これは、他の開発手法よりも速くアプリケーション機能を提供することを目指すアジャイルソフトウェア開発のコンテキストで特に重要になります。ただしアジャイル方式では、エンドユーザーの期待に速やかに対応するために絶えずアプリケーションを更新する必要があるため、複雑化が進みます。開発者には速いペースで新機能を提供し、見つかったバグを修正することが期待されます。不正使用を防ぐにはアプリケーションを強固にする必要があります。アプリケーションセキュリティエンジニアはそのための最も効率的な方法を開発チームに助言します。
アプリケーションセキュリティが不十分なケースとしてよく見られるのが、暗号化が弱い場合や、未導入の場合で、攻撃者に機密データを暴露されるおそれがあります。データをクリアテキストとして送信する HTTP のようなプルを使用しているアプリケーションは脆弱です。代わりに、データ送信を暗号化する HTTPS のようなセキュアなプロトコルを使用して、適切な複合化鍵なしではデータを読み取れなくする必要があります。古く弱い暗号化アルゴリズムや、社内開発した暗号化機能の使用は避けます。代わりに、セキュアな標準ベースの暗号化アルゴリズムを使用します。
アプリケーションセキュリティエンジニアは、開発者が SSDLC プロセスに従うようにサポートします。強い認証と承認やセキュアなセッション管理など、よく知られているセキュリティ手法に基づいて、セキュアなアプリケーション設計とアーキテクチャ技法を採用して不正アクセスを防止します。
アプリケーションセキュリティエンジニアは、デプロイするアプリケーションでユーザーがデフォルトのログイン情報を使用してログインするのを防止します。これは一般的な攻撃ベクトルであるからです。ユーザー入力をサニタイズしてインジェクション攻撃を阻止します。弱い暗号化が原因でデータ侵害が成功することもあるため、強いアルゴリズムと適切な暗号化鍵管理を使用してデータ送信と保存データ (保存中のデータ) を暗号化します。そうすることで、攻撃者にシステムが侵害されても、データの復号化方法がわからないため、有用な情報は抜き取られません。
アプリケーションセキュリティエンジニアは、機密情報がユーザーに公開されないようにエラーを適切に処理します。また、アプリケーションの開発中と開発後に静的および動的アプリケーションセキュリティテストを実行し、デプロイ後のアプリケーションに異常な活動がないか監視します。
まとめ
この単元では、アプリケーションセキュリティ侵害がビジネスに与える影響、アプリケーションセキュリティエンジニアに必要なスキル、一般的なアプリケーションセキュリティのシナリオについて学習しました。次は、すぐれたアプリケーションセキュリティエンジニアがまず行うこと、つまり、環境内のアプリケーションとそれに伴うリスクを特定することについて確認します。