fr33f0r4ll

自分用雑記

CpawCTF2のBad Containerについて

CpawCTF2 Bad Container

この間チャレンジしてみてクソ問だと思ったので、その理由と挑戦する人が引っかからないためにメモを残しておく。

問題としては良質なのでチャレンジする価値はあると思う。問題以外の部分が雑過ぎる。

引っかかりポイント

  • ルートにあるflagはフラグじゃない、誤字も形式も関係ないしフラグとはまったく関係ない
  • 秘密のメッセージは何の指定もないがリートになっているもの。順番も指定されてないが現実的な時間で試行可能なので試す。

ここから先はネタバレありで何が悪かったのかを愚痴る。

悪かった点

フラグ形式

これはBad Containerに限らず別の問題でも見られる問題点だが、フラグの形式が明示されておらず不明瞭になってる。 全体としての形式は一応Noticeに書いてあるものの、sign up, sign in, challengeの問題を解くまでの最短ルートで表示されないのは良くないだろう。 トップページのHomeかchallengeの一番上にでも表示しておくのが一番良いと思う。 探さなきゃ形式が分からないのはストレスだし誤解のもとだ。

CpawCTFの方ではトップページにあるんだからそれに合わせるのが良いと思う。

ハッシュ値

ファイルをダウンロードするような問題では大抵ハッシュ値が掲載されている。 ダウンロード中に破損したのか最初から問題として破損してるのかが紛らわしいので、意図しない破損があるかどうかを確認するためだ。 しかし、この問題ではダウンロードしたファイルとハッシュ値が、少なくとも現時点では一致していない。 ダウンロードされるファイルはzip形式になっているが、ハッシュ値はzipの中身のovaファイルのものになっているからだ。 圧縮したらハッシュ値が変わるということも分からないか、非常に雑な人間が問題を作りテストせず公開したかのどちらかだろう。

公開するファイルのハッシュ値を公開する、必ずテストする。基本的なことで防げる。 今まで誰一人として質問しなかったのか? 質問されたのに修正しなかったならとても不誠実な態度だと言える。

flag

問題の中で渡されるVMのルートディレクトリに存在しているファイルの名前が悪すぎる。 100人に聞いたら100人がこの中にあるものがフラグだと思うだろう。 このファイルの中身も最悪だがそれは後にしておく。 CTFにおいて、flagと書いてあるが実はフラグではありませんでしたなんて問題は出すべきじゃない。 つまらないし意味がない、スコアサーバにDoS攻撃されたいなら止めないが。 意図したものならともかく、何も考えてないだけに見える。

hintとかルートにあると目に付くが誤解のない名前にするべきだ。 フラグを探したいのであってフラグかどうかを試し続けたいわけじゃない。

誤字

flagでも書いたが、flagの中にある文字列が最悪なことに誤字ってる。 "I Love Conainers"だ。 そのせいで、フラグとして受理されなくてもそれがフラグじゃないからなのか、誤字だからなのか、運営がミスをしてるからなのか判別できない。 当然、誤字を修正しないやつが設定したフラグが誤字ってない保証などない。 もしかしたら小文字で設定する馬鹿かもしれないし、何の指定もせずに空白を_に置き換える愚か者かもしれない(フラグの形式も明示しないし誤字を放置する連中の何を信頼できるというのか)。

埒が明かないので問い合わせてみたが、この文字列はフラグじゃないという回答が得られた。 誤字ってるのにまさにこの文字列がフラグじゃないことが分かっても何の役にも立たない。 それはフラグを投げれば分かることだ。 せめて誤字していることに関する回答ぐらいすべきだろう、意図したものではないなら作問者の明確なミスなんだから。 これまでに一回も指摘されてないとは考えにくいが、まあそれはありえるかもしれない。 しかし一切問題のテストをしてないのか? テストすればすぐに気付くと思うが。

その上、問い合わせしてから数日立つがハッシュ値からして修正されていないようだ。 まあすぐに動けないこともあるだろうし、またあとで確認してみよう。 今回の問い合わせで作問者はこの誤字について知ったはずだ、修正されなければそいつはクソだ。 少なくとも問題文中で告示すべきだ。

ともかく、誤字は指摘されたら修正すべきだし、公開前に誤字が残らないように確認すべきだ。 解いてみた限りではこれは一応ヒントなのだが、tが抜けていることとは関係がなさそうな問題だった。おそらく本当に単なる誤字なのだろう。

フラグについて

