簡體   English   中英

Shell 腳本密碼安全命令行參數

[英]Shell script password security of command-line parameters

如果我使用密碼作為命令行參數,它在系統上使用ps是公開的。

但是,如果我在 bash shell 腳本中,我會執行以下操作:

...
{ somecommand -p mypassword }
...

這還會出現在進程列表中嗎? 或者這樣安全嗎?

  • 子流程怎么樣:(...)? 不安全吧?
  • 協同處理?

命令行將始終可見(如果僅通過 /proc)。

所以唯一真正的解決方案是:不要。 您可以在標准輸入或專用 fd 上提供它:

./my_secured_process some parameters 3<<< "b@dP2ssword"

使用類似(簡單第一)的腳本

#!/bin/bash
cat 0<&3

(此示例只會將錯誤的密碼轉儲到標准輸出)

現在你需要關心的是:

  • MITM(通過破壞 PATH 竊取密碼的欺騙腳本)
  • bash 歷史記錄在命令行中保留您的密碼(查看HISTIGNORE以獲取 bash,例如)
  • 包含密碼重定向的腳本的安全性
  • 使用的 tty 的安全性; 鍵盤記錄器; ...如您所見,我們現在已進入“一般安全原則”

被調用的程序可以通過簡單地覆蓋argv來更改其命令行,如下所示:

#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv) {
    int arglen = argv[argc-1]+strlen(argv[argc-1])+1 - argv[0];
    memset(argv[0], arglen, 0);
    strncpy(argv[0], "secret-program", arglen-1);
    sleep(100);
}

測試:

$ ./a.out mySuperPassword & 
$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
me       20398 18872  0 11:26 pts/3    00:00:00 bash
me       20633 20398  0 11:34 pts/3    00:00:00 secret-program
me       20645 20398  0 11:34 pts/3    00:00:00 ps -f
$

UPD:我知道,它並不完全安全,可能會導致競爭條件,但是許多從命令行接受密碼的程序都會這樣做。

如何使用文件描述符方法:

env -i bash --norc   # clean up environment
set +o history
read -s -p "Enter your password: " passwd
exec 3<<<"$passwd"
mycommand <&3  # cat /dev/stdin in mycommand

看:

在 Unix 上隱藏命令行參數的秘密

避免顯示在進程列表中的唯一方法是重新實現要在純 Bash 函數中調用的程序的全部功能。 Function 調用不是單獨的進程。 但是,通常這是不可行的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM