今日のサイバーセキュリティに対する脅威は至る所に存在し、絶えることがありません。私たちの生活のより多くの部分がデジタル化されるにつれ、サイバー犯罪者による危険性も増大しています。保護すべきコードは膨大であり、個人データは極めて貴重です。そしてプログラムを配布した後、攻撃対象領域のあらゆる側面を追跡し防御することは、ほぼ不可能になりました。
これらの症状の一部を緩和する方法があり、その一つは賢明な組織がIaC(Infrastructure as Code)の概念を採用する際に明確に現れます。もちろん、他の開発分野と同様に、克服すべきいくつかのセキュリティ上の課題があります。また、開発者はアプリケーションをホストするための必須インフラを生成するコードを開発しているため、プロセスの全段階においてセキュリティ意識が極めて重要です。
では、クラウドサーバー環境を初めて扱う開発者が技術を習得し、コツを掴み、セキュリティ意識を高めながらビルドにアクセスする方法は、具体的にどのようなものでしょうか?一般的なIaCの脆弱性を解決するため、次期「Coders Conquer Security」シリーズを作成しました。そして、次の数回のブログでは、開発者が自身の組織にコード形式でセキュリティインフラをデプロイし始めるために取るべきステップに焦点を当てます。
始めましょうか。
アメリカ旧西部(American Old West)に伝わるある男の寓話があります。山賊が農家を狙って襲撃するという妄想症状に悩まされていた男の物語です。これを補うため、彼は非常に頑丈な玄関ドアを設置し、 窓をすべて閉め、手の届く場所に多くの銃を保管するなど、あらゆる種類の防犯対策に投資しました。ある夜、彼は裏口の施錠を忘れたため、眠っている間に結局強盗に遭ってしまいました。盗賊たちは、ただ警備員が不在になった隙を見抜き、素早くその状況を利用したのでした。
インフラにおけるセキュリティ機能の無効化もこれと似ています。ネットワークに強力なセキュリティインフラが整っていても、構成要素が無効化されてしまえばあまり役に立ちません。
本格的に始める前に、一つ挑戦してみようと思います。
上記のリンクにアクセスすると、ゲーム化された教育プラットフォームに移動します。ここで無効化されたセキュリティ機能の脆弱性を即座に解決できます。(注意:Kubernetes上で開きますが、ドロップダウンメニューを使用するとDocker、CloudFormation、Terraform、Ansibleの中から選択できます。)
お元気でしたか?まだやるべきことがある場合は、以下の内容をお読みください。
セキュリティ機能は様々な理由で無効化される場合があります。一部のアプリケーションやフレームワークではデフォルトで無効化されており、動作を開始するにはまず有効にする必要があります。また、管理者が継続的な挑戦やブロックを受けずに特定の作業をより容易に行えるよう、特定のセキュリティ機能を無効化した可能性もあります (例:AWS S3バケットを公開設定にする)。作業完了後、無効化した機能を再有効化するのを忘れる可能性があります。また、後々の作業を容易にするため、機能を無効化したままにしておくことを好む場合もあります。
無効化されたセキュリティ機能が危険な理由
セキュリティ機能を1つ以上無効化することは、いくつかの理由から推奨されません。その理由の一つは、既知のエクスプロイト、脅威、または脆弱性から保護するために、セキュリティ機能がインフラストラクチャリソースに追加されている点です。この機能を無効化すると、リソースを保護できなくなります。
攻撃者は常に簡単に悪用できる脆弱性をまず探そうとし、スクリプトを使って一般的な弱点を見つけ出すこともあります。泥棒が街中の車をすべて調べてドアが開いているか確認するのと同じです。窓を割るよりもはるかに簡単です。ハッカーは一般的なセキュリティ防御が無効になっている事実に驚くかもしれません。しかし、このような事態が発生すれば、ハッカーがこれを悪用するのに長くはかからないでしょう。
第二に、セキュリティを十分に整備しておきながら使用しないように設定すると、誤ったセキュリティ認識が生じます。管理者は、誰かがこうした防御体制を無力化したという事実を知らなければ、自分が一般的な脅威から保護されていると考える可能性があります。
攻撃者が無効化されたセキュリティ機能を悪用する可能性のある方法の例として、AWS S3のセキュリティ機能であるパブリックアクセスブロックを検討してみましょう。Amazon S3のパブリックアクセスブロックを使用すると、アカウント管理者やバケット所有者は、Amazon S3リソースへのパブリックアクセスを制限するための集中管理を簡単に設定できます。しかし、S3バケットへのアクセス時に問題が発生した一部の管理者は、作業をできるだけ早く完了させるためにバケットを公開することを決定します。セキュリティ機能を有効化するのを忘れると、攻撃者はそのS3バケットに保存された情報に完全にアクセスできるようになり、情報が漏洩するだけでなく、データ転送料による追加費用が発生します。
実際のコードを比較してみましょう。次のCloudFormationスニペットを確認してください。
脆弱:
企業バケット:
タイプ: AWS: :S3: :バケット
属性:
パブリックアクセスブロック設定:
パブリックACLブロック: false
公開ポリシーブロック: false
パブリックACL無視: false
パブリックバケット制限: false
バージョン管理設定:
状態: 有効
バケット暗号化:
サーバー側暗号化設定:
- サーバー側暗号化:
SSEアルゴリズム: “AES 256"
セキュリティ:
企業バケット:
タイプ: AWS: :S3: :バケット
プロパティ:
パブリックアクセスブロック設定:
パブリックACLブロック: true
公開ポリシーブロック: true
パブリックACL無視: true
パブリックバケット制限: true
バージョン管理設定:
状態: 有効
バケット暗号化:
サーバー側暗号化設定:
- サーバー側暗号化:
SSEアルゴリズム: “AES 256"
無効化されたセキュリティ機能の防止
無効化されたセキュリティ機能が組織に悪影響を与えないようにすることは、慣行と同様にポリシーの問題です。非常に限定的な状況でのみセキュリティ機能を無効化すべきであるという確固たるポリシーが必要です。問題を解決したりアプリケーションを更新したりするために機能を一時的に無効化する必要がある事象は記録すべきです。必要な作業を完了した後、機能が完全に再有効化されていることを確認する必要があります。
セキュリティ機能を恒久的に無効化して運用を簡素化する必要がある場合、基本保護機能が存在しない状態では、ハッカーが該当データにアクセスできないよう、影響を受けるデータに対して別の保護機能を提供しなければなりません。必要な保護機能が無効化されている場合、攻撃者が施錠されていない扉を見つけ、状況を悪用するのは時間の問題に過ぎません。
詳しく調べて、自分に挑戦してみてください。
Secure Code Warriorの詳細情報と、この脆弱性やその他のセキュリティ上の欠陥・脆弱性による被害から組織と顧客を保護する方法については、ブログページをご覧ください。
投稿をお読みいただきましたので、この脆弱性を見つけて修正する準備は整いましたか?さあ、挑戦する時です。iACゲーム化されたセキュリティチャレンジにぜひ挑戦してください。Secure Code Warrior 、あらゆるサイバーセキュリティスキルを磨き、最新の状態に保ちましょう。
このシリーズは、Infrastructure as Codeの8つの主要な脆弱性を取り上げる週次シリーズです。詳細は来週またご確認ください!