Codeers Conquer Security Infrastructure as Codeシリーズ。セキュリティの設定ミス - 不適切なパーミッション

2020年06月08日掲載
マティアス・マドゥ博士著
ケーススタディ

Codeers Conquer Security Infrastructure as Codeシリーズ。セキュリティの設定ミス - 不適切なパーミッション

2020年06月08日掲載
マティアス・マドゥ博士著
リソースを見る
リソースを見る

昨今のサイバーセキュリティへの脅威は、どこにでもあり、容赦ないものです。あまりにもひどいので、プログラムが導入された後にそれらに対応しようとするのはほとんど不可能になっています。その代わりに、賢明な企業は、Infrastructure as Codeというコンセプトを採用しています。これにより、開発者は、作成中のアプリケーションの安全性を高めることができます。このシリーズでは、開発者がコードとしての安全なインフラストラクチャを組織に導入するための手順を理解することで、セキュリティに対する準備を整えることを目的としています。

セキュリティの誤設定、特に不適切なパーミッションに関する誤設定は、開発者があるタスクを達成するために、新しいユーザーを作成したり、ツールとしてのアプリケーションにパーミッションを与えたりしたときに最もよく起こります。例えば、データベースから情報を収集するために行われることがあります。しかし、新規ユーザーのパーミッションが高く設定されていたり、目前のタスクに対してデフォルトで設定されていなかったりすると、コードに深刻な脆弱性をもたらすことになります。

本題に入る前に、今すぐ自分のスキルを試してみませんか?いくつかの不適切なパーミッションの脆弱性を見つけて修正してみてください。

あなたはどうでしたか?もう少し掘り下げてみましょう。

ユーザーやアプリケーションにフルパーミッションを与えたり、新しいユーザーがどのようなことができるのか、どのような動作が制限されるのかを定義することを気にしないことは、確かに新しいコードを導入するための最も早い方法です。そして、すべてが完璧にうまくいけば、アプリケーションは、割り当てられたタスクを達成するために、それらのパーミッションを利用します。危険なのは、ハッカーがこのプロセスを発見して、そのユーザーを危険にさらすことです。ユーザーは、特定のアプリケーションのために特定の機能を達成するために作成されたにもかかわらず、侵害されると、攻撃者は他のアプリケーションやデータ、さらにはネットワークを危険にさらすことができます。

セキュリティ上のミスコンフィグレーションはどのように利用されるのか?

その危険性を視覚化するために、よくあるタスクがDockerクラウド環境内でどのようにコーディングされることがあるかを見てみましょう。例えば、開発者がPrometheus MySQL Exporterサービスを使って、データベースから情報を収集しているとします。それを可能にする最も簡単な方法は、Exporterにデータベースへのアクセス許可を与えることです。つまり、コードは次のようなものになるでしょう。

FROM mysql:latest
COPY ./scripts/create_users.sh /docker-entrypoint-initdb.d/
USER 999
CREATE USER exporter@% IDENTIFIED BY $EXPORTER_PASSWORD;
GRANT ALL ON *.* TO exporter@%;
GRANT SELECT ON performance_schema.* TO exporter@%;

そうすれば、確かにエクスポーターは任務を遂行することができます。しかし、パーミッションが定義されていないため、エクスポーターは実際にはほとんど何でもできるようになっています。もちろん、エクスポーター自身がプログラムされた行動以外のことをすることはありません。しかし、攻撃者がエクスポーターのサービスを侵害することができたとしたらどうなるでしょうか。その場合、完全な権限が与えられているので、攻撃者はSQLサービスであらゆる種類の不正なタスクを実行することができます。

不適切なパーミッションの確保と排除

ここで再び、「コードとしてのインフラ」というコンセプトが登場します。アプリケーションの作成時にセキュリティをコード化しておけば、サイバーセキュリティに関して、ネットワークは常に全体的に有利な立場にあることになります。

上のDockerの例では、開発者がPrometheus MySQL Exporterにデータベースへの問い合わせをさせたい場合、何をさせるべきかを定義することで、より安全にそれを実現することができます。この良い例は次のようになります。


FROM mysql:latest
COPY ./scripts/create_users.sh /docker-entrypoint-initdb.d/
USER 999
CREATE USER exporter@% IDENTIFIED BY $EXPORTER_PASSWORD;
GRANT PROCESS, REPLICATION CLIENT ON *.* TO exporter@%;
GRANT SELECT ON performance_schema.* TO exporter@%;

この場合、Prometheus MySQL Exporter サービスに設定された MySQL ユーザーは、MySQL サービスに対して制限された権限しか持ちません。具体的には、「PROCESS」と「REPLICATION CLIENT」の権限のみが許可されています。これにより、悪意のあるユーザーが、妥協したPrometheus MySQL Exporterサービスを利用することを防ぐことができます。

コードレベルでパーミッションを制限することで、ユーザーやアプリケーションは、目の前のタスクに必要なパーミッションだけを持つことができます。これは、ネットワークの安全性を確保し、Infrastructure as Codeのコンセプトを採用する上で、大きな意味を持ちます。

Secure Code Warriorブログでは、今回の脆弱性について、また、他のセキュリティ上の欠陥の被害から組織や顧客を守る方法について、さらに詳しい情報を提供しています。また、Secure Code Warrior トレーニングプラットフォームのショーケースでは、サイバーセキュリティに関するすべてのスキルを磨き上げ、最新の状態に保つことができます。

リソースを見る
リソースを見る

著者

マティアス・マドゥ博士

