善意を装う C コンテスト 63
ストーリー by mhatta
COBOLは勘弁してだって 部門より
COBOLは勘弁してだって 部門より
tamo 曰く、 "2005 Underhanded C Contest が告知されています。 読みやすくて安全に見えるけどこっそり悪いことをする、という C プログラムを募集するもので、 今年のお題は「画像処理をするだけのように見せかけて、識別情報を埋め込む」です。
FAQ によると、
- 目的は何かを批判・攻撃することではなく、コードレビューの必要性を啓蒙すること
- もし必要であれば、プラットフォームへの依存、C++ の使用、外部ライブラリの使用も可
- 賞品のビールが気に入らない場合は代替品を要求することも可
これやられたらきついだろうなぁ (スコア:3, おもしろおかしい)
Re:これやられたらきついだろうなぁ (スコア:0)
configure (スコア:2, 興味深い)
・put_ppm()で出力されるデータに情報を埋め込みたい
・put_ppm()を直接弄りたくない(弄るとすぐバレそう)
ということを考えたので、
ppm.cの最初で
#include"config.h"
として、
fwriteを置き換えるマクロを生成するconfigureファイルを用意する、
というのを考えてみました。
./configure && make
すると、識別情報を埋め込むppmライブラリが出来上がるのに、
ppm.cを見ても識別情報を埋め込むようなコードは見当たらない、という。
どうでしょ。
ふだんのハマリ所 (スコア:3, 興味深い)
ファイルごとに違うヘッダを include していたりして「あれ~?」って。
あとは if();{} とかも、やりますねえ。
そういうのが使えるってわけですね。
今回のお題とは関係ありませんが、「セキュリティウォリア」っていう本には、
文字列処理が存在しないのにパスワードが存在するログイン画面プログラム
というのが載っていました。バックドアとして使えるなあ、と感心しました。
見ためは絶対 goto で最後に飛んでしまうんですが、パスワード入力でバッファ
オーバーフローを起こしてやればログインを成功させることができるという。
皆さんの「最高に見付けにくかったバグ」をちょっといじって投稿すれば
ビールがもらえるかもしれませんよ。
Re:ふだんのハマリ所 (スコア:0)
スゴイ表紙 [oreilly.co.jp]のヤツですね。
>「最高に見付けにくかったバグ」をちょっといじって...
Cだったらポインタ関係が良さそう。
デバッグで変数の値追ってたら
全く関係ないforループ中で値が変わっていることがあった。
Re:ふだんのハマリ所 (スコア:1)
スタック周りとか使えませんかね?
> デバッグで変数の値追ってたら
> 全く関係ないforループ中で値が変わっていることがあった。
そうなんですよ、全く関係の無い変数への代入で値が変っちゃって。
変数をstatic宣言するとバグが再現しなくって…
デフォでスタックチェックを外すなよ…(T_T >> BCC4.5
学園ドラマなら (スコア:2, おもしろおかしい)
さりげなく良い事してる方が
感動的だけどな。
#そんな手法も今さら陳腐か
ワーム (スコア:0)
Re:ワーム (スコア:1)
名物に旨いものなし!
Re:学園ドラマなら (スコア:0)
だめかな (スコア:1)
Re:だめかな (スコア:1)
いかにも人畜無害な (単純な画像処理をしているかのような)
外見を保っていれば OK でしょう。
Re:だめかな (スコア:0)
Re:だめかな (スコア:1, 参考になる)
kenってユーザーを仕込んでいたって話じゃなくて?
Re:だめかな (スコア:4, 参考になる)
・login.c をコンパイルするとバックドア入りのオブジェクトを出力するような
・Cコンパイラをコンパイル出力するように、
・Cコンパイラに細工していた
という話ですね [ebimemo.net]
ここまで巧妙にやられると、ソースコードレベルでは発見が出来ないんですよね。さすがだと思いました。
Re:だめかな (スコア:3, 参考になる)
"Reflections on Trusting Trust"
http://www.acm.org/classics/sep95/
このコンテストの趣旨は"ソースを良く調べましょ"って事らしいですが,Thompsonは"ソースをいくら調べてもダメなやり方だって出来ちゃうよ”って言ってるので,異なるレイヤのお話でしょーね.ただ,コンパイラのソースを読んだ人が”ちゃんとコンパイルしてる”って”思っちゃう”ようなコードでThompsonの手法みたいな事を出来れば趣旨には合いますね.
まぁそれだと今回のお題からは外れてますが…
Re:だめかな (スコア:0)
→ そのコンパイラバイナリを調べても、それを動かすOSが信用ならん
→ OSバイナリコードを調べても、それを動かすハードウェアが信用な
Re:だめかな (スコア:1)
Re:だめかな (スコア:0)
その物理法則を作るための手法が……
Re:だめかな (スコア:1)
誰もこれをやらなかった。ということか。
# え?objdumpにも細工が?
Re:だめかな (スコア:1)
# わかってるとは思うけど。
着外 (スコア:1, おもしろおかしい)
1bitにだけモザイク処理
安全に見えるけどこっそり悪いことをする (スコア:1, おもしろおかしい)
Re:安全に見えるけどこっそり悪いことをする (スコア:1, すばらしい洞察)
Re:安全に見えるけどこっそり悪いことをする (スコア:0)
#ACですよっ!AC!
表題を見て (スコア:1)
# オレだけかも
賞品 (スコア:0)
平凡ではあるが、SPAM缶とか?
Re:賞品 (スコア:1)
/* Kachou Utumi
I'm Not Rich... */
Re:賞品 (スコア:1, おもしろおかしい)
Re:賞品 (トピずれ:-999) (スコア:1, おもしろおかしい)
Re:賞品 (トピずれ:-999) (スコア:1)
でも、受賞者が日本人か、韓国人だったら、やっぱり代用品として申請するのかな?
個人的には、「維力」で…
/* Kachou Utumi
I'm Not Rich... */
Re:賞品 (スコア:0)
Re:賞品 (スコア:1)
ビールがイヤならルートビア [google.co.jp]にすればいいじゃない (マリー・アントワネット風に)。
('A`)ゥェ
むらちより/あい/をこめて。
IOCCC ? (スコア:0)
# まだやってたんですね>IOCCC
Re:IOCCC ? (スコア:0)
ところで国際ココア・チョコレート・砂糖菓子協会 [candy.net.au]とCコンテストに何の関係が?(w
# ダサいお約束なのでAC
パターンマッチング (スコア:0)
一見便利に見えるけど (スコア:0)
Javaはダメなの?
Re:一見便利に見えるけど (スコア:1, おもしろおかしい)
おそろしいまでにさりげなく
論点をMSたたきにスライドしていける、
その才能に乾杯。
Re:一見便利に見えるけど (スコア:0)
ついでにいうとそれに対する返事もノイズなんで、親コメントはおもしろおかしくないです。
#これもノイズなんでAC
Re:一見便利に見えるけど (スコア:0)
「あー、確かに画像への透かしの埋め込みはただのノイズで、フィルタワークによっては消えちゃうから注意しないといけないよなー」
とか考えてしまいました。
ノイズなんだけど、しきい値を上げても見えなくならないようにしたいといけなくて、
しかもぱっと見でそれと悟られてはいけないんですよね。
Re:一見便利に見えるけど (スコア:1)
ピリオドの直後で改行しちゃってることがしょっちゅうあるぞ。
写植屋を泣かせる馬鹿デザイナみたいなやつが命名したんだな、きっと。
# そういいながら .Mac 会員なのは内緒だ。
Re:一見便利に見えるけど (スコア:0)
それでいいなら量産しています (スコア:0)
わかりません (スコア:0)
どこに細工を仕込んであるのでしょうか?
Re:わかりません (スコア:1)
データがいつのまにかポインタになってるような(^^;
斜め読みしただけなんで最終的に何とも言えませんけど。
Re:わかりません (スコア:0)
Re:わかりません (スコア:0)
Re:わかりません (スコア:1)
そもそも、そのサンプルファイルの説明が
> Here is some really basic code for reading and writing binary PPM images, with corresponding main function.
バイナリ形式PPM画像を読み書きする基本的なコードとそれを使うmain関数を用意しました。
> Feel free to use this as a template for your submission, if you don't feel like using a more full-featured library.
高機能なライブラリなどを使う気がないのでしたら、応募の際のテンプレートとしてご自由にお使いください。
ってことで公開されてるファイルですからねぇ。
Re:わかりません (スコア:1)
処理系によっては動くのかな?
Re:わかりません (スコア:1)
> 処理系によっては動くのかな?
別に動作上は問題ないコードだと思うのですが、
何を気にされてるのでしょうか?
#put_pixel に限らず、構造体を参照渡しじゃなくて値渡しにしてるのは、効率上はすごく気になりましたけど…