DUICUO

オープンソースツールを使用したLinuxメモリフォレンジック

[[401668]]

Volatility を使用して、アプリケーション、ネットワーク接続、カーネル モジュール、ファイルなどに関する情報を検索します。

コンピュータのオペレーティングシステムとアプリケーションは、メインメモリ(RAM)を使用して様々なタスクを実行します。この揮発性メモリには、実行中のアプリケーション、ネットワーク接続、カーネルモジュール、開いているファイルなど、ほぼすべての情報が含まれていますが、これらの情報はコンピュータを再起動するたびに消去されます。

記憶フォレンジック記憶フォレンジックこれは、メモリから貴重な情報を見つけて抽出する方法の一つです。Volatilityは、プラグインを使用してこの種の情報を処理するオープンソースツールです。しかし、問題があります。この情報を処理する前に、物理メモリをファイルにダンプする必要がありますが、Volatilityにはこの機能がありません。

したがって、この記事は 2 つの部分に分かれています。

  • 最初の部分では、物理メモリを取得し、それをファイルにダンプします。
  • 2 番目の部分では、Volatility を使用してメモリ ダンプからこの情報を読み取って処理します。

このチュートリアルでは次のテスト システムを使用しましたが、どの Linux ディストリビューションでも動作するはずです。

  1. $ cat / etc / redhat - release
  2. Red Hat Enterprise Linux release 8.3 ( Ootpa )
  3. $
  4. $ uname - r
  5. 4.18 . 0 - 240.el8.x86 _64
  6. $

注:パート1ではカーネルモジュールのコンパイルとロードを行います。ご安心ください。思ったほど難しくはありません。

いくつかのガイドライン:

  • 次の手順に従ってください。
  • 実稼働システムまたはメイン コンピュータでは、これらの手順を実行しないでください。
  • これらのツールの使い方に慣れ、その動作を理解するまで、必ずテスト仮想マシン (VM) を使用して実験してください。

必要なパッケージをインストールする

始める前に、必要なツールをインストールしてください。Debianベースのディストリビューションをよく使用する場合は、 apt-getコマンドを使用できます。これらのパッケージのほとんどは、コードをコンパイルするために必要なカーネル情報とツールを提供しています。

  1. $ yum install kernel - headers kernel - devel gcc elfutils - libelf - devel make git libdwarf - tools python2 - devel . x86_64 - y

パート1: LiMEを使用してメモリをキャプチャし、ファイルにダンプする

メモリ分析を始める前に、メモリダンプが必要です。実際のフォレンジック調査では、メモリダンプは侵害されたシステム、あるいは侵害を受けたシステムから取得される可能性があります。この情報は通常、侵入がどのように発生し、その影響はどのようなものか分析するために収集・保存されます。メモリダンプが入手できない場合は、テストVMのメモリダンプを取得し、それを使用してメモリフォレンジックを実施できます。

Linux メモリ抽出ツールLinux メモリ抽出ツールLiMEは、Linuxシステムでメモリを確保するためによく使われるツールです。LiMEを入手するには、以下のコマンドを使用します。

  1. $ git clone https : //github.com/504ensicsLabs/LiME.git
  2. $
  3. $ cd LiME / src /
  4. $
  5. $ ls
  6. deflate . c disk . c hash . c lime . h main . c Makefile   Makefile . sample tcp . c
  7. $

LiMEカーネルモジュールの構築

