SECCON2013 北海道大会に参加しました

closeこれは 3 年 11 ヶ月 24 日 前に投稿されたものです。最新のものではありませんので、間違っているかも知れません。

まさか3ヶ月弱ぶりの更新になるとは思っていませんでした。

さて、昨日の12月1日に、「SECCON2013 北海道大会」に参加してきたので、その報告をします。
さらに、前日には「Wiresharkパケット・コンテスト」にも参加してきたので、その報告もします。

まず「Wiresharkパケット・コンテスト」

結果から言えば、「最優秀賞」を取ることができました。
ただし、「応募者1名」という自動決定。悲しい。(○○さんとか参加するんだろうなーと思ったのに…)
packetter
(そのうち、SECCON公式サイトに実名が載るはずですが、ブログに晒すのはアレなので…)

また、その中で、時間を頂き、作成したパケットを以下の資料にて(キョドりながら)発表させていただきました。

発表時とは、少し資料を変えています。ページ番号狂っているけど、まぁいいや。
コンテストでは、「攻撃が完遂したパケットであれば高評価です」ということだったのですが、攻撃も何も全くしていません。とても健全なパケットです。

このパケットを作成したRubyスクリプトはこちらに置きました。
github - lrks/packetter

なお、作成したパケットには、

  • Port : 25252 (にっこにっこにー)
  • IPadr : 192.168.39.39 (にしてやんよー)
  • IPadr : 192.168.114.51 (いいよ!来い(よ)!)

という小ネタを仕組んでいたのですが、Portに関しては、気付いた方もいたようです。一番気付かれないと思ったのに。分かる人は分かるもんだなぁ…と。
MACアドレスを「AC:CE:ED:00...」にしようと思ったけど、ヤバイと思ったのでやめておいた。

ちなみに、「このコンテストで優勝したら全国大会で発表してもらう」ということで、全国大会で発表することになりました。
このコンテストの進行をされていた園田さんの発表から、ヒントになるものを得たので、全国までにちょっと改良しようかな…と思っています。
というか、全国大会にこんなの持って行ったら、ハブられる。

SECCON2013 北海道大会

チーム「dodododo」として参加、見事優勝することができました。
cer
オフラインCTFとしては、「セキュリティ・キャンプ CTF」に続く2回目の参加でした。オンラインでも、あまりやっていないけど…。
オンラインCTFだと「後でやればいいや」「人がやってくれるから良いだろ」とか思うのですが、オフラインだと「やらないと人権失う」ということで、私にはそっちのほうが合っているのかも知れない。

でも、開始当初は、ネットワーク問題が無く、「うわぁぁ」状態。
「俺っちQRコードのエンコード/デコードプログラム書いたことあるんすよwwww」と思って、QRコード問題やろうと思うも、携帯からだとデコードできず大変でした。
(※QRコードと言っても種類がいろいろあるので…作成したQRコードのプログラムも、特殊なQRコードを作成、デコードするものでした)

そんなわけで、私が解いたのは、2問だけでしたが、そのWriteUPです。

指令部からの暗号文を解読してください(フォレンジックス : 500pt)

正直、SECCON2013北陸大会writeup - じとめすきーの覚え書きさんとほぼ同じ方法だったんだけど…?

まず、「DDで抜き出したFAT32のRawデータだよ」というファイルが渡される。
Windows環境とLinux環境しか持っていないので、「DD mount」でググった方法でmount。

すると、「Message.txt」というSJISでエンコードされたテキストファイルが見つかる。
mes
これから、FAT32内のデータを解析していくわけだけれど、構造なんて知らないしなぁ…と困った。

ググっても時間ないなぁ…ということで、BZで「VRZGNWSOHPMY」と検索すると、その前に(と後ろにも)画像ファイルっぽいものがある。
mes-bitmap
そこから、「いっぱい0x00入っている前後にファイルがある…?」と予想。
あとは、手動で抜き出す。

また、「FATにはファイル名が(そのまま?)載っている」ことを思い出し、(Message.txt)を見つけるため「TXT」で検索。
すると、画像ファイルのファイル名の一部がそのまま載っており、だいたいファイル名が推測できた。
filename

抜き出した画像と、そのファイル名は以下。
file
ガルパン…ストパン(or 艦これ)…艦これ…と思ったけど、違うようだった。
@akiymさんの助言から、Google画像検索をしてみると、「九五式軽戦車」「西澤広義(関連)」「戦艦大和」ということが判明。

ファイル名に関してですが、戦車が「Ⅳ号戦車D型」だったら「tank.jpg」と気付かず、「ank.jpg」なんだなぁと思っていたに違いない。サンキュー、あんこうさんチーム。(でも、ero.jpgは無いよなぁ…)

※(注 : 12/11)


ということで、「zero.jpg」っぽいです。

さらに、一つこんなファイルも見つかった。
nazo
「なんだこれ」なんですが、DiskImage.ddのこの画像の周辺をバイナリエディタで見ると、この画像のヘッダの前に訳わからないデータが付いている。

なんか「Rotors」って書いているし、順序を逆にしてみると、こんなファイルが。
enigma
「エニグマ」でした。どうやら、「第二次世界大戦」を表すようだ。

で、先ほどの「VRZGNWSOHPMY」をエニグマ暗号とみなし、復号するわけですが、キーが分からない。
と、思ったら先ほどのエニグマ以外の画像のExif情報にユーザコメントとして、「Rotor position:...」と載っていた。

最初はExifだと分からず、stringsで見ているときに見つけたので、

$ strings DiskImage.dd | grep "position"
Rotor position 1:J
Rotor position 2:P
Rotor position 3:N

