2021-02-28

"Hacking: 美しき策謀" Jon Erickson 著

ソフトウェアに、バグはつきもの。機能上のバグなら、その機能を使わなければいい。しかしそれが、セキュリティを脅かすとなると見逃せない。現在の電子機器は、なんらかの形でネットワークに接続されている。自動車はもとより、お風呂やエアコンまで気を利かせて...

いまや、ファイアウォールはもとより、IDS や IPS を設置したところで心許ない。プログラミングのちょっとしたミスが外部攻撃の踏み台となり、ユーザが無意識に誘導されることだってある。なぁ~に、心配はいらん。すでに報道屋や政治屋に煽動されているし...


本書は、ハッカーの視点から論じられ、セキュリティガイドとしても呼び声が高いそうな。

"Hacking" という用語は、巷では悪い印象が植え付けられているが、もともとは違っていた。ライフハッキングという言葉には、集団社会に慣らされた人生を、自分の手に取り戻すという意味が込められる。オライリー君の書群にも Hacks シリーズがあり、ポール・グレアムのエッセイ「ハッカーと画家」でも象徴される。

何事も技術を会得するには巧妙な分析や解析が求められ、なんらかの形でハッキングすることになろう。技術者なら、自分の技術を芸術の域に高めたいと願うのではあるまいか。それが、技術屋魂というものではあるまいか。

ここでは、ハッカー魂というものを垣間見るが、同時に、技術には倫理がつきまとう。原子力倫理、ゲノム倫理、そして、ハッカー倫理と...

本書は、「善玉ハッカー」と「悪玉ハッカー」という呼び方で区別しているが、そろそろハッカーという用語から解放してあげて、「達人プログラマ」など素直に呼ぶ方がいいのでは。一時期、悪玉の方には「クラッカー」という呼び名を与えようとする流れもあったが、うまくいっていないし、集団社会では悪のイメージを与える力の方がやや強そうだ。

似たような悪いイメージを与える語に「オタク」ってのもあるが、たいていの技術屋はオタク風な感覚を持っているのでは。アラン・チューリングだって見るからにオタクだし、いや、映画の影響か...


本書は、バッファオーバーフロー、スニッフィング、DoS攻撃、ポートスキャン、パスワードクラッキング、あるいは、暗号システムの脆弱性を突いた攻撃手法や防御策を紹介してくれる。技術屋にはワクワクする話題だが、模倣犯を呼ぶことになり、その記述には充分な配慮がなされるべきであろう。

とはいえ、秘密主義はすでに破綻している。オープンソース化の流れから rootkit などの侵入支援ツールも充実し、防御側だけでなく攻撃側にもコミュニティが形成され、ソフトウェアの弱点は白日の下に晒されている。パスワードは辞書攻撃に晒され、telnet や rsh/rcp は過去のものとしても、強固を誇っていた ssh ですら餌食に。量子暗号通信が現実味を帯びたところで、攻撃側も量子コンピューティングで対抗してくる。まさにイタチごっこ。いまやソフトウェア工学は、犯罪心理学の領域にある。つまりは、人間本性の領域に...

ちなみに、本書が採用している OS 環境は、Linux ディストリビューションの Ubuntu となっているが、そんな意識は無用であろう...

尚、村上雅章訳版(オライリー)を手に取る。


1. 最も基本的な攻撃対象... 記憶領域

本書は、一般的な攻撃対象に、バッファオーバーフローと文字列フォーマットを挙げている。

バッファオーバーフローは、確保されたデータ幅よりも大きなデータを与えて、近辺のデータ領域を上書きして不具合を起こさせるというもの。データ領域の周辺に悪意のあるコードを埋め込むことも可能だ。

文字列フォーマットは、通常、的確なデータ型が宣言されているはずだが、型キャストなどの操作タイミングによっては別のデータ型で機能させることも可能だ。実際、ウェブサイトでも、特定の文字列を入力すると画面が固まるといった現象を見かけるし、入力パターンによってはシステムの制御権が乗っ取られるかもしれない。文字コードをうまく組み合わせれば、コマンドコードを偽装することもできるのだ。

バッファオーバーフローも型キャストも、その脆弱性は何十年も前から指摘される C 言語の盲点であり、こうした問題はプログラマの責任とされてきた。もう三十年前になろうか、C 言語が高水準言語に位置づけられた時代、コード効率からしてコンパイラ性能も貧弱で、コンパイラの癖を読み取りながら問題になりそうなところを GDB で監視した記憶が蘇る。

