web-dev-qa-db-ja.com

nmapはオペレーティングシステムをどのように推測しますか?

nmapには、-Oオプションを使用してオペレーティングシステムを推測する機能があります。正しいカーネルまたはサービスパックを見つけることができることに非常に驚きました。

* nmapはオペレーティングシステムをどのように推測しますか?

* Windows 7,8、さまざまなLinuxシステムなどの一般的な署名は何ですか?

7
Jon

ヒューリスティックに。 nmapは、プローブ中のシステムの動作を観察し、実際の指紋テストに類似した「指紋」を作成し、主に特徴点を探します。

  • 仕様外の動作と、仕様外または未定義の動作
  • 再送信時間
  • フラグメンテーションおよびさまざまなICMPプローブへの応答
  • TCPシーケンス番号、IP ID番号、TTLのパターン
  • さまざまなTCPオプションおよびフラグでの動作

これは簡単な要約です。ここでより詳細な説明を読むことができます http://nmap.org/book/osdetect-methods.html

次に、指紋が既知の指紋のデータベースと比較されます。一意のフィンガープリントを持つシステムをスキャンした場合は、適切な一致が得られます。そうでない場合は、最適なものに基づいて推測されます(これは時々間違っています)。とにかくそれは間違っているかもしれません、一部の人々は ゲームをする (古いですが興味深い)を好みます。適切な一致がない場合は、nmapを使用して、システムが何かを確認し、 送信 するように勧めます。

フィンガープリントは_/usr/share/nmap/nmap-os-db_(おそらく)にありますが、詳細を解読するには ドキュメント を読む必要があります。

現在のnmapデータベース(6.47)には、5009 [〜#〜] cpe [〜#〜] (プラットフォーム)名の4485フィンガープリントがあり、そのうち800以上がMS-Windowsのさまざまなバージョンと一致しています。 1000以上がさまざまなLinuxシステム(アプライアンスを含む)に一致します。

Linuxシステム、Asus Nexus 7タブレットの実際の署名は次のとおりです。

_# Linux 3.1.10-g52027f9 #1 SMP PREEMPT Thu Jun 28 16:19:26 PDT 2012 armv71 GNU/Linux, Asus Nexus 7 Android Tablet
Fingerprint Linux 3.1
Class Asus | Linux | 3.X | general purpose
CPE cpe:/o:asus:linux_kernel:3 auto
SEQ(SP=102-10C%GCD=1-6%ISR=108-112%TI=Z%CI=Z%II=I%TS=6|7)
OPS(O1=M566ST11NW6%O2=M566ST11NW6%O3=M566NNT11NW6%O4=M566ST11NW6%O5=M566ST11NW6%O6=M566ST11)
WIN(W1=3890%W2=3890%W3=3890%W4=3890%W5=3890%W6=3890)
ECN(R=Y%DF=Y%T=3B-45%TG=40%W=3908%O=M566NNSNW6%CC=Y%Q=)
T1(R=Y%DF=Y%T=3B-45%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=Y%DF=Y%T=3B-45%TG=40%W=3890%S=O%A=S+%F=AS%O=M566ST11NW6%RD=0%Q=)
T4(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
U1(DF=N%T=3B-45%TG=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(DFI=N%T=3B-45%TG=40%CD=S)
_

(うわー、それはきれいではありません。nmapインストールで_nmap-os-db_にあるため、これ以上は説明しません。)

単純なフィールドIE()を選択します— ICMPエコー動作(pingは単純ですよね?)

_IE(DFI=N%T=3B-45%TG=40%CD=S) 
_

チェックすると、1250以上の他のシステムと共有されていることがわかります(その約3分の2はLinuxシステムです)。

ドキュメントから:

IEテストでは、2つのICMPエコー要求パケットをターゲットに送信します。最初のテストでは、IP DFビットセット、サービスの種類(TOS )バイト値0、コード9(ゼロであるべきです)、シーケンス番号295、ランダムIP IDおよびICMP要求ID、およびデータペイロード用の120バイトの0x00。

2番目のpingクエリも同様ですが、TOS 4(IP_TOS_RELIABILITY)が使用され、コードがゼロで、150バイトのデータが送信され、ICMPリクエストIDとシーケンス番号が前のクエリ値から1ずつ増加します。

これは次のようにデコードされます:

  • _DFI=N_ ICMP応答にはDF(断片化しない)が設定されません)
  • _T=3B-45_ TTLは0x3Bと0x45の間になります
  • _TG=40_ IP初期TTL推測
  • _CD=S_ ICMP応答コード(ICMP要求プローブと同じ)

これらすべてのコードと詳細 ここ を見つけることができます。他のフィールドには、ECNの同様の詳細データ、TCPシーケンス(SEQ、OPS、WIN、T1)およびTCPオプション(T2-T7)が含まれます。

6
mr.spuratic

使用されるさまざまなテストのリストは、mmapのドキュメント http://nmap.org/book/osdetect-methods.html#osdetect-probes-seq にあります。より具体的な詳細については、ソースコードを読む必要があります。

基本的に、さまざまな異なるプローブパケットが送信され、結果が分析されます。 TCP/IPソフトウェア間のわずかな違いは、特定のプローブパケットに対する応答に時々わずかな違いがあることを意味します。十分なテストを行うと、OSを非常に正確に識別するフィンガープリントをまとめることができます。

例が役立つかもしれません。 TCPパケットをホストから受信した場合、これには多数のヘッダーオプションが含まれています。TCPのプロトコル RFC79 =は、これらのオプションを配置する順序を指定していません。したがって、BeOSのネットワークコードを記述した人がこれらのオプションを特定の順序で配置し、その順序でオプションを含むパケットを受信した場合、それを推測できますパケットはBeOSホストから送信された可能性があります。BeOSであることを確認するのにそれだけでは十分ではない可能性があります。おそらく、HaikuのTCPスタックは同じ順序でオプションを配置します。したがって、 BeOSからのパケットに対して、Haikuからのパケットとは異なる結果をもたらす他のテストを見つけるため。

6
Graham Hill