環境変数を介して秘密を渡すことが「非常に安全ではない」と見なされるのはなぜですか?

環境変数を介して秘密を渡すことが「非常に安全ではない」と見なされるのはなぜですか?

環境変数を介してプログラムにパスワード(パスワード)を渡すことは、次のように「非常に安全ではない」と見なされます。MySQLドキュメント(セキュリティの観点から)良くない選択です。その他のリソース

なぜかと思います。私が何を見逃しているのでしょうか?言及されたMySQLマニュアル(私はこれを例として使用しています)で-pコマンドラインのオプションを介してパスワードを渡すことは」不安定「そして環境変数を次のように渡します」非常に不安」、太いイタリック体。

私は専門家ではありませんが、基本は知っています。ps権限のないユーザーが実行した場合でも、単純なコマンドはすべてのプログラムとコマンド引数を読み取ります。そして同じユーザーだけ(もちろんルートも)プロセス環境を読むことができます。したがって、プロセスが開始された環境のみをroot読み取ることができますが、ハッカースクリプトはすべてを読み取ります。johndoejohndoewww-dataps

ここに私が逃した何か大きなものがあるでしょう。それでは、私が見逃したものが何であるかを説明してください。

私の目標は、通常、非対話型の方法であるプログラムから別のプログラムに秘密を転送する方法を見つけることです。

ベストアンサー1

非常に安全ではないため、使用しないでください。psの一部のバージョンには、実行中のプロセスの環境を表示するオプションが含まれています。一部のシステムでは、MYSQL_PWDを設定すると、psを実行している他のユーザーにパスワードが公開されます。


これは説明されました。ここ渡す):

背景:このプロセスでは、イメージargv []とenvp []は同じ方法で並べて保存されます。 「クラシック」UNIXでは、/ usr / bin / psは通常setgid "kmem"(または同様のグループ)であり、これによりアクティブプロセスに関する情報を読むために/ dev / kmemを掘り下げることができます。これには、システム内のすべてのユーザーのプロセスパラメータと環境を読み取る機能が含まれます。

この「権威のあるpsハッキング」は基本的に最近のことです。 UNIXシステムはすべて、これらの情報を照会するさまざまな方法(Linuxの/ procなど)を提示します。したがって、環境内のパスワードなどのセキュリティに敏感なデータは漏えいしません。

しかし、既存の方法が100%消えるわけではありません。例えば、以下は、私がアクセスできるAIX 5.2システムでroot以外のユーザーとして実行される例です。

[AIX 5.2は2009年に寿命が終了しました。 AIX (少なくとも 6100-09 以降) および 7.2 で確認され、非 root ユーザーは「ps ewwwax」コマンドを使用して他のユーザーのプロセス環境を表示できなくなりました。 ]

...

記録によると、私たちはしばらく前にOpenBSD 5.2に他のローカルユーザーに環境を公開するセキュリティ脆弱性があることを発見しました(しかし、この問題はリリース直後に修正されました)。

[2012年にリリースされたOpenBSD 5.2]

これは、MySQLのマニュアルで環境変数を使用することが考えられる理由を説明しません。極度にコマンドラインパラメータと比較して安全ではありません。この質問に対する他の回答をご覧ください。簡単に言えば、マニュアルが混乱しているか、環境変数が誤って簡単に「流出」します。

おすすめ記事