では、スクリプト言語の時代ではどうであろう。言語システムに依存度を高めていくのでは、むしろ危険かもしれない。どんなプログラミング言語を使うにせよ、型宣言は細心の注意を払う項目の一つとしてある。おまけにユーザは、頻繁にアナウンスされるセキュリティアラートに感覚が麻痺させられてきた。「脆弱性が見つかったためにパッチを当ててください!尚、今までのところ被害は報告されていません。」などと...

知らず知らずに盗聴されていたら、被害報告もできまい。まったく、知らぬが仏!物理構造からして、ノイマン型コンピュータは、ヒープやスタックをはじめ、記憶領域を第三者に操作されると終わりだ。それは人間とて同じこと。記憶を操作することによって人格までも変えられる...


2. 攻撃の幅を広げる利便性の罠... ネットワーク

本物語のシナリオは、ヒープやスタックへの侵入から、x86 系が物理的に持つレジスタやセグメントの壁を乗り越え、ネットワーク攻撃へと進む。

そしてターゲットは、malloc() 関数から socket() 関数へ。つまりは、生のソケット・スニッフィングへ...

ネットワークに接続されていれば、さらに攻撃しやすくなる。社会の利便性は、犯罪にも利便性をもたらすってことだ。

最も単純な嫌がらせは、DoS攻撃。さらに、DDoS 攻撃で寄ってたかって村八分攻撃を喰らわす。パケットの Flooding では、SYN(接続要求), FIN(切断要求), ACK(認可)が餌食にされ、あるいは、トランスポート層の UDP で偽りの IP アドレスを装ったり、TCP セッションを長時間に渡って専有したり、DNS サーバに大量のリクエストを送りつけたり... トラフィックに負荷をかけ、回線そのものを重くしちまえば、これほど効率的な嫌がらせはあるまい。ping of death も単純でありながら効果的な攻撃法だ。ping なんて数行スクリプトを書くだけで、誰でも Loop 送信ができちまうし、ブロードキャストが攻撃で簡単に利用できることも想像に易い。

ポートスキャンにしても、ルータのログを監視していれば、それほど難しい手法には見えない。TCP/IP の通信で用いられるポート番号は、0 番から 1023 番までサービスやプロトコルで予約されている。そう、well-known ports ってやつだ。なので、通信ログを見れば、だいたい何をやっているかすぐに分かる。それ以外は、ルーティングの開放を設定する必要がある。対戦型ゲームで通信を要求するアプリなどでは。

ルータなどの通信機器は、内側に向けられた既知のサービスやプロトコル以外は、たいていブロックするよう設定されているが、外側へ向けられたコネクションはほとんど遮断しないよう設定されている。利便性を考慮してか、ファイアウォールの内側から見れば、たいていのウェブサイトにアクセスできるようになっているわけだ。侵入はブロックし、発信はオープンという思想だが、なにもシステムに侵入しなくてもデータは盗み出せる。ユーザに喋らせればいいのだ。しかも、無意識に。それは、インテリジェンス工作における諜報心理学と基本的な原理は同じ。何かと繋がるということは、そういうことだ...


3. 脆弱性攻撃用のペイロード... シェルコード

「シェルコードは、脆弱性攻撃用のペイロード」と呼ばれるそうな。ただ、この呼び名には違和感がある。単にシェルを起動することにとどまらず、/etc/passwd に管理者アカウントを追加したり、ログファイルから記録を抹消したり、システムコールを乗っ取ったりすることもできるのだから。いや、シェルを操るという意味では、やはりシェルコードか。

どんなに言語システムが抽象化され、利便性が高められようとも、セキュリティの世界に踏み込むと、泥臭いアセンブラ言語、いや、マシン語レベルに引き戻される。

ちなみに、システムデーモンってやつは、deamon() 関数を呼び出すだけで生成できる。何かの拍子にちょいと call すれば。デーモンとは、UNIX 環境で当たり前のようにバックグラウンドで動作するプロセスのこと。語尾に d を付けてネーミングされることが多く、一般的なものでは、syslogd, sshd, ftpd... などがそれだ。おいらが好青年のウブな新人君だった頃、有り難いサービス群を悪魔と呼ぶのは失礼ではないか?と思ったものだが、どうやら「マクスウェルの悪魔」に由来するという説があるらしい。

昔から、UNIX 環境で生きてきた連中は、再帰的な洒落がうまく、"GNU's Not Unix!" ってのもその類い。その自由な発想がたまらないのだけど、セキュリティを脅かす技術もまた自由の賜物であろう。

いずれにせよ、セキュリティ・エンジニアのスキルは常に、悪玉ハッカーを凌駕するものであることを願いたい。人類の進化には、善と悪の共進化をともなうものだが、それが生物学的な真理とはいえ...

0 コメント:

コメントを投稿