[サーバ]
OS:OpenBSD3.8
ネットワークインタフェース:bge0(190.x.x.3)の1枚
[クライアント]
OS:WinXP(190.x.x.2)
[ルータ]
190.x.x.1
ルータにOpenBSDとXPをLANで接続
##PFの設定##
scrub in all
block in all
block out all
pass quick on lo0 all
antispoof for bge0 inet
block drop in quick inet proto udp from any to any port 514
block drop in quick inet proto udp from any to any port 4500
pass in quick on bge0 proto tcp from any to 190.x.x.3 port 80 keep state
#########
この状態で、
XPからnmapでnmap 190.x.x.3とすると
PORT STATE SERVICE
80/tcp open http
となります。
次にnmap -O 190.x.x.3とすると、
PORT STATE SERVICE
80/tcp open http
Running: OpenBSD 3.X
OS details: OpenBSD 3.5 or 3.6, OpenBSD 3.6, OpenBSD 3.7と表示されてしまいます
http://hacks.oreilly.com/pub/h/1347
などを見て同じように書いてみたんですが、
nmap -O してみると、上の状態と同じ表示がでます。
パケットのウインドウサイズがOpenBSDは他のOSとことなっている?ので~とかかいていたような。
80番ポートを空けている時点でOSの種類をわからなくすることって無理なのでしょうか?
あれー、そうですか。間違ったことを言ってごめんなさい。
nmap には nmap-os-fingerprints というファイルがあって、
冒頭には
# TEST DESCRIPTION: # Tseq is the TCP sequenceability test # T1 is a SYN packet with a bunch of TCP options to open port # T2 is a NULL packet w/options to open port # T3 is a SYN|FIN|URG|PSH packet w/options to open port # T4 is an ACK to open port w/options # T5 is a SYN to closed port w/options # T6 is an ACK to closed port w/options # T7 is a FIN|PSH|URG to a closed port w/options # PU is a UDP packet to a closed port
と書いてありますから、おもにフラグで調べているようです。でも TCP シーケンスの働きとかまで見るので、新しい nmap ではフラグだけじゃダメなのかもしれませんね。
で、
Fingerprint OpenBSD 3.5 - 3.7 Class OpenBSD | OpenBSD | 3.X | general purpose TSeq(Class=TR%gcd=<6%IPID=RD%TS=2HZ) T1(DF=Y%W=4000%ACK=S++%Flags=AS%Ops=MNWNNT) T2(Resp=Y%DF=Y%W=0%ACK=S%Flags=AR%Ops=) T3(Resp=Y%DF=Y%W=4000%ACK=S++%Flags=AS%Ops=MNWNNT) T4(DF=Y%W=0%ACK=O%Flags=R%Ops=) T5(DF=Y%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=Y%W=0%ACK=O%Flags=R%Ops=) T7(DF=Y%W=0%ACK=S%Flags=AR%Ops=) PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
という部分が該当しますので、ここらへんを見ながら PF で何とかすることもできそうですが、面倒になるので正直おすすめしません。こういうセキュリティの基幹部分において「面倒」というのは非常に危険ですから。
御存じと思いますが、OS タイプを隠すというのは、(security from obscurity って言うんですか)、「windows はソースが非公開だからセキュアだ」と言っているようなもので、真のセキュリティではないわけです。PF であまり細かく OS を隠そうとしている人は多くないと思います。それよりは pf.conf をシンプルに堅牢にしておくことを優先したほうが良さそうですから。
http://archives.neohapsis.com/archives/openbsd/2005-04/1335.html
でも簡単に
block in from any os NMAP to any
みたいなこともできるので、この程度のことは結構みんなやっているかもしれません。
お役に立てなくて、申しわけありませんでした。
quick を使ってあるので、
pass in quick on bge0 proto tcp from any to 190.x.x.3 port 80 keep state
の前にそのオライリーのサイト情報みたいな
block return in quick proto tcp flags FUP/WEUAPRSF block return in quick proto tcp flags WEUAPRSF/WEUAPRSF block return in quick proto tcp flags SRAFU/WEUAPRSF block return in quick proto tcp flags /WEUAPRSF block return in quick proto tcp flags SR/SR block return in quick proto tcp flags SF/SF
を書けば nmap の目を逃れることができそうです。
ご指摘のとおりに、
pass in quick on bge0 proto tcp from any ~
の前に、
block return in quick proto tcp~
を入れてみました。
ですが、
pfctl -f /etc/pf.conf
pfctl -d
pfctl -e
して、
nmap -Oすると
やはり、
Running:OpenBSD3.X
OS details: OpenBSD 3.5 or 3.6 or 3.7
というような表示がでます。
はたして、制御フラグだけで防ぎきれるものなのでしょうか?
ブロックができていれば、(しっかりブロックできている自信がありませんが)あまり気にする必要はないというか、してもしかたないのでしょうか??実際サーバを運営されてるみなさんは、どうされているんでしょう??
ちなみにこちらのNmapのバージョンは
Windows 用のNmap4.01です。
バージョンによっても結果が当然変わってくるんでしょうか?
あれー、そうですか。間違ったことを言ってごめんなさい。
nmap には nmap-os-fingerprints というファイルがあって、
冒頭には
# TEST DESCRIPTION: # Tseq is the TCP sequenceability test # T1 is a SYN packet with a bunch of TCP options to open port # T2 is a NULL packet w/options to open port # T3 is a SYN|FIN|URG|PSH packet w/options to open port # T4 is an ACK to open port w/options # T5 is a SYN to closed port w/options # T6 is an ACK to closed port w/options # T7 is a FIN|PSH|URG to a closed port w/options # PU is a UDP packet to a closed port
と書いてありますから、おもにフラグで調べているようです。でも TCP シーケンスの働きとかまで見るので、新しい nmap ではフラグだけじゃダメなのかもしれませんね。
で、
Fingerprint OpenBSD 3.5 - 3.7 Class OpenBSD | OpenBSD | 3.X | general purpose TSeq(Class=TR%gcd=<6%IPID=RD%TS=2HZ) T1(DF=Y%W=4000%ACK=S++%Flags=AS%Ops=MNWNNT) T2(Resp=Y%DF=Y%W=0%ACK=S%Flags=AR%Ops=) T3(Resp=Y%DF=Y%W=4000%ACK=S++%Flags=AS%Ops=MNWNNT) T4(DF=Y%W=0%ACK=O%Flags=R%Ops=) T5(DF=Y%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=Y%W=0%ACK=O%Flags=R%Ops=) T7(DF=Y%W=0%ACK=S%Flags=AR%Ops=) PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
という部分が該当しますので、ここらへんを見ながら PF で何とかすることもできそうですが、面倒になるので正直おすすめしません。こういうセキュリティの基幹部分において「面倒」というのは非常に危険ですから。
御存じと思いますが、OS タイプを隠すというのは、(security from obscurity って言うんですか)、「windows はソースが非公開だからセキュアだ」と言っているようなもので、真のセキュリティではないわけです。PF であまり細かく OS を隠そうとしている人は多くないと思います。それよりは pf.conf をシンプルに堅牢にしておくことを優先したほうが良さそうですから。
http://archives.neohapsis.com/archives/openbsd/2005-04/1335.html
でも簡単に
block in from any os NMAP to any
みたいなこともできるので、この程度のことは結構みんなやっているかもしれません。
お役に立てなくて、申しわけありませんでした。
いろいろご指摘していただいてありがとうございます。
せっかくいろいろ教えていただきましたが、ちんぷんかんぷんです。
で、
>OS タイプを隠すというのは、(security from obscurity って言うんですか)、「windows はソースが非公開だからセキュアだ」と言っているようなもので、真のセキュリティではないわけです。PF であまり細かく OS を隠そうとしている人は多くないと思います。それよりは pf.conf をシンプルに堅牢にしておくことを優先したほうが良さそうですから。
という助言どうりにしたほうが、よさそうということで、システムやサービス、アプリのパッチをきっちり当てたりするほうが重要であると再認識いたしました。
パッチの当て方すらあやふやで、しっかり更新できたのか検証する手段さえわからないレベルです。このへんは、また、再質問させていただくとして、いろいろ参考になりました。ありがとうございました。
>お役に立てなくて、申しわけありませんでした。
本当に役に立っていないのは、質問者である私の頭であることはしっかり理解できました!
いろいろご指摘していただいてありがとうございます。
せっかくいろいろ教えていただきましたが、ちんぷんかんぷんです。
で、
>OS タイプを隠すというのは、(security from obscurity って言うんですか)、「windows はソースが非公開だからセキュアだ」と言っているようなもので、真のセキュリティではないわけです。PF であまり細かく OS を隠そうとしている人は多くないと思います。それよりは pf.conf をシンプルに堅牢にしておくことを優先したほうが良さそうですから。
という助言どうりにしたほうが、よさそうということで、システムやサービス、アプリのパッチをきっちり当てたりするほうが重要であると再認識いたしました。
パッチの当て方すらあやふやで、しっかり更新できたのか検証する手段さえわからないレベルです。このへんは、また、再質問させていただくとして、いろいろ参考になりました。ありがとうございました。
>お役に立てなくて、申しわけありませんでした。
本当に役に立っていないのは、質問者である私の頭であることはしっかり理解できました!