Slide 1

Slide 1 text

PWNABLE 超超入門 情報システム工学科3年 0yu @yud0uhu

Slide 2

Slide 2 text

自己紹介 •プロメン・cistLT サークル・写真部に所属 •主に Web が好き。フロントエンドは Vue.js でよく遊んでます •サーバーサイド Kotlin が最近熱い •コープさっぽろで半年ほどエンジニアインターンをやっています。 •トドックサイトすごいのでぜひ使ってみてください!Webカタログをモバイルで横スク表示 にさせるやつとかやりました

Slide 3

Slide 3 text

ところで皆さん、CTFってご存じですか? なにそれ、っていう方向けに ⇒ざっくりいうとハッキングコンテスト • Capure The Flagの略。隠されているFlag(答え)を見つけ出し、時間内に獲 得した合計点数を競うもの 今回はその中の分野の一つ、Pwnable(以後Pwn)についての LT をしたいと思 います。

Slide 4

Slide 4 text

PWNって? • 語源は「own」 • 「支配する」等のニュアンスから転じたもの • CTFではバイナリを解析したりして、プログラムの脆弱性を突くジャンル PWNの超入門 大和セキュリティ神戸 (https://www.slideshare.net/ssuserbcacc5/pwn-20180325 )より

Slide 5

Slide 5 text

BOF攻撃

Slide 6

Slide 6 text

バッファオーバーフローの脆弱性 プログラムが想定するメモリ領域を超えるような入力をハッカーが 意図的に行い、バッファをあふれさせる古典的な脆弱性 Pwn系の問題における最も基本的な解法の一つ

Slide 7

Slide 7 text

スタック領域について プログラム部 スタック部

Slide 8

Slide 8 text

スタック領域について スタック部 プログラム部 str2 Push EBP(下位) ESP(上位)

Slide 9

Slide 9 text

スタック領域について プログラム部 スタック部 overflowme[16] str2 Push EBP(下位) ESP(上位)

Slide 10

Slide 10 text

バッファオーバーフローを起こしてみる スタック部 プログラム部 overflowme[16] str2 Buffer Overflow EBP(下位) ESP(上位)

Slide 11

Slide 11 text

バッファオーバーフローを起こしてみる スタック部 プログラム部 Overflowme[16] str2 EB P ES P Buffer Overflow 適当な16文字で overflowmeのスタック領 域を塗りつぶし、str2の beefをfishで上書き

Slide 12

Slide 12 text

バッファオーバーフローを起こしてみる プログラム部 Overflowme[16] str2 Segmen tation fault EBP(下位) ESP(上位)

Slide 13

Slide 13 text

特定のスタック領域を狙って攻撃したい ↓ オフセットを確認する • Gdb-pedaというデバッカを用いてプログラムのうごきを追ってい きます • Str2がoverflowmeの16バイト前に存在していることを確かめるに は?

Slide 14

Slide 14 text

オフセットを確認 する •$ gcc –m32 –fno-stack-protector hogehoge.c •gdb-peda$ gdb a.out •gdb-peda $ b vuln // vuln にブレイクポイントを設定 •gdb-peda $ run • n で一行ずつステップを実 行していく

Slide 15

Slide 15 text

• ASCIIコード変換表を見 ると 0x 66 65 65 62 f e e b • ebpというレジスタ (=0xffffxfd8)の指すアドレ スから、16進数で0xdだ け減らしたところに、 0x66656562をコピーす るという指示を出している オフセットを確認 する

Slide 16

Slide 16 text

オフセットを確認する • Call 0x56555440 <_isoc99_scanf@plt>まで ステップ実行するとscanf関 数が呼び出される ⇒22文字入力してみる

Slide 17

Slide 17 text

gdb-peda$ stack 12 を走らせてみる 0xffffcfccを始点に20文字 積まれていく様子がわかる ⇒str2が格納されている0xffffcfd8に、fishが上書き されてしまうことが確認できた! 0xffffcfb8 ←変数str2 0xffffcfbc 0xffffcfc0 0xffffcfc4 0xffffcfc8 0xffffcfcc←標準入力の始点

Slide 18

Slide 18 text

初心者向けCTF CTF 挑戦してみたいかも、という方は、以下の常設 CTF がおすすめです。 • [picoCTF](https://play.picoctf.org/practice?originalEvent=1&page=1) • 海外の常設CTF。youtubeや個人の方のブログに解法(writeup)が数多くアッ プされているため、とっつきやすそう。 • [KsnctSSf](https://ksnctf.sweetduet.info/problem/4) • 運営のkusanoさんの書かれた本 • https://www.amazon.co.jp/dp/B08Q3JKBR3/ref=dp-kindle-redirect?_enco ding=UTF8&btkr=1 • 演習環境がDockerコンテナで用意されている

Slide 19

Slide 19 text

勉強会など • MH4Y • 一昨年は道警本部で開催されました。数人一組でチームを組み、ク ラッカーから Web サイトを防衛する演習を競技形式で行いました。 • SC4Y • 定期開催されているハンズオン講習会。CTF形式でセキュリティを学 べておすすめです! • 20#1の参加レポート(当時書いたやつ)。 • 21#2が明日開催です(OSCの中でやるみたいです)

Slide 20

Slide 20 text

勉強会など • セキュリティミニキャンプ • 昨年はCTFのPwn問題とWeb問題の二ジャンルの形式でセキュリティ について学ぶ講座が開講 • 急にセキュリティキャンプはハードルが高いなぁ、という方にもおすす めです! • SECCON Beginners • SECCON CTFの初心者向け勉強会 • 8-9月頃にビギナーズ向けオンラインイベントをやるみたいです

Slide 21

Slide 21 text

~資料作成にあたり~ • はじめて学ぶバイナリ解析 を参考にさせていただきました。 • めちゃめちゃわかりやすい!!