Re: NFSの特権ポートについて
こんばんわ
ヒデノブです。
セキュリティ的に深いご意見いただきましてありがとうございます。
この質問をしたのは、NFSサービスをどうしても(システム上)
F/Wごしに公開したいというユーザがいたのが発端です。
そものそもF/WごしにNFSをこう開始するのはどうかと思いますが
ISS社の Internet Scannerで検査した結果 NFSのを特権ポートで
動かせと指摘されました。
NFSの予約ポート2049だと思うのですがなぜか検査するたびに
サービスportがランダムに変わっていました。
http://jp.sun.com/solaris/wp/NFS/webnfs2.html
上記URLからSunには
サーバ側のportmapperが 2049を使用するようクライアントに
返すオプションがあると思いました。
上記のこと事態がRPCを理解していないと言われれそうですが
以上
> > NFS サーバにも、一般ユーザがログイン可能という前提です。敷居
> > をあげることは、意味はあります。敷居が低いと、一般ユーザが悪
> > の道に道に走ってしまうけれど、敷居が高ければ走らないというこ
> > とはあります。
>
> 「NFSサーバに一般ユーザをログインさせない」方が手っ取り早いと思います
> が,まあ,そういう前提で話をしましょう.
>
> 皆がログインできるNFSサーバで,(例えば)ポート番号2049のnfsdが
> portmapperに登録された後,nfsdが死んでしまうと,一般ユーザが2049ポート
> をbindする偽のNFSサーバを立ち上げて,クライアントからの要求を受けとる
> ことが出来る,と.
>
> (問題はどうやって本物のnfsdを殺すか,かな…
> 詳しい人に聞いたところ,「別のポートをnfsdをportmapperに登録し直す」こ
> とはスーパーユーザでないとできないそうです.)
>
> > mountd がしていることは、アクセス・ポイントのファイル・ハン
> > ドル(オブジェクト識別子)を返すだけです。NFSサーバのポート番
> > 号は、返していません。NFS サーバのポート番号と mountd は、関
> > 係ありません。
>
> なるほど.mountdだけ乗っ取っても意味はないんですね.(両方乗っ取らない
> といけないのかな.)
>
> > RPC のプログラミングのテクニックですが、portmapper を通らな
> > いでポート番号を指定することはできます。具体的には、サーバ側
> > では、bind したソケットを svcudp_create() に渡します。クライ
> > アント側では、clntudp_create() で、第1引数にサーバのIPア
> > ドレスとポート番号を保存した struct sockaddr_in を渡します。
> >
> > サーバ側で NFS サーバのポート番号を portmapper に登録しなく
> > ても、片っ端から試していけばいいので、安全性はそんなには上が
> > らないのでしょうね。
>
> いや,そうではなくて,
> 「portmapperから返されたポートが特権ポートかどうかチェックする」ように
> NFSクライアントを改造するよりは,
> 「portmapperに聞かずに,あらかじめ決めておいた特権ポートに直接つなぎに
> いく」ようにNFSクライアントにオプションを与えるほうが簡単だろうと思っ
> たのです.
>
> Linuxの(あてにならない)マニュアルでは,port=nマウントオプションでこの
> 指定ができるとあります.デフォルトでは「portmapperに尋ね,登録されてい
> なければ2049を使う」そうです.(Vine 2.6CR, RedHat 7.2)
>
> SunのNFSクライアントにも同様のマウントオプションがあります.
>
> 元の質問者の方もSunのサーバ側の「オプション」をお尋ねでしたし,プログ
> ラムの改造までは考えてらっしゃらないんじゃないかと.
>
> > はい。ファイルが存在しない時に、これはどうも NFS サーバが乗っ
> > 取られているらしいとにらんで、追跡調査する能力があれば、気が
> > 付きます。自分でファイルを消したと思って、もう一度最初から設
> > 定し直して、電子メールを読みに行くようだと気が付かないでしょう。
>
> このいたずらがすぐにバレないようにするのはなかなか難しいですね.
> 「目的のファイルが書かれるまでじっと本物のふりをする」とかできれば良い
> ですけど,「本物のふり」が全然できないから.
>
> 前田敦司
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735