トップ 最新 追記

日々の破片

著作一覧

2021-09-05

_ 三体Ⅲと火の鳥未来編

そういえば三体Ⅲを読了しているのだが記録していなかった。どうも6月中には読み終わっているらしい。

三体Ⅱまでのおもしろさは、特にが抜群だったが、世界を変えるのは憎悪なのか愛(いや尊厳と言ったほうが正確かな。自己の尊厳を持つ者のみが他者の尊厳を尊重できるわけだから)なのか(それはすべてを破壊したいという衝動なのか、今あるものを護るという決意なのかと置き換えられる)という人類にとっての大命題を、人類の向こう側に正直者(極端な経済合理主義者と呼んでも良い)の三体人を配置することで最初は中国、そして全世界、さらには遥か数100年後の未来までの人類について考えてみた、ということにある。

が、Ⅲの死神永生はそこを遥かに通り過ぎて行ってしまってびっくりした。範囲を本当に宇宙規模に拡大しているのだ。

どんなに小さな星であっても、見上げた空のそこにあるということは美しい。

三体Ⅲ 死神永生 上(劉 慈欣)

が、おれはこれを小学生の頃に読んだな、という思いがどうしても残る。

火の鳥はラッキーなことにまだCOMの別冊(今でいうところのコンビニ漫画形式の総集編みたいにまとめたやつ。ただし判型はでかい)で1から順番に読むことができた。ただ、3だけは単行本化された正方形に近い妙な判型ので買った覚えがある。いずれにしても手元にはもう無い。が、死ぬほど読み返したので大体記憶している。

【カラー版】火の鳥 1(手塚治虫)

1の黎明編は、南方からやってきたナミとナギの姉弟(だと思うがさすがに曖昧だ)から始まる。多分、イザナミとイザナギで、ナギは素戔嗚尊の役回りも持っていたし、それにあわせてナミは当然天照大御神の役回りも持っていた(と記憶している反面、卑弥呼の役回りの人が天照大御神の役回りを兼ねていて、かつ卑弥呼とナミは別人だったような)。あと、弓彦というグリーンアローのようなロビンフッド(反体制派ゲリラ)と、猿田彦、そして半島から騎馬軍団を引き連れて侵攻してきた邇邇芸命(神武天皇でもある。本筋とは関係ないが、現在の大和民族起源説とは異なる起源説が元ネタになっているのだろう)がすべてを薙ぎ倒して国家を建設する。

(ここまで書いて書影を取るのでアマゾンを見たら紹介文にヒナクとナギの姉弟と書いてあって、??となった。ヒナクというのは確か穴の中で弓彦と生活することになるのではなかったか。ということはナミというのはおれの想像による補完で、あくまでも天照大御神の役回りは卑弥呼だな。)

と言う具合に、古事記と日本書紀と当時の古代日本史観を混ぜた大きな物語(憎悪と愛の物語である)に永遠の生命を与える火の鳥(卑弥呼が渇望し、弓彦が射に行き、邇邇芸命は断固として無視する)を絡ませて抜群におもしろかった。

で、未来編を買って読み始める。

というか、なぜ1の黎明編(日本の黎明という意味だろうということはわかる)の次が未来編なのだ? とは不思議に思うのだったが(その後、過去-未来を交互に繰り返して最後に現在へつなげる大構想の下に書かれた作品だと知る)。

火の鳥2 未来編 (角川文庫)(手塚 治虫)

で読み始めると5大陸それぞれがコンピュートピア化されていてあっという間に世界大戦がはじまり人類が滅亡してしまう。

はぁ?と思う間もなく、火の鳥の血を飲んだため永遠の生命を持つことになった男がさまざまな試行錯誤の末、人類を再創造する(アミノ酸を海に流すシーンは忘れられない)。この作品の時間のスケールには本当にびっくりした。

まさに、三体Ⅰ、Ⅱに対してⅢだ。


2021-09-20

_ ネットワークプロトコルハッカーズガイド

アスキーの鈴木さんからもらったネットワークプロトコルハッカーズガイドを読了。途中間が空いたが久々に技術書を完読した。えらくおもしろかった。

本書は、題名からはネットワークプロトコルをハックするためのガイドに見える。が、実際のところカバーしている分野はネットワークプロトコルには限定されない。どうも筆者は各種脆弱性ハンターでIEや.NET Frameworkの脆弱性をばんばん見つけていた人らしい。筆者の偉業については「まえがき」でマイクロソフトセキュリティ部隊のメンバーだったらしいキャティ・ムースリ(良くわからないからフランス語読みしてみた)という人が書いていて、これも興味深い。

