本を読む

読書やコンピュータなどに関するメモ

「アップルを創った怪物」

アップルを創った怪物―もうひとりの創業者、ウォズニアック自伝
スティーブ・ウォズニアック
ダイヤモンド社
売り上げランキング: 22864

 表紙の巨漢は、山のフドウじゃなくて、ウォズことスティーブ・ウォズニアック。ウォズはじめての自伝(聞き書き)だ。

 ウォズのパブリックイメージどおりの、無邪気な天才っぷりが、子供のときから綴られていて、とても楽しい。本当にエレクトロニクスといたずらが大好きというエピソードが次から次へと語られ、そしてそれがApple I/IIに結実していくところは、わくわくしながら読んだ。

 ウォズの設計の趣味としては、回路数を減らすのが好きらしい。なにしろ、チップの入力側から微弱な信号が漏れていることを利用するとか、ソフトでいえばコードゴルフ的な工夫をするそうで、そういう技自慢もいろいろ語られているのも面白かった。

 なお、題名の「アップルを創った」は、アップル社のことではなくて、Apple I/IIのことだと思う。サブタイトルやキャッチコピーなどはアップル社のことを前に出してるけど、そういうのを期待するとはずすかも。Apple II以降はアップル社やジョブズについてはあまり触れられていないし、Macはほかの部門の話として名前だけ出てくる。かわりに、離婚や飛行機事故、フリーメーソン、USフェスティバルといったプライベートなことについても書かれている。

 ちなみに、ウォズによると、ハード屋さんは感電遊びが好きだけど、ソフト屋さんはやりたがらないんだとか。なるほど。

Shibuya.pm TT #11に参加した

 Perl開発者の集まりであるShibuya.pmのテクニカルトーク#11というイベントに行ってきました。あいかわらず、濃い技術話をテンポよくノリよく話していて、楽しく勉強できました。

 Perlといいつつ、今回はシステムコールとかレジスタとかjmpとかNOPとかそんな単語が主に飛びかっていたような…というわけで、内容はわからなかったけどがんばってメモとりました ><

 以下、そのメモのまとめです。間違いなどありましたらご指摘ください。

バイナリ畑で捕まえて - inside lleval (dankogai)

 「サリンジャーは、いま生まれたらPerl Mongerになっていたにちがいない」ということで、ブログで書いていたllevalを紹介。そのこころは、崖っぷちで止める。llevalはLLをWeb上から実行する仕組み。Perlとか、Perl 6とか、みんな大好きBASICとか。

 危ないのでサンドボックスで実行。無限ループは1分でタイムアウト、fork爆弾はすぐ止まる、syscall(&SYS_fork)とかも止まる。グロブ展開してもファイル名をとれない。LWP::Simple::getは許す。

 chroot環境で動く。インタプリタとそれを動かすファイルのみ用意し、あとはnullfsでマウント。

 システムコールを止める仕組みはFreeBSD::i386::Ptrace。奥一穂さんに「つかまえても実行されてしまうはず」と指摘を受けた。で、つかまえたシステムコールそのものではなく、スタック上の引数を書き換える方法を採用。forkは引き数をとらないのでアドレス0に飛ばして落とす。0番地に動くコードを書き込まれる心配は、mmapをトラップする。

 ということだけど、Perl Hackerたちが日夜クラックにいそしんでいるらしいw

任意のコードを安全にevalする方法の実装方法と、突破方法について (tokuhirom)

 evalできるIRC botが作りたい。llevelはいいけどportableじゃない。Sys::Protectは非常にアンセキュアで知られている。ということで、いろいろな方法を検討した話。

 Perl VMはOP_systemやOP_execでsystemやexecを実行する。それをPL_op_maskやPL_ppaddrでマスクする。Opcode.pmもある。

 でもXSやDLLを読み込むDynaLoaderが危険。DynLoader::dl_install_xsub。でも、これを使っていて許可したいライブラリもある。で、ラッパーのDevel::SafeEvalを開発。dl_install_xsubを別の変数に入れて隠してフックし、確認してから実行。が、DB::DBを使うと1つ上のスコープが見える、overloadを使うと文字列化をフックされる、ScalarUtil::blessedでチェックしても'0'にblessするとか空文字列にblessするとかいう手も、@INCや%SIGをtieするという手も、といろいろ突破方法が。

 で、結論は、結局XSで書きました、とw

