
iptable_eviliptable_evil は、iptables 用の非常に特殊なバックドアであり、悪意ビット(evil bit)が設定されたすべてのパケットを、ファイアウォールルールに関係なく許可します。
最初の実装は iptable_evil.c にあり、iptables にテーブルを追加し、そのための場所を挿入するためにカーネルヘッダーの修正が必要です。
2 つ目の実装は、ip_tables コアモジュールとその依存モジュールを変更したもので、すべての Evil パケットを許可します。
Linux カーネルバージョン 5.8.0-48 でテストしていますが、これは iptables の完全な実装を備えたほぼすべてのカーネルバージョンに適用可能なはずです。
RFC3514(2003 年 4 月 1 日公開)は、IP フラグメントオフセットフィールドのそれまで未使用だった最上位ビットをセキュリティフラグとして定義しています。
RFC 準拠のシステムでは、そのビット位置の 1 は悪意のある意図を示し、パケットがブロックされます。
デフォルトではこのビットはオフになっていますが、IP パケット全体を自分で組み立てている場合(一部のハッキングツールのように)、または このパッチ(このリポジトリ こちら にミラーリング)を使用して Linux カーネルでオンにすることができます。
パケットが Linux カーネルで受信されると、iptables によって処理され、設定されたルールに基づいてユーザースペースに送信されるか、拒否されるか、変更されます。
特に、各 iptables テーブルは ip_tables.c の関数 ipt_do_table を使用して、特定のパケットを受け入れるかどうかを決定します。
私はこれを変更して、Evil ビットが設定された任意のパケットを自動的に受け入れ、それ以降のすべての処理をスキップするようにしました。
また、別のテーブル (iptable_evil.c) を追加して、すべての Evil パケットを受け入れ、他のパケットを標準テーブルに渡して処理しようと試みましたが、パケットを次のテーブルに渡す方法がわからず、ipt_do_table バックドアで概念実証として十分だと判断しました。
コンピューティングセキュリティの授業でかなり大規模なプロジェクトを執筆・実装する必要があり、これはクールなアイデアに思えました。 おそらく期待されていた以上の作業量だと思いますが、¯\_(ツ)_/¯。
evil テーブルはカーネルヘッダーの修正を必要とするため、インストールにはフルツリービルドで生成されたカーネルで実行する必要があります。
replace-existing の内容をカーネルソースツリーにコピーし、既存のファイルを上書きします。iptable_evil.c を linux-X.Y.Z/net/ipv4/netfilter にコピーします。ip_tables.c を linux-X.Y.Z/net/ipv4/netfilter にコピーします。iptables -t filter -Liptables -t evil -L(出力は混乱しますが、モジュールはロードされます)こちらははるかに簡単で高速ですが、evil テーブルをサポートせず、カーネルが「汚染」されたとマークされます。
このビルドで生成された ko ファイルを、まったく同じカーネルバージョンの別のコンピュータにコピーすることも可能と思われますが、テストしていません。
make を実行します。rmmod iptable_*rmmod ip_tablesinsmod ip_tables.koinsmod iptable_filter.koこれをテストするには、このパッチ を使用してカーネル全体を再構築するか、Scapy のようなツールを使用して自分でパケットを作成する必要があります。
私は最初の方法を選びました。すでに evil テーブルのためにカーネルをビルドしていたからです。
最初のスクリーンショットでは、iptables でこの VM へのすべてのトラフィックをブロックしていますが、パケットに Evil ビットが設定されているため、SSH 接続が可能です(2 番目のスクリーンショットを参照)。

Evil ビットを設定しない VM からバックドア付き VM に接続すると、SSH 接続は最終的にタイムアウトします。

バックドアありとなしの SSH 接続のパケットキャプチャは、このリポジトリの docs/ フォルダにあります。
iptables_uwu(主に調査対象の名前を提供するもの):https://github.com/benjojo/iptables-uwu