タイトル/名前 | 更新者 | 更新日 |
---|---|---|
C言語系/「デーモン君のソース探検」読書メモ/11, file(1) | msakamoto-sf | 2010-01-14 22:12:56 |
C言語系/「デーモン君のソース探検」読書メモ/10, tail(1) | msakamoto-sf | 2010-01-14 17:45:24 |
C言語系/「デーモン君のソース探検」読書メモ/09, mv(1) | msakamoto-sf | 2010-01-14 01:10:33 |
日記/2010/01/14/標的型攻撃と予行演習 | msakamoto-sf | 2010-01-14 00:55:49 |
日記/2010/01/13/jonesforthのgasによるコンパイルと"--build-id"オプションなど | msakamoto-sf | 2010-01-13 02:27:55 |
C言語系/「デーモン君のソース探検」読書メモ/08, test(1) | msakamoto-sf | 2010-01-12 21:46:41 |
C言語系/「デーモン君のソース探検」読書メモ/07, clear(1) | msakamoto-sf | 2010-01-12 18:55:17 |
日記/2010/01/10/「デーモン君のソース探検」、1/3まで到達。 | msakamoto-sf | 2010-01-10 16:39:33 |
C言語系/「デーモン君のソース探検」読書メモ/06, factor(1) | msakamoto-sf | 2010-01-10 16:35:33 |
C言語系/「デーモン君のソース探検」読書メモ | msakamoto-sf | 2010-01-10 15:48:40 |
お題:"file"コマンドがELFファイルを認識する流れを追跡せよ。
※今回はあまり細かい所は見ずに、ざっと関数呼び出しの流れだけを俯瞰するに留めます。「デーモン君のソース探検」の方でも、fileコマンドのソース自体がそれなりに量があるためか細かいコードは紹介されて居らず、ELFファイルの解析までの関数呼び出しフローとELFファイルの構造がメインになっています。
お題:tailコマンドの"-f"オプションを調査せよ。
今回も、tailコマンドのmanページで使い方をおさらいしておく。
tail [-f | -F | -r] [-b number | -c number | -n number] [file ...]
"-f"はファイル監視モードを指示し、普段良く使うオプション。"-F"は"-f"に似ているが、5秒ごとにファイル名が変更されたりしていないかチェックし、もしそうなら再オープンする。syslogなど、ローテーションされるファイルを監視する時に使うと便利。
"-b", "-c", "-n" は初期表示するサイズ。順に、512バイトのブロック単位、バイト単位、行単位で指定する。
それではソースの探索に進む。
$ locate tail.c /usr/src/usr.bin/tail/tail.c $ cd /usr/src/usr.bin/tail $ ls CVS/ Makefile extern.h forward.c misc.c read.c reverse.c tail.1 tail.c
幾つかのファイルに分かれている。とりあえずtail.cから探索を始める。
お題:メールスプールのコピーを取るプログラムを作成する場合に注意すべき点を、mvコマンドのソースと絡めて調査せよ。
※「デーモン君のソース探検」の方では、メールスプールのコピーを取るプログラムの作成で"mvコマンドをexecしてはならない"という条件をヒントに探検が始まります。こちらの読書メモの方では、プログラムは作成せず、mvコマンドのソース探検だけに留めておきます。
というのは・・・メールスプールのコピー周りでのファイルロックがもう一つのテーマになっているのですが、そちらの方は調査対象のソースがかなり限定されている上に、解説も書籍の方だけで充分だと思ったからです。
まぁぶっちゃけ、mvのソース調査だけで時間がかなり掛かってしまったというのもあります(APUE:Advanced Programming in the UNIX Environment まで引っ張りだす羽目になったし・・・)。
それでは、どうぞ。
なんとGoogleが標的型攻撃を受け、その影響で中国向け検索サービスの提供を続けるかどうか微妙な状況になりつつあるらしい。
標的型攻撃については、以前JPCERT/CCで「セキュリティ予防接種」という表現で、電子メールを使った標的型攻撃の予行演習を行い、調査報告書を公開している。
以前、「予防接種?面白い表現だなー」と思ってこの報告書・・・だったか、少なくとも標的型攻撃の予行演習にかんするIPAかJPCERTの報告書をざらっと見てみたのだけれど。
攻撃者が作成した電子メールの文面が、マジ正規と見分けつかねぇwwww
ぱっと見どころか、普通に注意して読んでいても殆ど違和感の無い文面で、なるほど、これならついつい釣られて添付ファイルを開いたり、メール文にあるURLリンクを踏んでも無理ないわ~・・・という位に「良く出来た」文章になっていた。
う~ん・・・怖いな~~。
さらに標的型攻撃の場合、その性質からウィルスソフトベンダなどが用意しているハニーポットに引っ掛からないため、ベンダ側も情報を集めづらい点がある。
そして用意周到に準備された電子メール、添付ファイル、Webサイトにより、そもそも標的が攻撃された事自体気づかないケースもあり得る(添付ファイルやリンクを開いた先のWebサイトを「ホンモノ」と勘違いしてしまい、攻撃されたと認識出来ない)。
SPAMメールは元々困りものだけど、こうまで電子メールが悪用されると・・・電子メール絡みのセキュリティソリューションは、まだまだ開拓の余地があるのかも知れないし、同時に、見慣れない相手から来た電子メールは相変わらず危険物として取り扱わねばならない状況が続くのね・・・。
docs.komagata.orgの「ガチ鬱プログラマー日記」のRSSフィードを読んでいると、暫く前からjonesforthというアセンブラで書かれたForth処理系をLinuxのgasでコンパイルしようとして上手く行かなかったり、謎のオプションでエラーになったりトラブルに突き当たっている。
同じくアセンブラに手を出した人間として、捨てておくわけにはいかない。
というわけで自分もCentOS5.2(古っ)上でjonesforthのコンパイルに挑戦してみた。
ldとgasのバージョンは以下の通り:
$ ld --version GNU ld version 2.17.50.0.6-6.el5 20061020 ... $ as --version GNU assembler 2.17.50.0.6-6.el5 20061020 ...(全て表示する)
お題:"test"コマンドの中身を追跡せよ。
シェルスクリプトで良く使われる"test"コマンド(="["コマンド)の仕組みを調べてみる。
※なお、今回はBNF(バッカス・ナウア記法)や字句解析・構文解析などをある程度既知のものとして、駆け足で通していきます。
これら前提とする知識については、「デーモン君のソース探検」を参照するなり、専門書(コンパイラ関係)やWikipediaなどを参照して下さい。
C言語にカテゴライズして、次のページにまとめました。
C言語系/「デーモン君のソース探検」読書メモ
本を目で追うだけなら「なんとな~く」でさらっと流せる分量なのですが、実際にコンソールでソースを追っていくと、周りのコードも目に入ってきたりして、とても「さらっと流せる」ような内容では無かったです。
やっぱり、実際にコンソールでソースを見てみると、頭の働きが違ってきますね・・・。
引き続きデーモン君と一緒にソース探検をしていきたいと思います。
NetBSD 1.6 のソースを題材に、BSDやUNIXで良く使われる関数やコマンドのソースを調べることで、C言語で実際に使われているテクニックやソースコードリーディングのコツを学んでいく書籍です。
細かい内容は本書を参照して貰うとしまして、実際にmsakamoto-sf自身が本書と共に、自分で調べていったメモ書きを残していきます。