How about Kindle hacking? (obra)

 英語だったので、聞きとりは自信なし。

 AmazonのKindleはナイスなデバイスだよ(実物見せる)。新聞とか本とかブログとか読めるよ。NetFront 3.5も乗ってて、JavaScriptとかxmlHttpRequestも使えるよ。あとminesweeprもあるよw

 でも、AmazonのDRMにlockされているし、いろいろログがAmazonに送られているみたい。GPS情報は大丈夫?

 俺は本を読みたかっただけなんだけど、Kindleが "Hack me" と呼んでいるw そこでハック。

 (emasaka注:以下、特に理解があやしいので、ブツ切りで)

 ネットワークやUSBをつかまえてMacに接続してproxy。Kindleはいくつかのポートをリッスンしている。busyboxをつっこむ。telnetdを動かしたり。rootでログインしたが、login incorrectなので、/bin/shを実行。カーネルをリビルド。nfsがある。

 Perlを入れたかったけど、ARMなので、クロスコンパイルはやりたくない。そこで、gPhoneでコンパイルw

 QtにはPythonバインディングのPyQtがあるけど、KindleにはXがない。フレームバッファならQtEmbeddedが使えるけど、Pythonにバインディングがない。

 KindleのHTMLサポートは貧弱。

世界のセキュリティコンテスト(Capture the Flag)ってどんなもの? (kenji)

 サーバー攻略競技の「Capture the Flag」の紹介。パスワードを発見したり、XSSやSQLインジェクションをしかけたり、バッファオーバーフローをしかけたり。チームを組んで得意な分野を分担。http://07c00.com/a.pdf

 たとえば、謎のバイナリファイルを手掛りにパスワードを探る。fileやstringsで調べるとFreeBSDの.koファイルらしい。が、単体ではロードできないのでIDAProで解析し、解析結果をもとにExploitを作成。アセンブラを見ると、難読化がされている。へんなアドレスにジャンプしていて実はNOPというもので、IDAProや人間をだますもの。

 カーネル空間のIDTを書き換えてシステムコールフック。Ring0の関数をフックしているので、ユーザー空間からはINT 80hをすべてフックしているように見せる。

 パスワードを表示するuprintf関数の呼び出しをさかのぼる。条件がそろえば呼び出すらしい。そこで、システムコールの呼び出しを総当たりし、値が条件に合う全パターンを出力するコードを作成。

 このように、IDAProをだますような難読化は基本。jmpをpushとretに置きかえるとか、jmpをstcとjbに置きかえるとか。これで、IDAProの能力に頼れず、人間の能力の勝負に。

 次の例として、Forensic問題。OSのダンプファイルから「forensics challenge」の仮想アドレスを求める。まずOSを特定。次にプロセス先頭のパターンを探す。あとは物理/仮想メモリの対応表を求める。

 Trivia問題もある。x86の命令と同じPowerPC命令を答えるとか。試す環境がその場になかったりして、最後はリファレンス。でもPS3でも試せるよw

Native Client Hacks (Fukumori Daiki)

 ブラウザ上でx86コードを実行するGoogle Native Clientの攻略話。いろいろ攻略を見つけてGoogleに報告し、修正されたんだとか。

 Google Native Clientは、Firefoxの上でランタイムが動き、そこでコードが動く。ELFのようだがELFでない専用のコード。nacl-gccでコンパイル。

 まずシステムコール。ダンプしてもINT 80hやsysenterは見あたらない。静的に埋め込んでもエラーになる。トランポリンに一度とばして、そこでチェックしてから実行するらしい。自己書き換えコードを試すと、ロード時のチェックは通過しても、動的にもチェックされていて、エラーで落ちる。

 jmpにも制限があり、32バイト境界のところでないとダメ。解析済みコードから到達可能かもチェックされる。

 コードセグメント以外は実行できず、スタックは実行できない。モジュールごとにセグメントレジスタを切り替えている。

 整数オーバーフローは、教科書どおりの脆弱性があった。今は直っている。

 クロスドメイン脆弱性はどうか。file://で動くのだけど、画像をエンベッドするとGoogleのサーバーに置かれるので、クロスドメインアクセス成功。今は直っている。

 あと、環境変数領域は読める。

 まとめは、みんなでサンドボックスを破って、強くなってもらいましょう、とw

