您現在的位置是:首頁 > 遊戲

系統命令列的秘密

由 skysevenqi 發表于 遊戲2022-12-04
簡介像 Bash 這樣使用 stdin(標準輸入)的 Shell 會自動將任何輸入儲存到一個檔案中,該檔案可由您機器上的任何其他程序訪問

如何找到windows的金鑰

每日分享最新,最流行的軟體開發知識與最新行業趨勢,希望大家能夠一鍵三連,多多支援,跪求關注,點贊,留言。

開發人員需要防止在命令列工作時暴露憑據。瞭解您可能面臨的風險以及哪些工具和方法可以幫助您更安全地工作。

如果開發人員都有一個共同點,那就是他們使用命令列來完成工作。許多開發工具沒有圖形使用者介面 (GUI),而是依賴於命令列介面 (CLI)。CLI 首先或唯一的方法有很多好處。一旦您掌握了命令列,您就可以比 GUI 更高效地工作,並獲得指令碼的強大超能力,讓您的所有工具開始協同工作。指令碼是構建和管理軟體交付管道和 CI/CD 工作流的基石。

然而,沒有什麼比空白終端視窗更令人生畏的了,尤其是對於新開發人員來說,一個空白的終端視窗帶有一個閃爍的游標等待您的命令。沒有有用的 UI 可以引導您實現目標;你只需要知道輸入什麼。讓它

恰到好處

的所有重擔都落在了開發人員的肩上,而且還有很多東西要學,尤其是考慮到安全性時。

系統命令列的秘密

下載命令列備忘單的秘密 (直接連結到 PDF)

在掌握命令列時經常被忽視的一個領域是圍繞憑據的本地安全性,或者我們喜歡稱之為秘密的東西。雖然可能感覺秘密管理是為程式碼儲存庫、執行時環境和推動現代應用程式交付的 CI/CD 管道保留的區域,但良好的安全實踐始於家庭。開發人員的“家”意味著終端。

什麼是本地憑證?

在命令列中保護機密的第一步是盤點可能存在的機密。機密是我們希望保密的任何敏感資料,可以授予對系統或資料的訪問許可權,您將看到這些資料稱為數字身份驗證憑據。秘密分為幾大類:密碼、金鑰和證書

密碼

自計算機誕生以來,密碼就在安全性方面發揮了重要作用,並且是使用者如何登入系統的代名詞。當使用任何一個時,術語“使用者名稱”幾乎總是與單詞“密碼”配對。密碼是你知道的用來證明你是誰的東西。

保護您的密碼安全與首先擁有它們一樣重要。沒有人會認為在便利貼上寫下密碼並將其貼上在他們的顯示器上是一個好主意,但許多開發人員都因將密碼以明文形式儲存在本地檔案中而感到內疚。如果有人可以訪問您的本地計算機,快速搜尋內容可以顯示任何此類文件並開始假裝是您。

在理想的世界中,您只需將所有密碼安全地儲存在您的腦海中。但實際上,我們都有太多的密碼,這不是一個可行的策略。幸運的是,有很多方法可以在本地保護密碼,我們將在本文後面深入探討這些方法;現在,讓我們繼續製作本地機密清單。

鑰匙

金鑰與密碼具有相同的基本功能,授予對系統和資料的訪問許可權,但在幾個關鍵方面有所不同。密碼通常由人類生成,用於人類訪問系統或資料。它們通常較短,理想情況下,您可以記住它們。

金鑰通常由演算法生成,並且通常比密碼更長、更復雜。總體而言,它們不是手動輸入的,也不是供人訪問系統的;金鑰旨在授予機器和程序訪問另一個系統或解鎖加密資料的許可權。另一種說法是金鑰用於鎖定和解鎖加密功能,例如加密或身份驗證。

作為開發人員,您可能非常熟悉的一種金鑰是 SSH 金鑰。這是工作中的配對公鑰/私鑰系統的主要示例。SSH 公鑰旨在與本地計算機需要訪問的應用程式訪問的任何遠端系統共享,例如 GitHub 或 AWS。相應的私鑰儲存在您的本地檔案系統中,並且永遠不應與任何人共享。一起使用時,這些金鑰可確保僅向受信任的系統授予訪問許可權。這是一種非常安全的方法。