マティアスは、15年以上のソフトウェアセキュリティの実務経験を持つ研究者・開発者です。フォーティファイ・ソフトウェア社や自身の会社(Sensei Security)などでソリューションを開発してきました。キャリアの中で、Matiasは、商用製品につながる複数のアプリケーションセキュリティ研究プロジェクトを主導し、10件以上の特許を取得しています。また、RSAカンファレンス、Black Hat、DefCon、BSIMM、OWASP AppSec、BruConなどの世界的なカンファレンスで定期的に講演を行っているほか、高度なアプリケーションセキュリティトレーニング(courses )の講師も務めています。

Matiasはゲント大学でコンピュータ工学の博士号を取得し、アプリケーションの内部構造を隠すためのプログラム難読化によるアプリケーションセキュリティを研究しました。

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

Codeers Conquer Security Infrastructure as Codeシリーズ。セキュリティの設定ミス - 不適切なパーミッション

2020年06月08日掲載
マティアス・マドゥ博士著

昨今のサイバーセキュリティへの脅威は、どこにでもあり、容赦ないものです。あまりにもひどいので、プログラムが導入された後にそれらに対応しようとするのはほとんど不可能になっています。その代わりに、賢明な企業は、Infrastructure as Codeというコンセプトを採用しています。これにより、開発者は、作成中のアプリケーションの安全性を高めることができます。このシリーズでは、開発者がコードとしての安全なインフラストラクチャを組織に導入するための手順を理解することで、セキュリティに対する準備を整えることを目的としています。

セキュリティの誤設定、特に不適切なパーミッションに関する誤設定は、開発者があるタスクを達成するために、新しいユーザーを作成したり、ツールとしてのアプリケーションにパーミッションを与えたりしたときに最もよく起こります。例えば、データベースから情報を収集するために行われることがあります。しかし、新規ユーザーのパーミッションが高く設定されていたり、目前のタスクに対してデフォルトで設定されていなかったりすると、コードに深刻な脆弱性をもたらすことになります。

本題に入る前に、今すぐ自分のスキルを試してみませんか?いくつかの不適切なパーミッションの脆弱性を見つけて修正してみてください。

あなたはどうでしたか?もう少し掘り下げてみましょう。

ユーザーやアプリケーションにフルパーミッションを与えたり、新しいユーザーがどのようなことができるのか、どのような動作が制限されるのかを定義することを気にしないことは、確かに新しいコードを導入するための最も早い方法です。そして、すべてが完璧にうまくいけば、アプリケーションは、割り当てられたタスクを達成するために、それらのパーミッションを利用します。危険なのは、ハッカーがこのプロセスを発見して、そのユーザーを危険にさらすことです。ユーザーは、特定のアプリケーションのために特定の機能を達成するために作成されたにもかかわらず、侵害されると、攻撃者は他のアプリケーションやデータ、さらにはネットワークを危険にさらすことができます。

セキュリティ上のミスコンフィグレーションはどのように利用されるのか?

その危険性を視覚化するために、よくあるタスクがDockerクラウド環境内でどのようにコーディングされることがあるかを見てみましょう。例えば、開発者がPrometheus MySQL Exporterサービスを使って、データベースから情報を収集しているとします。それを可能にする最も簡単な方法は、Exporterにデータベースへのアクセス許可を与えることです。つまり、コードは次のようなものになるでしょう。

FROM mysql:latest
COPY ./scripts/create_users.sh /docker-entrypoint-initdb.d/
USER 999
CREATE USER exporter@% IDENTIFIED BY $EXPORTER_PASSWORD;
GRANT ALL ON *.* TO exporter@%;
GRANT SELECT ON performance_schema.* TO exporter@%;

そうすれば、確かにエクスポーターは任務を遂行することができます。しかし、パーミッションが定義されていないため、エクスポーターは実際にはほとんど何でもできるようになっています。もちろん、エクスポーター自身がプログラムされた行動以外のことをすることはありません。しかし、攻撃者がエクスポーターのサービスを侵害することができたとしたらどうなるでしょうか。その場合、完全な権限が与えられているので、攻撃者はSQLサービスであらゆる種類の不正なタスクを実行することができます。

不適切なパーミッションの確保と排除

ここで再び、「コードとしてのインフラ」というコンセプトが登場します。アプリケーションの作成時にセキュリティをコード化しておけば、サイバーセキュリティに関して、ネットワークは常に全体的に有利な立場にあることになります。

上のDockerの例では、開発者がPrometheus MySQL Exporterにデータベースへの問い合わせをさせたい場合、何をさせるべきかを定義することで、より安全にそれを実現することができます。この良い例は次のようになります。


FROM mysql:latest
COPY ./scripts/create_users.sh /docker-entrypoint-initdb.d/
USER 999
CREATE USER exporter@% IDENTIFIED BY $EXPORTER_PASSWORD;
GRANT PROCESS, REPLICATION CLIENT ON *.* TO exporter@%;
GRANT SELECT ON performance_schema.* TO exporter@%;

この場合、Prometheus MySQL Exporter サービスに設定された MySQL ユーザーは、MySQL サービスに対して制限された権限しか持ちません。具体的には、「PROCESS」と「REPLICATION CLIENT」の権限のみが許可されています。これにより、悪意のあるユーザーが、妥協したPrometheus MySQL Exporterサービスを利用することを防ぐことができます。

コードレベルでパーミッションを制限することで、ユーザーやアプリケーションは、目の前のタスクに必要なパーミッションだけを持つことができます。これは、ネットワークの安全性を確保し、Infrastructure as Codeのコンセプトを採用する上で、大きな意味を持ちます。

Secure Code Warriorブログでは、今回の脆弱性について、また、他のセキュリティ上の欠陥の被害から組織や顧客を守る方法について、さらに詳しい情報を提供しています。また、Secure Code Warrior トレーニングプラットフォームのショーケースでは、サイバーセキュリティに関するすべてのスキルを磨き上げ、最新の状態に保つことができます。

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。