GPG 대칭 암호화를 포함하는 bash 스크립트 보안

GPG 대칭 암호화를 포함하는 bash 스크립트 보안

알아채다: 동일한 취약점이 이미 존재합니다.이 문제하지만 문제의 다른 설정(제 경우에는 비밀번호를 저장할 필요가 없습니다)에 따라 다른 솔루션이 허용됩니다(파일에 비밀번호를 저장하는 대신 파일 설명자를 사용하세요.일카츄의 답변).

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및/또는 해독된 출력이 어떻게든 표시/접근 가능합니까? 안전하지 않다면 스크립트를 어떻게 수정해야 하나요?

답변1

gpg --passphrase $my_passphrase 

내 질문:이거 안전한가요? $my_passphrase 변수 및/또는 해독된 출력이 어떻게든 표시/접근 가능합니까?

아니요, 실제로는 안전한 것으로 간주되지 않습니다. 비밀번호는 ps실행 중인 다른 모든 프로세스의 명령줄과 마찬가지로 의 출력에 표시됩니다 . 데이터 자체는 표시되지 않으며 다른 사용자는 파이프라인에 액세스할 수 없습니다.

이것매뉴얼 페이지gpg이런 말이 있습니다 --passphrase.

--passphrase string    

사용비밀번호로. 이 옵션은 암호가 하나만 제공되는 경우에만 사용할 수 있습니다. 분명히 다중 사용자 시스템에서 이에 대한 보안은 매우 의심스럽습니다. 피할 수 있으면 이 옵션을 사용하지 마십시오.

물론, 시스템에 다른 사용자가 없고 서비스가 손상되지 않았다고 생각한다면 누구도 프로세스 목록을 확인해서는 안 됩니다.

그러나 어쨌든 --passphrase-fd쉘을 사용하여 암호를 프로그램으로 리디렉션할 수 있습니다. 여기에 문자열을 사용하십시오.

#!/bin/bash
read -e -s -p "Enter passphrase: " my_passphrase
echo        # 'read -s' doesn't print a newline, so do it here
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

gpg이는 전체 입력을 얻기 전에 두 번째 파일이 출력 파일을 자르지 않는 경우에만 작동합니다. 그렇지 않으면 첫 번째 파일이 gpg잘리기 전에 파일을 읽지 못할 수도 있습니다.


명령줄을 사용하지 않으려면 비밀번호를 파일에 저장한 후 --passphrase-file. 암호는 실제로 영구 저장소에 저장되지 않습니다.

관련 정보