Perlで学ぶWin32/FreeBSD/Linux/x86_64アセンブラ入門 (takesako)

 さまざまな機械語の話なので、箇条書きで。

  • MS-DOSのINT 21H
    • .comファイル(ヘッダのない実行ファイル)
    • 「.comバブル時代」w
  • Windows PE
    • 32bit
    • Win32APIを呼ぶ
    • MessageBoxを表示
    • PEヘッダのGolf
      • 92BのHello World
  • PerlのWin32::APIで
    • PerlのDynaLoaderで
    • Windows XP XP2以降はDEPで禁止されるので、オフにすると実行できる(危険)
  • Linux 32bit
    • EAXレジスタにセット
    • 省略
  • Perl x86でJIT compiler
    • DynaLoader::dl_install_xsub()にコードを指定して実行
    • 実行している間にコードを書き換えられるか
    • 環境変数でPERL_SIGNALS=unsafe
    • SIGTRAPはWindowsでは使えない
      • $SIG{ILL}トラップ
  • 64bit Linux
    • syscall命令
  • CPUIDをとってくるプログラム
    • 3回くりかえすループアンローリングw
  • Inlinde/x86.pm
    • Perlでアセンブラコードを書いてdoで動く
    • Linuxではmprotectで書き込みフラグをたてる必要

オレオレPerlVM (gfx)

 Pure PerlでPerl VMを実装した話。Acme::Perl::VM(APVM)。パーサーはなくて、Perlの作った構文木を実行する。デバッグ出力もできる。

 スタックで手続きの引き数や戻り値を管理。Perlの実装ではPL_stack_baseだけど、APVMの実装では@PL_stack。Perlなので管理かんたん。可変長引き数はスタックマーカーで。

 Opcodeは手続きとデータを持った構造体。連結リストになっていて、全体で木構造になる(=構文木)。

 PerlのB::Conciseで木構造を出力できることを知って衝撃だけど、Acmeだからいいや。

 これを作って、サブルーチン呼び出しやループが遅いわけがわかった、と。

CPUの気持ちは大事だけど、VMの気持ちも考えよう (Yappo)

 先に結論を書くと、「VMの気持ちを考えてもキリがない」w。やるならプロファイルで。Devel::NYTProfileいいよ。

  • use Bとか標準モジュールで
    • B::Concise
      • VMコードを表示する
      • 文字列リテラルの連結は、コンパイル時に解決されるので、連結されて表示される
    • B::Deparse
      • warn (1+2) * (2-1)がwarningになるわけ
        • warn(3)が先に結合される
    • Devel::Peek
      • 内部情報を出力
  • もっとやるにはほかのモジュール
    • Scope::Upper
      • スコープから上の要素を書き換える
    • Devel::RunOpsAnalyze
      • 実行しながら解析
      • ループや、myのスコープなどを解析する例
      • 定数畳み込みはやってくれている
      • &foo、foo()、fooは同じように解析
      • メソッドコールの処理
        • ふつうの関数、メソッドコール、can
      • いろいろなループのステップ数比較
        • Cスタイルはステップ数が多い

Devel::BindPPをつかって簡単にC++でPerlの拡張モジュールをつくろう! (tokuhirom)

 XSを使う目的でいちばん多いのはCライブラリのバインドなので、C++で書きやすいようにした、という話。

 まずXSは難しい。外部DSLで、インデントや改行に意味があるし、Cのマクロの山でエラーのときにわけがわからない。毎日XSをやってるような人ではないと覚えきれない。

 以下、実際の利用方法を紹介。1つのヘッダファイルなので改造もできるよ、とか。

Devel::NYTProf (clkao)

 ここからLT。まずは台湾から来た高さんが、ちかごろ流行りのプロファイラのDevel::NYTProfを紹介。

 まず、How do you speed upってことで、それはProfileだと。それにはDevel::Dprofがあるのだけど、sub単位のプロファイリングだし、セグフォしたりw

 で、Devel::NYTProf。DBIの作者の人が作った。HTML出力だし、行単位のプロファイングもできる。みんな使おう!

 このあいだOSDC.TWというのがあって、PHPのcalltreeがいいなー、Perlほしいと思った。そこで、Devel::NYTProfの結果をKcachegrindに食わせるようにするツールを使うと、ほらcalltreeが。ほかにもいろいろDevel::NYTProfの関連ツールがあって便利だよ、と。

