VED(Vault Exploit Defense):オープンソースの実装
VED - Linuxカーネルの脅威検知および脅威侵入防止システム
VEDのLKMバージョンはついに公開されました。
対象読者
- CISO、セキュリティエンジニア、セキュリティ研究者、DFIR(Digital Forensics and Incident Response)チームを含む企業級情報セキュリティ従業者。
- GNU/Linuxサーバーシステム管理者
- Linuxカーネルセキュリティに趣味がある人
要約:VEDの進化過程
以前の記事では、Linuxカーネルセキュリティの問題と現在の状況、およびクラウドネイティブと自動車ソリューションには何故サードパーティの「Linux kernel hardening solution」が必要ですと紹介しました。プラットフォームとインフラストラクチャで実行する(GNU)-Linuxシステム用のフルスタックセキュリティソリューションの構築して、PaX/GRsecurityから色んなことを勉強した。2010年から私たちは開示されたLinuxカーネルの脆弱性エクスプロイトメソッドを継続的に調査し、公開と未公開の攻撃手段がどのように組み合わせたかを攻撃者の視点で確認します。その上で、どのように実装し易さ、パフォーマンスヒット、安定性、セキュリティ、この四点の最適化達成を研究します。これもVEDの設計と実装の目標です。例えば:
-
悪用方法の共通性に基づいて、一部のコードモジュールの検出範囲を縮小する必要があるかどうかを判断します。
-
企業の制作働環境の視点からみると、VEDとLinuxカーネルは一体です。高コード網羅率達成のため、VaultFuzzerが使い、制作働環境で高度依存の特定のバージョンのLinuxカーネルサブシステムへのストレステストを行います。
-
セキュリティソリューションはシステムの保護者として、VEDはVSPPのself-protection機能で「Tetragon」などの他のLinuxカーネルのセキュリティソリューションの弱点を回避し、VED自身の保護機能を強化します。
理論的には、VEDの機能は、LKRG、AKO、さらにはLinuxカーネルルートキットでのすべてのLKMフレームワークに適用できて、それでどのバージョンのLKMを実装しますかと、私たちは最終にオープンソースと長期維持中のLKRGを選択されます。。公開の脆弱性報告からの脆弱性悪用方法とお客様から提供される0dayの脆弱性を分析しました。
Vulnerablity | Mitigation stage |
---|---|
CVE-2021-22555 | Exploitation |
CVE-2021-3573 | Exploitation |
CVE-2021-3490 | Post-exploitation, situational hardening |
CVE-2021-33909 | Exploitation |
CVE-2021-34866 | Exploitation |
CVE-2021-43267 | Exploitation |
CVE-2021-42008 | Exploitation |
CVE-2022-0185 | Exploitation |
CVE-2022-0492 | Post-exploitation, situational hardening |
CVE-2022-25636 | Exploitation |
CVE-2022-1015/CVE-2022-1015-1016 | Exploitation |
CVE-2022-23222 | Post-exploitation |
Tetragon bypass | Exploitation |
私たちは脆弱性テスト用のAMIを構築しました。皆さんは興味があれば、AWSでリージョンが「US East(N.Virginia)」を選択し、「vault exploit test」を検索しますと、脆弱性悪用をテストできます。
また、AWSでバージョン名[「BeyondCompliance」]((https://hardenedvault.net/saas/)というHardened Linux(Ubuntu for both x86_64 and arm64)を提供しました。このバージョンのHardened Linuxはセキュリティについてデフォルトの出荷が、簡単にCIS/STIGベンチマークを準拠できるPCI-DSS/GDPR、ModSecurity(Webアプリケーションファイアウォール)、VED(Vault Exploit Defense)などの機能を備えています。
検証タイプ:Vaultの観点から
LKRGの機能
- SMEP/SMAPはdisable/enable(p_ed_pcfi_cpu)をチェックします。
- pCFI(pSMEP / sSPC):スタックポインタと、そのサイズと、そのアクセスのアドレスがkernel.textかどうかをチェックします。
- 権限昇格チェック:権限が変更されたかどうかをチェックします(p_ed_enforce_validation)。
- カーネルテキストの整合性とモジュールの負荷をチェックします。
- addr_limit(old kernel versionに対す)。
- LKRG自体を非表示にします。
VEDの機能
- wCFI:アクセスのアドレスが正しいコールサイトかどうかをチェックします。
- wCFI:Calleeは指定された関数に再利用られるかをチェックします。(無効化にtail-callの最適化と直接呼び出しに基づく)。
- VSPP(Vault self-protection):必要なkprobeが無効になっていないかどうかをチェックします。
- ro guard timer:kprobeがグローバルに解除されたかどうかをチェックします。
新規プロセスチェック
kprobe point: sys_execve,sys_execveat, sys_ptrace, do_wakeup, wake_up_new_task
Triger point: 新規プロセススタートの時点。
Reaction: L1 + L2 + V1 + L3
権限昇格チェック
kprobe point: native_write_cr4, commit_creds, override_creds, revert_creds, call_usermodehelper_exec, call_usermodehelper, set_current_groups, sys_set*id, sys_capset
Trigger point: 以上のカーネル関数は権限昇格のために再利用られる可能性があります。これらの関数を呼び出す要求は呼び出し許可されるサイトからのかどうかをチェックします。
Reaction: L1 + L2 + V1 + L3 + V1
バイパスチェック
kprobe point: disable_kprobe, p_exploit_detection_exit, text_poke
Triger point: 以上のカーネル関数はLKMソリューション(LKRG、AKO、Tetragon)をバイパスするために再利用られる可能性があります。これらの関数を呼び出す要求は呼び出し許可されるサイトと認証システムからのかどうかをチェックします。
Reaction: L1 + L2 + V1 + L3 + V1 + V3
悪用後(Post-exploitation)チェック
kprobe point: mark_inode_dirty, sys_unshare, cap_task_prctl, sys_add_key, security_ptrace_access, generic_permission, security_bprm_committed_creds, security_bprm_committing_creds, wake_up_new_task, sys_ptrace
Triger point: 権限昇格攻撃が発生した後、その後の悪用はcapability/credentialのチェックをトリガーする可能性があります。悪用を検出した時、資格認証チェックを追加します。
Reaction: L1 + L2 + V1 + V3
タイマーとスケジュール
LKRG timer
kprobe point: schedule, lookup_fast, __queue_work, wake_up_new_task
Triger point: 悪用検出の頻度を増やす。
Reaction: L1 + L2 + V1 + L3 + L5 + L6 + V3
- Interval: デフォルトで15秒。
VED ro guard
read only data: kptr_restrict, kprobes_all_disarmed
Trigger point: 以上の必要なデータが破損していないかどうかを定期的にチェックします。
Reaction: L4 + V4
- Interval: 1 second
ビルド方 法
make && insmod ved.ko