トレーニング > Linuxカーネル開発 > Linuxカーネルのデバッグとセキュリティ(LFD440)
インストラクター主導のコース

Linux Kernel Debugging and Security (LFD440)

このインストラクター主導のコースでは、カーネルのデバッグと監視に使用される重要なツール、およびセキュリティ機能の実装と制御の方法に焦点を当てています。

対象者

このコースは、Linuxカーネルのメソッドと内部インフラストラクチャを理解する必要がある経験豊富な開発者を対象としています。
少なく読む 続きを読む
学習内容

この4日間のコースには、Linuxカーネルコードの開発とデバッグに必要なツールを提供するために設計された広範な実践的な演習とデモンストレーションが含まれています。
少なく読む 続きを読む
身につく知識

Linuxカーネルについて十分に理解した上で、このコースを終了します。デバッグ手法とツール。
少なく読む 続きを読む
おもなテーマ
すべて展開
すべて折りたたむ
はじめに
- 目的
- あなたについて
- The Linux Foundation
-著作権および機密情報なし
- Linux Foundationトレーニング
- 認証プログラムとデジタル バッジ
- Linuxディストリビューション
- プラットフォーム
- システムの準備
-仮想マシンの使用とダウンロード
- Linux とオープン ソース プロジェクトの変化
- ドキュメントとリンク
準備
- プロシージャ
-カーネルバージョン
-カーネルソースとgitの使用
- 演習
OSSプロジェクトでの作業方法**
- 適切に貢献するには
-コードがどこから来ているかを知る:DCOとCLA
- メインラインの近くでセキュリティと品質を保つ
- プロジェクトのDNAを研究して理解する
- スクラッチするべき部分を見つけ出す
- メンテナーおよび彼らのワークフローやメソッドを特定する
- 早い段階で意見を訊き、オープンに作業する
- 大きなコード ダンプではなく、差分のコードをコントリビュートする
- エゴを捨てよう。敏感にならないように。
- 忍耐強く、長期的な関係を築き、助けの手を差し伸べよう
カーネル機能
-カーネルのコンポーネント
-ユーザースペースとカーネルスペース
-システムコールとは何ですか?
-利用可能なシステムコール
-スケジューリングアルゴリズムとタスク構造
-プロセスコンテキスト
- 演習
監視とデバッグ
-Debuginfoパッケージ
-トレースとプロファイリング
-sysctl
-SysRqキー
--oopsメッセージ
-カーネルデバッガー
--debugfs
- 演習
Printk
-printkを使用したデバッグ
-printkのフォーマット指定子
-ハッシュポインタなしコマンドラインオプション
-初期のprintkを使用する
- 演習
procファイルシステム**
-procファイルシステムとは何ですか?
-エントリの作成と削除
-エントリの読み取りと書き込み
-seqファイルインターフェイス**
- 演習
kprobes
-kprobes
-kretprobes
--SystemTap **
- 演習
Ftrace
-ftraceとは何ですか?
--ftrace、trace-cmd、kernelshark
-利用可能なトレーサー
-ftraceの使用
-トレースディレクトリ内のファイル
-トレースオプション
-trace printk()を使用した印刷
-トレースマーカー
-バッファのダンプ
--trace-cmd
- 演習
性能
-パフォーマンスとは何ですか?
-パフォーマンス統計
-パフォーマンスリスト
-パフォーマンスレコード
-パフォーマンスレポート
-パフォーマンスアノテーション
-パフォーマンストップ
- 演習
eBPF
-BPF
-eBPF
-インストール
--bccツール
--bpftrace
- 演習
クラッシュ
-クラッシュ
-メインコマンド
- 演習
kexec
-kexec
-カーネル構成
--kexec-tools
-kexecを使用する
- 演習
カーネルコアダンプ
-カーネルコアダンプの生成と分析
- 演習
QEMU
-QEMUとは何ですか?
-エミュレートされたアーキテクチャ
-画像フォーマット
-サードパーティのハイパーバイザー統合
- 演習
Linuxカーネルデバッグツール
-Linuxカーネル(組み込み)ツールとヘルパー
-kdb
--qemu + gdb
-kgdb:ハードウェア+シリアル+ gdb
- 演習
攻撃面の削減
- なぜセキュリティ?
- セキュリティの種類
- 脆弱性
- 保護層
- ソフトウェアの悪用
- 演習
カーネルで非推奨のインターフェース
-廃止された理由
-非推奨
-BUG()およびBUG ON()
-kmalloc()の計算されたサイズ
-単純なstrtol()ファミリのルーチン
--strcpy()、strncpy()、strlcpy()
--printk()%pフォーマット指定子
-可変長配列
-スイッチケースのフォールスルー
-構造体のゼロ長および1要素配列
カーネル構造レイアウトのランダム化
- 利点
- 構造ランダム化の仕組み
- 構造の初期化
- オプトイン vs オプトアウト
- 部分ランダム化
- 構造ランダム化の有効化
- 構造のランダム化によるツリー外モジュールの構築
Linuxカーネルセキュリティの概要
-Linuxカーネルセキュリティの基本
-随意アクセス制御(DAC)
-POSIX ACL
-POSIX機能
-名前空間
-Linuxセキュリティモジュール(LSM)
-Netfilter
-暗号化手法
-カーネル自己保護プロジェクト
セキュア ブート VM のセットアップ
- 演習
セキュアブート
- セキュア ブートを行う理由
- セキュア ブート x86
- エンベデッド システム セキュア ブート
- 演習
モジュール署名
- モジュール署名とは何ですか?
- 署名の基本
- モジュール署名キー
- モジュール署名検証の有効化
- 使い方
- 署名モジュール
- 演習
完全性測定アーキテクチャ (IMA)
- なぜ IMA なのですか?
- 概念操作
- 操作モード
・コレクトモード(コレクト&ストア)
- ロギングモード (評価と監査)
・強化モード(鑑定&プロテクト)
- 拡張検証モジュール (EVM)
- 演習
Linuxセキュリティモジュール(LSM)
-Linuxセキュリティモジュールとは何ですか?
-LSMの基本
-LSMの選択
-LSMのしくみ
-LSMの例:Tomoyo
SELinux
-SELinux
--SELinuxの概要
-SELinuxモード
-SELinuxポリシー
-コンテキストユーティリティ
-SELinuxおよび標準コマンドラインツール
-SELinuxコンテキストの継承と保存**
--restorecon **
--semanage fcontext **
-SELinuxブール値の使用**
--getseboolとsetsebool **
-トラブルシューティングツール
- 演習
AppArmor
-AppArmorとは何ですか?
-ステータスの確認
-モードとプロファイル
-プロファイル
-ユーティリティ
封鎖
- ロックダウンの理由
- ロックダウンモード
- ロックダウンされているものは何ですか?
- 使い方
- いくつかのメモ
- 演習
ネットフィルター
-netfilterとは何ですか?
-Netfilterフック
-Netfilterの実装
-Netfilterに接続する
--Iptables
-nftables
- 演習
Netlinkソケット**
-netlinkソケットとは何ですか?
-ネットリンクソケットを開く
--netlinkメッセージ
- 演習
まとめと評価サーベイ
- 評価サーベイ
カーネルアーキテクチャI
-UNIXおよびLinux **
-モノリシックカーネルとマイクロカーネル
-オブジェクト指向メソッド
-メインカーネルコンポーネント
-ユーザースペースとカーネルスペース
カーネルプログラミングプレビュー
-エラー番号とカーネル出力の取得
-タスク構造
-メモリ割り当て
-ユーザースペースとカーネルスペース間でのデータの転送
-オブジェクト指向の継承-一種の
-リンクリスト
-ジフィー
- 演習
モジュール
-モジュールとは何ですか?
-ささいな例
-モジュールのコンパイル
-モジュールと組み込み
-モジュールユーティリティ
-自動モジュールロード
-モジュール使用回数
-モジュールライセンス
-シンボルのエクスポート
-シンボルの解決**
- 演習
カーネルアーキテクチャII
-プロセス、スレッド、およびタスク
-カーネルプリエンプション
-リアルタイムプリエンプションパッチ
- 演習
カーネルの構成とコンパイル
-カーネルソースのインストールとレイアウト
-カーネルブラウザ
-カーネル構成ファイル
-カーネル構築とMakefiles
--initrdおよびinitramfs
- 演習
カーネルスタイルと一般的な考慮事項
-コーディングスタイル
-一般的なカーネルルーチンとメソッドの使用
-カーネルパッチの作成
-まばら
-possible()とlikely()の使用
-ポータブルコードの記述、CPU、32/64ビット、エンディアン
-SMPの作成
-ハイメモリシステム向けの書き込み
- パワー管理
-セキュリティを念頭に置いて
- 演習
競合状態と同期方法
-並行性と同期の方法
-不可分操作
-ビット演算
-スピンロック
-Seqlocks
-プリエンプションの無効化
-ミューテックス
-セマフォ
-完了関数
-リードコピーアップデート(RCU)
-参照カウント
- 演習
メモリアドレッシング
-仮想メモリ管理
-MMUとTLBがあるシステムとないシステム
-メモリアドレス
-高メモリと低メモリ
-メモリゾーン
-特別なデバイスノード
-NUMA
-ページング
-ページテーブル
-ページ構造
- 演習
メモリ割り当て
-ページのリクエストとリリース
- バディシステム
-スラブとキャッシュの割り当て
-メモリプール
--kmalloc()
--vmalloc()
-早期割り当てとbootmem()
-メモリの最適化
- 演習

