IRON MAIDEN

ここでは、Linux2.4系列以降、カーネルの中核を成すネットワークスタックについてやりたいと思います。
この部分は本当に繊細で、間違えるとえらいことになりますが、それだけにやり甲斐のある場所でもあります ので、興味のある方は一読をお勧めします。

と、前書きを書いたものの、お前に何が出来るんだ!と自問自答してみると、やってる事は大したことではないんですね・・・
出来る事を少しずつこつこつやっているだけで。
なので、ここでも出来る事からやっていきましょう。

1-導入

なぜ、Linuxのようなオープンソースがこれほど持て囃されるのでしょうか?
確かに、デスクトップ戦略云々でWindows95が出た当初のように、猫も杓子もLinuxだった時期は過ぎ去りましたし、それが成功とは言い難い成果しか上げていないのも事実です。
日本のオープンソース運動も、IT戦略もコケました。にもかかわらず、以前として、ここまで持て囃される理由は・・・
情けないですが、私はこの点について、自由に改造できる玩具だから。ということくらいしか思いつきません。結局は其処なんでしょう。
プログラミング始めたばかりの頃の【今日は世界】というあの感動・・・これが尽きないのでしょう。

また、改造する場所、朗読する場所によって、人とはまったく違う道が開けますし。
同じようなところをやっていても、かちあう可能性の方が少ないわけです。
ただ、プログラミングが多少出来る方がヒーローになったり、そういうオイシイことは期待できないですけど。

よく砂漠に水をまく行為に例える方がいますが、まさにその通りでしょう。
私の場合は水だと思って砂をまいたり、そもそも砂漠に何かをまいている事自体が脳内補完だったりしますが
何もしてないのにまいている気になってるのよ。
まあ、ドキュメント書いたりするの結構好きなので、よしとしよう。

2-このドキュメントについて

このドキュメントは、モジュールの作者さんが、自身のシステムにNetfilterを盛り込む事を簡単にする意図もあります。(モジュールに興味のある方、何かやってみませんか?)
また、このドキュメントはこの部分を完全に理解したいという私自身の欲求から生まれたものでもあります。
しかし、このドキュメントは、Netfilterの完全なマニュアルではありません。
少し慌しいですが、進みましょう。

3-Netfilter

Linuxのネットワークスタック・・・この部分は2.4系列以降、重要な部分で、
パケットフィルタリングネットワークアドレス翻訳(NAT)接続トラッキングのようなことを、カーネルのネットワーク関係のコード中のhookを通してやっています。
この系列のhookはIPv4、IPv6、DECnetを想定していますが、ここではIPv4について書きたいと思います。
ここまで読んで、この機能で何が出来るか?チョット考えてみて下さい・・・3、2、1・・・私は一番最初にバックドアという単語が出てきました。その程度の人間ということです。
と、垣根を取り払いつつ、本来この部分は、コンピュータセキュリティについて、非常に大きな穴となっています。
理由として、第一にオープンソースであるということ。カーネルソースなんて読めないという人、取っ掛かりはあるはずです。
第二に、後で詳しくやりますが、ユーザがhook機能を自由に創りこめる仕様になっているということ
どんなオペレーティングシステムにも、このような構造上の欠陥が(故意にしろ)あるわけです。取り扱いには充分ご注意下さい。

4-IPv4 Netfilter hook
IPv4のNetfilter hookはlinux/netfilter_ipv4.hにあり、パケット受理後、一番最初に呼ばれるのが NF_IP_PRE_ROUTINGです。
以下にリターンコードを示します。
Return Codeと意味

--------------------------------------
NF_DROP|パケット破棄
NF_ACCEPT|パケット維持
NF_STOLEN|パケット無視
NF_QUEUE|ユーザスペースのためのキュー・パケット
NF_REPEAT|このホック関数を再び呼ぶ
--------------------------------------

こんな感じだと思いますが、
NF_DROPは、このパケットを完全に落とす事を意味します。
NF_ACCEPTはパケットが完全に受理可能なので、それをキープし次の処理に移行する事を意味します。
NF_STOLENはパケットを無視します。

ここで少し気になるのが、上記を見て解かるように、hookがNetfilterを完全に乗っ取ってしまう事が可能という事です。
制御を乗っ取られるという意味で書いたのですが、私が最初にバックドアと答えたのも、この辺りに原因があります。
少し考えれば、あなたが騙したいシステムを完全に騙して、制御下に置く事も可能ということです。

NF_REPEATはhook関数を再度呼び出します。無限ループの回避策でもあります。

ここまでだと、コンピュータセキュリティについて、単に概念だけのオハナシをしただけです。しかもそういう本はこういうことを扱ってくれません。せいぜい辞書で調べたくらいの事です。
私が望むのは、体系だったセキュリティの全体像を概念的に網羅したものや競合他社と同じような内容のものではなく、
しっかりとした、指針があり、的を絞ったものの詳細です。
しかしそういうものは少ないといって良いのではないでしょうか?
いえ、良書は沢山あるのですが、セキュリティ関係のものやアタッキング関係のものは売れている事もあり、
かかなりの数が出ているわけですが、それにしては少ないな・・・と。

少し横道にそれるのですが、何故こういうことが起こるのでしょうか?
ひとつは、雑誌社や出版社も商売であるため、需要があるものを前面に出す必要がある。ということ。
また、上記と関係して、それほど詳細に出来る方を抱えていらっしゃらない、
若しくは、購買層が、そういった詳細より、読み物的なものを求めている。等でしょうか。
確かに、こういう地道な頑張りが要求されることは置いておいて、所謂ハッキング本などの読み物を読む事は、非常に楽しいですし・・・
少し専門性があがったり、特定のプラットフォームを対象とした特定の機能の詳細など、専門家しか求めていないと思います。
一般の購買層の期待を裏切る事は、死活問題ですし。
ということで、ここではそういったものがカバーしきれていないことをやろうと思います。
個に特化した事をやりますが、私もすべてカバーできるわけがなく、そういうところは書籍等でカバーして下さい。
個人では様々なプラットフォームに対応できないため等もあり、補完関係においていただけると幸いです。

横道にそれましたが、では、肝心のhook機能の登録はどうやっているのでしょう?