今日、サイバーセキュリティの脅威は至る所に存在し、絶え間なく続いています。私たちの生活のあらゆる側面がデジタル化されるにつれ、サイバー犯罪者が直面するリスクは高まるばかりです——安全が保証されていないコードが多すぎる上、個人データは価値が高すぎるのです。そして、まあ、プログラムを展開した後で攻撃対象領域のあらゆる側面に対応し防御しようとすることは、ほぼ不可能です。
これらの症状の一部を緩和する方法がいくつか存在し、賢明な組織がインフラストラクチャ・アズ・コード(IaC)の概念を受け入れる際には、その一つが明らかになる。もちろん、あらゆる開発と同様に、対処すべきセキュリティ上の落とし穴が存在する。さらに、開発者がアプリケーションをホストするための重要なインフラストラクチャを生成するコードを研究しているため、プロセスの各段階でセキュリティ意識が極めて重要となる。
では、クラウドサーバー環境に初めて触れる開発者は、どのようにスキルを向上させ、技術を学び、セキュリティ意識を高めながら構築を進めればよいのでしょうか?私たちは、よくあるIaC(Infrastructure as Code)の脆弱性に対処するため、新たな「Coders Conquer Security」シリーズを立ち上げました。今後のブログでは、あなた(開発者)が組織内でコードベースのセキュリティ基盤を構築するために踏み出せる具体的なステップに焦点を当てていきます。
さあ、始めましょう。
アメリカの旧西部には、ある偏執的な男についての寓話がある。彼は強盗が自分の家を襲って略奪すると信じていた。その代償として、彼は様々な防犯対策に投資した。例えば超頑丈な玄関ドアの設置、全ての窓の格子化、そして大量の銃器を手の届く場所に配置した。ある夜、彼が寝ている間に強盗に遭ったのは、サイドドアの施錠を忘れたためだった。強盗は機能不全の警備員を見つけ出し、素早くその状況を利用したのである。
インフラストラクチャでセキュリティ機能を無効化することは、このようなものです。たとえネットワークが強力なセキュリティ基盤を備えていても、要素が無効化されていれば意味がありません。
潜入する前に、一つ挑戦を提案させてください:
上記のリンクにアクセスすると、当社のゲーミフィケーション型トレーニングプラットフォームに移動します。すぐに無効化されたセキュリティ機能の脆弱性を克服する練習を開始できます。(注:Kubernetes環境で起動しますが、ドロップダウンメニューからDocker、CloudFormation、Terraform、Ansibleを選択可能です)。
どうですか?まだやるべき仕事があるなら、読み進めてください:
セキュリティ機能は様々な理由で無効化される可能性があります。一部のアプリケーションやフレームワークでは、デフォルトで無効化されており、動作を開始する前に有効化する必要があります。また、管理者が特定のタスクを容易に実行するため、頻繁に警告やブロックを受けずに済むよう(例:AWS S3バケットを公開状態にする)、特定のセキュリティ機能を無効化している場合もあります。作業完了後、それらの無効化された機能を再有効化するのを忘れてしまう可能性があります。また、将来の作業を容易にするために、意図的に無効化したままにしておく場合もあります。
なぜ無効化されたセキュリティ機能が危険なのか
1つまたは複数のセキュリティ機能を無効化することは好ましくない。理由は2つある。まず、セキュリティ機能は既知の脆弱性、脅威、または欠陥からインフラストラクチャリソースを保護するために導入される。無効化すれば、リソースを保護できなくなる。
攻撃者は常にまず、悪用しやすい脆弱性を見つけようと試みます。場合によっては、一般的な脆弱性を修正するスクリプトを使用することさえあります。これは、泥棒が通りにある全ての車のドアがロックされていないか確認するのと変わりません。窓を割るよりもずっと簡単だからです。ハッカーは、一般的なセキュリティ対策が非アクティブ状態にあることに驚くかもしれません。しかし、そのような状況が発生すると、彼らはすぐにそれを悪用します。
次に、適切なセキュリティ設定を施した上で機能を無効化すると、偽りの安心感が生まれます。管理者が防御機能が無効化されていることを知らなければ、一般的な脅威から免れていると誤解する可能性があります。
攻撃者が無効化されたセキュリティ機能を悪用する例として、パブリックアクセスをブロックするAWS S3のセキュリティ機能が挙げられます。Amazon S3のパブリックアクセスブロック機能を利用すれば、アカウント管理者やバケット所有者は、Amazon S3リソースへの公開アクセスを制限する集中管理を簡単に設定できます。しかし、一部の管理者はS3バケットへのアクセスに問題が生じた際、作業を迅速に完了させるために公開することを選択します。このセキュリティ機能を有効化するのを忘れた場合、攻撃者は当該S3バケットに保存された情報に完全にアクセス可能となり、情報漏洩を引き起こすだけでなく、データ転送料による追加費用が発生する可能性があります。
現実世界のコードを比較してみましょう。以下の CloudFormation コード断片をご覧ください:
脆弱性:
企業用ストレージバケット:
タイプ:AWS::S3::Bucket
属性:
パブリックアクセスブロック設定:
blockPublicACLs:エラー
BlockPublicy:エラー
ignorepublicacls:エラー
restrictPublicBuckets:
バージョン管理設定:
状態:有効
バケット暗号化:
サーバーサイド暗号化設定:
- デフォルトのサーバーサイド暗号化:
SSE アルゴリズム:「AES256」
安全:
企業ストレージバケット:
タイプ:AWS::S3::Bucket
属性:
パブリックアクセスブロック設定:
blockPublicACLs:はい
BlockPublic:はい
ignorePublicACLs:
restrictPublicBuckets:
バージョン管理設定:
状態:有効
バケット暗号化:
サーバーサイド暗号化設定:
- デフォルトのサーバーサイド暗号化:
SSEアルゴリズム:「AES256」
安全機能の無効化を防止
セキュリティ機能の無効化が組織に悪影響を及ぼすことを阻止することは、政策上の問題であると同時に実践上の問題でもあります。セキュリティ機能を無効化できるのは極めて特殊な状況に限るという確固たる方針を策定すべきです。問題解決やアプリケーション更新のために機能を一時的に無効化せざるを得なかった事象は記録する必要があります。必要な作業が完了した後、機能が完全に再有効化されていることを確認するための点検を実施すべきです。
セキュリティ機能を簡素化のために恒久的に無効化する必要がある場合、影響を受けるデータに対して他の保護手段を提供し、デフォルトの保護がない状態でもハッカーがその機能にアクセスできないようにすべきである。必要な保護機能が既に無効化されているならば、攻撃者が施錠されていない扉を見つけ、この状況を利用するまで時間の問題に過ぎない。
もっと学び、自分自身に挑戦しよう:
セキュリティコードの専門家によるブログページをご覧ください。この脆弱性について詳しく知り、組織や顧客を他のセキュリティ侵害や脆弱性の被害から守る方法を確認できます。
この記事を読み終えた今、この脆弱性を発見し修正する準備はできていますか?Secure Code Warrior プラットフォームでiMacゲーム化セキュリティチャレンジに挑戦する時が来ましたSecure Code Warrior バーセキュリティスキルを磨き続け、最新の状態に保ちましょう。
これは毎週連載されるシリーズ記事で、上位8つの「インフラストラクチャ・アズ・コード」脆弱性を網羅しています。来週も続報をお楽しみに!