LINUX tcp / ipプロトコルで初期シーケンス番号(ISN)を生成するための手順は何ですか。TCP /IPへの隠れチャネルの埋め込みの7ページと8ページで説明されているLINUXカーネル2.4から2.6でのISN生成の手順を知ってい ます。後のカーネルで同様の手順を検索しましたが、残念ながら何も見つかりませんでした。セキュリティに関連する明らかな理由により、多くの詳細が利用できない場合があることを理解しています。後のLinuxカーネルで(リンクで説明されているように)同様のステガノグラフィスキームを実装する可能性を検証しているので、私はいくつかの情報をひどく必要としています。どんな助けでも大歓迎です。
3 に答える
ここで私の答えを読んでください: TCPヘッダーのISN番号を操作する最も効率的な方法
このアルゴリズムは、最新のカーネルTCPスタック(3.5
)で使用されます。
編集:関連するすべてのカーネルバージョンを確認するには、以下の画像を参照してください
EDIT2:関数の古いバージョンについては、カーネルのソースを参照してくださいsecure_tcp_sequence_number
:
カーネル3.1:(MD5が半分のMD4に取って代わりました)
RFC6528とRFC1948をさらに注意深く読んだ後、 RFC1948で指定されている初期シーケンス番号(ISN)を生成するためのアルゴリズムという結論に達しました。
ISN = M + F(LocalIP, LocalPort, RemoteIP, RemotePort, Secretkey)
変更されていません。代わりに、RFC1948でBellovin SMによって提案されたアルゴリズムが正式に指定され、BellovinSMとGontによって一緒に作成されたRFC6528の標準トラック(RFC2119による)に組み込まれます。F ..現在廃止されているRFC1948はどのドキュメントでも使用できないため、RFC6528に置き換えられました。
しかし、私の最初の質問への回答で指摘されているように、MD5はカーネル3.1のハッシュ関数として半分のMD4に取って代わりました。これは、疑似ランダム関数であるF()を変更する柔軟性を提供したため、RFC6528によって完全に正当化されます。(詳細については、リンクをご覧ください)。
ISN
カーネルでsを生成するアルゴリズムがより安全になるように再度変更されたため、現在の状態(2019およびLinuxカーネル5.1.3)を表すように以前の回答に更新します。
secure_tcp_seqは、SipHash
(add–rotate–xor)関数を使用して、初期秘密鍵、送信元および宛先IPアドレス、およびポートに基づいてISNを生成するようになりました。この変更は、ハッシュ衝突の脆弱性がハッシュフラッディング攻撃を引き起こしたことに関連していると思います。