終了するコンソールアプリケーションを開始したとすると、ShellPromptが再び表示されます。しかし、それが実際のコマンドプロンプトであることをどのように確認できますか?たとえば、アプリケーションが「キーロガー」であり、終了しようとすると偽のプロンプトが表示される場合はどうなりますか?
では、純粋なシェル(bashなど)プロンプトで自分が実際にはであることをどのように検出できますか?
技術的には、私はあなたの質問に答えます、わかりました。シェルに戻ったことをどのように確認できますか? プログラムが悪意のないものであると想定する場合しかし、それがシェル以外で実行される可能性があると思われる場合は、シークレットコンテンツを使用してシークレット関数を手動で定義できます(もちろんエクスポートしません)。
$ my_secret_func() { echo "Still alive"; }
$ ~/Downloaded/dubious_program
$ my_secret_func
Still alive
dubious_program
が悪意のあるものである場合、元のシェルに入力を渡して反応させることで、簡単にだまされる可能性があります。より一般的には、安全でない実行可能ファイルには、たとえば~/.bashrc
に自分自身をインストールするなど、自分のIDでキーロガーをインストールする(および他の多くの悪意のあることを行う)方法が多数あります。目に見える影響がなかったとしても、そうする可能性があります。実際、ほとんどのマルウェアは、検出されるリスクを最小限に抑えるために、すぐに目に見える影響を与えないようにしています。
したがって、実行する内容が安全かどうかわからない場合は、サンドボックスでユーザーnobody
を使用して実行するか、まったく実行しないでください。
コマンドの実行前後のシェルのPIDを比較します(同じPIDは同じシェルを意味します)。
$ echo $$
6215
$ bash --posix
bash-4.3$ echo $$
10230
bash-4.3$ exit
$ echo $$
6215
上記のデモでは、私がアプリケーションを起動しているのを見ることができます。この場合は、POSIXモードの別のbash
です。に戻ったら、使用するシェルのPIDが同じであることを確認します。したがって、これが実際のシェルであると見なすことができます。もちろん、シェルプロンプトに$$
を追加することで自動化できます。
$ PS1="[$$] $PS1 "
[6215] $
テーマのバリエーションは、前後にsha256sum
(またはmd5
などの他のチェックサム)をチェックすることで実行できます。 Sha-sumは、よくわからない場合は、ファイルの整合性をチェックするために、特にダウンロードやiso
イメージでよく使用されます。以下のデモンストレーションでは、実際のバイナリへのシンボリックリンクである/proc/<Shell PID>/exe
ファイルを使用します(この場合、それは私のmksh
シェルになります)。このようにして、実行している実行可能ファイルが同じものであることを確認できます。
[12107][xieerqi][21:34]:
$ sha256sum /proc/$$/exe
70a16895186ddfac12343e816f05783cf60092c0980fc20c2ae4bc53b48f28e6 /proc/12107/exe
[12107][xieerqi][21:34]:
$ bash --posix
bash-4.3$ sha256sum /proc/$$/exe
c2615a71ff5c004e51aef248103a2950c25715f5eb8130837695770e1d78ecfa /proc/12434/exe
bash-4.3$ exit
[12107][xieerqi][21:35]:
$ sha256sum /proc/$$/exe
70a16895186ddfac12343e816f05783cf60092c0980fc20c2ae4bc53b48f28e6 /proc/12107/exe
キーロガーに関しては、必ずしもシェル内にある必要はありません。グラフィカル端末エミュレーターを使用している場合、キーロガーは、使用しているシェルに関係なく、任意のウィンドウに送信されるキーストロークを簡単に聞くことができます。
シェル自体に関しては、バックグラウンドでプロセスを起動することが可能です。たとえば、シェルスクリプトはcommand &
のようにアンパサンドを使用してバックグラウンドで何かを起動します。バックグラウンドプロセスがまだキーを読み取ることができるかどうかはわかりませんが、シェルが終了するという事実は、アプリが終了したことを保証するものではありません。以下の小さなデモでは、関数がバックグラウンドで起動され、スクリプトが終了しているように見えますが、それでも関数は毎秒out.txtに書き込みます。
[10754][xieerqi][21:12]:
$ cat launch_background_app.sh
#!/bin/bash
run_in_background()
{
while true;
do
date +%s > out.txt
sleep 1
done
}
run_in_background &
[10754][xieerqi][21:12]:
$ ./launch_background_app.sh
[10754][xieerqi][21:12]:
$ cat out.txt
1484280777
[10754][xieerqi][21:12]:
$ cat out.txt
1484280778
[10754][xieerqi][21:12]:
$ cat out.txt
1484280779
編集者への注意:私の例からプロンプトを削除しないでください-シェルPIDが同じままであることを示すためにデモ目的であります。
PS:セキュリティは最初に信頼できるアプリケーションをインストールすることから始まるので、それを使用する前にアプリケーションの整合性を確保することを検討してくださいそもそも。
キーロガーはシェルプロンプトを偽造しようとはしません。ほぼ確実に、/dev/input
などを監視するバックグラウンドプロセスを残します(プロセスリストに自分自身を隠そうとします)。あなたは間違いなく問題を間違った方法で見ています。
信頼できないバイナリを実行する一般的な方法は、仮想マシンをセットアップしてそこで実行することです。それでも100%の安全性は得られませんが、実際に使用するには十分安全であると見なされることがよくあります(もちろん、信頼できないコードを使用してVMを本番サーバーや銀行の保護されたネットワーク内で実行することはありません)。
suspect-command; echo I am thinking of the number 43987
コマンドが終了すると、echoが実行されます。コマンドプロンプトの上の行に結果が表示されます。