取得したスクリプトファイルを見ると、hintとしてフラグが指定されている。 もうhintという単語使ってるんだからflagじゃなくてhintでいいだろと感じられる。 このヒントを簡単に説明すると、secret_messageを2つアンダーバーで繋げたものがフラグになるらしい。 このヒント自体には問題はないと思う、問題はこの秘密のメッセージだ。 この秘密のメッセージを解読するにはページを見ろみたいなことが書いてあるのだが、その肝心のページに書いてあることのどれが秘密のメッセージなのか一切書いてない。 そのページ自体、ヒントが見れるならもう見ているはずだからsecret_messageとはっきり記載してしまっても問題はないはずだ。 にも関わらず何も書いてない。 不要な曖昧性は排除するべきだろう。 確かにページ中に不自然なリートのフレーズはあるので、それが秘密のメッセージの片割れだと考えることはできるが、この時点ではもう片方が分かっていないので無駄な試行を生む。 特にI loveで始まるもうひとつのフレーズが載っているのがflagと合わせて非常に紛らわしい。 この問題の本質は仮想マシンやコンテナ技術のフォレンジクスであって、紛らわしいフラグをどれが正しいのかと無駄に試させることではないはずだ。

ちなみにもう片方もsecret_messageかどうかの指定はない。まったく関係ない文字列かもしれない疑いは最後まで晴らせないわけだ。 リートなので直感的に分かるが、いくつかのCTFを経験したから分かるというだけで慣れてない人間にとってはいい迷惑だ。

単純にsecret_message: xxxxxと書けばいい、それだけで不要な混乱をなくせる。

質問に対する対応

誤字でフラグが通らないのか、それともこのflagという馬鹿が付けたとしか思えない紛らわしい名前のファイルの内容がフラグとは何の関係もないのかを確かめるために運営の人に質問をした。 常設のCTFなので対応が遅いことは仕方ないし、解法に直接関することに回答できないのも仕方ないだろう。それは問題ではない。 だが、誤字が入ってることについてわざわざ言及されたのに「その文字列はフラグではありません」などというクソの役にも立たない、質問する前から分かっているようなクソのような回答しか返せないのなら何の意味もない。 やってることがフラグと送信フォームと同じじゃないか、そんなことはフラグを送信したから分かっている。 しかも最終的にはトラブルなどについての対応しかできないときた。 それなら作問者にたらい回しにする必要があるか? 最初に質問した人だけで十分なはずだ、どうして待たせた? 極めて不愉快だった、特別なサービスを要求するわけではないが無意味に浪費される時間とコミュニケーションほどフラストレーションが溜まるものはない。 でもこの点については仕方がない、プロが仕事してやってるわけでもないのだからある程度は適当なものだろう。 そういうわけで運営があまり良くないのは許容できることではあるが、これだけ積み重なってるとそんな気も失せてくるのも事実だ。

誤字についてわざわざ言及されたならその場でそれを訂正するべきだ。はっきりと正しくはcontainerだと明示するべきだ。 そしてそれがフラグに影響しないなら、この誤字による影響はありませんだとか言うべきだろう。 フラグじゃない文字列をフラグかどうか試すクソ問題を作った自負があるなら別だが。

良かった点

人間的に劣っているのでストレスの捌け口にしたが、この問題は別に問題として悪いわけじゃないと思う。 むしろ技術やシステム、ソフトウェアに対する知識と理解がなければ解けない、良い問題だった(その分悪かった点で台無しだが)。 自分の悪評を挽回するために良かった点を上げていこうと思う

Linuxについて

この問題では最初に仮想マシンをダウンロードしてそれを起動するのだが、ある理由でログインできなくなっている。 Linux自動起動や通常の方法でログインできなくなった場合の対処について知ることができる良い障害だった。 ある程度の分かりやすさがあるのも良い、あくまで導入だった。

フォレンジクスについて

ログインしたあとの調査も、オーソドックスでためになる。flagは別としてだが。 おそらく不正アクセスなんかの調査でも、調べる対象になるところに次のヒントがあるのは素晴しい。 楽しいだけのクイズじゃない問題は良問だと思う。

Dockerについて

DockerHubについて知ることができるだろう。 Dockerを触ったことがない人が学ぶきっかけにもなるし、これからはコンテナ技術を使っている場合のフォレンジクスも増えるだろう。 題材として良いと思う。

最後のメッセージについて

Dockerの仕組みを知っていなければおそらく解けないはずだ。 知ってはいたが具体的にやったことがなかったため、とても良い勉強になった。


あまり具体的に書き過ぎるとネタバレになりすぎるため、伏せ気味に書いた。

まとめ

色々書いたが問題としては良いということは強調しておく。 問題としては良いだけに、それ以外の雑さ加減が際だっているのも事実だ。 この記事が目に付いて修正されることを願う。 直接言うだけのコミュニケーション能力はない。 そもそも勝手に悪いと思ってるだけで一般的にはそうでないかもしれない。 だからといって考え方は変えないが、この雑な問題が本当に良いかどうかは考え直して欲しいところだ。