ホームページ > システムチュートリアル > Linux > SFTPポート転送:抑制された機能を有効にします

SFTPポート転送:抑制された機能を有効にします

Joseph Gordon-Levitt
リリース: 2025-03-17 09:43:07
オリジナル
201 人が閲覧しました

SFTPポート転送:抑制された機能を有効にします

導入

SSHプロトコルは、3つの主要なカテゴリのリモートサーバーアクティビティをサポートしています。a)コマンド実行(ログインシェルを含む)、b)ネットワーク転送と操作、およびc)ファイル転送。

OpenSSHメンテナーは、SFTPとSCPにはポート転送の法的目的がないことを決定しました(-Lおよび-Rオプションを介して)。これらのユーティリティを使用したファイル転送中、これらの機能を明示的に無効にするフラグは、Child SSH実行可能ファイルに無条件に渡されます。

一部のユーザーは、実際にこれらの機能を必要とする場合があります。明らかなサブセットは、この機能がパブリックSFTPサーバーで明示的に無効になっていることを確認することをタスクである侵入テスターです。

SFTPバイナリ自体の文字列を変更するか、コマンドラインを簡単に編集できるシェルをリダイレクトすることにより、これらの抑制された機能を有効にする2つの手法を次に示します。プラットフォームの機能に応じて、この目標を達成するためにいずれかのテクノロジーが必要になる場合があります。

詳細を抑制します

まず、関心のある実行プロセスを見つけることが重要です。以下のシェル関数は、シェルパターンに一致するPIDを表示します(これは正規表現ではないことに注意してください)。これは、Debian Dash(および他のほとんどの一般的なシェル)の下で実行され、BSDのPSオプションに依存しています。

 <code>pps () { local a= b= c= IFS=$'\r'; ps ax | while read -ra do [ "$b" ] || c=1; for b; do case "$a" in *"$b"*) c=1;; esac; done; [ "$c" ] && printf '%s\n' "$a" && c=; done; }</code>
ログイン後にコピー

従来のSFTPセッションを開始して、それに関連するプロセスを確認してください。

 <code>$ id uid=1001(aturing) gid=1001(aturing) groups=1001(aturing)... $ sftp aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
ログイン後にコピー

上記のローカルUNIXユーザーは、リモートSFTPサーバーで同じユーザー名アカウントを持っていると想定しています。

セッションが実行された後、ユーザー名のローカルプロセス検索でSFTPによって生成された子SSHプロセスが表示されます。

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9666 pts/0 S 0:00 sftp aturing@sftp.victimandum.com 9667 pts/0 S 0:00 /usr/bin/ssh -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>
ログイン後にコピー

clearallforwardings yes parameter上記のパラメーターは、それを破るための行動を取ることなく、転送の試みを抑制します。

-lおよび-rポート転送フラグは、SFTPコマンドラインの有効なオプションとして存在しませんが、-sオプションを使用してそれらを明示的にトリガーしてカスタムSSHハンドラー、この場合はメールサーバーを指定できます。

 <code>$ cat portssh #!/bin/sh exec ssh -L2525:smtp.victimandum.com:25 "$@"</code>
ログイン後にコピー

転送抑制が整っていない場合、このSFTP呼び出しは転送接続を確立するのに十分です。

 <code>$ sftp -S ./portssh -oClearAllForwardings\ no aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
ログイン後にコピー

これで、子供のSSHプロセスで転送の試みを見ることができます。

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9897 pts/0 S 0:00 sftp -S ./portssh -oClearAllForwardings no aturing@sftp.victimandum.com 9898 pts/0 S 0:00 ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -o ClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>
ログイン後にコピー

ただし、ローカル転送ポートを介してリモートメールサーバーに連絡しようとすると、明示的なオーバーライドのために失敗しました。

 <code>$ nc localhost 2525 $</code>
ログイン後にコピー

この無条件の抑制は、ソースコードで表示されます。

 <code>$ sed -n /X11/,/Forwardings/p openssh-8.7p1/sftp.c addargs(&args, "-oForwardX11 no"); addargs(&args, "-oPermitLocalCommand no"); addargs(&args, "-oClearAllForwardings yes");</code>
ログイン後にコピー

これらの静的文字列は、コンパイルされたバイナリファイルにも表示されます。

 <code>$ strings /usr/bin/sftp | grep [-]o[CFP] -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -oForwardAgent no -oPort %d</code>