就像密碼一樣,金鑰的安全優勢伴隨著需要在本地保護它們的開銷。雖然您不太可能將明文金鑰手動輸入系統或將其寫在紙上,正如我們將在下一節中看到的那樣,如果我們不小心,金鑰可能會以多種方式暴露。

證書

證書是一種儲存、傳輸和使用金鑰的方式。證書包含金鑰以及重要的元資料,例如頒發者、證書的用途以及用於驗證證書真實性的簽名。

雖然 SSL 或 TLS 證書可能會成為安全證書的主要用例,但越來越多的應用程式和平臺利用基於證書的身份驗證。身份管理服務(如 Active Directory)提供的整合可以更輕鬆地利用證書來更好地控制使用者的訪問許可權,同時讓使用者無需手動管理密碼。

您在本地儲存證書的位置和方式可能並不明顯,尤其是在中央 IT 部門配置的機器上。瞭解本地計算機上的證書並確保採取正確的保護措施以防止它們被不當共享仍然是開發人員的責任。不公開這些證書持有的金鑰也很重要,因為這也是一個潛在的威脅。

如何公開憑據

既然我們知道我們正在尋找什麼樣的秘密,下一個合乎邏輯的問題是它們如何暴露給不良行為者或惡意程式碼?膝上型電腦上的秘密可能會被洩露,任何帶有密碼或儲存金鑰的明文檔案都可能被盜。但是也有可能您透過 SSH 連線到的任何伺服器也可能被意外訪問。SSH 憑據本身可能意味著有人可能會在冒充您時引發問題!

在任何使用 shell 的情況下保持命令列機密的安全將有助於您保持安全。讓我們來看看您可能會暴露秘密的一些方式。

憑證檔案

憑證檔案是一種將機密安全地儲存在任何受版本控制的目錄之外的方法。您可以使用 `chmod` 輕鬆設定這些檔案的許可權,並且可以以程式設計方式訪問內容。您甚至可以為每個憑證管理一個單獨的檔案,使任何入侵者更難收集它們並限制他們的攻擊範圍。這些確實存在以明文形式獲取憑據的風險,但我們可以透過良好的加密來解決這個問題以及任何檔案。

重擊歷史

有時需要在 CLI 提示符中輸入密碼或金鑰。這裡的危險來自這樣一個事實,即以明文形式輸入終端的任何內容都意味著它以明文形式儲存在終端的歷史記錄中。所有的 shell 都儲存你的歷史記錄,但是為了幫助理解這一點,如果你正在執行 Bash 或 Zsh,你的整個 shell 歷史記錄都儲存在一個名為 。bash_history 或 。zhs_history 的檔案中。如果你去檢查那個檔案,你可能會對它包含的行數感到驚訝。任何可以訪問您的機器或共享終端環境的人都可以很快找到您作為使用者直接輸入到 shell 中的任何憑據。

幸運的是,大多數應用程式都可以安全地傳遞憑據,而無需以明文形式輸入它們。如果您遇到需要明文憑據的應用程式,您應該考慮我們在下一節中概述的方法之一。大多數情況下,您仍然可以安全地工作,並且永遠不會暴露憑證。如果您使用的工具絕不允許您以安全的方式傳遞憑據,那麼可能是時候與您的安全團隊就相關工具進行對話了。

日誌

就像您的 Bash 歷史記錄一樣,日誌可以公開任何和所有以明文形式儲存或以不安全方式載入的秘密。可以說,日誌檔案不如您的 Bash 歷史記錄安全,因為日誌在 /var/log 中是公開可見的,並且可能被意外的參與者訪問。

/開發/標準輸入

假設您在此過程中沒有呼叫特殊的 /dev/stdin 檔案,則在位置之間傳遞憑據總體上是一種非常安全的處理機密的方法。像 Bash 這樣使用 stdin(標準輸入)的 Shell 會自動將任何輸入儲存到一個檔案中,該檔案可由您機器上的任何其他程序訪問。

