PHP exec()は実行されたコマンドをどこに保存しますか?

PHP exec()は実行されたコマンドをどこに保存しますか?

PHP Webアプリケーションに次のコードがあるとしましょう。

$encrypt ? $password = generatePassword($passwordstrength): $password="";
$estring = "7z a -p$password -mx0 packFoo.aes.7z mydir/foo";
if($encrypt) {
    exec($estring);
}
mailuser($password);//uses standard PHP mail function

パスワードはPHP rand()関数を使用してランダムに生成されます。

/var/logs または .bash_history でパスワードが見つかりません。

サーバーが破損している場合は、$password値をサーバーから回復できるかどうかを知りたいです。最後に、$passwordの値がサーバーに保存されていないと主張できますか?

ベストアンサー1

〜のようにマットがコメントで指摘しました。、特に監査を設定しない限り、その可能性はありません。自分で命令を出す意図的にどこにでも直接アクセスできる形式で保存されます。grep -lR ... /ルーティングは悟りを与える経験になる可能性があるからです(最初にすべてを再インストールすることをお勧めしますnoatime...)。

しかし、常に「しかし」があります。この場合(特に表示されたコードで$ passwordまたは$ estring変数を安全に消去していない場合)、私が見ることができる1つの確実な可能性は、これらの変数がswap spaceに書き込まれることです。これは、アクティブな攻撃者がいなくても、少なくとも一定期間は永久保存に専念することを意味します。これは、スワップを完全に無効にするか、ランダム暗号化キーで暗号化されたスワップを実行することによって大幅に軽減できます。これにより、再起動後にスワップにアクセスできなくなります(システムRAMが消去されると、それを理解するために必要な復号化キーが失われるため)。

私はできます。想像する7zipは、不要になったらすぐにコマンドラインと内部変数からパスワードをすばやく消去するのに十分なパフォーマンスを発揮します。ただし、拡張キー計画などの項目は長期間維持され、交換される可能性が高くなります。可能性。これは必ずしもパスワードを回復できるわけではありませんが、暗号化されたアーカイブからプレーンテキストを回復できる可能性が高くなります。適切な時点で簡単なコマンドを実行すると、コマンドラインps axwからプレーンテキストでパスワードを記録する人が表示されますが、そうではありません。保存済みそしてチャンスの窓は小さいです。

電子メールを送信するときに、プレーンテキスト(またはBase64でエンコードされたメッセージ本文など、そのプレーンテキストに簡単にエクスポートできるコンテンツ)のパスワードが含まれているとします。その電子メールはほぼ確実でした。〜するシステムのメールキューに一時的に書き込むこれはパスワードが最終的にディスクに保存されることを意味します(RAMディスクにメールキューディレクトリがない場合は、メールキューが永続ストアに存在する必要があるという事実に加えて、動作上の独自の問題が発生します)。 )。特にスマートホスト設定を実行すると、キューファイルはすばやく削除される可能性がありますが、ディスクに書き込まれているので、言うと「破損が完了しました」と言います。strings /dev/sd?メッセージが通過するすべてのサーバーでこの脅威を軽減するための特別な措置を講じない限り、この方法は何を見つけるべきかを知っている人にパスワード回復を提供できます。

もちろん、電子メールはもともと完全に安全に設計されていません。 SMTP経由で電子メールを送信するときに機密性を合理的に保証する唯一の方法(SSLまたはSTARTTLSを介してSMTPを使用している場合でも)チェーン全体にメールサーバー)は、S / MIMEやOpenPGPなどのエンドツーエンドで暗号化されています。

簡単に言うと:あなたのウェブアプリケーションおそらくコマンド(パスワードを含む)またはパスワード自体は意図的にどこにも保存されませんが、それが依存する他のコンポーネントは通常の動作中に保存される可能性があります。

おすすめ記事