srcフォルダでmakeコマンドを実行します。これにより、`.ko` 拡張子を持つカーネルモジュールが作成されます。理想的には、 makeの最後に、 lime.koファイルの名前がlime-<your-kernel-version>.koという形式に変更されます。

  1. $ make
  2. make - C / lib / modules / 4.18 . 0 - 240.el8.x86 _64 / build M = "/root/LiME/src" modules
  3. make [ 1 ]: Entering directory '/usr/src/kernels/4.18.0-240.el8.x86_64'
  4. << 删节 >>
  5. make [ 1 ]: Leaving directory '/usr/src/kernels/4.18.0-240.el8.x86_64'
  6. strip -- strip - unneeded lime . ko
  7. mv lime . ko lime - 4.18 . 0 - 240.el8.x86 _64 . ko
  8. $
  9. $
  10. $ ls - l lime - 4.18 . 0 - 240.el8.x86 _64 . ko
  11. - rw - r -- r --. 1 root root 25696 Apr 17 14 : 45 lime - 4.18 . 0 - 240.el8.x86 _64 . ko
  12. $
  13. $ file lime - 4.18 . 0 - 240.el8.x86 _64 . ko
  14. lime - 4.18 . 0 - 240.el8.x86 _64 . ko : ELF 64 - bit LSB relocatable , x86 - 64 , version 1 ( SYSV ), BuildID [ sha1 ]= 1d0b5cf932389000d960a7e6b57c428b8e46c9cf , not stripped
  15. $

LiMEカーネルモジュールのロード

システムメモリにアクセスするために、カーネルモジュールをロードします。`insmod` コマンドinsmodカーネルモジュールのロードに役立ちます。ロードされると、システムからメインメモリ(RAM)を読み取り、その内容をpathラインで指定されたディレクトリのファイルにダンプします。もう一つの重要なパラメータはformatです。これは、以下に示すようにlime形式を維持します。カーネルモジュールを挿入したら、 lsmodコマンドを使用して、実際にロードされていることを確認してください。

  1. $ lsmod   | grep lime
  2. $
  3. $ insmod ./ lime - 4.18 . 0 - 240.el8.x86 _64 . ko "path=../RHEL8.3_64bit.mem format=lime"
  4. $
  5. $ lsmod   | grep lime
  6. lime 16384   0
  7. $

pathコマンドに割り当てられたファイルが作成され、そのサイズがシステムの物理メモリ(RAM)のサイズと同じになっているはずです(当然のことですが)。メモリダンプを取得したら、 rmmodコマンドを使用してカーネルモジュールを削除できます。

  1. $
  2. $ ls - l ~ /LiME/ RHEL8 . 3_64bit . mem
  3. - r -- r -- r --. 1 root root 4294544480 Apr 17 14 : 47 / root / LiME / RHEL8 . 3_64bit . mem
  4. $
  5. $ du - sh ~ /LiME/ RHEL8 . 3_64bit . mem
  6. 4.0G     / root / LiME / RHEL8 . 3_64bit . mem
  7. $
  8. $ free - m
  9. total used free shared buff / cache available
  10. Mem :           3736         220         366           8         3149         3259
  11. Swap :           4059           8         4051
  12. $
  13. $ rmmod lime
  14. $
  15. $ lsmod   | grep lime
  16. $

メモリ ダンプには何が含まれていますか?

このメモリダンプファイルにはfileコマンドで表示されるものと同様に、生データのみが含まれています。手動で解釈することはできません。確かにASCII文字が含まれていますが、ファイルを開いてエディタで読むことはできません。hexdump hexdump出力では、最初の数バイトがEmiLであることが示されています。これは、上記のコマンドラインでリクエスト形式がlimeだったためです。

  1. $ file ~ /LiME/ RHEL8 . 3_64bit . mem
  2. / root / LiME / RHEL8 . 3_64bit . mem : data
  3. $
  4. $ hexdump - C ~ /LiME/ RHEL8 . 3_64bit . mem | head
  5. 00000000   45 4d 69 4c 01 00 00 00   00 10 00 00 00 00 00 00   | EMiL ............|
  6. 00000010 ff fb 09 00 00 00 00 00   00 00 00 00 00 00 00 00   |................|
  7. 00000020 b8 fe 4c cd 21 44 00 32   20 00 00 2a 2a 2a 2a 2a   |.. L .! D . 2 ..*****|
  8. 00000030   2a 2a 2a 2a 2a 2a 2a 2a   2a 2a 2a 2a 2a 2a 2a 2a   |****************|
  9. 00000040   2a 2a 2a 2a 2a 2a 2a 2a   2a 2a 2a 2a 2a 20 00 20   |************* . |
  10. 00000050   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00   |................|
  11. *
  12. 00000080   00 00 00 00 00 00 00 00   00 00 00 00 70 78 65 6c   |............ pxel |
  13. 00000090   69 6e 75 78 2e 30 00 00   00 00 00 00 00 00 00 00   | inux . 0. .........|
  14. 000000a0   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00   |................|
  15. $

