Slide 1

Slide 1 text

Binary Hacks Rebooted 私選ハック集 Takaya Saeki (@nullpo_head) Binary Hacks Rebooted ~ Forkwell Library#68

Slide 2

Slide 2 text

• 『Binary Hacks Rebooted』 主にOS/コンテナの章にHackを執筆 • 趣味でKernel/VMでよく発表してます • カーネル空間ですべてのプロセスを動かすには • WebAssemblyのWeb以外のことぜんぶ話す • Unikernelと和解せよ • 仕事ではOS,VM開発 • その前はServer Mesh (k8s周り), Webバックエンドエンジニアなども Takaya Saeki (佐伯学哉 @nullpo_head) 2

Slide 3

Slide 3 text

3 この発表のテーマ

Slide 4

Slide 4 text

4 このHackがアツい! @nullpo_head選

Slide 5

Slide 5 text

『Binary Hacks Rebooted』の読み方 ● 頭から読んで全部読んでいく本ではない ● パラパラ眺めて面白そうなところを読むのがオススメ

Slide 6

Slide 6 text

6 ということで個人的「面白そうなところ」をご紹介 OSまわりの人なので、偏りが出るのは許してね

Slide 7

Slide 7 text

想定読者層 ● 低レイヤプログラミングを楽しみたい人 ○ 目の前のパソコンで何が起こっているのか知りたい ○ 好きだけどいまいち何をしたらいいのかわからない ○ なんとなく興味はあるが取っ掛かりが欲しい ● 低レイヤ関連で困っている方 ○ 明文化されていないが常識とされていることを知りたい ○ もう一歩踏み込んだ理解をしたい ○ よくわからないが動かなくなった、をデバッグしたい

Slide 8

Slide 8 text

「入門者が読んでも上級者が読んでも発見がある」 裏テーマ

Slide 9

Slide 9 text

9 講演者の過去の遷移を基に… 1. 普段は低レイヤ技術を利用しないが興味がある人 • こんなことできるの!?Hacks • 入門のとっかかりHacks 2. VM/コンテナなどを利用するソフトウェアエンジニア • 基盤技術の詳細に関するHacks • 仕組みを利用した便利Hacks 3. 組み込み・システムレイヤSWE • セキュリティに関するHacks • 高度なHacks 興味レイヤ別おすすめのHack

Slide 10

Slide 10 text

10 興味レイヤ別おすすめのHack 講演者の過去の遷移を基に… 1. 普段は低レイヤ技術を利用しないが興味がある人 • こんなことできるの!?Hacks • 入門のとっかかりHacks 2. VM/コンテナなどを利用するソフトウェアエンジニア • 基盤技術の詳細に関するHacks • 仕組みを利用した便利Hacks 3. 組み込み・システムレイヤSWE • セキュリティに関するHacks • 高度なHacks

Slide 11

Slide 11 text

入門のとっかかり編 • Hello, World 入門 / LinuxカーネルHack入門 • 低レイヤの入り口に 低レイヤを使えばこんなことできるの!?編 • glibcのパッチ / FridaによるDBI • 実行ファイルを書き換えてAPIや関数呼び出しをフックする 11 低レイヤの興味を刺激するHacks

Slide 12

Slide 12 text

手を動かして納得できる教育的なHackもたくさん • #3 Hello, World!再訪 • #22 実行可能ファイルとその起動方法 • なぜLinuxでは実行ファイルに .exe のような拡張子がいらないのか、#!/bin/bash は何者か • #25 procfs / sysfsの基本を把握する, #26 用途に合わせたファイルシステムを選ぶ • ファイルシステムを実際にマウントして実験してみる • #31 LinuxカーネルHack入門 • Git cloneからDebianユーザースペースを作成してQemuでブートするまで • 7章 数値表現 12 低レイヤの入り口に!

Slide 13

Slide 13 text

Linux上の実行ファイルは、多くは最終的にはlibcのAPIを読んでシステムコールを実行する ライブラリや実行ファイル内の関数呼び出しをフックするHacks -- ハックって感じがしてかっこいい • 『HACK#5 ld-linux.soの環境変数を利用する』より • 環境変数LD_PRELOADを用いて、ライブラリ関数を置き換える • LD_AUDITを用いてフックする話も • 『HACK#51 DBIで実行命令をトレース・改変する』より • Dynamic Binary Instrumentation (DBI)ツールであるFridaを用いて、 JavaScript で関数のフックコールバックを書く • Hack中ではパスワードクラックのためにrand関数に固定の戻り値を注入します 13 APIフックや関数の置き換えをする

Slide 14

Slide 14 text

14 1. 普段は低レイヤ技術を利用しないが興味がある人 • こんなことできるの!?Hacks • 入門のとっかかりHacks 2. VM/コンテナなどを利用するソフトウェアエンジニア • 基盤技術の詳細に関するHacks • 仕組みを利用した便利Hacks 3. 組み込み・システムレイヤSWE • セキュリティに関するHacks • 高度なHacks 興味レイヤ別おすすめのHack

Slide 15

Slide 15 text

ふだん触っている基盤技術をより深く理解するHacks • 4章コンテナの仕組みシリーズ • 通常のコンテナだけではなく、rootlessコンテナの仕組みも • #30 KVMを使ってハイパーバイザを作成する • VMの仕組みが分かるとパフォーマンスやリソースの勘所に 仕組みから実現できる便利Hacks • #27 特定のプロセスに見せるファイルを差し替える • #43 コンテナ内のファイルに直接アクセスする 15 基盤技術にかかわるHacks

Slide 16

Slide 16 text

• コンテナをどうやって作ることができるのか、要素技術の使い方を解説しています • #37 Linuxネームスペースでプロセスを分離する • #38 gcroupでプロセスのリソースを管理する • #39 chroot / pivot_rootでルートディレクトリを切り替える • 既に知っているよという方にはrootlessコンテナの話題も • #41 rootlessコンテナの使い方とそのしくみ • #42 ユーザーネームスペース内で各種のネームスペースを作成する 16 コンテナの仕組みシリーズ

Slide 17

Slide 17 text

• 『HACK #27 特定のプロセスに見せるファイルを差し替える』より • 特定のプロセスや、あるBashセッションでだけ、ファイルの内容を置き換えておく • これはコンテナの仕組みの応用 • Mount namespace, bindマウント、そしてOverlayFSを利用する 17 特定のプロセスに見せるファイルを 差し替える

Slide 18

Slide 18 text

18 1. 普段は低レイヤ技術を利用しないが興味がある人 • こんなことできるの!?Hacks • 入門のとっかかりHacks 2. VM/コンテナなどを利用するソフトウェアエンジニア • 基盤技術の詳細に関するHacks • 仕組みを利用した便利Hacks 3. 組み込み・システムレイヤSWE • セキュリティに関するHacks • 高度なHacks 興味レイヤ別おすすめのHack

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

• ELF • リンカでも書いてない限り知らないことだらけ • Linux • Perf / Ftrace, ちゃんと使ってますか? • セキュリティの概論を知れるのは非常に便利 • ファジング • 攻撃手法 (ROP, BadUSB, Row Hammer, Meltdown/Spectre) • Mitigation (ASLR, Intel CET, clang CFI) • サンドボックス (Seccomp-bpf, Landlock) • 浮動小数点概論とNaNボクシング 20 誰が読んでも新しい発見が