マルウェアの検出 (sonodam)

 サイバー大学のセキュリティ研究家の人で、「私はマルウェアが大好き」とw

 最近のトレンドは「捕捉されないエコなマルウェア」。ダウンローダー式で、HTTPのGETで本体をとってくる。コンパクトなうえ、一般的なsetup.exeと変わらないので捕捉しづらい。

 まとめは、捕獲はできても検知は難しく、業界的にはお手あげ状態なので、アイデアお待ちしています、と。

ブラマンのブラックな話 (isidai)

 先月まで本当に高校生だったセキュリティの人が、ドラマ「ブラッディ・マンデイ」を語る話。プレゼンの画面エフェクトに凝っていて、ちょっとゲームっぽい感じが面白かった。

 突っ込みどころは、なぜか攻撃先のサーバー情報を事前に知っていること。それ以上に、実際に存在する脆弱性や攻撃手法が出ていて、TVで放送していいのかとw

5分で danbot server を立ち上げる方法 (Yappo)

 evalのIRC botを作る話。Cobbler Koanでその場でさっくりXen環境を作成。

 …を待ってる間、Hatetterの話。はてなお気に入りアンテナを使ってPOST時間を捕捉するというストーキングツールw。HTTP::Engineをベースに、ワーカーをQ4Mで動かし、データはmemcached。「mashupサイトはデータベースを使ったら負け」、と。

Windowsユーザのための初めてのPerlプログラミング (HASEGAWA Yosuke)

 x86バイナリとPerlの呼び合いの話を、5分の間に次から次へと披露。

  • ActivePerlをインストール
  • Win32::API
  • Perlからシグナルハンドラでx86コードを実行
  • Perlから実行したx86からPerlを呼び出す
    • シグナルがややこしい
  • 「それWin32::API::CallBackでできるよ」
    • 引数のうけわたしが自然。グローバル変数を使わなくていい
    • シグナルハンドラのまともな利点としては、stdcall以外のDLL関数も呼べること(Win32::APIはstdcallのみ)

スクリプト先頭の「#!」に相当する記号をLinuxに追加する

 Unix系OSでは、ファイルの最初の行に「#!」で始まる行を入れると、続けて書かれたコマンドにより以降を実行します。

 最近のLinuxでは、同様のことをユーザーが設定できるbinfmt_miscというしくみ(カーネルモジュール)があるということを、「東京エリアDebian勉強会」という勉強会で知りました。さっそく試してみます。以下、Ubuntuでの例です。

 まず、binfmt_miscモジュールを確認します。

$ lsmod | grep binfmt
binfmt_misc            16904  1

 入っています。標準で定義されている設定は、こんな感じです。

$ ls /proc/sys/fs/binfmt_misc
cli  jar  python2.5  register  status

 さて、以下のPerlスクリプトを用意します。「#!」行はわざと省略しています。

use strict;
use warnings;
print "Hello\n";

 実行権限はつけておきます。

$ chmod +x hoge.pl

 binfmt_miscを設定するために、Debian系Linuxでは、update-binfmtsというコマンドが用意されています。「use strict」という文字列を、perlコマンドに関連づけてみましょう。

$ sudo update-binfmts --package perl --install perl /usr/bin/perl --magic 'use strict'

 では実行してみます。

$ ./hoge.pl
Hello

 めでたしめでたし。

追記2009-04-19:

 #!で十分な例をあげておいて恐縮ですが、binfmt_miscがいちばん活躍するのはバイナリファイルの場合です。たとえば、Javaのバイトコードのファイルを実行するとJava Runtaimeを起動するとか、.NET Frameworkなファイルを実行するとMonoを起動するとか、Pythonの中間コードを実行するとPythonを起動するとかいったふうに使われているそうです。

「賭博覇王伝 零」8巻

 第1部完。

 ちょwwwこの結末www

UbuntuなノートPC上にDebian sidのchroot環境を作る

 Debian sidのLinux環境が必要なとき、ハッカーな人なら普通にインストールとかするのでしょうが、ヘタレな私には避けたいところです。そこで、ノートPCで使っているUbuntu上に、chroot環境としてsid環境を作ります。

 わかっている人には常識かもしれませんが、とりあえず次回のために作業メモを残しておきます。間違いなどありましたらご指摘ください。

