http://groups.google.co.jp/group/kernelvm

仕事はいそがしくても15時に抜けて、懇親会直前まで参加した。場所はIIJ神保町。低レベルレイヤの知識不足を痛感。

  • npppd/pipexの話
    • IPのハンドリングをカーネル内に入れてppp daemon と tun device の無駄をなくそうという話。→ 代わりにpipex
    • IIJはISPなのでpppはつくりつづけいている。npppdは4代目。
    • とりあえずopenbsdにマージされた。
    • 128MBのMIPSマシン(SEIL)で5000クライアントを相手にできる。1セッションあたり4〜10KBしか消費しないのが特徴。
    • FreeBSDにもmpdというのがあるが、これはnpppdよりも複雑な作り。
    • IPパケットだけをカーネル内に閉じて処理してLCPなどの制御パケットはユーザ空間のnpppdで処理するので、GREのシーケンス番号どおりに処理されない問題があって、それはpipexでゴニョゴニョすることで解決しているそう。細いことは分からなかった。(前提知識がないのでたぶん理解できない orz)
    • もっともemobileなんかはパケット順序がよく入れ替るので、そんなに順序に神経質になる必要はないが
    • 遅れてきたパケットは単純に破棄するppp実装が多いので、毎回LCP ECHOが遅れてくるようだと、相手がtimeoutしてしまうので、そのくらいは注意する必要がある。
  • 軽快なplan9
    • 特権命令: 実行をトラップできる命令
    • センシティブ命令: 実行をトラップできないと「まずい」命令
    • vmcall: non-root modeからroot modeになる。
    • VMRPC: ゲストOSからホストOSを呼べる。ホストOSのカーネルモードもいける。
    • iperfで測ってみると、10GbEを使い切れている。これはすごい。完全仮想化や準仮想化では20%くらいしかでていない。
    • [Q]VMRPCをつかうとゲストOSのアンチウィルスソフトを回避できてしまうが?→[A]ホストOSでやってください。
  • 脆弱性に関する技術的な何か
    • キジャクセイ ではなくて ゼイジャクセイ
    • でも cat は カット
      • 3大防御方法
    • ASLR: address space layout randomization (ただしheap splayでコードをあちこちに置くことで回避可能)
    • DEP: data execution prevention
    • UAC (役に立ってないけど)
    • plan9にはこれらのどれもない。
    • plan9はユーザ毎が独立していて、スーパーユーザというのもないので、被害は最小限に留められる(はず)
      • もちろんカーネルがやられればダメだけど
  • SEXYHOOK
    • たとえば時刻に関するテストをしたいときにシステム時計をいじるのはイヤだ。
    • 一時的に time() の実装をテスト用の関数に置き換えたらいい
    • でも、ふつうは time() 関数は直に呼んでるので置き換えは大変。
  • YUREX
    • びんぼうゆすりカウンターがある。
    • openbsdに実装してみた。
    • USBプロトコルアナライザで解析して、なんとなくプロトコルがわかった。
    • すでにsensorsフレームワークがあるので、それを利用。
    • 今後の展開
      • ゆれがとまったのを検出してPCを止める
      • テンションがあがりすぎたのを検出して rm できないようにとかメールで知らせてくれるとか。
  • UNIX/32V on SIMH
    • 昔のコードを動く状態で保存することが大事 (動態保存)
    • ブートローダが動かない
    • 原因はテープデバイスにコマンド投入したあとにDMAが終わるのをhaltして待つところで、haltするとVAXシミュレータが止まってしまいDMAが行われない...
    • ほかにもマイクロコードのバグもエミュレーションしなければいけないなどたいへん。