カバーしている分野が広範なのは、ネットワークプロトコルをハック(解析したり介入したり)するには、パケットの構造を調べ、個々のパートをぶつ切りし、送るデータを変えてみて、中間者を入れて暗号を復号して解析して再暗号化する必要があり、そのためには送り元のプログラムが何をしているか調べ、その動作に介入し、送り先のプログラムが何をしているか調べ、その動作に介入する必要があるからだ。

早い話がコンピュータソフトウェアのバイナリーレベルでのデバッグ技術が必要なのだ。

というわけで、本書はバイナリーハックの本なのだった。しかもガイドなので、これこれするにはこういう技術が必要で、そのためのツールはこれこれで、こんな使い方をする、という内容をすごい勢いで紹介していく。そのため完全に理解するには、常に本書には書かれていない「その先」が必要となる。

とはいえガイドなので、「こんな使い方をする」を実際に試してみて自分向きではないと思えば、後回しにすれば良い。最終的には、何か不可思議な障害が発生したときに当たりをつけたり、当たりをつけるための調査をするために必要な見取り図が頭の中にできるだろう。

Binary Hacks ―ハッカー秘伝のテクニック100選(高林 哲)

(バイナリーハックという点ではオライリーのバイナリーハックも抜群だが、こちらは15年前の本なのか。とはいえELFはELFだしバイナリーはバイナリーだが、DEPやメモリカナリなどの普及は現在ならではの気がする)

本書は付録を除くと10章を約300ページにまとめている。

各章は以下の内容を持つ。

第1章は、「ネットワーキングの基礎」という題で、レイヤ構造(さすがにOSIは出てこない(物理は層ではなく切り離しているし、セッションとプレゼンテーションは捨てているので4階層)のはTCP/IP時代では正しい)とパケットのカプセル化とルーティング(重要)について解説。

第2章は「アプリケーショントラフィックのキャプチャ」で、Wiresharkを使って、までは本書のタイトルからは当然だが、続いてstrace、DTraceを使ったシステムコールのキャプチャに移る。ここまでは受動的なキャプチャだが、さらに能動的なキャプチャとしてプロクシを使った介入に進む。おれが驚いたのは現在でもSOCKS(というプロクシのためのプロトコル)が生きていることだった。知らなかった。

2章では、DTrace用に.dスクリプトの例(動く)や、C#を使った簡単なプロクシのサンプル(動く)が出てくる。いずれも断片だったりするのだが、動作させるために必要な情報は含まれている。DNSサーバー(ターゲットをブラックボックスのままにして接続先を無理やり変えるために必要)についてはC#の動作するリストもある(たかだか15行)。

第3章は「ネットワープロトコルの構造」と脱字がある(誤字脱字などについては、本日記の最後にまとめる)のはともかくとしてパケットを構成するデータ型についての解説などになる。この章はすごくおもしろい。可変長にするための方法としてWASMと同様なMSB待ちのデータは、おれにとっては今年になって(WASMが先だったが)初めて知った方法だった(JavaのUCS-2エンコードがこれに近かったかな)。さらにテキスト系としてMIMEやBase64なども本章で説明される。

第4章は「アプリケーショントラフィックの高度なキャプチャ」で、冒頭の「本書の使い方」ではスキップして読むことになっている(ということは、本書は構造的に書かれているので、位置は第4章であるべきだが、内容の詳細度では別格ということになる)。2章の深堀りなので、DHCPをだましてDNSサーバーを入れ替えたりARPに毒を入れてキャプチャを仕掛けたノードをルータに見せかけたりする方法を説明する。

第5章は「ネットワークからのプロトコルの解析」。実験台用のC#で作ったチャットアプリケーションを素材として、パケットを受動キャプチャしてプロトコルを解釈したり(そのために、Wireshark用のクラックスクリプトをLuaで記述する例が出ている)仮説を検証するために、キャプチャしたバイナリデータをPythonスクリプトで検証する(ちょうど低レベルのユニットテストコードのように目検アサートさせる)。チェックサムらしきものが本当にチェックサムか計算させたりするところは抜群。最終的にC#でリアルタイムプロトコル解析用のプロクシを開発する。この章も抜群におもしろい。

第6章「アプリケーションのリバースエンジニアリング」では、一転、実際に動作しているクライアント、サーバーをハックするために、アセンブリの基礎(なぜかx86だが元の出版年代の2017だとわかりやすさ優先でおかしくもない)、ソースコードがどうバイナリとなるかの説明(そもそもインタプリタとはコンパイラとは、のような議論は当然しない)、実行ファイルの形式の簡単な説明(PEとELF。さすがにCOFFは無い)、介在するためにソケットの基礎、IDA Freewareを使った逆アセンブルの速習(操作方法や画面の読み方解説つき)などが続く。アセンブリが終わると、今度は.NETとJavaのVM言語のリバースエンジニアリングについての簡単な解説(ただしツールの使い方の説明は画面つきである)。そして参考資料へのポインタとなる。
これ以上くだくだしく書いてもしょうがないし、この先へ進みたい人間には必要十分な取っ掛かりとなる。

