web-dev-qa-db-ja.com

ユーザーのパスワードがプレーンテキストとしてbash履歴に保存されるのを防ぐ

Linuxユーザーのsudoerアカウントのパスワードを見つけたいとしましょう。彼は強力なパスワードを使用するとします。マシンに物理的にアクセスできると仮定します。私は彼のpasswdファイルとshadowファイルを入手して何日もブルートフォースするか、または単に彼のbash履歴ファイルのコピーを取得してWordリストとして使用することができます。

私はハッカーではありませんが、誰かのアカウントを乗っ取ろうとしたときに、この方法は何度もうまくいきました。私の意見では、多くの人がコマンドラインで誤ってそこにパスワードを入力しています。特に、タッチ入力しない場合はそうです。

Lolz、私もタイプには触れません。私が管理しているシステムのユーザーも同様です。超強力なパスワードが.bash_historyにプレーンテキストとして保存されていないことを確認するにはどうすればよいですか?

私はbash履歴を削除し続けることができることを知っていますが、他の方法はありますか?

3
daltonfury42

次の理由により、できません。また、試してはいけません

  1. 不完全な技術的能力(セマンティクス)
  2. 不完全な技術的能力(集中ロギング)
  3. 代替ベクトル(プロセステーブル)
  4. ベストプラクティス(正確性を教える)

不完全な技術的能力(セマンティクス)

あなたが実際に履歴ファイルを持ちたいとしましょう-それは理由のために存在します。入力したコマンドを覚えたり、参照によってコマンドを繰り返したりするのに役立ちます。この場合、誤って入力したパスワードを削除します。どうやってやるの?

Bash履歴ファイル内でスキャンするパスワードの平文リストを作成できますが、システムには平文パスワードのリストがあります。

「Sudo」や「su」などのコマンドを探して、それらの後にあるものを削除しようとすることもできますが、発生するのは、誰かが誤って「sudp」と入力し、プロンプトにパスワードを入力することです。パスワードの露出につながったタイプミスのため、フィルターはそれを認識しません。

要するに、コンピュータは不適切なパスワードエントリを除外するほどスマートではありません。それは意味の意味の問題です。

不完全な技術的能力(集中ロギング)

Bash 4.1では、全員の履歴ログを syslog にコピーする機能が導入されました。これは、人々がの間、bash(および他のシェル)にハッキング、パッチ、およびスクリプトを作成していた機能の正当なバージョンでした。他の誰かがあなたのマシンを管理している場合-たとえば、職場のITグループ-は、知らないうちにコマンドラインが静かにログに記録されているかどうかを制御できない場合があります。

それはただのバッシュではありません。 Linuxのauditdデーモンは、コマンドと引数をログに記録するように構成できます。

# grep oops /var/log/audit/auditd.log
type=EXECVE msg=audit(1443795447.953:2387443): argc=6 a0="Sudo" a1="oops" a2="i" a3="typed" a4="my" a5="password"
#

これはシステムレベルの設定であり、カーネルを介して動作し、使用するシェルとはまったく関係なく、自分で選択した履歴設定とは無関係です。

代替ベクトル(プロセステーブル)

コマンドラインで入力したものはすべてプロセステーブルに表示される可能性があります。そのため、パスワードを使用するツールでは、インタラクティブに入力する必要があります。失敗した場合(上記のSudoの例のように)、それらを引数として入力すると、プロセスリストから誰かが取得できるようになり、コマンドラインから取得するハーベスターをスクリプトで作成するのはそれほど難しくありません。プロセステーブル。

ベストプラクティス(正確性を教える)

これらの各反対意見には警告があります...「履歴ファイルを使い続けたくない場合」、「システム管理者が手を貸していない場合」、「誰もプロセステーブルを注意深く監視していない場合」...私の「ベストプラクティス」の定義は、「自分がやりたいように進んでいる他のものに頼ることができないために行うこと」です。したがって、ベストプラクティスは、本来はパスワードを間違って入力してはいけないと想定し、それをすぐに変更して、自分の人生に移ることです。

実装できる「ソリューション」は部分的であり、ユーザーの検出範囲外では障害が発生しやすくなります。自分より安全だという誤った印象を人々に与えたくないのです。

私はそれを行うために人々を訓練することは難しいことを理解しています。一体何をするように人々を訓練することは難しいです、そして、セキュリティはダブルプラスハードです。しかし、それは正しい答えです。

3
gowenfawr

Linuxは、マシンに物理的にアクセスする攻撃者を防ぐように設計されていない、または設計されていないため、説明した方法(シャドウファイルのハッシュをクラックする)を防ぐことはできません。

ログアウト時にbash履歴を削除したい場合は、ファイル〜/ .bashrc〜/ bash_logoutに以下を配置します。

cat /dev/null > ~/.bash_history && history -c && exit
2
Sebi

.bashrcファイル:

nano ~/.bashrc

これら2つのパラメーターの値を次のように変更します。

HISTSIZE=0
HISTFILESIZE=0

HISTSIZEは、bashセッションの実行中に履歴リストのメモリに保存される行またはコマンドの数です。

HISTFILESIZEは、(a)セッションの起動時に履歴ファイルで許可される行またはコマンドの数であり、(b)で使用するためにbashセッションの終了時に履歴ファイルに保存されます。今後のセッション。

0
user45139