を実行して抜き出し。

で、いざ復号となるも…なかなか出来ない。
じとめすきーさんも使ったという、Enigma Simulationを見つけるも、エニグマ暗号の詳細を知らないので、「え、これローター回転しちゃうよ!おかしい!」と思ったり。

でも、チームメンバーに喚き散らした挙句、なんとか復号に成功。

Flag : TORATORATORA

ググったら、「ワレ奇襲ニ成功セリ」という意味らしい(トラトラトラ - Wikipedia)。
ラノベじゃなかった。

なお、他チームでは、「FAT32の構造を理解した上で、File Carvingした」というチームも居たので、そちらのほうが正攻法かも知れない。
いずれ、Write Upで見れるでしょう(?)

この中にファイルがあるはずなんだけど...(ネットワーク : 300pt)

「やった!ネットワーク問題だ!」と思ったら、USBパケットだった。ふえぇ…。
そのUSBパケットの中のファイルのSHA1ハッシュ値がフラグとなる。

USBパケットからのファイル復元は、@superbackerさんが「SECCON2012 横浜大会」で行っている。
SECCON CTF 横浜大会 writeup - labs.scaltinof.net

でも、このままだと復元できなかった。まぁ、公開されている方法で簡単に復元できたらアレですよねー。

どうしたものかと、またstringsで眺めていたら、「MSDOS」「FAT32」という文字列を見つける。
で、この文字列でWiresharkで検索をかけると、以下のパケットが該当した。

  • ある程度長さがある
  • Info欄に「SCSI:Data...Read」とか「SCSI:Data...Write」と書かれている

どうやら、USBパケットには、「制御パケット」と「データパケット」があるっぽい(?)

なので、「((((scsi) && (scsi.inquiry.devtype == 0x00)) && (usbms))) && (usb.data_len > 100)」的なフィルタを指定。
フィルタの指定は、パケットを選んで抜き出したい項目を右クリック、「Apply as Filter」すれば楽なので楽。これで、データ部分だけ抜き出す。
filter
加えて、Read指定の「scsi_sbc.opcode == 0x28」、Write指定の「scsi_sbc.opcode == 0x2a」でフィルタしたパケットをそれぞれ抜き出して保存しておく。

そして、先ほどのSECCON CTF 横浜大会 writeup - labs.scaltinof.netから、スクリプトをパクって、

#-*- coding: utf-8 -*-
from struct import *
from scapy.all import *
pcap = rdpcap("data-in.pcap")

for pkt in pcap:
	print pkt.load[0x40:-1],

というスクリプトを組む。

あとは、適当にリダイレクトさせて、「infile(Read側)」「outfile(Write側)」というファイルを作成。
これで、mountできる…はずだったのですが、できない。これは、構造をミスっている可能性が高い。あれ、「-1」不要っぽい?(未検証)
ちゃんとUSBパケット勉強しとこうね、ってことでした。

仕方ないので、また先ほどの問題と同じように、バイナリエディタで眺めていたところ、「outfile」に以下のファイルを発見。しかも名前が「SECCON.txt」。怪しい。
outfile
抜き出してみると、WSUSという、WindowsPCの管理システムのログファイルの模様。

で、問題文の指示通りにSHA1ハッシュを計算

$ sha1sum SECCON.txt
cd34762eae3908dc608b1f2f48244b0330fce9b4 *SECCON.txt

Flag : cd34762eae3908dc608b1f2f48244b0330fce9b4

でも、「infile」のほうにも、何かファイルがありそうなんだよなぁ…。
infile
USBパケットからFAT32を構成するの、失敗してるっぽいので、何ともアレなんだけど、繋ぎ合わせると何か出てきそう。

感想など

「Are you Smart?」は何だったんですかね。
北陸でも正解者なしだそう(?)ですが、今から誰か解いて、WriteUp書いてください。

今回の北海道大会では、バイナリ問題が一問も解かれていませんでした。
時代はバイナリらしいので、CTFで良い成績を残すには、バイナリが解けるか解けないかがかなり重要のようで。
いつまでも、「私ネットワークしか出来ないから」と言い続けるのも辛いので、そろそろ他の分野も出来るようになりたいんですけどねぇ…どうしたものか。

以下、「お前大変だったんだな」と思ってもらうための情報。

11月25日
応募締め切り2時間前にパケットを提出
26日
学校のテスト期間開始
28日
「まずコンテストさぁ…発表の時間あんだけど…発表していかない?」というメールが来る => 「ああ^~いいっすね^~」と返信
30日 午前6時
夜行バスで札幌に到着。発表資料はまだ表紙だけ、デモ環境も整っていない。ネカフェに入って準備。
午前7時ごろ
ドクロちゃん面白い
午前9時ごろ
ぴぴるぴるぴるぴぴるぴ~
午前11時ごろ
資料だいたい完成。昼食を取って、会場へ。
午後9時ごろ
発表し、SECCONチームの人とご飯を食べ(とろろおじや美味しかった)、ホテルへ
12月1日 午前1時
SECCONの準備をし、就寝
午前8時
優勝を神頼みしに北海道神宮へ(x86問題が出てくれるよう86円お賽銭)
午前10時
札幌の電子部品屋の梅沢無線へ。てーきゅう日だった。諦めて、「商品を青や黒い袋に入れる店がいっぱい入っているビル」へ。
午前11時
若干遅刻気味にSECCON会場到着。
午後6時
SECCON終わって、地元へ帰る。
午後11時
夜行バスで地元へ。
2日 午後3時
起床。今日テストあった(選択科目:単位は足りている)んですが、それは…。

大変だったので、雷ちゃんに慰めて欲しい。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>