[-]=======================================================================[-] Wizard Bible vol.16 (2005,4,1) [-]=======================================================================[-] x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第0章:目次 --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○第1章:マニアックJavaプログラミング 〜 第3回 〜 高速アドレス逆引き 金床 著 ○第2章:phpbbの脆弱性 TaKa John Brunkhorst 著 ○第3章:ハニーポットを作ろう 〜 第2回 〜 Narusase 著 ○第4章:ナイフの作り方 〜 銃刀法に違法しないコンシールドナイフ 〜 Defolos 著 ○第5章:Windows API Hooking Tutorial Kenji Aiko 著 ○第6章:第1回SACCの結果とその考察 IPUSIRON 著 ○第7章:ワンクリック詐欺 MaD 著 ○第8章:お知らせ ○第9章:著者プロフィール x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第1章: マニアックJavaプログラミング 〜 第3回 〜 高速アドレス逆引き --- 著者:金床 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  コンピュータに向かっているとき、人の意識はキーボードやマウス、スクリー ンを通し、無意識のうちにソフトウェアの一部分として動作します。これは、ア クションゲームを熱中してプレイしているときのことを想像してもらえば分かり やすいでしょう。こんなとき、使っているソフトウェアが理不尽な動きをすると、 必要以上に頭にきます。いきなり入力を受けつけなくなったり、画面が青くなっ てしまったり。また、反応が遅かったり、時間が掛かる処理が発生した場合にも、 僕らは異常なまでに腹を立て、アドレナリンを分泌します。  ここ2,3年の間にブロードバンドと呼ばれる高速のインターネット回線が手軽な 料金で利用できるようになり、またコンピュータの性能も飛躍的に向上したこと から、PCを使っているときのストレスは1999年頃と比べるとだいぶ減ったように 感じます。昔はブラウザ(懐かしのネットスケープ3)を起動するのに一分くらい かかったり、またウェブページの画像が全部表示されるまでに数分かかったり( あるいは全部は表示されなかったり)したものです。また、最近ではソフトウェ ア自体も全体的にすっかり洗練されてきて、ユーザにストレスをかけないような 作りのものが広く普及してきました。ファイルのダウンロード中は他の操作がで きないFTPクライアントや、メールの受信中は一切入力を受けつけないメールクラ イアントなどは、もう絶滅してくれたでしょうか。  ソフトウェアを使っている最中に、いきなりこのような「入力を受けつけない」 状態になると、まるで時が止まってしまったかのように感じます。そう、ある意 味において、実際にユーザの時間は停止してしまうと言っても良いでしょう。つ まり、ソフトウェアやゲームでの処理に没頭しているのに、あるタイミングで一 切の操作を取り上げられてしまうのです。これは現実世界ではなかなか体験する ことができないものです。道を歩いていて、いきなり「5秒間は何もできないよ〜」 なんてなることはありません。このような苛立たしいソフトウェアが多いと、「 コンピュータは便利だが、時に非常に腹立たしい」というような印象を受けるこ とになるでしょう。  ソフトウェアを作る側、プログラマーの視点から考えると、このような使い心 地を大きく左右する問題は、マルチスレッドプログラミングによって解決できる ことが多いと言えます。ファイルをダウンロードするスレッドとGUIの操作を受け つけるスレッドをそれぞれ独立して動作させることにより、いつでもユーザの入 力を受けつける快適なソフトウェアが実現できます。ユーザの時は止まらず、世 界は正しく動き続けます。そう、マルチスレッドの魔法は時を操るのです。ザ・ ワールド!時よ止まれ!Thread.sleep(5000);(←これがやりたかった) ■0x02.) アドレスの逆引き  ソフトウェアを使っていて「時間が止まってしまう」例として、FTPクライアン トやメールクライアントを挙げました。このようなフリーズ現象は特にGUIアプリ ケーションで多く見られます。コマンドラインでの操作、いわゆるCUIアプリケー ションでは、シンプルであるためかこのようなフリーズ現象はあまり見られませ ん。しかし一つだけとても良く知られたフリーズ現象があります。それはIPアド レスの逆引きです。  「〜をするのに毎回とても時間がかかります。これは一体何が悪いのでしょう か?教えて下さい。」というような質問がされているのを良く見ますが、こんな ときはIPアドレスの逆引きが原因になっていることがとても多いです。Googleで 「逆引き」「時間がかかる」で検索すると3700件もヒットすることもこれを裏付 けています。  説明するまでもありませんが、アドレスを「引く」とは、「www.jumperz.net」 のようなホスト名から「218.45.25.195」のような対応するIPアドレスを求めるこ とです。「逆引き」はこの反対で、「218.45.25.195」のようなIPアドレスから「 www.jumperz.net」のようなホスト名を求めることになります。ホスト名に対して は必ず対応するIPアドレスが存在します。そのためDNSプロトコルを使ってホスト 名をIPアドレスに変換する場合、大抵はスムーズに行われます。しかしIPアドレ スに対して対応するホスト名が存在するかどうかは決まっておらず、存在しない ホスト名を求めてDNSサーバーに問い合わせをした場合、返事がなかなか帰って来 ないことが良くあります。このような場合には数秒から数十秒待たされることも あり、これが「フリーズ現象」を引き起こし、僕らはうんともすんとも言わなく なったターミナルの画面を見つめながらビタミンCを消費することになるわけです。 netstatやtraceroute、tcpdumpなどのコマンドを使うときに無意識に-nオプショ ンを付けてしまうクセも、時が止まるのを防ぐためです(編注1)。 【編注1】-nオプションは、逆引きをしないままIPアドレスを数字のまま表示させ るオプションです。 ■0x03.) 高速逆引きとは  この逆引きの際のフリーズ現象が僕らを苛立たせる本当の理由は、「時間が掛 かるから」ではなく、「時間がどのくらい掛かるか分からないから」です。ある 時はあっという間に終わるのに、ある時は10秒掛かる。このような不確定性は断 固として排除するべきです。例えば「逆引きに要する時間は、必ず5秒以内である」 とすれば、僕らはほとんどストレスを感じずに操作をすることができるでしょう。 この辺り、人の心理とは難しいものです。  そんなわけで、今回はこの逆引きをストレスなく行うことができるような実装 をJavaを使って行いたいと思います。具体的にはresolve()という関数を実装しま す。この関数は引数としてIPアドレスを取り、戻り値として対応するホスト名を 返します。Javaに限らず通常の逆引きの実装では関数を呼び出すと何秒後に処理 が戻るか分かりませんが、今回作成するresolve()では必ず一定時間以内に処理が 終わるようにします。この時間は指定しない場合には1秒とし、ミリ秒単位でユー ザが指定することもできるようにします。つまり、次のようなイメージです。 ----- MResolver resolver = new MResolver(); String ip = "192.168.0.1"; //時間を指定しない(必ず1秒以内に処理が戻る) String hostname = resolver.lookup( ip ); //時間を指定する(必ず5秒以内に処理が戻る) String hostname = resolver.lookup( ip, 5000 ); -----  DNSサーバーに対して逆引きの問い合わせを行い、一定時間が経過しても結果( UDPパケットの返信)が帰ってこない場合には、その時点で逆引きをあきらめるわ けです。「え、あきらめちゃうの?」と思うかもしれませんが、実際問題として、 逆引きはうまくいく場合にはあっという間(0.2秒くらい?)に終わることが多い ので、1秒も待てば充分だと言えるのです。つまり、「高速逆引き」などと言って いますが、要するに「駄目そうならすぐに切り上げる」というだけのことです。 ■0x04.) 実装  さて、では実装を行いましょう。Java言語で逆引きを行う場合には、普通Inet Addressクラスのインスタンスに対してgetCanonicalHostName()を呼び出します。 しかしこのメソッドは処理が戻ってくるまでにどのくらい時間が掛かるか決まっ ていません。そのため、このメソッドをメインのスレッドで呼び出してしまうと、 ある時間が経過した時点であきらめて処理を中断したくても、できません。では、 どうしたら良いでしょうか。  ここで、マルチスレッドの魔法を登場させます。まず、メインのスレッドでは このメソッドを呼び出しません。代わりに、このメソッドを呼び出すスレッド( 問い合わせスレッド)を新たに作成します。メインのメソッドは問い合わせスレ ッドを作成したら、一定の時間(ここでは1秒とします)待機します。1秒経過し ても問い合わせスレッドから何も連絡がなければ、「逆引きはできない」と判断 して処理を進めます。1秒経過する前に問い合わせスレッドから結果が戻れば、そ の時点で待機を解除し、処理を進めます。このようにすることで、一定時間以内 に必ず処理が終わる逆引きの実装を行うことができます。  逆引きを行うメソッドを持つクラスをMResolverとして作成します。メソッドの 名前はシンプルにlookup()とします。 ----- public class MResolver { private static long MAX_WAIT_TIME = 1000; // 1 second private Map database = new HashMap( 128 ); private MThreadPool threadPool; -----  ユーザが待ち時間を指定しない場合には、デフォルトでMAX_WAIT_TIMEを使用し ます。値は1秒とします。一度逆引きを行った結果はHashMapにキャッシュしてお きます。このHashMapのインスタンスはdatabaseという名前にします。マルチスレ ッドの処理を行う際に使うスレッドプールのインスタンスをthreadPoolとして持 っています。続いてコンストラクタを定義します。 ----- public MResolver( MThreadPool t ) { threadPool = t; } -----  コンストラクタでスレッドプールのインスタンスを与えます。マルチスレッド プログラミングを行う際には色々な方法がありますが、僕はこのMThreadPoolクラ スを利用する方法で通しています。続いてlookup()メソッドの実装です。 ----- public String lookup( String ip ) throws IOException { return lookup( ip, MAX_WAIT_TIME ); } -----  引数を一つしか取らないlookup()は、内部で引数を二つ取るlookup()を呼び出 します。二つ目の引数はこのメソッドが処理を戻すまでの最大の待ち時間になり、 デフォルトでは1秒になっています。 ----- public String lookup( String ip, long waitTime ) throws IOException { synchronized( database ) { if( database.containsKey( ip ) ) { return ( String )database.get( ip ); } } -----  引数を2つ取るlookup()の実装を見ていきましょう。まず、キャッシュを検索 します。キャッシュに該当するデータがあれば、すぐにそれを返します。 ----- Object mutex = new Object(); while( true ) { boolean result = threadPool.forceCommand ( new MResolverLookupCommand( this, ip, mutex ) ); if( result ) { break; } MSystemUtil.sleep( waitTime ); } -----  mutexはメインスレッドがwait()を呼び出す対象となる「止まり木」インスタ ンスです。ここでmutexはローカルオブジェクトである必要があります。getCano nicalHostName()を呼び出すのはMResolverLookupCommandクラスのインスタンス になります。このクラスはMCommandインターフェースをインプリメントしており、 Commandパターンによる実行をサポートします。先ほど書いたとおり、このイン スタンスはメインスレッドとは別のスレッドにより実行される必要があります。 MThreadPoolクラスのforceCommand()メソッドを呼び出してこのインスタンスを実 行します。forceCommand()メソッドは、引数として与えるコマンドインスタンス を最優先ですぐに実行するようにスレッドプールに指示するものです。空きスレ ッドがなく、すぐに実行ができない場合にはfalseを返します。コマンドが無事 実行開始されるまで、スリープを繰り返して待機します。 ----- synchronized( mutex ) { try { mutex.wait( waitTime ); } catch( InterruptedException e ) { e.printStackTrace(); } } -----  問い合わせスレッドで逆引きが開始されるのと同時に、メインスレッドはmutex インスタンスを止まり木としてwait()を呼び出します。ここで、wait()の引数に 最大の待ち時間であるwaitTimeを与えます。このようにすることで、逆引きが長 引いた場合には自らwait()から抜けて処理を続行することができます。逆引きが すぐに終了した場合には問い合わせスレッドがmutexインスタンスに対してnotify ()を呼び出すので、wait()を抜けて続く処理を行うことになります。 ----- String name = ""; synchronized( database ) { if( database.containsKey( ip ) ) { name = ( String )database.get( ip ); } } return name; -----  wait()を抜けた後、逆引きの結果が格納されているdatabaseインスタンスから 結果を取得し、それを関数の戻り値として返し処理が終了します。続いて問い合 わせスレッドで実行されるMResolverLookupCommandクラスの実装を見ていきます。 ----- public class MResolverLookupCommand implements MCommand { private InetAddress inetAddress; private String ip; private Object mutex; private MResolver resolver; -----  このクラスのインスタンスはプライベートな4つの値を持ちます。このうちinet Address以外の3つはコンストラクタで値を与えられます。 ----- public MResolverLookupCommand ( MResolver resolver, String ip, Object mutex ) throws UnknownHostException { this.resolver = resolver; this.ip = ip; this.mutex = mutex; inetAddress = InetAddress.getByName( ip ); } -----  次にこのクラスのメインの処理であるexecute()メソッドを見ていきます。繰り 返しになりますがこのクラスはMCommandインターフェースをインプリメントして おり、このexecute()メソッドがCommandパターンによって実行されるメソッドと なります。 ----- public void execute() { String name = inetAddress.getCanonicalHostName(); if( name.equals( ip ) ) { name = ""; } resolver.addToDatabase( ip, name ); synchronized( mutex ) { mutex.notify(); } } -----  まずgetCanonicalHostName()メソッドを呼び出しています。この部分でどのく らいの時間が掛かるかは決まっていません。このメソッドはホスト名が見つから ない場合にはIPアドレスと同じ文字列を返します。この場合は結果を格納するSt ringクラスのインスタンスであるnameには空白文字列を与えます。逆引きの結果 をresolverクラスのaddToDatabase()メソッドを呼び出すことでresolverクラスの インスタンスへ通知します。通知後に、メインメソッドが止まっているmutexイン スタンスに対してnotify()を呼び出し、メインメソッドを再開させます。ただし、 ここまでに時間が経過しすぎている場合には既にメインメソッドは自分で処理を 再開しており、このnotify()の呼び出しは何の意味も持たないことになります。 ■0x05.) まとめ  このように、時間がどのくらい掛かるか分からない処理を別スレッドで実行さ せ、メインスレッドは一定時間だけその処理を待つ、という形にすることで、一 定時間内に必ず処理が終わるメソッドを実装することができました。マルチスレ ッドプログラミングはこんな風にも使えるんだな、なんて思って頂ければ幸いで す。今回使ったソースコードは以下のURLからダウンロードして下さい。 http://www.jumperz.net/tools/jumperz_net_075wb.jar  実は今回、この高速逆引きをさらに応用し、標準入力から入ってくる文字列を 片っ端から逆引きするアプリケーションを作っていたのですが、どうも細かい点 で満足が行かず、未完成となっています。次回までに完成を目指します。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第2章: phpbbの脆弱性 --- 著者:TaKa John Brunkhorst x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  phpbbはおなじみの無料かつ高機能なフォーラムです。しかし逆に脆弱性がよく 発見されバージョンアップが激しいソフトウェアとも言えるでしょう。phpbbの公 式ウェブサイト(http://www.phpbb.com/)は1月下旬、サーバーがあるクラッカ ーにより破壊され一時停止していましたが無事復帰したようです。ここではphpbb の脆弱性とサーバー復帰後にリリースされた2.0.12の脆弱性の紹介をしていきた いと思います。 ■0x02.) phpbbの脆弱性ってどのようなもの?  phpbbで脆弱性が発見されるのは主に、次のphpファイルがメインとなっていま す。 ・viewtopic.php ・search.php  脆弱性を利用すると何ができるかというと、次が挙げられます。 ・SQLデータを放出させて、特定のuidのMD5ハッシュを取得する。 ・config.phpを読み込み、rootパスワードやsql rootパスワードを予測する。 ・サーバー上でコマンドを入力できる状態にする。 ・自分のアカウントを管理者権限にし、フォーラム全体をコントロールする。 ・など ■0x03.) phpbb 2.0.12の脆弱性  phpbbの公式ページは、早急に2.0.13以上にアップグレードすることを促しまし た。この背景には、2.0.12にとても重大なセキュリティホールが存在したからで す。この脆弱性を突くと、素人でも簡単に(phpbbの)管理者権限を奪取できしま います。 ●方法1(2005年3月8日) 1:ターゲットのフォーラムにユーザー登録します。 2:クッキーが何もない状態を確認して、ログインします。このとき「Log in au tomatically」というチェックボックスのチェックが外れてることを確認してくだ さい。 3:ログインしたら自動的にクッキー(デフォルトで、phpbbmysql、phpbbmysql_ data)が取得されます。 4:ブラウザを閉じて、クッキーが保存されているディレクトリを確認します。例 えば、Internet Explorerの場合は「C:\Documents and Settings\<ユーザー名>\ Cookies\」(Win9x系なら「C:\WINDOWS\Cookies\」)、Firefoxの場合は「/home /$user/.mozilla/firefox/xxxx.default/」です。 5:そこに「cookie.txt」ファイルがあるはずでそれを好きなテキストエディタで 開きます。 ----- (強制改行してますが、繋げてください) www.ターゲット.com phpbbmysql a%3A2%3A%7Bs%3A11%3A%22autologinid %22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bs%3A1%3A%22○%22%3B%7D -----  といった記述があるはずです。○の部分は自分のUID(User ID)になっていま す。これを次のように変更します。 ----- (強制改行してますが、繋げてください) www.ターゲット.com phpbbmysql a%3A2%3A%7Bs%3A11%3A%22autologinid %22%3Bb%3A1%3Bs%3A6%3A%22userid%22%3Bs%3A1%3A%222%22%3B%7D ----- 6:ブラウザを立ち上げてもう一度ターゲットのWebサイトにアクセスします。す ると、自動で管理者でログインできるはずです。もし、うまくいかない場合は、 管理者のUIDが2でない可能性があります。そのときは、「%222%」を「%22○%」に 変更します(○は管理者のUID)。これでもうそのフォーラムはあなたのものです。 自分のユーザーIDを管理者設定するなり、極秘トピックを読むことだって可能で す。 ●方法2(2005年3月15日)  上記で解説した方法1はターゲットフォーラムにユーザー登録する必要がありま す。これは少々アタッカーとしては抵抗があるかもしれません。そんな後、15日 に登録せずに管理者権限を奪取できる方法が公開されました。 1:普通にターゲットサイトをアクセスします。 2:cookies.txt(またはブラウザのクッキーが保存されているファイル)を開き、 次のコードを確認します。 ----- www.target.com FALSE / FALSE 1234567890 phpbb2mysql_data a%3A0%3A%7B%7D ----- 3:「a%~~」部分を次のように置き換えます。編集後、上書き保存します。 ----- (強制改行してますが、繋げてください) phpbb2mysql_data a%3A2%3A%7Bs%3A11%3A%22autologinid %22%3Bb%3A1%3Bs%3A6%3A%22userid%22%3Bs%3A1%3A%222%22%3B%7D ----- 4:後はこの状態でターゲットサイトのphpbbのWebページにアクセスすれば、管理 者権限のままログインできているはずです。 ■0x04.) 防止する方法  phpbbをすぐに2.0.12から2.0.13はアップデートすればこの脆弱性を防止するこ とができます。  また、アップデートが面倒なら、2.0.12のsessions.phpとviewtopic.phpを次の ように編集すれば防止することができます。詳細はphpbb.comにも載っています。 ○includes/sessions.php ----- 編集前 if( $sessiondata['autologinid'] == $auto_login_key ) ----- ----- 編集後 if( $sessiondata['autologinid'] === $auto_login_key ) ----- ○viewtopic.php ----- 編集前 (強制改行してますが、繋げてください) $message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#\b(" . $highlight_match . ")\b#i', '\\\\1', '\\0')", '>' . $message . '<'), 1, -1)); ----- ----- 編集後 (強制改行してますが、繋げてください) $message = str_replace('\"', '"', substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace('#\b(" . $highlight_match . ")\b#i', '\\\\1', '\\0')", '>' . $message . '<'), 1, -1)); ----- ■あとがき  今回が初投書となります。大変ショートなものとなりましたが、phpbbの脆弱性 を表から触り 2.0.12の脆弱性を紹介してみました。機会があればphpbbの脆弱性 をさらに追求していきたいと思っています。  文章が下手なものでみなさんが見ているものは編集者の方々が一生懸命編集し てくださってきれいな文章になっていると思います(笑)。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第3章: ハニーポットを作ろう 〜 第2回 〜 --- 著者:Narusase x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  前回は、ハニーポットの構築の前提について説明しました。今回からは実際の 作業を進めていきたいと思います。その手始めとして、ここではOSのインストー ルと初期設定の話を説明します。 ■0x02.) Vine Linuxのインストール  まず、Vine Linux3.1をインストールします。Vine Linuxを使う理由は、apt-g etがあるためソフトウェアのアップデートが楽だからです。ちなみに、apt-getは 高性能なrpmのようなものでrpmでは行わない依存性の解決を自動でやってくれる という優れものです。また、最新パッケージ満載なRedHat Linuxなどに比べ枯れ た構成になっているため、安定性が高めです。 ■0x03.) Vine Linux3.1の入手  Vine Linux3.1の入手方法としてはいろいろありますが簡単な方法は、雑誌付属 のものを探すか、インターネット上からイメージをダウンロードしCD-Rに焼き込 むかのいずれかでしょう。ここでは、インターネット上からダウンロードするこ とにします。  入手するにはhttp://www.ring.gr.jp/pub/linux/Vine/Vine-3.1/CDIMAGE/にア クセスし、Vine31-i386.isoをダウンロードします。その後、ライティングソフト を起動しVine31-i386.isoを焼き込みます。  以上で、Vine Linux3.1の入手は終了です。 ■0x04.) ハードウェアの設定  はじめに、二枚のNICをPCにさしてください。やり方は、解っていると思うので ここでは説明しません。解らない方は勉強と言うことで自分で調べてください。 ■0x05.) インストール  まず、BIOSに入り、ブートの順番をCDドライブが一番先に来るように設定しま す。Vine LinuxのCDを挿入しPCを起動します。しばらく待つとVine Linuxのイン ストーラが起動しますのでエンターキーを入力し次の画面へ移行します。  GUIが起動し言語の選択画面が出ますのでJapaneseを選択します。  次に、キーボードの設定画面が出ます、通常の日本語キーボードの場合はその まま次へ進んでください。プログラマーの方などで、104英語キーボードを使用し ている方はモデル、レイアウトをそれぞれ「Generic 104-key PC」と「U.S Engl ish」を選択してみたください。  マウスの設定ではGenericから適切なマウスを選択すれば問題有りません。2ボ タンマウスの場合は3ボタンマウスのエミュレートにチェックを入れると、左右の ボタンを同時に押すことで中ボタンを押したのと同じ効果を得ることができます( もっとも慣れないと難しいため3ボタンマウスを使うことを推奨します)。  次に、インストールの種類が選択できる画面が出ますので、ここではカスタム を選択します。ディスクパーティションの設定では「インストーラで自動的にパ ーティション設定を行う」を選択してください。細かいパーティションの設定を 行いたい場合は、「Disk Druidを使用して手動でパーティション設定を行う」な り「fdiskを使用して手動でパーティション設定を行う」なりを選択しお好みに応 じてパーティションを作成してください。なお、スワップ領域は512MB程度有れば 十分です。その場合、ディスクの初期化の警告が出ますがそのまま「はい」を選 択し、「システムの全てのパーティションを削除」を選択してください。再度、 警告の画面が出ますがこれも「はい」を選択します。ディスクの設定の画面はそ のまま次へ進んで、ブートローダの設定もそのまま次へ進みます。  次にネットワークの設定ですが、前回の前提では二枚のNICを使う、WAN側はDH CPによる割り当て、LAN側は手動設定と言うことでしたので、eth0をWAN側、eth1 をLAN側として話を進めます。まず、eth0に関しては設定は不要です。eth1は自分 のネットワークに合わせて設定を行ってください。ここでは、「起動時にアクテ ィブにする」にチェックを入れ、仮に以下のように設定します。 ・IPアドレス:192.168.1.1 ・ネットマスク:255.255.255.0 ・ネットワーク:192.168.1.0 ・ブロードキャスト:192.168.1.255  「ホスト名」、「ゲートウェイ」、「DNS」などに関してはプロバイダの値を使 用します。ここでは、仮に以下のように設定しますとします。 ・ホスト名:honeypots ・ゲートウェイ:空白 ・1番目のDNS:10.0.0.124 ・2番目のDNS:10.0.0.125  タイムゾーンの設定はそのまま通過し、アカウントの設定を行います。ここで はルートのパスワードと普段使用するアカウントの作成を適当に行ってください。  認証設定はそのまま通過し、パッケージグループの選択を行います。ここでは、 Xやブラウザがないと使いにくいかと思いますのでつぎのものを選択します。 ・X Windowシステム ・日本語入力システム ・GNOME デスクトップ環境 ・インターネットクライアント ・システム管理ツール ・基本開発ソフトウェア ・ドキュメント  次にのボタンを押すと未解決の依存の画面が出ますのでこれも、次にを選択し ます。  グラフィックカードの選択では現在のグラフィックカードを適切に選択し、ビ デオカードRAMの値の設定を忘れないようにしてください。  これでインストール準備完了の画面が表示されますので次ぎにを押してインス トールを行います。環境によってはかなり時間がかかりますのでお茶を飲むなり テレビを見るなり、ご飯を食べに行くなりして時間をつぶしてください。  これが終わるとモニタの設定になりますので、適切なモニタを選択してくださ い。次のX設定のカスタマイズでは適切設定をして必ず設定のテストを行ってくだ さい。また、ログインの種類はXを設定などを行う場合しか使わないようにするた め、テキストを選択します。  これでインストールが全て終了します。終了ボタンを押し、インストーラを終 了させてください。その際、自動的にCDが排出されますので忘れずに取り出して ください。 ■0x06.) 初期設定  インストールが完了したら、初期設定を行います。ここでは、まずrootでログ オンを行い、普段利用するユーザを作成します。この作業はインストール時にユ ーザの作成を行っていれば不要です。そのためのコマンドは、adduserコマンドと passwdコマンドです。ここでは仮にuser1と言うユーザを作成します。以下のコマ ンドを実行すればuser1ユーザを追加できます。 ----- adduser user1 -----  user1ユーザのパスワードの変更は以下のコマンドで変更できます。 ----- passwd user1 -----  コマンドを実行するとパスワードを二回たずねてくるため間違えずに入力しま す。この際、最低八文字以上で、子文字、大文字、記号をあわせたものを使用し てください。 ■0x07.) パッケージのアップデート  とりあえず、各パッケージの情報を最新の状態にするためのアップデートを行 います。ここでは二度「apt-get update」を実行するのですが、最初のapt-getは apt-get自体の初期化のためのもので、二度目はパッケージリストの取得のために 行います。コマンドは以下の通りです。 ----- apt-get update apt-get update -----  次に、実際のパッケージのアップグレードの作業を行うために次のコマンドを 実行します。 ----- apt-get upgrade ----- このコマンドを実行すると実際にアップグレードを実行するかと言う問いが出て きますので、yesと答えて作業を続けてください。なお、この作業はインターネッ ト上からパッケージを取得し、アップグレードを行うため環境によってはかなり 時間がかかる場合もありますので注意してください。この作業が終われば、全て のパッケージが最新の状態になります。 ■0x08.) まとめ  これで、インストール作業、初期設定、パッケージのアップデートが全て終了 しました。次回はiptablesの設定と、sambaのインストール及び設定を行いたいと 思います。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第4章: ナイフの作り方 〜 銃刀法に違法しないコンシールドナイフ 〜 --- 著者:Defolos x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  世間では最近、刃物を使った凶悪な事件が多発していますね。ある地域では包 丁を買うのにでさえ身分証明が必要となったそうです。そんな時期にこういった 反社会的なテキストを執筆して大丈夫かな? と思い、IPUSIRONさんに問い合わ せたところ、「ぜんぜん問題ありません」とのことでしたので、このテーマで執 筆させていただきます。 ■0x02.) 注意  前提として、銃刀法にひっかからないようにすることを目的としており、その 他の刑法については考慮外とさせていただきますが、危険物不等所持などを助長 するものではありません。また、犯罪に使おうとする人には、あまり意味のない テキストとなっております(理由は、一本ナイフを作ってみればわかります)。  以下に所持に関わる銃刀法についてを記載しておきます。以下に違反する物は 作らないようおねがいします。所持ですから、作った時点で違法になります。  また、以下に接触しないナイフであっても常識的な長さ以内(だいたい40cm以 内)で作成することをオススメしておきます。 ●刀剣類の所持の禁止  刀剣類は所持が禁止されています。つまり、許可なく持っている時点で違法と なります。刀剣類として定められているものは以下の通りです。 ・刃渡り15センチ以上の剣、刀、槍、ナギナタで3番目の項目を満たすもの。 ・刃渡りに関係無く、アイクチ、45゜以上の角度に自動開刃する機能を有すもの で3番目の項目を満たすもの。 ・以上のいずれかの形状に似ており、鋼製(合金を含む)の人畜殺傷能力のある もの。 「許可無く刀剣類を所持する者は3年以下の懲役または30万円以下の罰金に処せら れる」(第13条の4)。 *刃渡りとは、刃の付けねから刃の先端までの長さです。付けねの位置が不鮮明な 場合は全長から8センチを引いた長さです。 *剣とはダガーのことです。また、刀とはそりがあり、つばのあるものです。45゜ 以上の角度に自動開刃する機能を有すものとは俗に言う「飛び出しナイフ」のこ とですが、これには例外があり、5.5cm以下かつ開刃を固定する装置を有さず、か つ刃先が直線で峰が丸みを持ち、刃先角が60度以上であれば除外されます。 *刃物とは、鋼製(ステンレスなど合金を含む)の片刃または両刃の、人畜殺傷能 力のある刀剣類以外のものです。 ■0x03.) 作業手順、作成基礎知識  作業手順と簡単な内容を解説します。詳しい内容は以降の項目で行うこととし ます。このテキストでは初めての作成であり、休日趣味レベルでの作成を前提に してありますので、以下の作業手順は一部省いる部分があります。 1:デザイン  ナイフのデザインを決め、厚紙に写して切り抜きます。 2:材料入手  デザインに合った材料を入手します。 3:ケガキ/穴空け  材料にデザインを写し、必要箇所に穴を空けます。 4:切り取り  不必要な部分を金鋸で切り取ります。 5:整形  ケガキに沿って周りをヤスリで整えます。 6:刃の削り出し  ヤスリを使って刃になる部分に角度をつけます。 7:熱処理/ハンドル作成/刃付け  焼き入れ、焼きなましなどの熱処理、仕上げを行います。 8:シースの作成  鞘を作ります。  さて、このテキストを読んでおられる皆様はナイフを作るのは初めてのことと 思います。そこで作成の基礎的な部分を解説しておきます。  まず、ナイフの作成方法には大きく分けて二つの方法があります。 ・鍛造製法 ・ストックアンドリムーバル法 ○鍛造製法  鍛造(たんぞう)は皆様のご想像の通り、鉄を熱してやわらかくして、それを 打って形を整えていく製法です。この方法は習得が難しく、大掛かりな装置が必 要となりますので休日趣味には向きません。そこで個人(プロのカスタムナイフ メーカーの多くも)は次の「ストックアンドリムーバル法」でナイフを作ってい きます。 ○ストックアンドリムーバル法  ストックアンドリムーバル法とは、鉄板を削りだしてナイフの形に仕上げる製 法です。かのラブレス氏が世間に広め、今ではほとんどのカスタムナイフメーカ ーが採用している製法です。習得が簡単で失敗しにくく、鉄板とヤスリがあれば 作成できることから休日趣味にも適しているといえます。このテキストでもスト ックアンドリムーバル法を採用して作成解説を進めていくこととします。 ■0x04.) デザイン  まずナイフを作る場合デザインを考えます。デザインを決定するのにあたって 重要なことは、「どういった時に使う」などといった要求をしっかりと分析し、 その要求を反映させることです。このテキストではConcealability、つまり隠蔽 性をテーマとしていますので、Concealabilityの要素には何が必要かを分析しま す。  個人的な観点が入りますが、私の考えるConcealabilityの必要要素は以下のと おりです。 ・軽量であること ・全体的に薄く仕上がっていること ・長すぎないこと ・使いやすいこと ・使いたいときにすぐに使えること  これらを参考に各自デザインしていただければ幸いです。デザインを決定した ら厚紙にデザインを写し、切り抜きます。これをパターンと言います。デザイン 段階の注意点としては、全長14cm未満でハンドルを作らないことです。これは銃 刀法の携帯に関わる法規のためです。 「何人も正当な理由無しに刃渡り6cm以上の刃物を携帯してはならない」  これはつまり、刃渡り6cm以下の刃物であれば正当な理由なしに持ち歩いても良 いということです。ちなみに正当な理由とは、「業務で使う」や「キャンプの帰 り」などです。護身用は正当な理由になりません。  14cm以下でハンドルをつけない理由は、刃渡りの算出方法を思い出してもらえ れば分かる通り、ハンドルをつけないと刃の付け根が不鮮明になるので、刃渡り の算出式は"全長-8cm"となり、14cm-8cmで刃渡りは6cmになります。刃渡り6cm以 下のナイフは理由なく持ち歩いてもよいので銃刀法を回避できます。  ここでは例として、ラペルダガーを紹介します。 参照→http://scel.fc2web.com/figure/photo7.jpg  ラペルダガー(lapel dagger)はその名の示す通り、衣服のえりの裏に隠し持 つためのナイフです。布製のシースに収められ、シースを縫いつけることで携帯 します。親指と人差し指で握り、安定性を増すため、また取り落とさないように 多くのものは後部にヒモがついています。  下の写真は私の作ったラペルダガーです。 参照→http://scel.fc2web.com/figure/photo8.jpg  シースは革製ですが、衣服のえりの裏に縫い付けられるようにしています。と は言いましても、実際にえりの裏に縫い付けたことはなく、もっぱらズボンのポ ケットに入れて携帯しています。 ■0x05.) 材料の入手  ナイフの材料のメインといえば何でしょうか。やっぱり鋼材ですね。まずは鋼 材を入手しましょう。ここで鋼材について注意点があります。鋼材には炭素保有 量によって焼きが入らないものがあります。ですので、道端に落ちてる鉄板やホ ームセンターで売ってる鉄板は焼きが入らず刃物には向きません。ナイフショッ プや刃物店には刃物用の鋼材が売られていますので、近くの刃物店で入手しまし ょう。購入には身分証明もいりませんので18歳未満の読者の方も安心して購入し てください。近くに刃物店がない方は通信販売ができる刃物店を以下に紹介しま すので、そちらで鋼材を購入してください。 ・マトリックス・アイダ(東京都板橋区、TEL:03-3939-0052、0120-71-2712) ・しんかい刃物(東京都杉並区、TEL:03-3311-9116) ・ジ・エッジ(東京都渋谷区、TEL:03-3780-1192、http://www.ohyasuya.co.jp/)  たくさんの種類の鋼材が売られていますね。鋼材は種類によって特徴がありま す。どれにするか迷ったら、ATS-34を選ぶことをオススメします。それぞれの鋼 材の特徴は以下のとおりです。 ・ATS-34:最も安定したステンレス鋼です。バランスに優れます。 ・CROMO-7:極めて錆びに強いステンレス鋼で、加工もしやすい特徴を持ちます。 ・440-c:比較的錆びに強く、砥やすい硬度です。また、経済的な価格です。 ・D-2:錆やすく硬度は低いが、非常に安く入手できます。 ・CV-134:熱処理前から硬く、加工が困難ですだが、高い硬度を得られます。  基本としてATS-34をオススメしますが、加工性を追及するならCROMO-7を選択す るのも一案です。サイズはデザインしたパターンに合うサイズのものを選びまし ょう。厚さについては3mmから4mmのものを購入しましょう(理由は後述します)。  後はホームセンターに行ってステンレス用のヤスリと万力、金鋸(金属切断用 ノコギリ)を購入しましょう。 ■0x06.) ケガキ/穴空け  ケガキをしましょう。ケガキとは材料にパターンに合わせた線を引くことです。  まずは鋼材を油性マジックで黒く塗りましょう。これはケガキ線を見やすくす るためです。これにパターンを乗せ、周りをカッターナイフでなぞります。  次は穴空けです。最低でも3mm以上の穴をハンドル後方にひとつ空ける必要があ ります。これは、熱処理時にこの穴に針金を通し、吊り下げて処理するためです。 穴がないと吊り下げられないため処理ができないのです。しかし、鋼材への穴空 けは思いのほか難しい作業です。ボール盤という穴空け専用機を用いなければほ ぼ不可能でしょう。近くのホームセンターで交渉して、どうにか穴を空けてくだ い。本来はケガキ線の周りに3mmの穴を空けていくのですが、厚さ3mm程度の鋼材 でしたら金鋸とヤスリでどうにかなるでしょう。3mm前後の厚さの鋼材を購入して もらった理由はここです。 ■0x07.) 切り取り  ケガキ線に沿って金鋸で切り取っていきますが、金鋸は直線的にしか切り取れ ないのでおおまかに切り取ります。切り取るときのコツは、万力でしっかり固定 することです。また、押すときに力を入れます。 ■0x08.) 整形  切り取った後は全くケガキ線に沿っていないでしょうから、ヤスリでケガキ線 に整えます。この部分はとにかく根気です。無心でやりましょう。コツはここで も万力でしっかり固定することです。また、押すときに力を入れます。 ■0x09.) 刃の削り出し  ラペルダガーは片刃ですので、このまま反対側まで斜めに削れば良いのですが、 ここでもひとつ注意点があります。刃の削り出しをする際、この時点では刃に0.2 mmの削り残しを残しておきます(すいません、わけ分からないですね(ーーi)。 これは初めて作ったとき私も見落としていた点なのですが、熱処理に出す前にト マトが切れるくらいに鋭くしてしまうと、熱処理時に歪が出やすいようなのです。 ですので熱処理前は刃を0.2mm前後削り残しておき、熱処理から戻ってきてから砥 石で鋭く磨き上げるのです。なお、両刃で作る場合はセンターラインを引いてそ こから左右に0.1mmづつ削り残します。0.1mmとか0.2mmなんて定規なんかでは計れ ません。ですのでこれは勘でいいです。大切なのは0.2mm以上であっても途中で薄 さが変わってないことです。 参照→http://scel.fc2web.com/figure/figure24.GIF ■0x0A.) 熱処理  熱処理は主に焼入れと焼きなましを行います。焼入れとは鋼材を高温に熱し、 油や水で一気に冷やすことで硬度を上げる技術です。硬度を上げることで切れ味 は良くなりますが、脆くなり刃欠けしやすくなります。刃欠けしやすいのは刃物 に向かないので、焼きなましを行なって粘り強くします。焼きなましは鋼材を高 温に熱し、灰の中などでゆっくり冷やすことで行ないます。  これら一連の処理は個人で行なえるほど低い技術ではありませんので、業者に 頼みましょう。「材料の入手」で紹介した通信販売業者は熱処理も行なっていま すので、そちらで熱処理を済ませてください。熱処理はおよそ2週間かかります。  本来はこの後ハンドルを作るのですが、このテキストでは省略します。  熱処理から戻ってきたナイフは酸化皮膜に覆われていますので、サンドペーパ ーで奇麗に磨いておきましょう。後は砥石かダイヤモンドヤスリで刃をつけます。 ■0x0B.) シースの作成  ナイフの性能評価要素のひとつにシースがあります。シースひとつでナイフの 使いやすさに大きく影響します。シースにはさまざまな素材が使われていますが、 主要なものは以下に表すとおりです。 ・革:古くから使われている素材です。安くて扱いやすいという特徴があります。 ・カイデックス:熱を加えることで軟らかくなり、冷やすと元に戻る素材です。 加工性の良さ、耐久性から最近のシースの主力と言えます。 ・金属:古くから使われている素材です。 ・布:ラペルダガーの標準シースです。  このテキストではラペルダガーをデザインしましたので、布製のシースを作っ ていくことにしましょう。デニムなどの厚めの生地をダガーより少し大きめに切 り抜きます。このとき、同じサイズのものを2枚切り抜いておきます。ダガーを真 ん中において、2枚の生地で挟んでそのまま縫い合わせます。少しきつめ位に縫い 合わせておきます。後はあまった部分を切り取るわけですが、ラペルダガーは衣 服のえりの裏に縫い付けますので、縫いしろがないと縫い付けられませんね。そ れを考慮して縫いしろを適当に設けておきます。  他の素材の加工についてはまたの機会に…。 ■0x0C.) 金属以外のナイフ  今まではサイズによって銃刀法を回避してきましたが、もっと根本的に銃刀法 を回避する方法が存在します。銃刀法の規制対象は刃物です。ここで刃物の定義 を思い出してください。金属製であるということが定義されていますね。つまり、 金属以外の素材でナイフを作れば銃刀法に触れることがないわけです。ここでナ イフに使えそうな金属以外の素材を挙げて見ましょう。 ○ポリカーボネイト  非常に丈夫で、金属製ナイフと変わらないぐらいの貫通力を持っています(も ちろん切れませんが)。金属探知機に検出されないため、飛行機内持ち込みもで きる可能性があります。3000円前後で売られています。 ○アクリル素材  ホームセンターで売られています。丈夫さに欠けるため9mm前後で作成しないと 使い物にはならないと思われます。かなり安いのが強みです。 ○ガラス:ガラス製ナイフは主に暗殺用ナイフとして知られています。  切れ味は良いですが、割れやすく、何度も使うのには向きません。また、加工 も難しいでしょう。 ○カーボンファイバー  少し高価な素材です。鋼より軽く鋼より強いです。昔は金属探知機に検出され ませんでしたが、今では内部の炭素を検出する機器が増えていますので検出され ます。 ○G-10  グラスファイバー素材です。カーボンファイバーのような特徴を持ちますが、 比較的安価です。しかし強度面ではあまり信頼が置けません。また、G-10は体内 に入ると猛毒ですので加工には十分注意してください。 ○ファインセラミック  簡単に言うと丈夫な焼き物です。十分に強度を持ち非常に硬い。切れ味も良い ですが、とんでもなく高価で個人での加工は不可能です。ファインセラミック自 体は飛行機内持込も可能ですが、製品にはアルミチップがインサートされている ため、検出されます。  このぐらいでしょうか。ガラスとファインセラミック以外は切る用途には使え ませんね。どちらの素材も個人で加工できるものではありませんので、実質的に は金属以外の自作ナイフは突き刺す用途でしか用いられないと考えていただいて いいと思います。 ■0x0D.) 隠し持つ場所  最後の問題となってくるのは、どこに携帯するかということです。使いたいと きにすぐ使えることが重要となってくるコンシールドナイフでは、携帯する場所 でも性能が大きく変わってしまいます。代表的な場所は以下の通りです。 ・ポケット:最も標準的ですね。 ・えりの裏:ラペルダガーの標準位置です。 ・財布の中:カード型ナイフだと効果大です。 ・ベルトから吊り下げる:プッシュダガーの標準位置は背中側にハンドルを下向 きに吊り下げます。 ・袖口 ・足元 ・ズボンの中:ベルトで吊ってズボンの中に入れておきます。  ちなみに、私はズボンのポケットと財布に携帯していることが多いです(年が ら年中持ち歩いてるわけじゃないですよ)。  隠し場所には靴のソールの下とか、ベルトのバックルなどもありますが、これ らは特殊なナイフでの場合ですので除外します。 ■0x0E.) おまけ  T字型のドライバを削って尖らせることでプッシュダガーのように使うことがで きます。ドライバの金属はなまくらですが、1戦闘ぐらいなら耐えられると思いま す。T字型ドライバは1本500円前後ですので経済的です。プロの方はナイフを仕事 場に残してくるのが通論とされていますので強い味方かもしれません。 参照→http://scel.fc2web.com/figure/photo9.jpg ■0x0F.) さいごに  ここまで読んでくださった読者の皆様、どうもありがとうございました。今回 はいつも以上にテクニカルではないテーマで申し訳ないです。  実際にナイフを作ってみた方々、どうだったでしょうか。予想以上に辛かった のではないでしょうか。おそらく犯罪に使うだけなら包丁買ってきたほうがマシ だと思われたことと思います。そのぐらいきつい作業です^^;また、ナイフでの外 傷は傷内部に微粒な金属粉が付着し、ここから凶器になったナイフの個体まで特 定されてしまいます。自作ナイフですと作成にかかわった物質全てを破棄しなけ れば証拠が残ってしまいますので、あまり現実的ではありません。  また、このテキストの通り作成すれば銃刀法を回避することはできるかもしれ ませんが、携帯には軽犯罪法の危険物不法携帯に該当しますので、携帯時には注 意するようオススメします。  それでは皆様、軽犯罪法で捕まらないように o(*^-')b"Good Luck!  またお会いしましょう。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第5章: Windows API Hooking Tutorial --- 著者:Kenji Aiko x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  Windowsアプリケーションは、通常APIを利用することによって実現されていま す。たとえ.NETやMFCなどを利用して作成されたプログラムであったとしても、内 部的にはすべてWindowsAPIが呼び出され処理されているというのは周知の事実で す。プログラムがWindows上で動作している限り、何かしらのカタチでAPIが使わ れていることは確かなのです。では、今回はそのAPIをフックすることを考えてみ ます。「Wizard Bible vol.15」の「リバースエンジニアリング」にて、私はAPI フックについて少しだけ触れましたが、今回はそのAPIフックについてのさらに深 い話題となります。あらかじめ必要な知識は、Windowsプログラミングに多少の知 識があることと、特にDLL関連に詳しいことです。あと「Wizard Bible vol.10」 の「常駐プログラム隠蔽テクニック」も読んでおいた方がよいかもしれません。 この記事の対象環境はWindows2000/XP以降です。残念ながらWindows9x系では動作 しません。  今回実験を行った私の環境はWindowsXPで、コンパイラはVC++.NETです。 ■0x02.) DLLを仲介にしてAPIをフック  DLLを仲介にしてAPIをフックする方法は「Wizard Bible vol.15」の「リバース エンジニアリング」で使っていたテクニックです。詳しい内容はそちらをみてく ださい。この仕組みはいたってシンプルで、例えば、kernel32.dllとまったく同 じエクスポート関数、そしてまったく同じ挙動を持った偽物のDLLを作成し、その DLLをあたかも本物のkernel32.dllのようにexeファイルに認識させることで、API の呼び出しをフックしていました。つまり、我々が用意したDLLを仲介させること によりAPIのフックを実現していたわけです。この方法はメンドクサイですが、シ ンプルで分かりやすく、簡単にAPIをフックする方法として利用できます。ただし、 kernel32.dllやuser32.dllのようなWindowsの中枢をつかさどるDLL内の関数をフ ックする場合、exeファイル自体の内容を1バイトだけ変更しなければならないな ど、意外にも手間のかかるテクニックです。  ちなみにこのテクニックを「DLL Injection」(DLLインジェクション)と呼ぶ ことがあるようですが、私の感覚では「Wizard Bible vol.10」の「常駐プログラ ム隠蔽テクニック」で扱っていた「実行中のプロセスにDLLを注入する」ことを 「DLL Injection(DLLインジェクション)」と呼んでいたので、便宜上こちらの テクニックは「DLL仲介によるAPIフック」と呼ぶことにします。まぁ呼び方なん て何でもいいんですが、どちらも同じ呼び方だと不便でしょうがないので(^^; ■0x03.) インポートセクションを操作してAPIをフック  「リバースエンジニアリング」で扱ったような場合だと仲介DLLを作成した方が 実用的かもしれませんが、単純にデバッグ目的でAPIの内容をフックしたい場合は 適切ではありません。たったひとつの関数をフックしたいだけなのに、わざわざ 仲介DLLを作成するのは少しメンドクサイですし、それに基本的に1つの実行ファ イルにしか対応できないのも不親切です。どうせならば、起動中の全プロセスの APIをフックしたいです。  ということで、もっとエレガントにAPIをフックできないかを考えてみます。 DLL自体を置きかえるのではなく、特定の関数だけを置きかえることはできないだ ろうか。そこで関数アドレスを管理しているモジュールのインポートセクション に目を向けます。モジュールのインポートセクションにはそのモジュールが実行 するために必要なDLLや、そのDLLからインポートしている関数のアドレスが保存 されています。つまり、どのDLLのどの関数を使うのかは、インポートセクション にあるアドレスに依存していることになります。つまり、この部分を書き換える ことによって、関数のみを置きかえることが可能になるということです。  例えば、user32.dllで定義されているMessageBox関数をフックしたい場合、ま ずはHook_MessageBoxAとHook_MessageBoxWの2つの置き換え関数を作成します。 どこに作成してもよいのですが、ターゲットのプロセスに注入しないことにはフ ックできませんから、DLLとして作成しておきます。そのDLLをターゲットプロセ スへ注入すると、DLLは最初にCreateToolhelp32Snapshotを使ってすべてのモジュ ールを探索します。そして、そのモジュールひとつひとつに対してインポートセ クションを持っているかどうかを調べ、持っていたらMessageBoxAのアドレスを Hook_MessageBoxAへ、MessageBoxWのアドレスをHook_MessageBoxWへ書きかえます。 これでMessageBox関数が実行されたら、注入されたDLL内にあるHook_MessageBoxA とHook_MessageBoxWが呼び出されることになり、見事APIをフックすることができ ると考えられます。  考え方はこのような感じでよいですが、このままでは机上の空論ですので、実 際にプログラムを書いて試していくことにします。 ■0x04.) モジュールの列挙  任意のプロセスで使用されているモジュールを列挙するためには、CreateTool help32Snapshot関数を使います。これは、現在実行中のプロセスの列挙時にも使 えますが、今回はモジュールの列挙にて使用します。使い方は以下のようになり ます。 http://ruffnex.oc.to/kenji/text/api_hook/ex1.cpp ----- ex1.cpp #define WIN32_LEAN_AND_MEAN #define STRICT #include #include #include #include int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { TCHAR szBuff[8192] = _T("MODULE LIST:\r\n"); HANDLE hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, GetCurrentProcessId()); if(hModuleSnap == INVALID_HANDLE_VALUE) return -1; MODULEENTRY32 me; me.dwSize = sizeof(me); BOOL bModuleResult = Module32First(hModuleSnap, &me); while(bModuleResult) { lstrcat(szBuff, me.szModule); lstrcat(szBuff, _T("\r\n")); bModuleResult = Module32Next(hModuleSnap, &me); } CloseHandle(hModuleSnap); MessageBox(GetActiveWindow(), szBuff, _T("MODULE LIST"), MB_OK); return 0; } -----  kernel32.dllやuser32.dllを始めとして、さまざまなモジュールを列挙します。 もちろん実行ファイル自体もモジュールとして列挙されます。そして、今回のポ イントは、「APIはこれらモジュールによって提供されている」ということです。 事実、MessageBoxA(W)はuser32.dllによって提供されていますし、CreateToolhelp 32SnapshotやCloseHandleはkernel32.dllによって提供されています。外部のDLL によって提供されているAPIと、そのアドレスを管理するインポートセクション、 これら2つの要素を利用することで仲介DLLとは別のアプローチによってAPIフック を行ってみることにします。 ■0x05.) 自プロセスのAPIをフック  他プロセスのAPIをフックするためには、置き換える関数を他のプロセスへ注入 しなければならないので少しややこしいです。とりあえず、自プロセスのAPIをフ ックできるかを試し、それから実用的なAPIフックDLLを作成していくことにします。 以下のプログラムをみてください。 http://ruffnex.oc.to/kenji/text/api_hook/ex2.cpp ----- int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { PROC pfnOrig; pfnOrig = ::GetProcAddress( GetModuleHandleA("user32.dll"), "MessageBoxA"); ReplaceIATEntryInAllMods( "user32.dll", pfnOrig, (PROC)Hook_MessageBoxA); pfnOrig = ::GetProcAddress( GetModuleHandleA("user32.dll"), "MessageBoxW"); ReplaceIATEntryInAllMods( "user32.dll", pfnOrig, (PROC)Hook_MessageBoxW); MessageBox(GetActiveWindow(), _T("メッセージボックス表示のテスト"), _T("テスト"), MB_OK); return 0; } -----  WinMain関数は上記のようになっており、最後にMessageBoxが呼び出されていま す。MessageBoxの表示は、本文が「メッセージボックス表示のテスト」、タイト ルが「テスト」となるはずです。しかし、ex2.cppをコンパイルし実行してみると 分かりますが、実際にはこうはなりません。なぜなら、このプログラムのMessage Box関数はすでにフックされているからです。つまり、ここでMessageBox関数が呼 び出されていますが、これはすでにuser32.dllのMessageBox関数ではなく、この プログラム中にあるHook_MessageBoxA(W)関数に置きかわられているのです。Hook _MessageBoxA関数はタイトルに「I am Hook_MessageBoxA」と表示させますので、 このプログラムを実行すると、本文が「メッセージボックス表示のテスト」、タ イトルが「I am Hook_MessageBoxA」となっているメッセージボックスがポップア ップされることになります。  ex2.cppでモジュールを列挙する役割を担っているのが、ReplaceIATEntryInAll Mods関数であり、実際にインポートセクションの操作を行っているのが、Replace IATEntryInOneMod関数です。以下、ReplaceIATEntryInOneMod関数の動作を追って いくことにします。 ----- void ReplaceIATEntryInOneMod( PCSTR pszModuleName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller) { ULONG ulSize; PIMAGE_IMPORT_DESCRIPTOR pImportDesc; pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData( hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize); -----  まずは、ImageDirectoryEntryToDataを使ってインポートセクションのアドレス を取得しています。この関数を利用するためにex2.cppの冒頭でDbghelp.hを定義 し、Dbghelp.libをリンクしています。 ----- while(pImportDesc->Name) { PSTR pszModName = (PSTR) ((PBYTE) hmodCaller + pImportDesc->Name); if (lstrcmpiA(pszModName, pszModuleName) == 0) break; pImportDesc++; } -----  インポートセクションを持っていることが分かると、次はインポートディスク リプタを検索します。MessageBoxをフックするならば、その関数を保持している user32.dllを探さなければなりませんので、lstrcmpiAを使って検索しています。 ちなみにモジュール名にUNICODE文字が使われることはないので、ASCII文字限定 のlstrcmpiAを使用しています。 ----- PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) ((PBYTE) hmodCaller + pImportDesc->FirstThunk); -----  インポートアドレステーブルを取得しています。前回の「リバースエンジニア リング」では、IAT(インポートアドレステーブル)の再構築なんてことを手動で やりましたが、それと同じです。でも、同じIATでも、前回のはPEフォーマットと して構成されたバイナリデータファイルのIATを変更したわけですが、今回のは、 すでにメモリに読み込まれた状態でのIATのアドレスを取得しているので、同じイ ンポートアドレステーブルであることに変わりはありませんが、微妙に違うかも しれないです。いや、インポートアドレステーブルであることに変わりはないで すけどね、でもメモリに読み込まれた状態とじゃちょっと違う気がしなくもない ような...あー、なんかややこしくなってきたので、この辺で止めときます(^^;。 ----- while(pThunk->u1.Function) { PROC *ppfn = (PROC*) &pThunk->u1.Function; BOOL fFound = (*ppfn == pfnCurrent); if (fFound) { DWORD dwDummy; VirtualProtect(ppfn, sizeof(ppfn), PAGE_EXECUTE_READWRITE, &dwDummy); WriteProcessMemory( GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL); return; } pThunk++; } -----  この部分で置きかえるべき関数を検索します。もし見つかったならばWritePro cessMemoryを用いて新しい関数アドレスに書きかえます。これで、以後このプロ グラムはAPIがフックされた状態になるわけです。  再びWinMain関数に戻りましょう。ReplaceIATEntryInAllModsを使ってフックさ れたMessageBoxA(W)関数は、インポートセクションを書きかえられ、以後Hook_M essageBoxA(W)に置きかわられたことになります。これによって、最後にMessage Boxを呼び出したとき、置きかえられたHook_MessageBoxA(W)が実行されたという わけです。 ■0x06.) 全プロセスのAPIをフック  考え方は同じですが、全プロセスのAPIフックは多少ややこしいです。まず問題 点のひとつとして、ターゲットのプロセスへHook_MessageBoxA(W)といったフック 関数を注入しなければなりません。これにはいくつかの方法が考えられますが、 一番シンプルかつ強力な方法はSetWindowsHookExを使うことです。全プロセスへ 任意のDLLをマッピングさせるためには、これほど有効な手段はありません。ただ し、自分以外の単一のプロセスだけにDLLをマッピングさせたい場合は、「Wizard Bible vol.10」の「常駐プログラム隠蔽テクニック」で扱った「DLL Injection (DLLインジェクション)」を使ってもよいかもしれません。このあたりは用途に よって変更すべきでしょう。今回は、全プロセスのAPIをフックしたいのでSetWi ndowsHookExを使用することにします。  さて、これから全プロセスAPIフックに関しての動作を説明しますが、これまで の知識ではいくつかの問題点があります。それを列挙しながら説明していきたい と思います。まず、目的はMessageBoxA(W)をフックすることにします。最初にHo ok_MessageBoxA(W)を持ったHook.dll(仮称)を作成します。そのDLLをリンクさ せた実行ファイル(便宜上Main.exe(仮称))を実行します。これにより起動し たプロセスをプロセスAとします。もちろんすでにHook.dllがマッピングされてい ます。そして、早速プロセスAからSetWindowsHookExを実行しますが、全プロセス へHook.dllをマッピングさせたいので、SetWindowsHookEx関数はMain.exeではな くHook.dllに置いておきます(SetWindowsHookEx関数はDLL側に置いておかないと システムフックが発動しません)。SetWindowsHookExを実行させて全プロセスに Hook.dllが行き渡ったら、それぞれにマッピングされているHook.dllは、Create Toolhelp32Snapshotを使用して、そのプロセス内でリンクされているモジュール を検索します。  ここで1つ目の問題がでてきます。Hook.dllは全プロセスにマッピングされるの で、SetWindowsHookEx関数の呼び出し元であるプロセスA自体も例外なくフックさ れることになり、さらには、Hook.dllさえもAPIフックの標的になります。よって、 SetWindowsHookEx関数の呼び出し元プロセスである「プロセスA」と「Hook.dll」 にはAPIフックを仕掛けないようにしなければなりません。つまり、「プロセスA 内のモジュールすべて」と、「全プロセスにマッピングされているHook.dll」の 2つを聖域とし、その他すべてのプロセス、すべてのモジュールにフックを仕掛け ます。  実際にフックを仕掛けたあとに2つ目の問題は発生します。APIフックによって MessageBoxA(W)のアドレスをHook_MessageBoxA(W)に置きかえたので、以後Messa geBoxA(W)が呼び出されたら、Hook_MessageBoxA(W)が実行されるのは分かります。 しかし、LoadLibraryやGetProcAddressなどを考えていません。これらを使って動 的にMessageBoxA(W)のアドレスを調べられたら、本当のMessageBoxA(W)のアドレ スは簡単にバレてしまいます。つまり、LoadLibrary関連とGetProcAddressは、デ フォルトでフックし、常に監視しておかなければなりません。  フックの解除にはUnhookWindowsHookExを実行します。これによりプロセスA以 外のすべてのプロセスからHook.dllのマッピングが解除されますので、そのとき、 同時にフックも解除させます。  以下がサンプルプログラムです。APIフックの基本的な仕組みは「自プロセスの APIをフック」にて解説したので、それを踏まえた上でソースを読めば簡単に理解 できると思います。クセでコメントも結構つけてたりします(笑)。 http://ruffnex.oc.to/kenji/text/api_hook/API_Hook.zip  このテクニックを使えば、他のプロセスのあらゆる情報が取得できます。どの ようなファイルにアクセスしたか、どのようなパケットを送受信したか、はたま た、どのようなレジストリにアクセスしたかまで、事細かに詳細な情報を取得で きます。「詳細な情報を取得できる」ということはデバッガとしては有用かもし れませんが、同時にそれほど詳細な情報を簡単に盗み見ることができるという意 味でもあります。例えば、全プロセスのsend、recv関数をフックすれば、そのコ ンピュータのネットワークパケットすべてを監視することができます。キーロガ ーよりもよっぽどたちの悪いツールが作れることになります。本当に詳細な内部 データ(たとえばMACフレームレベルでのパケットなど)を取得したい場合は、フ ィルタドライバを書いた方が速いかもしれません。しかし、そこまでの情報を必 要とすることなど、ほとんど皆無でしょう。なんといってもアプリケーションレ ベルのプログラムでAPIを監視できるというのは魅力だと思います。 ■0x07.) さいごに  さて、いかがだったでしょうか。今回のネタは「Advanced Windows」(Jeffrey Richter 著)のAPIフックの章を大いに参考にさせていただきました。特にソー スコードなどはそのままもらった部分などもあったりします(^^;。それでお世話 になった恩返しにちょっとバグの指摘をしたいと思います(ぉぃ)。「Advanced Windows 第4版」のサンプルプログラム「22-LastMsgBoxInfoLib」についてです。 持っている人は見てもらえると助かりますが、このプログラムは「22-LastMsgBo xInfo」と1セットになっており、実行すると、全プロセスのMessageBox関数をフ ックし、フックした内容をメインプログラムであるLastMsgBoxInfo.exeに送りま す。それで、実はこのLastMsgBoxInfo.exeというプログラム、WindowsXP環境で実 行した場合、スタックオーバーフローで見事に落ちます。必ずしも落ちるかどう かは分かりませんが、私の環境では、ほぼ再現性100%で落ちますし、海外フォー ラムでもそういう話題があったのでおそらくバグだと思われます(笑)。ただし、 著者のJeffrey Richter氏はWindows2000環境で試しているので(というか執筆時 にはまだXPは出てなかった?)XP環境での動作保証ができないわけあり、決して 著者が悪いわけじゃないです。ただ、だとしても、SetWindowsHookEx関数を呼び 出したプロセスのモジュールまでフックするのはどうかと思います。自分が書い たLastMsgBoxInfo.exeのAPIもフックしちゃってるから、その内部でうかつにMes sageBox呼べないし、ってか自分で書いたプログラムが実行時いきなりフックされ てるとか、デバッグしにくすぎです。といっても、2000で動作していればバグと は言い難いのですが、私の環境はXPですので、その部分は少し改良し、自プロセ スのAPIはフックしないようにしています。  でも、実際こういう内部部分をイジるプログラムを組むと、環境の違いに大き く影響されてしまいますね。もしかしたら、この記事に載ったプログラムもWind ows2003 Serverでは動作しないかもしれません。Jeffrey Richter氏もWindows98 とWindows2000に対応させるために少々ソースコードを変更していましたし。いや はや、互換性を保つのは意外とメンドクサイものです。さて、「さいごに」がや たら長くなってしまいましたが、今回はこの辺で終わりです。  では、また会う日まで... ■0x08.) 参考文献 ・「Advanced Windows」Jeffrey Richter 著 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第6章: 第1回SACCの結果とその考察 --- 著者:IPUSIRON x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) 第1回SACCの結果  前回のWizard Bible vol.15ではセキュリティアカデメイア・クラックコンテスト(SACC)という新しい試みを行ってみました。その内容は次に示す「akademeia-pass.txt」ファイルに存在する4つのユーザーアカウント(user1〜user4)のパスワードを解析するといったものでした。 ----- akademeia-pass.txt user1:$1$9hbw4RS/$aSfltABiXo.l1xP1xT1d51 user2:$1$tP2tmREy$5glmkzpOzCuNCZDxjmH2j0 user3:$1$EsdmX/oB$..LXWJANstnYRN/Yqi9Bj0 user4:$1$7UqWvCQW$YJN34BE/3XAWPlfOUE2Mv0 -----  それぞれのアカウントに対するヒントとして、次のようなものを挙げました。 ・user1は、英単語なので辞書ファイルがよければヒットするはずです。 ・user2は、日本語単語(ローマ字)に数字を付加したタイプのパスワードです。 ・user3は、特殊記号も含まれています。総当りでなければ見つからないと思いま す。 ・user4は、特殊記号も含まれています。総当りでなければ見つからないと思いま す。user3より文字数が多いです。  その結果、複数の人から応募があり、正解者の内訳は次の通りです。 user1:5人(正解パスワード:triceratops) user2:0人(正解パスワード:akiba135) user3:0人(正解パスワード:Zb!!77) user4:0人(正解パスワード:q9#_1AAY) ■0x02.) 考察  user1以外のパスワードを解読できた人は0人で、私が思った以上に困難だった ようです。その一方、user1の解読でも困難だった様子が聞かれます。正解者のメ ールが口を揃えていうのが、適合する辞書ファイルを探すまでが一番長かったと いったものでした。Wordlist Archive(ftp://coast.cs.purdue.edu/pub/dict/w ordlists/)のscience辞書さえ手に入れることができれば、数秒(1秒レベル)で user1のパスワードは解読できます。しかし、このWebサイトには辞書ファイルが 大量にあり、しかもダウンロードには時間がかかります。そのため、数種類の辞 書を試した結果うまくいかなかったため途中で断念した人もいたと考えられます。 よって、実践(SACCは一種の抜き打ちテスト)でオフラインパスワードアタック に対応するなら、あらかじめ辞書ファイルをマシンにダウンロードしておいて整 理しておく必要があります。まとめて一箇所のフォルダに集めておけば、次のよ うにアスタリスクで指定することで、半自動的に辞書式アタックで解析できます。 ----- John the Ripperの場合 >john -w:*.dic akademeia-pass.txt -----  また、正解者たちは全員John the Ripperを使用していました。John the Ripp erは高機能なオフラインパスワードクラッカーで私自身も信頼をおいて多用して います。しかし、パスワードまたはパスワードの暗号化方式によっては他のパス ワードクラッカーの方が効率がよい場合があります。今回の場合は、user2のパス ワードは「akiba135」だったので、「akiba」という単語が含まれている辞書を使 用しつつ、LC5のハイブリッドアタックを用いれば、比較的短い時間で解析できた と思います。ちなみに、ハイブリッドアタックとは、辞書ファイルの中のフレー ズを基に、そこから幾つかの文字を増やした組合わせを試みるというブルートフ ォースアタックです。例えば、辞書ファイルに「hack」というフレーズがあれば、 「hack#」「hack!!?」といった文字列でブルートフォースアタックするわけです。 このようにケースバイケースにより、パスワードクラッカーを使い分けるのも経 験によって得られるものだと思います(こういったものを実感して欲しくて、SA CCを開催した)。  他に解析速度を上げる要因としては、PCのスペックも関係します。もちろんCPU のクロック数が高い方が効率はよいのですが、私がもっとも重要だと思われるの は常時稼動しているサブマシンの存在です。サブマシンはメインマシンほどスペ ックは高くないのが一般的ですが、メインマシンの場合様々なソフトウェア(人 によっては3Dゲームや画像編集ソフト、エンコーダーといった重いソフト)を起 動することも多いはずです。さらに様々なソフトウェアを立ち上げたりするため、 不安定になり電源を落とすこともあることでしょう。例えば、ソフトウェアのイ ンストール後に再起動を促されるといったようなことです。そういった意味でも、 サブマシンの存在は重要です。私の場合はサブマシン(複数台持っていますが、 メイン以外のをマシンをすべてサブということにする)は、自宅のLAN内のファイ ルサーバー(バックアップ、別マシンへのFTPの中継)と実験用(アタック、プロ グラム、適当なソフトウェアのインストール)を兼ねています。Celeron400MHzで 、今のPentium4の時代からみるとかなり貧弱ですが、それでも十分実験用として 活躍してくれています。このマシンを使い1ヶ月経過して、やっとパスワードをJ ohn the Ripperのインクリメントモード(ブルートフォースアタック)で解析で きたときは感動ものでした。 ■0x03.) 理想的な辞書  一般的なパスワードアタックのアプローチとしては、辞書式アタックを試み、 それで失敗したらブルートフォースアタックを試みます。これはオフラインパス ワードアタックとオンラインパスワードアタックの共通のもので、定石といって 間違いありません。辞書式アタックでパスワード解析を成功させる確率を上げよ うとすることが、効率のよいパスワード解析ということに繋がることは明白です。 辞書をあらかじめ用意しておくということはすでに言及しましたが、いかに辞書 をたくさん用意しておいても無駄な辞書ばかりでは意味がありません。つまり、 よい辞書を得ることがもっとも重要でいえます。このよい辞書を作ること(アプ ローチは色々ある)を「辞書を鍛える」と呼びます。  辞書を鍛えるためには、様々なアプローチがあります。ヒット(パスワードと して使われて解析されること)数が高い辞書をファイル単位で選択する方法、ヒ ットされる単語そのものを残していく方法などがあります。その中でも一番理想 的な方法は、パスワードで使われていた単語だけから辞書を生成してしまうとい うアプローチでしょう。このアプローチは、ある人が使用したパスワードは他の 人も使用する確率が高いという法則に基づくものです。この辞書ファイルを作成 するには、数千という数のパスワードを解析し、しかも解析に成功してその単語 を抽出して、テキストファイルに記述していくという作業(別にこの作業は自動 化でもよい)が必要になります。特にパスワード解析を得意とするアタッカーは、 こういった辞書ファイルをオリジナルで作成しているといわれています。この辞 書ファイルを何らかの方法で入手できれば、パスワード解析の作業もはかどりま す。手にいれる方法は、トレード(交換)またはもらうというのが一般的でしょ う。いずれにしても、その辞書ファイルの持ち主があなたに対して信頼を持たな いことには実現しにくいといえます。また、奇特なアタッカーはWebサイトからダ ウンロードできるように公開していることもあります。こういったものを探すの も手です。しかしながら、私は自分でオリジナルの辞書ファイルを作成すること をオススメします。これは非常に手間はかかりますが(パスワードファイルの奪 取も含めて)、こういった作業はあなたの血となり肉となり今後に役に立つこと でしょう。ある程度辞書ファイルが完成すれば、他のアタッカーともトレードす るチャンスも生まれてきます。個人的には、オリジナルの辞書ファイルが作成で きると共に、そのアカウントを奪うことができるのも魅力的ですが…。 ■0x04.) まとめ  今回の第1回SACCに挑戦した人も挑戦しなかった人も、記事を読んでいただきパ スワード解析に興味を持ってもらえれば本望です。  今後も、こういった形のSACCを続けていくつもりです。次回は解析([k]のほう)、 サーバー侵入、プログラミングなどどのようなジャンルになるかわかりません。 よって、幅広いジャンルを、その日に備えて精進してもらえればと思います。  来月号のWizard Bibleは、かなり盛り上げる予定です。お楽しみに。 ■0x05.) 第1回のSACCに応募してくれた人(かつプレゼント希望)だった人へ  現在東京に出張中で、自宅に応募してくれた人のメールを忘れてしまいました (ノートPCにコピーするのを忘れた)。本当に申し訳ありませんが、もう一度私 宛にメールください。メールタイトル・本文内容はSACCに応募したものですと一 言だけで結構です。メール到着次第、返信致します。お手数ですが、よろしくお 願いします。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第7章: ワンクリック詐欺 --- 著者:MaD x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  ちわわ。正義の味方、白鶴マルこと矢崎マサウキだ。  まどさんのコーナーも今回でちょうど1854862回目となったので、ネット詐欺に ついて研究してみたいと思う。  先日、NHKでもフィッシング詐欺が特集されるほど、インターネットを舞台にし たハイテク詐欺が急増している。日本ではワンクリック詐欺のテクニックを用い た振り込め詐欺が相変わらず主流となっており、まだまだ振り込め詐欺が主流の ようだ。先日も数億円の被害にもおよぶ出会い系サイトをフックにした被害金額 数億円をもたらせた大掛かりな振り込め詐欺が話題となった。  そこで、今回は「ワンクリック詐欺の流れと報復手段」について紹介すること にする。本来「ワンクリック詐欺」とは、掲示板などに書き込まれたURLにリンク させる手口となるが、ここではもっとも身近にある「メールによるワンクリック 詐欺」について、初心者でもわかるようなレベルの話をしておきたい。  XSSなどのテクニカルな部分について語ってもいいのだが、金床氏とかケンジ氏 が嫉妬するから今回はやめておく。能ある豚は尻を隠すというところだ。また、具 体例や法律の解説は長くなるため、ひつもん掲示板に、それらを投稿しておいた ので、それを参考にしていただきたい。 http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi?mode=view&no=306 ■0x02.) メールをフックにしたワンクリック詐欺の手口  メールをフックにしたワンクリック詐欺の手口は、不特定多数への一斉送信か ら始まるが、送信の際、すでにメールアドレスに対して個別に符号の割り振りを おこない、それら符号から新たな符号を生成してデータベースを作り、その符号 を個別にサイトURLのリンクに加えているため、どのメールアドレスの者がアクセ スしたのかが判別できるという点を利用して個人特定をしている。  アクセスした者は、勝手に入会させられた旨をIPアドレス付きで瞬時にメール で通知され、動かぬ証拠が揃っているものと思い込み、かなり動揺することは間 違いない。IPアドレスは単に受け取った環境変数を参照しているだけで、どこの サイトでもやっていることでしかない。 インターネット上でメールアドレスを収集  ↓ メールアドレスに対して符号を用いて関連付け  ↓ 符号をハッシュ化してユーザー情報データベース作成  ↓ ハッシュ化された符号が付いたユーザーにサイトアクセス権を付与  ↓ ハッシュ化された符号をURLに付加してフックメール送信  ↓ ユーザーがサイトにアクセス  ↓ ユーザーが吐いた環境変数よりIPアドレスを取り出す  ↓ データベースよりハッシュ化された符号と一致したメールアドレスを検索  ↓ メールアドレスに対してIPアドレスと会員ID番号を加えた入会金請求フォーム送信  ↓ 入会金未納の請求フォームを連日送りつける  ↓ バカが入金  ↓ 便利屋のおじさんと場末の管理者がソープ嬢を囲って金を社会に戻す  ↓ まどさんが「いいなぁ」と思いながら仕事をするのがアホらしくなる  ↓ 本がなかなか出なくなる  このように色々な意味で出版の世界にまで影響をおよぼすことが見てとれる。  ここで「ハッシュ化」としているが、簡単な方法としてメールアドレスをBase64 エンコードしたものなど多種多様なので、あくまでも一例として考えてもらいたい。 ■0x03.) 個人の特定について  まず、インターネット初心者が一番気になるものとして「個人の特定」という 点だと考える。しかし、現実社会の個人とインターネット上の個人を結びつける ことは非常に難しい。乱暴な言い方をすれば「不可能」といっても過言ではない。  百歩譲って、業者がIPアドレスとメールアドレスをもとにしてプロバイダに情 報開示を求めても無理な話である。  詐欺事件として警察に訴えたならば情報開示もありえるが、それをしたとして も、ワンクリック詐欺を目的としている業者側が訴訟を起こせるわけがない。  だとするならば、自力で情報を集めて、インターネットのみを利用してギリギ リのハッタリをカマしながら入金させるしか方法がない。  では、いくつかのパターンを考えてみよう。 ●情報屋を使って調査する  「情報屋を使って調査する…」などというハッタリ丸出しの方法もよく使われ るが、一件につき数百万円レベルの回収の見込みがあるのならばやってもおかし くはない。しかし、問題は「情報屋」なる者を使ったところで、個人を特定する ためには大金がかかることになる。また、個人を特定したところで、確実にそれ 以上の金額を回収できる保証がどこにもない。それは、法的に認められない行為 をしているからである。そのため、依頼をおこなうことは、まずないだろう。  さらに、その「情報屋」という部分だが、裏社会に存在してはいるものの、そ う簡単にはコンタクトはできないため、もしも、個人特定を目的とするならば探 偵を使うのが関の山だといえる。しかし、探偵といっても浮気調査はできても、 メールアドレスとIPアドレスから個人を特定することは至難の業だといえる。  これにより、情報屋を使って調べるという線は消えたことになる。 ●プロバイダに対して情報の開示を求める  以前、書籍の企画で、ある民事事件が起こり、被害者が弁護士を通して大手プ ロバイダに対し情報の開示を求めたところ、断固たる姿勢で相手の情報を開示し なかった。しかも、これは様々なネット事件が起きる以前の話であり、近年では 管理が一層厳しくなっている。そのため、刑事事件としない限り、プロバイダ側 は情報を開示することはしない。小額の民事訴訟程度ではどうにもならないのだ。  顧客情報が開示されるのは、刑事事件が起きた場合か、内部の者がデータを抜 き取り、それが流出するくらいしか考えられない。ただし、流出したとしても、 それは事件となるケースが多いため、当局が虱潰しに調べてどんどん潰してゆく ことになる。仮にその情報が横に流れたとしても、その情報を使おうとした頃に は、業者側や被害者側がなんらかの策を講じているため、陳腐化した情報になっ てしまうというところだ。  これにより、プロバイダの顧客情報を調べるという線は消えたことになる。 ●ハッカーを使って調べる  「ハッカーなどネットワークのスキルを持つ者を使えば調べられる」という意 見もあるだろうが、それも現在では難しい。ありそうでない話なのだ。  実際に、プロバイダに侵入できるハッカーなる者は存在するが、彼らは「侵入 する」ということと「侵入してデータを盗む」ということには明確な違いを持っ ている。「ハッカー」とは犯罪を好むわけではない(ハッカー/クラッカー論議 は無意味なので割愛)。むしろ、各々のプライドがあるため、そう簡単には他人 に頼まれて侵入することなど決してやらないだろう。  不正アクセス防止法案施行以前の話がまだ残っているために、勘違いされてい るだけのことだ。あの時代は侵入してもお咎めなしであったため、同じサーバー 内にrootが何人もいたりといったことが日常茶飯事であったが、不正アクセス防 止法案施行後の現在は、まず考えられない。  会社でもそうした依頼のメールや電話をたまに受けるが、その段階で同じ言葉 を繰り返している。仮に、大金を提示していたとしても、非常に難しい話だとい える。  これにより、ハッカーを使って調べるという線は消えたことになる。 ●IPアドレスとメールアドレスをもとにネットで調べる  一番ありえる話がこれではないかと思う。  これは、検索などを使い、社会工学(ソーシャルエンジニアリング)を用いて 自力で調べるというものだ。ターゲットがビギナーだったとしたら突き止めるこ とができる可能性があるからだ。  たとえば、検索されるような掲示板に自分の地域情報を書いていたりすると、 それらから辿られる場合がある。リファラーなどといった環境変数においてもそ の一部だ。とくに、自分の個人情報をサイトで公開していたりすると非常に危険 だといえる。  しかし、やる側に回って考えてみると、これらの方法を知っていたとしても非 常に面倒なことであるため、途中で嫌になってしまうはずだ。  つまり、彼らの目的は「あわよくば数万円を振り込むバカがいる」という程度 の目的しかないため、このような面倒な手段はおこなわないはずだ。  これにより、IPアドレスとメールアドレスをもとにネットで調べるという線は 消えたことになる。 ●IPアドレスとメールアドレスをもとにした個人情報特定のまとめ  以上、これくらいしか思いつかないが、いずれしても、IPアドレスとメールア ドレスをもとにして個人を特定することが、どれだけ困難であるかがわかったこ とだろう。つまり「ワンクリック詐欺に関しては無視しておけばよい」というこ とになる。  反対に、反応すればするほど相手にとって有意な情報を与える結果となる。  結果として数回の催促メールが送られるだけで終わる話なのであるから、以降、 一切の情報も与えずに放置しておけばよいということだ。  ただし、それで終わったわけではないことを頭に入れておくべきだ。それは、 そのデータベースを流用して、違うアドレスで別の商売を起こして、同じような アプローチで仕掛けてくるからだ。つまり、一度、かかわったら、その業者から 狙われるということになる。 ■0x04.) 反撃方法について  いつまで続くかわからない不快なメールを無視するだけしか方法がないのだろ うか?  それは、まどさんが許さない。意外に簡単な攻撃方法がある。「サイトごと潰 せばよい」ということになる。そうすれば、少なからず、そのドメインやサイト は一時的ではあるものの消えることになる。これにより請求自体がなくなること になる。  これについてのアプローチはいくつか考えられるが、もっとも簡単な方法を紹 介しよう。 (1)ムカつく業者をリストアップして、メールアドレスのデータベースを作っ ておく。多ければ多いほどよい。  もちろん、whoisなどしておけば名前、住所、電話番号まで調べられるのでさら に効果的な現実社会での攻撃が可能となる。ただし、手慣れた業者の場合、情報 を書き換えていたり、隠していたりしているケースが大半だ。だが、調べるには 越したことはない。 (2)そして、差出人部分の書き換えが可能なメーラーを用いるか、それに近い メーラー用意する。このメーラーについては次回の「ハッカーの教科書・完全版」 で、匿名メーラーが紹介されるので、そちらを参考にしていただきたい。  送信元はもとより、IPアドレスまで情報を操作できるメーラーではあるが、念 のためにネットカフェからおこなうのは基本中の基本だ。どんな相手であれ、な めてかかってはいけないということだ。 (3)ネットカフェでそれぞれお互いの業者のメールアドレスを使って、お互い を装い、喧嘩させる内容のメールをそれぞれに送り付ける。  とくに自分が一番潰したい業者のメアドを送信元にして、違う業者にメールを 一斉送信するという方法になる。内容は「お互いに喧嘩させる」という文面を考 えれば、自ずと浮かんでくるはず。  実際にこれでいくつかのサイトが閉鎖・移転している。  まどさんが社員でなければ、その筋の権威の名前を使い、示談のための謝罪金 を要求したりと、業者相手に振り込め詐欺をするんだけどね。小魚たくさん喰う より、ひつこい攻撃でクジラを一匹喰った方がお腹が膨らむしさ。  ただし、相手が相手。少しでも油断をすると大変な事態になるので、問題が起 きてパクられても絶対に唄わない自信があることが大前提となるので要注意。  このように、クジラを狙った新たな振り込め詐欺が発生する可能性もあるので 業者の皆さんも十分に注意されたし。  へい、あんあ〜ん。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第8章:お知らせ --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○Wizard Bible(http://akademeia.info/wizardbible/)では随時、執筆ライタ ーを募集しています。  扱う内容のテーマは広義での「under ground」です。例えば、ハッキングから サリンガスの合成法などと幅広い内容を考えています。また、各種、特殊な職業 や趣味を持った方のレクチャーなども含まれます。  一回きりでも構いません。また、必ず、毎回連載する義務もありませんのでで きる範囲で構いません。気軽に声をかけてください。もちろん一回書いたことが ある人も気軽に声をかけてください(全く気にしていない性格なので)。 ○Kenji AikoさんがQ&Aを作ってくれました。初めて参加する人でもわかりやすく 書かれていますので、参考にしてください。 http://akademeia.info/wizardbible/wbQandA.html ○支援者、参加希望者用のスレッドを立てました。 http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi?mode=view&no=17 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第9章:著者プロフィール --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■金床 ●Job: プログラマー ●Web: http://guardian.jumperz.net/、http://www.jumperz.net/ ●Mail: anvil@jumperz.net ●Team(Group):JUMPERZ.NET ●好きな映画: 映画はかなり好きで、見まくってます。特に好きなのは「バニラ・スカイ」「12 モンキーズ」「セブン」ですね。また、「パトリオット・ゲーム」や「トータル ・フィアーズ」などのジャック・ライアン・シリーズもかなり好きです。最近で は「コラテラル」がかなり気に入ってます。  それにしても、ハッカーやハッキングが出てくる映画ってやたらつまらないで すよね。何とかならないのでしょうか…。 ■TaKa John Brunkhorst ●Job: Flight Pilot(training) ●Web: http://wbjapan.com/ ●Mail: admin[@]wbjapan[.]com ●Team(Group): Anti-WMAC,KIP Specialist,WarezBrowser ●Comment:  初めまして。今回かなりショートな日本語ぐちゃぐちゃのものを投書してしま いました(笑)。最近の出来事と言えばーWarezBrowser(http://www.warezbrow ser.com/)を復帰することになりまして、KIP(http://kurdinterpol.com/)共々 計画をたてているわけです。新内容は何になるかまだ判りませんが 以前のよう には行かないかもしれません。アカウント停止が最近厳しくなっているしね。す でに日本離れしているので日本のニュースとか何も知りません。Winnyとかいう P2Pファイル共有ソフトがあったのも最近まで知らなかったくらい日本離れです。 何気に日本嫌いだったりします。どこがどう嫌いかなどはここでは言えませんけ れど。時間があればできるだけ投書していこうと思います。これからも宜しくお 願い致します。 ●好きな映画:「Johnny English」 ■Narusase ●Job: Student ●Web: (裏)雑学の博物館(http://k-o-m.hp.infoseek.co.jp/) ●Mail: narusase@mcn.ne.jp ●Team(Group): N/A ●Comment:  こんにちわ、Narusase(ナルサス)です。前回に引き続きハニーポット関連のネ タを書かせていただきました。とか言ってる割に本題が全然でてないと言う話も 聞こえてきそうですが・・・(汗  次回か、その次あたりまでには本題にたどり着きたいなと思ってますのでしば らくお待ちください。  サイトの方はまあ、ヘタレな文章と、未熟な技術、ヘボいプログラムを紹介す るサイトと言うことで、暇があったらあら探しでもしてみてください。誤植とか ミスとかはBBSにでも書いてくだされば、こっそり修正しときます(笑 ●好きな映画:「ローレライ」  さて、最近は映画を見る時間が無いくらい忙しいのですが、最近気になる映画 があります。「ローレライ」です。ちらっとポスターを見かけたとき「なんか押 井 守っぽい構図だな〜〜」と思って、実際に調べてみたら、クレジットに押井の 名前が・・・という話が。どうも、アニメーション関連の大御所ともいえる方が何人 も参加しているようで監督の樋口真嗣とか押井守、庵野秀明、出渕裕などの名前 を見つけました。レビューを見ると好き嫌いのある映画のようですが是非暇を見 つけていってみたいと思います。 ■Defolos ●Job:Student ●Web:none ●Mail:pan1124@luck.ocn.ne.jp ●Team(Group):none ●Comment:  ども、Defolosです。ピッキングとナイフメーキングとナイフファイティングの 訓練、PCが趣味のごく普通の学生です。  今回のテキストはあまりテクニカルじゃない内容で申し訳ないです。また、こ のテキストで解説した銃刀法は私の主観的な解釈も含まれていますし、個人によ って違法と見るか合法と見るかが分かれてしまいます(こういった部分があるの で本来銃刀法は成り立ちません)。ですので、ナイフを持ち歩くときは十分に気 をつけてくださいね。 ●好きな映画:「ラスト・オブ・モヒカン」 あらすじ→http://home2.highway.ne.jp/hisanaga/movie/mohican.html  ジェームズ・フェニモア・クーパーの小説『モヒカン族の最後』を原作にした 映画です。メインBGMも非常によく、おそらく一度はテレビで聞いたことがある人 が多いと思います。感動的な映画で、そういった映画が好きな人は一度は見てお くことをオススメしますよ。  ただ、古い映画なので画質がものすごく悪いです(ーーi) ■Kenji Aiko ●Job: Student ●Web: http://ruffnex.oc.to/kenji/ ●Mail: kenji@ruffnex.oc.to ●Team(Group): N/A ●Comment:  前回(Wizard Bible vol.15)のコメントに誤りがありました。「DESは、総当 りには結構もろいですので、数分もあれば完了します」という部分は誤植です。 いくらなんでも数分で解けるわけがありませんでした(^^;。この場を借りてお詫 びします。あと、セキュリティアカデメイア雑談BBSにてご指摘くださった金床さ んどうもありがとうございました。  現実的には、最速で22時間くらいらしいです(雑談BBSより)。  http://internet.watch.impress.co.jp/www/article/1999/0120/des.htm ●好きな映画:「ショーシャンクの空に」  http://www.amazon.co.jp/exec/obidos/ASIN/B00005HYWQ/  妻とその愛人殺しの容疑で終身刑の判決を受ける、銀行マンのアンディ。無実 の罪ながら投獄されるが、決して希望を捨てず、自由を得られる明日を信じ続け る。一方、古株の囚人レッドはそんなアンディに、「刑務所で希望をもつのは禁 物」だと忠告する。アンディとレッドの友情を中心に、ショーシャンク刑務所で 生きる男たちのさまざまな人間模様を描いていく。(アマゾンレビューより)  あんまり映画はみないんですが、今まで生きてきて一番面白いと思った映画は これです。日本映画で好きなのは窪塚洋介の「GO」。メッセージ性の強い映画が 好きなのかも。 ■MaD ●Job:DATA HOUSE ●Web:http://www.data-house.co.jp/ ●Mail:mad@data-house.co.jp ●Team(Group):h@cksection,ruffnex ●Comment:近況  やっぱ、あややの「へいあんあ〜ん」。 ●好きな映画:「エイリアン4」  映画って、グワー! ってきた奴を、バキューン! って撃って、ドカーン!  って爆発させて、キュイーン! って無事、生還すれば、ほんでええねん。  とりあえず、皆殺しが基本。 ■IPUSIRON ●Job:サイト更新 ●Web:- Security Akademeia -(http://akademeia.info/) ●Mail:ipusiron@ruffnex.oc.to ●Team(Group):hacksection ●Comment:  先日、大航海時代OnlineとLinege2の両方とも引退しました。自分でもこういっ た日が来るとは思っていませんでしたが、これを機会にWebサイトや本の方もがん ばっていきたいと思います。来月(5月)には『ハッカーの教科書・完全版』が発 売される予定です。質・量の共に充実しています。詳細は来月号のWizard Bible で紹介することになると思います。  ちなみに、最近のマイブームは磁気カードです。キャッシュカードのコピーな らまかしてください。でも、最近はキャッシュカードの事件の方が熱いみたいで すね…(残念)。 ●好きな映画:「es」  好きな映画は「エイリアン2」、「コンタクト」、「ターミネーター2」などた くさんあり、ジャンルに関してはパニックやホラーから、感動系まで何でも好き なので、今回は皆に観てもらいたい映画をひとつだけ紹介します(特に面白いと かではないけど、観た方がよいという意味)。その映画は「es」です。この映画 は、スタンフォード大学のジンバルド教授によって実際に行われた心理学の実験 をモデルにしています(アイヒマン実験ではない)。その実験とは、被験者を適 当に「看守」役と「囚人」役にわけて、心理状況がどう変化していくか、という ものです。最初はゲーム感覚であった被験者たちが、自分の「役割」を果たすよ うになり、その「役割」にとらわれ、だんだん精神の異常をきたしていくのです。 看守役はサディスティックに囚人をいたぶり、囚人役は無力感に襲われるように なります。日が経つにつれて、それも限界に達して…。自分がこの実験に参加し ていたらと想像すると色々考えさせられます。