web-dev-qa-db-ja.com

gpg対称暗号化を含むbashスクリプトのセキュリティ

通知:まったく同じ脆弱性が この質問 で説明されていますが、問題の設定が異なります(私の場合はパスフレーズを保存する必要はありません)は、パスフレーズをファイルに保存する代わりにファイル記述子を使用して別の解決策(ieを使用できます。 ilkkachuの回答 を参照してください) )。

対称的に暗号化されたファイルがあるとしますmy_file(gpg 1.xを使用)。機密データを保存し、次のスクリプトを使用して編集します。

read -e -s -p "Enter passphrase: " my_passphrase
gpg --passphrase $my_passphrase --decrypt $my_file | stream_editing_command | gpg --yes --output $my_file --passphrase $my_passphrase --symmetric
unset my_passphrase

どこ stream_editing_commandストリームに何かを置き換え/追加します。

私の質問:これは安全ですか?変数は$my_passphraseおよび/または復号化された出力は、何らかの方法で表示/アクセス可能ですか?安全でない場合、スクリプトをどのように変更すればよいですか?

4
francescop21
gpg --passphrase $my_passphrase 

私の質問:これは安全ですか?変数$ my_passphraseおよび/または復号化された出力は何らかの方法で表示/アクセスできますか?

いいえ、それは実際には安全とは見なされていません。パスフレーズは、他のすべての実行中のプロセスのコマンドラインと同様に、psの出力に表示されます。データ自体は表示されず、他のユーザーはパイプにアクセスできません。

gpgのマニュアルページ--passphraseについてこう言っています:

--passphrase string    

stringをパスフレーズとして使用します。これは、パスフレーズが1つだけ指定されている場合にのみ使用できます。明らかに、これはマルチユーザーシステムでは非常に疑わしいセキュリティです。回避できる場合は、このオプションを使用しないでください。

もちろん、システム上に他のユーザーがいなく、サービスが侵害されていないことを信頼している場合は、誰もプロセスリストを見る必要はありません。

ただし、いずれの場合も、代わりに--passphrase-fdを使用して、シェルにパスフレーズをプログラムにリダイレクトさせることができます。 here-stringsの使用:

#!/bin/bash
gpg --passphrase-fd 3 3<<< "$my_passphrase" --decrypt "$my_file" |
    stream_editing_command |
    gpg --yes --output "$my_file" --passphrase-fd 3 3<<< "$my_passphrase" --symmetric

これは、2番目のgpgが完全な入力を取得する前に出力ファイルを切り捨てない場合にのみ機能することに注意してください。そうしないと、最初のgpgが切り捨てられる前にファイルを読み取れない可能性があります。


コマンドラインの使用を避けるために、パスフレーズをファイルに保存してから、--passphrase-fileを使用することもできます。ただし、ファイルのアクセス許可の設定、その後の削除、およびパスフレーズが永続ストレージに実際に保存されないようにファイルの適切な場所を選択するように注意する必要があります。

5
ilkkachu