ログイン後にコピー

最後に、文書は、この抑制は意図的であり、合理的な理由を示していることを明確に示しています。

 <code>$ man ssh_config | sed -n /ClearAllForwardings/,/default/p ClearAllForwardings Specifies that all local, remote, and dynamic port forwardings specified in the configuration files or on the command line be cleared. This option is primarily useful when used from the ssh(1) command line to clear port forwardings set in configura‐ tion files, and is automatically set by scp(1) and sftp(1). The argument must be yes or no (the default).</code>
ログイン後にコピー

コンパイルされた文字列を変更します

デフォルトのClearAllForwardings Yes Configurationを無効にしたい場合は、SEDを使用してSFTPバイナリの文字列を直接編集することです(プラットフォームのSEDがバイナリセーフであると仮定):

 <code>$ sed 's/AllForwardings yes/AllForwardings no /' sftp.noclearforward</code>
ログイン後にコピー

この直接的な変更は、新しいバイナリファイルをコンパイルするよりもはるかに簡単です。

文字列が正常に変更されたことを確認できます。

 <code>$ strings ./sftp.noclearforward | grep [-]o[CFP] -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -oPort %d</code>
ログイン後にコピー

修正されたSFTPのコンテンツとチェックサムは異なりますが、既存のLinux BuildID SHA1は同じままです(ただし、編集されたSFTPを使用する場合はサポートチケットを送信しません):

 <code>$ file /usr/bin/sftp ./sftp.noclearforward /usr/bin/sftp: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=d7e77e24d5fac0fdc89e62a4c9c656091f2c4a33, for GNU/Linux 3.2.0, stripped ./sftp.noclearforward: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=d7e77e24d5fac0fdc89e62a4c9c656091f2c4a33, for GNU/Linux 3.2.0, stripped $ sha1sum /usr/bin/sftp ./sftp.noclearforward d8bdaf0b4642b9c324f9c2e0aeee2d9578fbe383 /usr/bin/sftp b12dda8ecfd7bd2847919b5531aea7c03364c123 ./sftp.noclearforward $ sha256sum /usr/bin/sftp ./sftp.noclearforward 986eecdfc654c9b3ff3fd0dce59690d47cf56be96a4b98a04a3682aef95d3f52 /usr/bin/sftp c8f99ce33fc129250c11dc6dbb8a01112e01124e470a92d0acefb955fd17d670 ./sftp.noclearforward</code>
ログイン後にコピー

変更されたSFTPバイナリを呼び出して、ポート転送を有効にすることができます。

 <code>$ chmod 755 sftp.noclearforward $ ./sftp.noclearforward -S ./portssh aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
ログイン後にコピー

これで、子プロセスで変更された設定を確認できます。

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9991 pts/0 S 0:00 ./sftp.noclearforward -S ./portssh aturing@sftp.victimandum.com 9992 pts/0 S 0:00 ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>
ログイン後にコピー

この機能は有効になり、リモートサーバーで実行され、別のシェルで接続を確認できます。

 <code>$ nc localhost 2525 220 smtp.victimandum.com Microsoft ESMTP MAIL Service, Version: 1.2.3456.78901 ready at Sun, 1 Jan 2023 01:23:45 -0100 ^C</code>
ログイン後にコピー
ログイン後にコピー

サーバーで転送が無効になっている場合、接続が試行されたときにこのステータスを示す通知を受け取ります。

 <code>channel 3: open failed: administratively prohibited: open failed</code>
ログイン後にコピー

信頼されていないアカウントを割り当てたSFTP管理者は、サーバー構成が転送とコマンドの実行を明示的に無効にすることを確認する可能性が高いはずです。

Posixシェルを超えて

Dash and Posix標準はセットを提供しますが、コマンドラインパラメーターをリセットする方法として、より高度な機能がBashとKSH93で提供されています。

 <code>$ cat ynargs #!/bin/bash echo "${@//yes/no}"</code>
ログイン後にコピー

クイックテストにより、編集が成功することが確認されます。

 <code>$ ./ynargs -oForwardX11 no -oPermitLocalCommand yes -oClearAllForwardings yes -oForwardAgent no -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no</code>
ログイン後にコピー