如果你現在去終端並嘗試使用 `cat` 列印該檔案,會發生一件奇怪的事情。您鍵入的任何內容都會在按 Enter 後立即列印到螢幕上。為什麼?您的 shell 將 /dev/stdin 中的檔案內容連線(cat)到終端的標準輸出(stdout)。如果您的計算機上有惡意軟體或間諜軟體,或者有人將程式碼注入到您的指令碼中,即使您從安全源將密碼或金鑰直接安全地載入到標準輸入中,他們也有可能截獲此檔案的純文字內容。

ps

Process Status 是 Bash 和衍生 shell 中的一個實用程式,您可以使用命令 `ps` 呼叫它。此實用程式提供有關在記憶體中執行的程序的資訊,對於瞭解系統正在做什麼非常重要。對於類 UNIX 作業系統,任何值,包括私鑰檔案的內容,都可以在這些命令執行時透過 `ps` 看到,並將它們儲存在本地檔案 `/proc//cmdline` 中,該檔案對於任何程序 ID (pid) 都是全域性可讀的。這在具有共享訪問許可權的機器(例如遠端虛擬機器或伺服器)上可能成為一種特別危險的情況。

更安全的命令列憑證的方法

雖然本地憑證管理可能會讓人望而生畏,但有許多方法和工具可以幫助您更安全地工作,並對您的日常職責更有信心。雖然我們將在這裡介紹其中的一些,但我們認識到可能有更多的工具和技巧可以解決這個問題;我們透過在社交媒體或我們的聯絡表上告知我們來邀請您對此的想法。

密碼管理器

您可能已經透過 Internet 瀏覽器熟悉密碼管理器。正如LastPass、1Password或DashLane等供應商使管理登入到 Web 介面變得更加簡單一樣,有很多工具可以幫助我們安全地儲存和管理密碼,以便在命令列上使用。

這種解決方案的最佳示例之一是Hashicorp Vault。他們有很多關於如何利用 Vault 以程式設計方式呼叫任何需要的憑證而不以明文形式公開的文件。如果不良行為者掌握了您的程式碼,他們將看到對 Vault 的呼叫,而不是對金鑰本身的呼叫,從而更難對您造成任何傷害。

系統命令列的秘密

Hashicorp Vault 也有很多替代品,例如KeePass、Azure Key Vault、Keeper Password Manager和Akeyless Vault Platform,僅舉幾例。它們都有自己的特點,但只要它們保證您的密碼安全且非明文,我們鼓勵您儘快採用。您的 IT 和安全團隊可能已經擁有一些經過批准的密碼管理器,您可以立即開始使用。

加密

雖然我們經常在傳輸資料時考慮加密,但解決靜態資料加密同樣重要,有時甚至更重要。任何我們不想暴露的敏感資料都應該在我們不積極使用它時進行加密。誠然,這確實帶來了需要管理另一個加密金鑰的開銷。但是,結合良好的密碼管理器,您會驚訝地發現,讓不良行為者無法使用憑據是多麼容易。

雖然有很多可能的方法來使用加密,但這裡有三種我們認為有用的工具。

本地檔案系統加密

如果有不良行為者訪問您的計算機,您將希望讓他們儘可能難以實際對您的資料進行任何操作。這就是本地檔案系統加密背後的核心思想;當您退出時,您機器上的資料會被加密,其他任何人都無法使用。從LUKS

派生的 Linux 系統有很多不同的選項,Linux 統一金鑰設定。事實上,在安裝大多數 Linux 發行版時,系統會提示您預設啟用此功能。

系統命令列的秘密

Windows 使用者可以利用Microsoft 的 BitLocker、Folder Lock等工具或VeraCrypt等免費開源工具。

如果您使用的是集成了 T2 安全晶片的較新 Macbook,好訊息是,您已經有了一個非常複雜的加密工具可供使用;檔案庫。

標準作業程式

SOPS 的名稱來源於術語“Secrets OPerationS”。與本地檔案加密方案不同,SOPS 是由 Mozilla 團隊建立的加密檔案編輯器。這個想法是刪除解密高度敏感檔案、編輯然後重新加密它們的手動步驟。相反,SOPS 提供了一種編輯體驗,可在整個編輯過程中保持加密。當使用其他文字編輯工具開啟 SOPS 編碼的檔案時,檔案的結構會被保留,但任何敏感資料都會受到保護。

