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

Binary Hacks Rebooted 私選ハック集

Binary Hacks Rebooted 私選ハック集

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

Takaya Saeki

October 07, 2024
Tweet

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 誰が読んでも新しい発見が