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

Security and the Linux Kernel (LFD441)

このインストラクター主導のコースでは、Linux カーネルのセキュリティ モデルと、オペレーティング システムを保護するために使用されるメカニズムについて理解できます。

対象者

このコースは、Linux カーネルが提供するセキュリティ オプションについて詳しく知りたいシステム レベル プログラマーまたはカーネル エンジニア、および Linux カーネルのセキュリティ軽減策について詳しく知りたいユーザー空間開発者向けに設計されています。学習者は、Linux カーネルの構築方法、Linux カーネル モジュールの作成方法と使用方法、および基本的な Linux コマンド ラインとシステム管理のスキルを習得している必要があります。
折りたたむ 続きを読む
学習内容

このコースでは、メモリ保護、プロセス管理、システム コール、ファイル システム セキュリティなど、Linux カーネル セキュリティの基礎について説明します。受講者は、Mandatory Access Control (MAC)、Linux Security Modules (LSM)、secureboot など、Linux カーネルのさまざまなセキュリティ メカニズムについて学習します。コース全体を通して、受講者は、さまざまなセキュリティ メカニズムを通じてユーザー空間と Linux カーネルの両方を保護する実践的な経験を積むことができます。
折りたたむ 続きを読む
身につく知識

このコースの受講者は、Linux カーネルとオペレーティング システムが提供するさまざまなメカニズムとシステムを使用してシステムを保護する方法を学ぶことができます。これらのスキルは、組み込みシステムから、モバイル コンピューター、デスクトップ システム、サーバー、または仮想マシンに至るまで、あらゆるものを保護するために使用できます。
折りたたむ 続きを読む
おもなテーマ
すべて展開
すべて折りたたむ
はじめに
- 目的
- 対象受講者
- Linux Foundation
-著作権および機密情報なし
- Linux Foundationが提供するトレーニング
- 認定プログラムおよびデジタルバッジ
- Linuxディストリビューション
- プラットフォーム
- Linux とオープン ソース プロジェクトの進化の影響
準備
-カーネルバージョン
-カーネルソースとgitの使用
実験室環境
- 仮想マシン
- なぜ proxmox {?
- 私たちのラボ環境
- 演習
OSSプロジェクトでの作業方法**
- 適切に貢献するには
-コードがどこから来ているかを知る:DCOとCLA
- メインラインの近くでセキュリティと品質を保つ
- プロジェクトのDNAを研究して理解する
- スクラッチするべき部分を見つけ出す
- メンテナーおよび彼らのワークフローやメソッドを特定する
- 早い段階で意見を訊き、オープンに作業する
- 大きなコード ダンプではなく、差分のコードをコントリビュートする
- エゴはドアに置いておいてください。
- 忍耐強く、長期的な関係を築き、助けの手を差し伸べよう
攻撃面の削減
- なぜセキュリティ?
- セキュリティの種類
- 脆弱性
- 保護層
- ソフトウェアの悪用
- 演習
カーネル機能
-カーネルのコンポーネント
-ユーザースペースとカーネルスペース
-システムコールとは何ですか?
-利用可能なシステムコール
-スケジューリングアルゴリズムとタスク構造
-プロセスコンテキスト
- 演習
カーネルで非推奨のインターフェース
-廃止された理由
- __非推奨
- BUG() と BUG_ON()
-kmalloc()の計算されたサイズ
- simple_strtol() ルーチンのファミリー
--strcpy()、strncpy()、strlcpy()
--printk()%pフォーマット指定子
-可変長配列
-スイッチケースのフォールスルー
-構造体のゼロ長および1要素配列
アドレス空間レイアウトのランダム化 (ASLR)
- なぜ ASLR なのですか?
- ASLR の使用方法
- 特定のプログラムの ASLR を無効にする
-カーネル構成
- カーネル アドレス空間レイアウトのランダム化 (KASLR)
- KASLR のしくみ
- KASLR を有効にする
- 演習
カーネル構造レイアウトのランダム化
- 利点
- 構造ランダム化の仕組み
- 構造の初期化
- オプトイン vs オプトアウト
- 部分ランダム化
- 構造ランダム化の有効化
- 構造のランダム化によるツリー外モジュールの構築
Linuxカーネルセキュリティの概要
-Linuxカーネルセキュリティの基本
-随意アクセス制御(DAC)
-POSIX ACL
-POSIX機能
-名前空間
-Linuxセキュリティモジュール(LSM)
-Netfilter
-暗号化手法
-カーネル自己保護プロジェクト
Cグループ
- CGroup の紹介
- 概要
- CGroup のコンポーネント
- cgroup の初期化
- cgroup アクティベーション
- cgroups パラメータ
- cgroup のテスト
- systemd と cgroup
- 演習
eBPF
-BPF
-eBPF
-インストール
--bccツール
--bpftrace
- 演習
セコンプ
- セコンプとは
- seccomp インターフェイス
- seccomp ストリクトモード
- seccompフィルターモード
- 演習
セキュアブート
- セキュア ブートを行う理由
- セキュア ブート x86
- エンベデッド システム セキュア ブート
- 演習
モジュール署名
- モジュール署名とは何ですか?
- 署名の基本
- モジュール署名キー
- モジュール署名検証の有効化
- 使い方
- 署名モジュール
- 演習
完全性測定アーキテクチャ (IMA)
- なぜ IMA なのですか?
- 概念操作
- 操作モード
- 収集モードのテキスト{(収集して保存)
- ロギング モード textit {(評価と監査)
- Enforceing Mode textit {(鑑定と保護)
- 拡張検証モジュール (EVM)
- 演習
DM-Verity
・dm-verityとは?
- dm-verity の仕組み
- dm-verity の有効化
- dm-verity のセットアップ
- dm-verity の使用
- dm-verity での署名
- dm-verity での起動
- 演習
暗号化されたストレージ
- なぜ暗号化ストレージを使うのか?
- データ暗号化ソリューション
- ストレージ暗号化オプションの調査
- ブロック暗号化
- 暗号化の使用をブロックする
- ファイルシステムの暗号化
- ファイルシステム暗号化の使用
- 階層化されたファイルシステム暗号化
- 階層化ファイルシステム暗号化の使用
- 演習
Linuxセキュリティモジュール(LSM)
-Linuxセキュリティモジュールとは何ですか?
-LSMの基本
-LSMの選択
-LSMのしくみ
- LSM の例: 山
- 演習
SELinux
- SELinux
--SELinuxの概要
-SELinuxモード
-SELinuxポリシー
-コンテキストユーティリティ
-SELinuxおよび標準コマンドラインツール
-SELinuxコンテキストの継承と保存**
--restorecon **
--semanage fcontext **
-SELinuxブール値の使用**
--getseboolとsetsebool **
-トラブルシューティングツール
- 演習
AppArmor
-AppArmorとは何ですか?
-ステータスの確認
-モードとプロファイル
-プロファイル
-ユーティリティ
ヤマ (LSM)
- なぜヤマ?
- ヤマの設定
- ヤマの仕組み
- 演習
ロードピン (LSM)
- LoadPin を使用する理由
- LoadPin を有効にする
- LoadPin の使用
- LoadPin のしくみ
封鎖
- ロックダウンの理由
- ロックダウンモード
- ロックダウンされているものは何ですか?
- 使い方
- いくつかのメモ
- 演習
セーフセット
- なぜ Safesetid?
- Safesetid の設定
- Safesetid の仕組み
- 演習
ネットフィルター
-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を取得した経験と同等の経験がある。

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

レビュー
2024年11月
幅広いトピックが取り上げられました。バーチャルで参加できたので、参加もずっと簡単でした。
2024年9月
実行できる例や menuconfig で試してみる機会があれば、カーネルについて学習するときに常に役立ちます。
2024年9月
ラボは非常によく整備されており、すべてが稼働する準備ができていました。
2024年6月
ソースからカーネルを再コンパイルするのがいかに簡単であるか、また、さまざまなカーネル機能の全体的な説明とカーネルの開発がどのように行われているかがわかりやすく説明されている点が評価できます。
2024年4月
ジョンを講師として迎えることができて本当に良かったです。彼は細かいことにこだわりすぎずに、それでも私が常に新しいことを学べるように、そして自分でさらに深く掘り下げるためにどこに行けばよいかがわかるように、物事をうまく説明してくれました。
2024年4月
これは私にとって初めての LFD オフライン トレーニングでした。ペースは良く、すべての資料をカバーできました。ジョンは準備が整っており、プロフェッショナルで、話し方も上手で、面白かったです。
2024年4月
一番気に入ったのはラボ、特にネットフィルターラボです。ここで自分のスキルを深めることができ、達成感も得られました。やりがいはありましたが、イライラするほどではありませんでした。
2024年4月
コースの教材は幅広く、多くの内容をカバーしています。その結果、どの分野に重点を置く必要があるか、学習を進めるためにどのクラスが必要かがわかります。
2024年4月
カーネルのセキュリティ機能と考えられるすべての機能について学ぶなど、知識の幅広さが気に入りました。また、さまざまな機能の使い方だけでなく、その実装方法についてもよく理解できたのも良かったです。