パート2: Volatilityを入手し、それを使ってメモリダンプを分析する

分析用のサンプルメモリダンプが入手できたので、以下のコマンドでVolatilityソフトウェアを入手してください。VolatilityはPython 3で書き直されていますが、このチュートリアルではPython 2で書かれたオリジナルのVolatilityパッケージを使用します。Volatility 3を試してみたい場合は、適切なGitリポジトリからダウンロードし、以下のコマンドでPython 2ではなくPython 3を使用してください。

  1. $ git clone https : //github.com/volatilityfoundation/volatility.git
  2. $
  3. $ cd volatility /
  4. $
  5. $ ls
  6. AUTHORS . txt contrib LEGAL . txt Makefile PKG - INFO pyinstaller . spec resources tools vol . py
  7. CHANGELOG . txt CREDITS . txt LICENSE . txt MANIFEST . in pyinstaller README . txt setup . py volatility
  8. $

Volatilityは特定の機能を実装するために2つのPythonライブラリを使用しています。以下のコマンドを使用してインストールしてください。インストールしない場合、Volatilityツールの実行時にインポートエラーが発生する可能性があります。実行しているプラ​​グインがこれらのライブラリを必要としない限り、これらのエラーは無視できます。必要な場合は、ツールがエラーを報告します。

  1. $ pip2 install pycrypto
  2. $ pip2 install distorm3

Volatility の Linux 構成ファイルを一覧表示します。

最初に実行するVolatilityコマンドは、利用可能なLinux設定ファイルを一覧表示します。Volatilityコマンド実行の主なエントリポイントはvol.pyスクリプトです。これは、Python 2インタープリターで--infoオプションを指定して起動します。出力を絞り込むには、「Linux」で始まる文字列を探してください。ご覧のとおり、Linux設定ファイルはそれほど多くありません。

  1. $ python2 vol . py -- info   | grep ^ Linux
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. LinuxAMD64PagedMemory           - Linux - specific AMD 64 - bit address space .
  4. $

独自のLinux設定ファイルを作成する

Linuxディストリビューションは多様で、異なるアーキテクチャ向けに構築されています。そのため、設定ファイルが必要になります。Volatilityは、情報を抽出する前に、メモリダンプがどのシステムとアーキテクチャから取得されたかを認識する必要があります。この情報を取得できるVolatilityコマンドはいくつかありますが、この方法は時間がかかります。処理を高速化するには、次のコマンドを使用してカスタムLinux設定ファイルを作成できます。

フォルダーを Volatility リポジトリのtools/linuxディレクトリに移動し、 makeコマンドを実行します。

  1. $ cd tools / linux /
  2. $
  3. $ pwd
  4. / root / volatility / tools / linux
  5. $
  6. $ ls
  7. kcore Makefile   Makefile . enterprise module . c
  8. $
  9. $ make
  10. make - C //lib/modules/4.18.0-240.el8.x86_64/build CONFIG_DEBUG_INFO=y M="/root/volatility/tools/linux" modules
  11. make [ 1 ]: Entering directory '/usr/src/kernels/4.18.0-240.el8.x86_64'
  12. << 删节 >>
  13. make [ 1 ]: Leaving directory '/usr/src/kernels/4.18.0-240.el8.x86_64'
  14. $

新しいmodule.dwarfファイルが表示されるはずです。また、 /bootディレクトリのSystem.mapファイルも必要です。このファイルには、現在実行中のカーネルに関連するすべてのシンボルが含まれています。

  1. $ ls
  2. kcore Makefile   Makefile . enterprise module . c module . dwarf
  3. $
  4. $ ls - l module . dwarf
  5. - rw - r -- r --. 1 root root 3987904 Apr 17 15 : 17 module . dwarf
  6. $
  7. $ ls - l / boot / System . map - 4.18 . 0 - 240.el8.x86 _64
  8. - rw -------. 1 root root 4032815 Sep 23   2020 / boot / System . map - 4.18 . 0 - 240.el8.x86 _64
  9. $
  10. $