chroot環境ってなに?

 chrootはUnix系OSのシステムコールで、指定したディレクトリを現在のプロセスのルートディレクトリに設定するものです。たとえば、/usr/localにchrootすると、/usr/local/binが/binとして見え、かわりに/usr/localの外が見えないようになります。

 これを使い、どこかのディレクトリ以下にLinux環境一式を作って、そこにchrootすれば、あたかも別のLinux環境にログインしたかのように使えます。仮想環境より簡単ですし、仮想化しないぶん動作も軽いはず。ただし、カーネルは親環境のままですし、ネットワークやポートなども親環境と共通です。

ソフトをインストールする

 さっそくやってみましょう。まず、debootstrapとschrootをインストールします。

$ sudo aptitude install debootstrap schroot

chroot環境をインストール

 ここでは/var/chroot/sidディレクトリ以下にchroot環境を作ります。といっても、debootstrap一発です。

$ sudo mkdir -p /var/chroot/sid
$ sudo debootstrap sid /var/chroot/sid http://cdn.debian.or.jp/debian

 それなりに時間がかかります。

ディレクトリをマウントする

 bindマウントで、chroot環境に必要なディレクトリをマウントします。

$ sudo vi /etc/fstab

(以下の内容を追加)
proc-chroot /var/chroot/sid/proc proc defaults 0 0
devpts-chroot /var/chroot/sid/dev/pts devpts defaults 0 0
/tmp /var/chroot/sid/tmp none bind 0 0
/home /var/chroot/sid/home none bind 0 0

$ sudo mount -a

ネットワークとユーザーを設定する

 ネットワーク自体は親環境のものを使うのでいいのですが、resolv.confは設定する必要があります。私の場合、親環境がDHCPクライアントなので、resolv.confは親環境のものをハードリンクして使うことにします。ついでにhosts関係もハードリンクします。

$ sudo rm /var/chroot/sid/etc/resolv.conf
$ sudo ln /etc/resolv.conf /var/chroot/sid/etc/resolv.conf
$ sudo mv /var/chroot/sid/etc/hosts{,.bak}
$ sudo ln /etc/hosts /var/chroot/sid/etc/hosts
$ sudo mv /var/chroot/sid/etc/hostname{,.bak}
$ sudo ln /etc/hostname /var/chroot/sid/etc/hostname

 ユーザーとグループは、親環境から自分の情報をコピーします。

$ sudo vi /var/chroot/sid/etc/passwd
(/etc/passwdから自分の行をコピー)
$ sudo vi /var/chroot/sid/etc/shadow
(/etc/shadowからrootと自分の行をコピー)
$ sudo vi /var/chroot/sid/etc/group
(/etc/groupから自分の行をコピー)
$ sudo vi /var/chroot/sid/etc/gshadow
(/etc/gshadowから自分の行をコピー)

schrootを設定

 一般ユーザーからchroot環境を使うには、Debian系の場合、schrootコマンドを使います。そこで、schrootを設定します。

$ sudo vi /etc/schroot/schroot.conf

 以下のように設定を追加します。設定名やdescriptionは、お好みで。

[sid]
description=Debian sid (unstable)
directory=/var/chroot/sid
users=(自分のユーザー名)

chroot環境がプロンプトでわかるようにする

 chroot環境に入ったとき親環境と見分けがつくように、プロンプトを変更します。ログインシェルがbashの場合は、標準でその設定があるので、/etc/debian_chrootというファイルを作るだけです。

$ sudo vi /var/chroot/sid/etc/debian_chroot

 このファイルの内容がプロンプトの先頭に表示されるので、「sid」とでも入力しておきます。

 ログインシェルがzshの場合は、標準ではプロンプトに表示するようにはなってないので、自分で~/.zshrcに設定します。たとえば、プロンプトの設定が以下のようになっているとします。

PROMPT='%n@%m:%c%# '

 これを、以下のように変更します。/etc/bash.bashrcからのコピーです。

if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(</etc/debian_chroot)
fi

PROMPT="${debian_chroot:+($debian_chroot)}%n@%m:%c%# "

chroot環境に入る

 いよいよchroot環境に入ります。

