問題タブ [rootkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - システム コール テーブル関数アドレスへの書き込み時にカーネル モジュールがクラッシュする
KASLR のため、このモジュールがシステム コール テーブル アドレスを使用できないことは理解しています。/boot/System.map-$(uname -r)
で起動するとnokaslr
、モジュールが機能しました。それが解決されたので、実際にkill関数をフックすることに進みましたが、できませんでした。insmod
モジュールのロード時に再び「Killed」を返しますdmesg
が、強調された行で発生する書き込みアクセス許可エラーをログに記録するようになりました。
コントロールレジスタのライトプロテクトビットを解除する目的は「ライトプロテクトを解除する」ためだと思いました。それ(または私のコード)以外に、カーネルモジュールがシステムコールテーブルを上書きするのを妨げているものはありますか?
コード
dmesg
hook - inotify サブシステムから inode 情報をダンプできますか?
エディターが監視しているファイルを把握しようとしています。inotify fds の数を数えることが可能であることを知りました/proc/${PID}/fd
。私の質問は、監視されている i ノードのリストを 1 つのプロセスでダンプすることは可能ですか?
更新: 1 つの実用的なソリューションを更新しました。ここで役立つ参照をありがとうございます。
更新 2: 最近、kallsyms_lookup_name
(およびその他のシンボル) がエクスポートされていないことがわかりましLinux Kernel v5.7
た。
c - System.map の system_wq のアドレスを使用して sys_call_table のアドレスを導出できないのはなぜですか?
このトピックに関する以前の質問でKASLR オフセット シフトを導出するための提案された解決策を試した後、のランタイム アドレスは、KASLR が有効かどうかsystem_wq
によって異なることに気付きました (ただし、KASLR が無効になっていても同じままです)。/boot/System.map-$(uname -r)
反対のケースでは明らかに発生しません)。
次のスニペットはsys_call_table
、 のランタイムsystem_wq
アドレスと両方の System.map アドレスを使用してアドレスを計算する必要がsystem_wq
ありますsys_call_table
(対応する System.map アドレスが含まれていると仮定sysmap_*
します)。dmesg
出力はスニペットの下にあります。
KASLR が有効
ブート 1 :
ブート 2 :
KASLR 無効
ブート 1 :
ブート 2 :
質問
1 . sys_call_table
KASLR が無効になっているのに System.mapの実行時アドレスが一致しないのに、(システム コールが正常にフックされたのでわかっている) の実行時アドレスが一致するのはなぜsystem_wq
ですか?
2 . sys_call_table
KASLR が有効かどうかのランタイム アドレスをスニペットが計算できないのはなぜですか?
3 . とにかくのランタイムアドレスがsystem_wq
System.map のアドレスと異なる場合、他のエクスポートされたシンボルを使用して派生させることができますsys_call_table
か?
bios - 読み取り専用の ACPI テーブルを書き込む
Windows が起動する前に、単純な種類のルートキットから ACPI テーブルを変更したかったのです。
->いいえ、BIOS コードを変更できません
-> Clover がその仕事をすることができることは知っていますが、私はレガシー モードで起動していて、レガシー デバイスにインストールすることができませんでした。
しかし今、私はRSDPポインターから始めました:
->int 15h E820 は、そのメモリ領域を「Type 2: Reserved - unusable 」と報告します
そして、私はそれを書くことができないので、それは真実であるようです. BIOSにハードコードされているのではなく、起動時に書き込まれていると思うので、DRAMコントローラーをプログラムする必要があるという結論に達しました...
INTEL32 や AMD64 などのすべてのプラットフォームで、これらの領域で書き込みアクセスを取得するように DRAM コントローラーをプログラムする一般的な方法はありますか?
またはACPIテーブルで書き込みアクセスを取得する他の方法はありますか?
編集 1: EBDA は PAM レジスタによって書き込み保護されており、TSEG は ACPI テーブルなどのより高い領域への書き込みを防止します。AMD64 プラットフォームでこれらと同等のものは何ですか?