カスタム設定ファイルを作成するには、Volatilityディレクトリに戻り、以下のコマンドを実行します。最初の引数はカスタム.zipファイルを指定します。ファイル名は自由に設定できます。私はOSとカーネルのバージョンをファイル名によく使います。次の引数は先ほど作成したmodule.dwarfファイル、最後の引数は/bootディレクトリ内のSystem.mapファイルです。

  1. $
  2. $ cd volatility /
  3. $
  4. $ zip volatility / plugins / overlays / linux / Redhat8 . 3_4.18 . 0 - 240.zip tools / linux / module . dwarf / boot / System . map - 4.18 . 0 - 240.el8.x86 _64
  5. adding : tools / linux / module . dwarf ( deflated 91 %)
  6. adding : boot / System . map - 4.18 . 0 - 240.el8.x86 _64 ( deflated 79 %)
  7. $

カスタム設定ファイルの準備ができました。先ほど指定した場所に.zipファイルが作成されているかどうかを確認してください。Volatilityがこのカスタム設定ファイルを検出したかどうかを確認するには、 --infoコマンドを再度実行してください。新しい設定ファイルが以下のように表示されるはずです。

  1. $
  2. $ ls - l volatility / plugins / overlays / linux / Redhat8 . 3_4.18 . 0 - 240.zip
  3. - rw - r -- r --. 1 root root 1190360 Apr 17 15 : 20 volatility / plugins / overlays / linux / Redhat8 . 3_4.18 . 0 - 240.zip
  4. $
  5. $
  6. $ python2 vol . py -- info   | grep Redhat
  7. Volatility Foundation Volatility Framework 2.6 . 1
  8. LinuxRedhat8_3_4_18_0 - 240x64 - A Profile for Linux Redhat8 . 3_4.18 . 0 - 240 x64
  9. $
  10. $

ボラティリティ入門

これで、本格的なメモリフォレンジックを行う準備が整いました。Volatilityはカスタムプラグインで構成されており、メモリダンプから情報を抽出できることを覚えておいてください。コマンドの一般的な形式は次のとおりです。

  1. python2 vol . py - f < memory - dump - file - taken - by - Lime > < plugin - name > -- profile =< name - of - our - custom - profile >

この情報を使用して、 linux_bannerプラグインを実行し、メモリ ダンプから正しいディストリビューション情報を識別できるかどうかを確認します。

  1. $ python2 vol . py - f ~ /LiME/ RHEL8 . 3_64bit . mem linux_banner -- profile = LinuxRedhat8_3_4_18_0 - 240x64
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. Linux version 4.18 . 0 - 240.el8.x86 _64 ([ mockbuild@vm09 . test . com ][ 4 ]) ( gcc version 8.3 . 1 20191121 ( Red Hat 8.3 . 1 - 5 ) ( GCC )) # 1 SMP Wed Sep 23 05 : 13 : 10 EDT 2020
  4. $

Linuxプラグインを探す