**
これらのセクションは、部分的にまたは全体を
オプションとして考えることができます。これらのセクションには、
背景となる参考資料、専門的なトピック、または高度なテーマが含まれています。
講師は、教室での経験や時間の制約に応じて、
これらをカバーするかしないかを選択することができます。
前提条件
このコースを最大限に活用するために必要な条件:

  • Cプログラミング言語に精通している。
  • ls、grep、tarなどの基本的なLinux(UNIX)ユーティリティに精通している。
  • 利用可能なテキストエディタ(emacs、viなど)を快適に使用できます。
  • 主要なLinuxディストリビューションの経験は役立ちますが、必ずしも必要ではありません。
  • LFD420:Linux Kernel Internals and Developmentを取得した経験と同等の経験がある。

クラスを開始する前に、受講前の準備資料が提供されます。

レビュー
2022年9月
Linux Kernel Internals について多くのことを学び、OS/ネットワーク全般に関連する多くのトピックを学びます。
2022年9月
よく練られたラボ/演習、および Linux について基本的に何でも質問できるトレーナーの深い知識。
2022年9月
特にインストラクターはコースの範囲外でも幅広い知識を持っているため、Linuxの詳細について学ぶことができます.
2022年6月
全体的に、コンテンツのレイアウトは素晴らしかったと思います。演習で各トピックの詳細がわかりました。
2022年6月
ジョンはとても親切で、良いコースインストラクターでした。