$ schroot -c sid -p

 schroot.confに書いた設定名を-cオプションで指定します。-pオプション(環境変数をうけつぐ)は、Xなアプリを使うために付けているので、Xなアプリを使わない場合は必要ないかもしれません。

 親環境からコピーした/etc/passwd情報で、ログインシェルがzshなどになっている場合、最初はchroot環境にないのでエラーになります。この場合、chroot環境にzshをインストールするまでは、schrootでbashを指定して入ります。

$ schroot -c sid -p bash

 無事chroot環境に入ると、以下のようにメッセージとプロンプトが表示されます。めでたしめでたし。

I: [sid chroot] Running shell: "/bin/bash"
(sid)emasaka@mynotepc:~$ 

 あとは新規インストールと同じく、がしがし環境を作りましょう。

変更2009-06-20:hostsのハードリンク作業を追加

変更2012-04-15:bindマウントのあたりを変更(参考:DebootstrapChroot - Ubuntu Wiki)。schroot.confの記述を変更

「五人対賭博場」

五人対賭博場
五人対賭博場
posted with amazlet at 09.04.17
ジャック・フィニイ
早川書房
売り上げランキング: 399851

 学生たちがカジノ強盗を計画して実行するという、ケイパー小説の古典。実はジャック・フィニイの処女長編で、1954年作。実家の本棚で見つけて、なつかしくて読み返した。

 いまから読むと、ケイパー小説としては、手のこんだ計画というほどではない。でも、実行に向けてじりじりと話しを進めていくところや、グループの人間関係、意外な展開など、ストーリーテリングがすばらしい。それに加えて、話の基本は青春小説なんだなと思った。

 …でもこれ、売ってないのか。

termtterのupdate時にURLを短縮する

追記2009-04-17:gem版で以下の内容を書いたら、git版ではそんな機能とっくに実装されてたよウワーン。ということで、以下の内容は無視してください。


 twitterでURL入りのメッセージを投げると、自動的にTinyURLで短縮してくれます。ただ、「&」で切れるとか、「ftp:」はダメとか、いくつか不満もあります。

 そこで、twitterクライアント「termtter」で、update時にTinyURLをかける勝手プラグインを試作しました。githubでフォークしてみます。

updateにフィルターをかませる

 updateは実は各プラグインから、rubytterのupdateメソッドを直接呼んで実現しています。そこで、termtterの中でrubytterのupdateメソッドを上書きして、フィルターのフックポイントを生やしてしまいます。Termtter::Clientにも、フィルターの追加と実行のメソッドを追加します。

 行儀があまりよくないなぁと思います。

フィルターでTinyURLをかませる

 あとは、それを使ってTinyURLをかませるだけです。

 make_termtter_httpメソッドをトップレベルで定義してるのがちと難です。

 使うには、~/.termtter/configで「plugin 'shorturl_on_update'」します。これで、termtterからのupdateにTinyURL変換がかまされるようになります。

「女子大生会計士」

女子大生会計士 (角川コミックス・エース (KCA194-4))
山田 真哉 左菱 虚秋
角川グループパブリッシング

 「女子大生公認会計士の事件簿」シリーズの、2度目のマンガ化。今度は、よりマンガっぽい感じで、エース系だけにパロディねたも。

 今回の会計知識の復習は、ネタバレなので「続きを読む」で。

続きを読む »

勝手にデスクトップ百景

EeePC desktop

 ほぼ毎日使っているEeePC(4GX)の全画面。Firefoxを表示しているところです。

「アフリカにょろり旅」

アフリカにょろり旅 (講談社文庫)
青山 潤
講談社
売り上げランキング: 56429

 東大の生物学研究者のアフリカ紀行記なんだけど、これがエンターテイメントとしてとても面白い。紀行というより、冒険。オビにいわく「50度を超える猛暑、住血吸虫だらけの真水、水のないトイレ」などなど、過酷な旅が続く。

 旅の目的は、幻のウナギ「ラビアータ」の捕獲。ラビアータを求めて、町から町へ移動しながら現地の人と触れあい渡りあう。旅自体はかなりハードなんだけど、それを飄々と書いていて、抱腹絶倒ものだった。その中に、研究者としての葛藤と誇りなども語られている。講談社エッセイ賞受賞。

 なお、この本は、著者の師である塚本勝巳教授が「爆笑問題のニッポンの教養」に登場したときに紹介されて知った。

「Tesoro」

 家族の話が並んでますね。

「真夜中のヒゲの弥次さん喜多さん」

 ホントになんだかわからねぇ…

 あっ、作中のセリフです。