第7章が「ネットワークプロトコルのセキュリティ」として機密性、整合性、偽装耐性(サーバ、クライアントそれぞれ)についてPKIに至るまでの要素技術を解説する。内容に対してえらく説明が短いので、とにかく読んでいて頭を使う必要があって、これもまたおもしろい。あまりにおもしろいので、自分でパディングオラクル攻撃の実装をしてみた。要は、データ復元処理は次のように書けということだ(自分で書くのであれば)。

data_is_valid?(data)
  start = Time.now.to_f
  valid = false
  begin
    encrypted = decrypt(data)
    if encrypted
      valid = validate(encrypted)
    end
  rescue => e
  end
  waiting = 1.0 - (Time.now.to_f - start)
  if waiting > 0
    sleep(waiting)
  end
  valid # どこで失敗したかは応答には含めない。経過時間も常に一定以上(ここでは1秒)となるようにする。
end

第8章「ネットワークプロトコルの実装」では、ターゲットとなるトラフィックへの介在方法について解説する。キャプチャした実データをプロクシを使って改竄して送信したり、元のプログラムを再利用したりする。再利用といってもバイナリーハックの世界なので、.NETやJavaではリフレクションを駆使し、アンマネージドではPython+ctypesを使って元プログラムの関数呼び出しを再構成する(Rubyならばfiddleを使う)。この章も普通におもしろい。さらにTLSをごまかすための中間者攻撃の方法についても解説する。

第9章「脆弱性の根本原因」は白眉かも知れない。たった24ページだが、要はそういうことですな、という脆弱性のパターンを解説してある。アンマネージドでのスタックオーバーフローに始まりディレクトリトラバーサル(びっくりすることに2021年でも出てくる)、ユーザーの列挙(これはイントラネットとインターネットで作法を変えるべきやつだ。でイントラ流儀しか知らない人がちゃちゃを入れたりする)、SQLインジェクションまでの主な脆弱性のパターンについて疑似C言語(直接メモリをいじることができるのでCのはずだが、型や関数定義が微妙に簡略化されている)のコード片で説明している。

第10章「セキュリティの脆弱性の検知とエクスプロイト」は、9章の対となる章で、9章のようなバグを見つけるためのテスト方法、クラッシュしたプログラムの原因を探る方法と、プログラムのクラッシュを防ぐための最近のCPUとOSの仕組みについて解説する。ここで利用されるのは、GDB、CDB、LLDBの各バイナリデバッガー(主にGDB)。特に主眼となるのは、スタックとヒープ破壊によるエクスプロイトの解析で、デバッガの使い方とあわせて実に参考になる。そして、具体的にエクスプロイトがどう悪用されるのかの例として、送り込まれたアセンブリの断片を実行するためのCコードと各種システムコールを行う例をexit(DoS用)write(データ破壊)execve(Unixらしく自分で作らずにコマンドを組み合わせる)を呼び出すx64アセンブリ(ここではnasmを使う)の書き方(相対アドレスの求め方を含む)が解説される。で、DEPやメモリカナリ、ASLR(スタック上の変数位置を実行の都度変更する)といったCPUやOSが行う対抗措置について解説する。痺れるなぁ。

というわけで、網羅性、簡潔性、奥が深い(解説は広過ぎて浅いが、こればかりはどうしようもなく、よくも300ページでまとめたと感動すらする)の3拍子が揃ったすごい本だった。

ネットワークプロトコルハッカーズガイド キャプチャ、解析、エクスプロイトの理論と実践(James Forshaw)

_ ネットワークプロトコルハッカーズガイド(正誤)

おれが気づいた点。

P.25「もう少し創造力」→「もう少し想像力」

目次,P.41「ネットワープロトコルの構造」→「ネットワークプロトコルの構造」

P.47 3Fの「?」のフォントが妙過ぎる気が……

P.53 7ビットの可変長とされた16ビット分「0x80, 0x00」→「0x80, 0x01」(P.44ではそうなっている)

P.61 MIMEエンコードされたデータ。間違っているのではないが、text/plainのHello World!に対してHTML片とは考えなかったので長すぎるのでバグかと思った。(メールらしいのでOKなんだけど)

P.131 リスト5行目「inet_pton("0.0.0.0", ...)」→「inet_pton(AF_INET, "0.0.0.0", ...)」