系統命令列的秘密

使用 SOPS 編輯並在其他文字編輯器中開啟的示例檔案

SOPS 是高度可定製的,允許您從 GPG 或 Hashicorp Vault 等多種加密機制中進行選擇,從而輕鬆適應您的工作流程。它是一個免費的開源工具。甚至還有可用的 VS Code 擴充套件。

清殼

Shellclear是一個跨平臺的 shell 外掛,它承諾“一種簡單快速的方式來保護你的 shell 命令歷史”。它的工作原理

開啟新終端時顯示敏感命令摘要

從 shell 歷史記錄中清除敏感命令

在演示或螢幕共享之前儲存您的歷史命令

系統命令列的秘密

它是免費和開源的,並且非常可定製。雖然這是一個較新的專案,但我們認為這是一個優雅的解決方案,可以找出 Bash 歷史中的秘密並幫助您清除它們。

這些只是保護機器上靜態資料的幾個選項。還有很多其他可用的工具和方法。在評估任何加密工具時,請確保它們使用經過驗證的已知加密演算法。這絕對是您不想編寫自己的加密方案的一個領域。與您的安全人員討論他們可能已經批准的其他選項和工具。

環境變數

簡單來說,環境變數是終端用來設定時間格式或本地 UTF 編碼等行為的設定。預設情況下,這些只能作為使用者和系統在執行時訪問。

環境變數也可用於在本地儲存憑據,尤其是對於以程式設計方式呼叫的系統。總的來說,這是一種安全的方法,因為它們安全地儲存在系統中,並且可以很容易地在指令碼中呼叫。但是,有幾點需要注意:

它們應該有正確的範圍,即不設定在全域性級別

產生子子程序的程序會將其環境變數複製到它!即一個可以訪問敏感環境的指令碼將在啟動另一個程序時傳遞這些

系統命令列的秘密

如果您從未在終端中執行過命令 `env`,那麼已經存在的變數數量可能看起來有點不堪重負。我們邀請您立即開啟一個終端並執行它。如果其中有任何看起來像 API 金鑰或不記名令牌的東西,最好詢問它是否仍然需要並清除未使用的環境變數。

管道

雖然我們在本文前面提到如果使用不當,管道會成為潛在的安全威脅面,但總的來說,我們確實喜歡管道!

Bash 中的管道從一個程序或應用程式獲取輸出並將其傳遞給另一個程序或工具。由於管道只有兩端,並且它們僅在通訊期間存在於記憶體中,因此它們本身非常安全。

使用管道的問題來自標準輸入 stdin 中專案的臨時儲存。這個問題可以透過將輸入移動到靠近源的管道來解決,也就是輸入標準輸入的應用程式。

使用 cURL 可以看到一個很好的例子來說明這一點。將資料傳遞給請求時,您首先可能會嘗試使用 `-d “$(< /dev/stdin)”` 從輸出中傳遞它。相反,cURL 允許您直接從源獲取資料,而無需使用 `-d @-` 寫入標準輸入。感謝 Carl Tashian在他的部落格上對這種模式進行了很好的總結。

將您的憑證保密

在命令列上工作意味著您可以使用更廣泛的工具更快、更高效地工作。但是,正如我們在本文中所闡述的那樣,在憑據管理方面,它也會帶來一定的漏洞開銷。

好訊息是,在這場保守秘密的鬥爭中,您並不孤單。有很多工具可以幫助確保您的憑據安全可靠。總而言之,我們的建議是:

確定在您的計算機上儲存憑據且可透過命令列訪問的所有位置。它們採用密碼、金鑰和證書的形式。

保持警惕並注意您的本地憑據如何受到損害。以明文形式儲存任何敏感資訊,甚至呼叫標準輸入“/dev/stdin”,很可能是錯誤的方法。

使用工具在靜止時保持檔案加密。此外,利用工具在您的日誌和 Bash 歷史記錄中進行清理。

我們鼓勵您與您的團隊就安全性進行對話,並檢視他們已經為您的組織審查了哪些工具。他們可能會幫助您確定每天可以更安全地工作的方法,同時在命令列上保持高效。

推薦文章