「利休にたずねよ」

利休にたずねよ
利休にたずねよ
posted with amazlet at 09.04.11
山本 兼一
PHP研究所
売り上げランキング: 190
あれからだ、利休の茶の道が、寂とした異界に通じてしまったのは。

 この小説によると、千利休の美学は、詫び寂びを表にかかげながら、内に艶と情熱を秘めているとか。その道はぜんぜんわからないのだけど、章ごとに視点となる人物を変えて、その天才的な審美眼や点前、求道、そして謎を、それぞれの視点から描写する。

 直木賞受賞作ということだけど、納得。

 手法としては、利休の自害を冒頭とし、章ごとに時代を遡っていきながら、そのときどきのエピソードを描く。最初に結論があるようで、その実、衝撃の結末が…

続きを読む »

「太陽の黙示録 建国編」2・3巻

じゃがな「夢の楽園」は幻だったそうな
この船に乗る以外、日本への道はない

 大帰国物語。

ファイルを作ってからchmod 600するのはセキュアじゃない

 「どう書く?org」でさんざんふざけた回答を投稿しまくっている私なんですが、自分のことを思いきり棚に上げてツッコんでみます。もし、これで参考になる方がいらっしゃればと。

 「ACLの制御 どう書く?org」というお題が出されて、「セキュリティ」というタグがついています。これに対して、ファイルを作ってからアクセス権限を変更する回答がいくつか寄せられています。

 これは、セキュリティとしてはヤバいパターンではないかと思います。簡単にいうと、ファイルを作ってからchmodする間にopenしてしまえば、アクセス制限は適用されないからです(少なくともUnix系OSでは)。

 回答されている方々は理解したうえでお題の要求に答えているからいいのですが、知らない方々が見ることを考えると、ちょっと危険かなと。いや、セキュリティは私も苦手なんですが。

 実験してみましょう。まず、ファイルを作ってからchmod 600するシェルスクリプト「target.sh」を用意します。

#!/bin/sh
echo 'Hello, World' > hoge.txt
chmod 600 hoge.txt

 次に、以下の「spy.c」を用意します。カレントディレクトリを監視して、ファイルが作られたらその内容を出力するというものです。最近のLinux向け専用のプログラムで、ほとんど「inotify を使ってファイルシステムのアクティビティーを監視する」の丸コピーです。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/inotify.h>

#define EVENT_SIZE  ( sizeof (struct inotify_event) )
#define BUF_LEN     ( 1024 * ( EVENT_SIZE + 16 ) )

void readfile(const char *filename) {
  FILE *fp;
  int c;
  if (fp = fopen(filename, "r")) {
    while ((c = getc(fp)) != EOF) {
      putchar(c);
    }
    fclose(fp);
  } else {
    printf("cannot open %s\n", filename);
  }
}

int main( int argc, char **argv ) 
{
  int length, i = 0;
  int fd;
  int wd;
  char buffer[BUF_LEN];

  if ((fd = inotify_init()) < 0 ) {
    perror( "inotify_init" );
  }

  wd = inotify_add_watch( fd, ".", IN_MODIFY | IN_CREATE | IN_DELETE );
  length = read( fd, buffer, BUF_LEN );  

  while ( i < length ) {
    struct inotify_event *event = ( struct inotify_event * ) &buffer[ i ];
    if ( event->len ) {
      if ( event->mask & IN_CREATE ) {
        if (! (event->mask & IN_ISDIR) ) {
          printf( "The file %s was created.\n", event->name );
          readfile(event->name);
        }
      }
    }
    i += EVENT_SIZE + event->len;
  }

  ( void ) inotify_rm_watch( fd, wd );
  ( void ) close( fd );
}

 コンパイルします。

$ cc spy.c -o spy

 さて、一般ユーザーでspyを実行したうえで、root権限でtarget.shを実行します。

$ ./spy &
[1] 20385
$ sudo sh target.sh
The file hoge.txt was created.
Hello, World
[1]  + done       ./spy
$ ls -l hoge.txt
-rw------- 1 root root 13 2009-04-07 22:14 hoge.txt

 というわけで、rootだけしか読めないようにするはずのファイルが読めてしまいました。

 対策としては、教科書的には、umaskなりcreatの引数なりで先にパーミッションを制限するのがいいのではないかと思います。