ここまでは順調に進んできましたが、Linuxプラグインの名前をどうやって見つければいいのか疑問に思われるかもしれません。簡単なやり方があります。` --infoコマンドを実行して文字列linux_を抽出してください。様々な目的に応じた様々なプラグインが用意されています。以下にいくつか例を挙げます。

  1. $ python2 vol . py -- info   | grep linux_
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. linux_apihooks - Checks for userland apihooks
  4. linux_arp - Print the ARP table
  5. linux_aslr_shift - Automatically detect the Linux ASLR shift
  6. << 删节 >>
  7. linux_banner - Prints the Linux banner information
  8. linux_vma_cache - Gather VMAs from the vm_area_struct cache
  9. linux_volshell - Shell in the memory image
  10. linux_yarascan - A shell in the Linux memory image
  11. $

linux_psauxプラグインを使用して、メモリダンプ実行時にシステム上で実行されているプロセスを確認します。リストの最後のコマンドに注意してください。これはダンプ前に実行するinsmodコマンドです。

  1. $ python2 vol . py - f ~ /LiME/ RHEL8 . 3_64bit . mem linux_psaux -- profile = LinuxRedhat8_3_4_18_0 - 240x64
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. Pid     Uid     Gid     Arguments                                                      
  4. 1       0       0       / usr / lib / systemd / systemd -- switched - root -- system -- deserialize 18
  5. 2       0       0       [ kthreadd ]                                                      
  6. 3       0       0       [ rcu_gp ]                                                        
  7. 4       0       0       [ rcu_par_gp ]                                                    
  8. 861     0       0       / usr / libexec / platform - python - Es / usr / sbin / tuned - l - P
  9. 869     0       0       / usr / bin / rhsmcertd
  10. 875     0       0       / usr / libexec / sssd / sssd_be -- domain implicit_files -- uid 0 -- gid 0 -- logger = files
  11. 878     0       0       / usr / libexec / sssd / sssd_nss -- uid 0 -- gid 0 -- logger = files
  12. << 删节 >>
  13. 11064   89     89 qmgr - l - t unix - u
  14. 227148 0       0       [ kworker / 0 : 0 ]                                                  
  15. 227298 0       0       - bash                                                          
  16. 227374 0       0       [ kworker / u2 : 1 ]                                                  
  17. 227375 0       0       [ kworker / 0 : 2 ]                                                  
  18. 227884 0       0       [ kworker / 0 : 3 ]                                                  
  19. 228573 0       0       insmod ./ lime - 4.18 . 0 - 240.el8.x86 _64 . ko path =../ RHEL8 . 3_64bit . mem format = lime
  20. 228576 0       0                                                                      
  21. $

システムのネットワーク状態を知りたいですか? linux_netstatプラグインを実行して、メモリダンプ中のネットワーク接続状態を確認します。

  1. $ python2 vol . py - f ~ /LiME/ RHEL8 . 3_64bit . mem linux_netstat -- profile = LinuxRedhat8_3_4_18_0 - 240x64
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. UNIX 18113               systemd / 1     / run / systemd / private
  4. UNIX 11411               systemd / 1     / run / systemd / notify
  5. UNIX 11413               systemd / 1     / run / systemd / cgroups - agent
  6. UNIX 11415               systemd / 1    
  7. UNIX 11416               systemd / 1    
  8. << 删节 >>
  9. $

次に、 linux_mountプラグインを使用して、メモリ ダンプ中にマウントされたファイル システムを確認します。

  1. $ python2 vol . py - f ~ /LiME/ RHEL8 . 3_64bit . mem linux_mount -- profile = LinuxRedhat8_3_4_18_0 - 240x64
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. tmpfs / sys / fs / cgroup tmpfs ro , nosuid , nodev , noexec
  4. cgroup / sys / fs / cgroup / pids cgroup rw , relatime , nosuid , nodev , noexec
  5. systemd - 1                 / proc / sys / fs / binfmt_misc autofs rw , relatime
  6. sunrpc / var / lib / nfs / rpc_pipefs rpc_pipefs rw , relatime
  7. / dev / mapper / rhel_kvm -- 03 -- guest11 - root / xfs rw , relatime
  8. tmpfs / dev / shm tmpfs rw , nosuid , nodev
  9. selinuxfs / sys / fs / selinux selinuxfs rw , relatime
  10.                                                      
  11. << 删节 >>
  12. cgroup / sys / fs / cgroup / net_cls , net_prio cgroup rw , relatime , nosuid , nodev , noexec
  13. cgroup / sys / fs / cgroup / cpu , cpuacct cgroup rw , relatime , nosuid , nodev , noexec
  14. bpf / sys / fs / bpf bpf rw , relatime , nosuid , nodev , noexec
  15. cgroup / sys / fs / cgroup / memory cgroup ro , relatime , nosuid , nodev , noexec
  16. cgroup / sys / fs / cgroup / cpuset cgroup rw , relatime , nosuid , nodev , noexec
  17. mqueue / dev / mqueue mqueue rw , relatime
  18. $

どのカーネルモジュールがロードされているか知りたいですか? Volatility では、このためのプラグインlinux_lsmodも提供しています。

  1. $ python2 vol . py - f ~ /LiME/ RHEL8 . 3_64bit . mem linux_lsmod -- profile = LinuxRedhat8_3_4_18_0 - 240x64
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. ffffffffc0535040 lime 20480
  4. ffffffffc0530540 binfmt_misc 20480
  5. ffffffffc05e8040 sunrpc 479232
  6. << 删节 >>
  7. ffffffffc04f9540 nfit 65536
  8. ffffffffc0266280 dm_mirror 28672
  9. ffffffffc025e040 dm_region_hash 20480
  10. ffffffffc0258180 dm_log 20480
  11. ffffffffc024bbc0 dm_mod 151552
  12. $

どのプロセスがどのファイルを開いているか知りたいですか? linux_bashプラグインはこの情報を一覧表示できます。

  1. $ python2 vol . py - f ~ /LiME/ RHEL8 . 3_64bit . mem linux_bash -- profile = LinuxRedhat8_3_4_18_0 - 240x64 - v
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. Pid       Name                 Command Time                   Command
  4. -------- -------------------- ------------------------------ -------
  5.   227221 bash                 2021 - 04 - 17 18 : 38 : 24 UTC + 0000   lsmod
  6.   227221 bash                 2021 - 04 - 17 18 : 38 : 24 UTC + 0000   rm - f . log
  7.   227221 bash                 2021 - 04 - 17 18 : 38 : 24 UTC + 0000   ls - l / etc / zzz
  8.   227221 bash                 2021 - 04 - 17 18 : 38 : 24 UTC + 0000   cat ~/. vimrc
  9.   227221 bash                 2021 - 04 - 17 18 : 38 : 24 UTC + 0000   ls
  10.   227221 bash                 2021 - 04 - 17 18 : 38 : 24 UTC + 0000   cat / proc / 817 / cwd
  11.   227221 bash                 2021 - 04 - 17 18 : 38 : 24 UTC + 0000   ls - l / proc / 817 / cwd
  12.   227221 bash                 2021 - 04 - 17 18 : 38 : 24 UTC + 0000   ls / proc / 817 /
  13. << 删节 >>
  14.   227298 bash                 2021 - 04 - 17 18 : 40 : 30 UTC + 0000   gcc prt . c
  15.   227298 bash                 2021 - 04 - 17 18 : 40 : 30 UTC + 0000   ls
  16.   227298 bash                 2021 - 04 - 17 18 : 40 : 30 UTC + 0000   ./ a . out
  17.   227298 bash                 2021 - 04 - 17 18 : 40 : 30 UTC + 0000   vim prt . c
  18.   227298 bash                 2021 - 04 - 17 18 : 40 : 30 UTC + 0000   gcc prt . c
  19.   227298 bash                 2021 - 04 - 17 18 : 40 : 30 UTC + 0000   ./ a . out
  20.   227298 bash                 2021 - 04 - 17 18 : 40 : 30 UTC + 0000   ls
  21. $

どのファイルがどのプロセスによって開かれているかを知りたいですか? linux_lsofプラグインはこの情報を一覧表示できます。

  1. $ python2 vol . py - f ~ /LiME/ RHEL8 . 3_64bit . mem linux_lsof -- profile = LinuxRedhat8_3_4_18_0 - 240x64
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. Offset             Name                           Pid FD Path
  4. ------------------ ------------------------------ -------- -------- ----
  5. 0xffff9c83fb1e9f40 rsyslogd                           71194         0 / dev / null
  6. 0xffff9c83fb1e9f40 rsyslogd                           71194         1 / dev / null
  7. 0xffff9c83fb1e9f40 rsyslogd                           71194         2 / dev / null
  8. 0xffff9c83fb1e9f40 rsyslogd                           71194         3 / dev / urandom
  9. 0xffff9c83fb1e9f40 rsyslogd                           71194         4 socket :[ 83565 ]
  10. 0xffff9c83fb1e9f40 rsyslogd                           71194         5 / var / log / messages
  11. 0xffff9c83fb1e9f40 rsyslogd                           71194         6 anon_inode :[ 9063 ]
  12. 0xffff9c83fb1e9f40 rsyslogd                           71194         7 / var / log / secure
  13. << 删节 >>
  14. 0xffff9c8365761f40 insmod                           228573         0 / dev / pts / 0
  15. 0xffff9c8365761f40 insmod                           228573         1 / dev / pts / 0
  16. 0xffff9c8365761f40 insmod                           228573         2 / dev / pts / 0
  17. 0xffff9c8365761f40 insmod                           228573         3 / root / LiME / src / lime - 4.18 . 0 - 240.el8.x86 _64 . ko
  18. $

Linuxプラグインスクリプトの場所にアクセスする

メモリダンプからこの情報を読み取って処理することで、さらに多くの洞察を得ることができます。Pythonに精通していて、この情報がどのように処理されるのか興味がある場合は、すべてのプラグインが保存されているディレクトリに移動し、興味のあるプラグインを選択して、Volatilityがどのようにこの情報を取得するかを確認してください。

  1. $ ls volatility / plugins / linux /
  2. apihooks . py common . py kernel_opened_files . py malfind . py psaux . py
  3. apihooks . pyc common . pyc kernel_opened_files . pyc malfind . pyc psaux . pyc
  4. arp . py cpuinfo . py keyboard_notifiers . py mount_cache . py psenv . py
  5. arp . pyc cpuinfo . pyc keyboard_notifiers . pyc mount_cache . pyc psenv . pyc
  6. aslr_shift . py dentry_cache . py ld_env . py mount . py pslist_cache . py
  7. aslr_shift . pyc dentry_cache . pyc ld_env . pyc mount . pyc pslist_cache . pyc
  8. << 删节 >>
  9. check_syscall_arm . py __init__ . py lsmod . py proc_maps . py tty_check . py
  10. check_syscall_arm . pyc __init__ . pyc lsmod . pyc proc_maps . pyc tty_check . pyc
  11. check_syscall . py iomem . py lsof . py proc_maps_rb . py vma_cache . py
  12. check_syscall . pyc iomem . pyc lsof . pyc proc_maps_rb . pyc vma_cache . pyc
  13. $
  14. $

Volatilityは多くのセキュリティプラグインを提供しているので気に入っています。これらの情報は手動で取得するのが難しいです。

  1. linux_hidden_modules - Carves memory to find hidden kernel modules
  2. linux_malfind - Looks for suspicious process mappings
  3. linux_truecrypt_passphrase - Recovers cached Truecrypt passphrases

Volatility を使用すると、メモリ ダンプ内でシェルを開くこともできるため、上記のすべてのコマンドの代わりにシェル コマンドを実行して同じ情報を取得できます。

  1. $ python2 vol . py - f ~ /LiME/ RHEL8 . 3_64bit . mem linux_volshell -- profile = LinuxRedhat8_3_4_18_0 - 240x64 - v
  2. Volatility Foundation Volatility Framework 2.6 . 1
  3. Current context : process systemd , pid = 1 DTB = 0x1042dc000
  4. Welcome to volshell ! Current memory image is :
  5. file : ///root/LiME/RHEL8.3_64bit.mem
  6. To get help , type 'hh()'
  7. >>>
  8. >>> sc ()
  9. Current context : process systemd , pid = 1 DTB = 0x1042dc000
  10. >>>

次のステップ

メモリダンプは、Linuxの内部動作を理解するための優れた方法です。Volatilityのすべてのプラグインを試して、その出力を詳細に調べてください。そして、この情報が侵入やセキュリティ問題の特定にどのように役立つかを考えてみましょう。これらのプラグインの動作を深く掘り下げ、改善に取り組んでみてください。もし、あなたがやりたいことを実現するプラグインが見つからない場合は、自分で作成してVolatilityに提出し、他の人が使えるようにしましょう。