P.187 「PFS(Perfect Forward Secrecy)」間違っているのではないがさすがにぶっきらぼうに過ぎるのでは……(本書の性格上、自分で調べられないなら読んでも意味ないだろ、という感じなのかも知れないが自分にとって初耳系はやはり気になる)

P.206 「.NETの型はJavaのクラスであり」→(これは一般語ではなく構文要素なので)「.NETのTypeに相当するのはJavaではClassであり」

P.213「中間者攻撃を積極的に仕掛けて」→(どうも気になる日本語。というのは対語となる「消極的に仕掛ける」というのがあり得ないからだ。activeの訳なのかな)「中間者攻撃を仕掛けて」で良いような。もしかすると2章の受動的/能動的キャプチャに類する能動的中間者のような用語なのかも知れない(原文みないとわからん)。

P.222 「ファジング」→ ボルドにするなら「ファジングについては10章で解説する」という脚注を入れたほうが良いのでは? ここでは何も説明されていない。

P.224 「をを」→「を」

p.242 「疑問符(?)は英数字に置き換えられる」→ うーん、ワイルドカードの意味なのだろうけど、意味が不明過ぎる。次ページに主な指定子が表で示されているから「?の部分はデータに合わせて置き換える(表 9.2参照)」かなぁ。

P.280 「最後のNUL」→「最後のNULL」

P.289 図10.11の← → は4バイト分のはずなのに右端2バイト分のみを指している。


2021-09-22

_ 幕末の影

玄海で水炊き食いながらご自由にお持ちくださいの江戸楽の9月号を読んでいたら、浮世絵に見る月見のような記事があって、ええと目が開かれた。

西洋絵画を学んだ歌川国芳が浮世絵に影を導入したとある。

それで頭の中で広重や北斎や国芳自身の画をいろいろ思い出すと、確かにどこにも影がない。

国芳の画もほぼすべてにわたって、同様に影を描いていない。(浮世絵検索で数千点眺めた)

しかし、新吉原には確かに影が描かれている。

新吉原

月に照らされた足元にアクセントをつけてみたかったのかも知れないが、西洋絵画を学ばなければ影を描くということはなかったらしい。

なるほど、明治の錦絵の時代になっても影を描いたものは少ない。(明治~昭和初期の錦絵に見る自転車のある東京の町並み

そういわれてみれば、とふと気づくわけだが、マンガ(劇画含む)にも影はあまり書かれていない。試しに、ベルセルク(細かな描画の例として最初に思いついた)を眺めると、俯瞰で戦うシーンの足元に影が書かれているものはあるが、ほとんどのコマに影は描かれていない。

どう考えてもベルセルクが浮世絵の影響を受けたとは考えにくいので、影をスルーするというのは日本の伝統なのではないか? という気分となる。

それでもいろいろ他の作者含めてマンガを眺めて気づいたが、そもそも足元から全身を描画することが少ないというのがまずある。書いてあってもごちゃごちゃするのを避けるためか、ほとんど足元にささっと線を引くくらいでやはり描いていないものが多い。

むしろきちんと影を描くのは心理描写(主に孤立感や絶望を表現する)のための特別なコマの場合のように見える。

(東京卍リベンジャーズから引用)

もちろん例外はあって、虎鶫にはほぼすべてのコマに影が書かれているが、それは全身が書かれたコマが多いということから来ているのかも知れない。

虎鶫 とらつぐみ -TSUGUMI PROJECT-(1) (ヤングマガジンコミックス)(ippatu)

(虎鶫は現代に蘇る宮谷一彦派(マンガ的な誇張が無い美しい筋肉の動き)という感じの鮮烈な画風で好き)

では、西洋には影があるのか? と、手元にある海外漫画というとバンドデシネしか無いが(フランクミラーとかはあるがすぐには引っ張り出せない)適当に日本のマンガに影響を受けたといっているバラックのラストマンを見てみると、基本的にどのコマにも影がある(無いコマももちろんある)。

影ってなんだろう? 画においてはモチーフでもないし主役でもないから省略できるはずだ。むしろ西洋画のほうがおかしいのではないか? と考える。

そこで、明らかに実用性を意識して描いている西洋の画家としてクラーナハを思いついていかにも(当時の)おかず性を意識した作品を見てみると……影を描いていた。

(ここまで)

本日のツッコミ(全2件) [ツッコミを入れる]

_ corpus [漫画家だと板橋しゅうほうが比較的豆だと思います。影についてはストイキツァ『影の歴史』やバクサンドール『影と啓蒙』が参..]

_ arton [> 影についてはストイキツァ『影の歴史』やバクサンドール『影と啓蒙』が参考になる おお、おもしろそうです。どうもあり..]


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え