「トンデモ日本史の真相」

トンデモ日本史の真相―と学会的偽史学講義
原田 実
文芸社
売り上げランキング: 60081
この手の話題は大好きなのだけど、具体的な話をいろいろ知っているというほど詳しくない人。そういう人は「巷説」部分をじっくり読んで、「おお、こんな話があったのか!」と、そこで異端史学の妖しい面白さを十分味わっていただき、その後で「真相」部分を読むことで、「面白い」というだけで珍説に飛びついてしまうと人はいかにたやすく騙されるかということを、身をもって学んでいただけたらと思います。

 前書きにあるこの説明どおりの類型に私も入るので、楽しく読んだ。著者は、「ムー」編集部出身で現在は「と学会」という人で、ネタ側もツッコミ側もそれぞれ盛り上げどころを知っていて、面白かった。あと、埴輪は目がやたら大きくて胸と腰がデフォルメされているけど、アニメ絵の定番と同じ、という説明が妙に納得。

 説明の形式は、1節ごとに1ネタで、肯定側の主張を数ページ紹介したあとに、ツッコミを同じぐらいの分量で書くというもの。ネタ一覧は、Amazonの「なか見!検索」に目次があるのでそちらで。ちなみに版元は文芸社。

 以下、本筋はさておきコネタのメモ。

  • 大陸の遊牧騎馬民族には、気性の荒い品種の馬を去勢でおとなしくさせる技術が伝わっているが、日本では家畜去勢の習慣そのものがなかった
  • 「史記」の秦始皇帝本紀の記述では、徐福(徐市)は、出発するする詐欺で結局出発しない人物として書かれている
  • 古田武彦氏は考古学・歴史学に統計学の手法を提唱したが、それゆえに自説の墓穴を掘った
  • 北海道アイヌの義経伝説では、義経が盗賊や女たらしとして登場するものが多い。倭人の押しつけを逆手にとったか
  • 江戸時代の黄表紙本には聖徳太子の「未来記」(とされる内容)のパロディがしばしば見られる。ノスタルダムスのパロディみたいなものか
  • 安倍晴明は54才で天文博士に就任した遅咲き官僚
  • 陰陽師は貴族の中でケガレを背負う卑賤視の対象となっていた
  • 1996年まで「奥の細道」には確かな自筆本が見つかっていなかった
  • 日本書紀に浦島太郎(浦嶋子)が記述された時点では、帰ってくる「300余年後」は未来だった

「ぼくと1ルピーの神様」

ぼくと1ルピーの神様 (ランダムハウス講談社文庫)
ヴィカス スワラップ
ランダムハウス講談社
売り上げランキング: 722
僕は逮捕された。クイズ番組で史上最高額の賞金を勝ちとったのが、その理由だ。

という文で始まる本書は、映画「スラムドッグ$ミリオネア」の原作小説だ。

 インドのスラムで暮らす18才の少年が、世界的なクイズ番組(日本ではみのさんがやってる、アレ)で全問正解をなしとげ、不正を疑われて逮捕される。しかし、彼が正解できたのは、たまたま苦労だらけの人生で得た知識に合った問題が出されたからだった。

 …というと社会派の重苦しい話みたいだけど、そうじゃない。貧困や宗教対立、児童虐待、犯罪などを背景にし、詳細に描写つつも、そうした社会の中で波瀾万丈の人生を送る主人公のさまざまなエピソードを、小説としてとても面白く描いている。

 手法としては、主人公の語りによる回想を、できごとの順番をわざとばらばらにして、クイズの各問題のシーンと結びつけて1章ずつ語っていく。先に言及された人名やエピソードの説明を後から出すなど、伏線が効いていて、ちょっとしたミステリみたい。そして最後には…

 というわけで、人生という冒険を乗り越えていく主人公の物語として、わくわくしながら読んだ。

 ちなみに、著者が本書を執筆したきっかけは、インドの貧困地域にインターネットを広めることで教養を身につけさせるプロジェクトからだとか。

「新クロサギ」2巻

 スピリッツに移ってからは、単行本の切れ目をエピソードの途中にもってきてるなぁ。この巻のメインネタの「導入詐欺」も、3巻に続くになっているし。あと、対抗策が、当局にタレコんで終わりというだけのが多いような。

 今回の手口は、ネタバレなので「続きを読む」で。

続きを読む »

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad