Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Binary Hacks Rebooted 私選ハック集

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Takaya Saeki Takaya Saeki
October 07, 2024

Binary Hacks Rebooted 私選ハック集

Forkwell Library#68 (https://forkwell.connpass.com/event/331098/) で発表した『Binary Hacks Rebooted』に関する紹介のスライドです

Avatar for Takaya Saeki

Takaya Saeki

October 07, 2024

More Decks by Takaya Saeki

Other Decks in Technology

Transcript

  1. • 『Binary Hacks Rebooted』 主にOS/コンテナの章にHackを執筆 • 趣味でKernel/VMでよく発表してます • カーネル空間ですべてのプロセスを動かすには •

    WebAssemblyのWeb以外のことぜんぶ話す • Unikernelと和解せよ • 仕事ではOS,VM開発 • その前はServer Mesh (k8s周り), Webバックエンドエンジニアなども Takaya Saeki (佐伯学哉 @nullpo_head) 2
  2. 想定読者層 • 低レイヤプログラミングを楽しみたい人 ◦ 目の前のパソコンで何が起こっているのか知りたい ◦ 好きだけどいまいち何をしたらいいのかわからない ◦ なんとなく興味はあるが取っ掛かりが欲しい •

    低レイヤ関連で困っている方 ◦ 明文化されていないが常識とされていることを知りたい ◦ もう一歩踏み込んだ理解をしたい ◦ よくわからないが動かなくなった、をデバッグしたい
  3. 9 講演者の過去の遷移を基に… 1. 普段は低レイヤ技術を利用しないが興味がある人 • こんなことできるの!?Hacks • 入門のとっかかりHacks 2. VM/コンテナなどを利用するソフトウェアエンジニア

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

    VM/コンテナなどを利用するソフトウェアエンジニア • 基盤技術の詳細に関するHacks • 仕組みを利用した便利Hacks 3. 組み込み・システムレイヤSWE • セキュリティに関するHacks • 高度なHacks
  5. 入門のとっかかり編 • Hello, World 入門 / LinuxカーネルHack入門 • 低レイヤの入り口に 低レイヤを使えばこんなことできるの!?編

    • glibcのパッチ / FridaによるDBI • 実行ファイルを書き換えてAPIや関数呼び出しをフックする 11 低レイヤの興味を刺激するHacks
  6. 手を動かして納得できる教育的なHackもたくさん • #3 Hello, World!再訪 • #22 実行可能ファイルとその起動方法 • なぜLinuxでは実行ファイルに

    .exe のような拡張子がいらないのか、#!/bin/bash は何者か • #25 procfs / sysfsの基本を把握する, #26 用途に合わせたファイルシステムを選ぶ • ファイルシステムを実際にマウントして実験してみる • #31 LinuxカーネルHack入門 • Git cloneからDebianユーザースペースを作成してQemuでブートするまで • 7章 数値表現 12 低レイヤの入り口に!
  7. 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フックや関数の置き換えをする
  8. 14 1. 普段は低レイヤ技術を利用しないが興味がある人 • こんなことできるの!?Hacks • 入門のとっかかりHacks 2. VM/コンテナなどを利用するソフトウェアエンジニア •

    基盤技術の詳細に関するHacks • 仕組みを利用した便利Hacks 3. 組み込み・システムレイヤSWE • セキュリティに関するHacks • 高度なHacks 興味レイヤ別おすすめのHack
  9. • コンテナをどうやって作ることができるのか、要素技術の使い方を解説しています • #37 Linuxネームスペースでプロセスを分離する • #38 gcroupでプロセスのリソースを管理する • #39

    chroot / pivot_rootでルートディレクトリを切り替える • 既に知っているよという方にはrootlessコンテナの話題も • #41 rootlessコンテナの使い方とそのしくみ • #42 ユーザーネームスペース内で各種のネームスペースを作成する 16 コンテナの仕組みシリーズ
  10. 18 1. 普段は低レイヤ技術を利用しないが興味がある人 • こんなことできるの!?Hacks • 入門のとっかかりHacks 2. VM/コンテナなどを利用するソフトウェアエンジニア •

    基盤技術の詳細に関するHacks • 仕組みを利用した便利Hacks 3. 組み込み・システムレイヤSWE • セキュリティに関するHacks • 高度なHacks 興味レイヤ別おすすめのHack
  11. • ELF • リンカでも書いてない限り知らないことだらけ • Linux • Perf / Ftrace,

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