上記の$ {@// .../...}は有効なPOSIXではなく、PDKSHから派生したダッシュまたはシェル(MKSH、OKSH)で実行できないことに注意してください。多くのプラットフォームは、この機能を使用してシェルをバンドルしません(AndroidやOpenBSDなど、制限されたプラットフォームの場合、バイナリ編集手法は代替シェルをインストールするよりも直接的です。

強力なシェルでこの機能を活用するために、ディレクトリを作成し、その中にSSHラッパーを作成して問題設定をクリアします。

 <code>$ cat ~/switcharoo/ssh #!/bin/bash exec /usr/bin/ssh "${@//yes/no}"</code>
ログイン後にコピー

次に、システムSSHの前にディレクトリを$パスで設定します。

 <code>$ export PATH=~/switcharoo:$PATH $ which ssh ~/switcharoo/ssh</code>
ログイン後にコピー

次に、この変更された環境でシステムSFTPを呼び出します。

 <code>$ /usr/bin/sftp -S ./portssh aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
ログイン後にコピー

シェルが問題のパラメーターをリセットすることを観察しました。

 <code>$ pps aturing PID TTY STAT TIME COMMAND 10058 pts/0 S 0:00 /usr/bin/sftp -S ./portssh aturing@sftp.victimandum.com 10059 pts/0 S 0:00 /usr/bin/ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>
ログイン後にコピー

転送ポートへのローカル接続を再確認しました。

 <code>$ nc localhost 2525 220 smtp.victimandum.com Microsoft ESMTP MAIL Service, Version: 1.2.3456.78901 ready at Sun, 1 Jan 2023 01:23:45 -0100 ^C</code>
ログイン後にコピー
ログイン後にコピー

最終的なデモとして、次のスクリプトを使用して完全なSMTP交換を実行できます。

 <code>$ cat awkmail #!/bin/gawk -f BEGIN { smtp="/inet/tcp/0/localhost/2525"; ORS="\r\n"; r=ARGV[1]; s=ARGV[2]; sbj=ARGV[3]; # /bin/awkmail to from subj 0) print |& smtp print "." |& smtp; smtp |& getline j; print j print "quit" |& smtp; smtp |& getline j; print j close(smtp) } # /inet/protocol/local-port/remote-host/remote-port</code>
ログイン後にコピー

このスクリプトを使用して、ターゲットSMTPサーバーがアクセスできるリモートの受信者に独自のメールを送信できます。

 <code>$ ./awkmail jatanasoff@victimandum.com aturning@localhost awkmail Queued mail for delivery</code>
ログイン後にコピー

高度に制御された環境では、これらの機能の存在は最適ではありません。

サーバーの制限

SFTP管理者は、ユーザーがサーバーの助けを借りて任意のTCP接続を行うことを許可しないことを理解できます。このアクティビティを制限することは、慎重なセキュリティ設定です。

一般的な制限構成は、信頼できないSFTPユーザーをグループに追加し、SSHD_CONFIGでこのグループのアクティビティを制約することです。

 <code>Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no</code>
ログイン後にコピー

この推奨される構成は、通常、すべての転送の試みを防ぐのに十分です。

disableforwardingを追加することをお勧めします:

 <code>$ man sshd_config | sed -n /DisableForwarding/,/configurations/p DisableForwarding Disables all forwarding features, including X11, ssh-agent(1), TCP and StreamLocal. This option overrides all other forwarding- related options and may simplify restricted configurations.</code>
ログイン後にコピー

これは、練習のために管理者に任されています。

結論は

SFTPクライアントの設定が厳しすぎると、サーバー管理の失明がある程度つながる可能性があります。 SFTPクライアントの制限は、さまざまな方法で簡単に回避できます。

SFTPサーバー管理者の場合、それらが制限されている場所と制限されている場所を知ることが重要であり、任意のTCP制御からサーバーを保護するためにクライアントに依存しないことが重要です。クライアントはユーザーによって制御され、構成が間違っている場合、サーバーにTCPコマンドを実装することは困難です。ユーザーssh_configでの広範な転送なしでテストを行う必要があります。ドキュメントの警告に注意してください。

この機能には考えられる法的目的があるかもしれませんが、虐待はまれです。

これらの問題は、サイトExecのバリエーションが数十年にわたってPlantext FTPに存在しているため、新しいものではありません。 SFTPは、プレーンテキストファイル転送の単純な代替手段ではなく、使いやすい機能も多くあります。

管理者は、これらの方法を使用して、不意を突かれないようにサーバーのセキュリティを検証できることを願っています。

以上がSFTPポート転送:抑制された機能を有効にしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート