[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[port139:00547] rootkit に関するメモβ 2
- To: port139@xxxxxxxxxxxxx
- Subject: [port139:00547] rootkit に関するメモβ 2
- From: Hideaki Ihara <hideaki@xxxxxxxxxxxxx>
- Date: Wed, 15 Aug 2001 01:54:11 +0900
Port139 伊原です。
今日までに得られた情報を加えてみました。
#最終版では情報いただいた方々のお名前を入れさせてください。
□実行ファイルを変更する rootkit
rootkit とは、ps や ls 、netstat などのコマンド ファイルを悪意のある
ものに置き換え、悪意のあるファイルやプロセス、通信を表示させないとい
った目的を持ったツール群のことを指す。
rootkit は基本的にシステムの実行ファイルを悪意のあるプログラムへ置き
かえるため、これらのファイルのハッシュ値(MD5 が一般的に利用される)が
正常な状態のハッシュ値と同じかどうかを md5sum や RPM コマンドなどを使
い確認することで、rootkit の混入を確認することができる。
システムの正常な状態でのハッシュ値を保存し、現在の状態とを比較する専
用のツールとしては Tripwire などの整合性チェックツールもある。
また、一般的にシステムに対する侵害の有無を確認する際には、システム上
にある実行ファイルが改ざんされていることを想定して、FD や CD-ROM など
に保存された安全と確認できている実行ファイルを利用してシステムの状態
を確認することが推奨されている。
FD や CD-ROM などに置かれた安全なファイルを利用することで、システムの
正確な情報を得ることができ、システムに存在するバックドアなどを検出す
ることができる。
なお、rootkit を検出する為に、chkrootkit などの専用ツールも存在する。
□Loadable Kernel Module(LKM) rootkit
単なる rootkit が ps や ls といったコマンドファイルを置き換えるのに
対して、LKM rootkit は ls や ps といったコマンドファイルの置き換えを
基本的に必要としない。
LKM rootkit はカーネルモードで動作する為、ユーザーモードで実行される
セキュリティ ツールなどからのアクセスをカーネルレベルで横取りすること
で、悪意のあるファイルやプロセス、通信を隠蔽することができる。
例えば、バックドアとして仕掛けられたプログラムのファイルやプロセスを
ls や ps コマンドでは表示しないといったことが可能になる。
ファイルやプロセスを隠すといった機能は、LKM rootkit 自体のファイルや、
LKM rootkit をロードする為の起動ファイル、ロードされた LKM rootkit
モジュール自体の存在を隠すことにも利用される。
むろん、netstat や ifconfig の結果から管理者に見られては困る内容を隠
すことも可能となっている。
LKM rootkit は ps や ls といったコマンド ファイルを置き換えないこと
から、単純にシステム上に存在するファイルのハッシュ値を確認することで
は検出することができない。
また、FD や CD-ROM から起動された安全と確認できている ls や ps コマ
ンドなどに対しても悪意のあるファイルやプロセス、通信を隠すことができ
てしまう。
LKM rootkit により悪意のあるファイルやプロセス、通信が隠されてしまう
ことで、システム上にバックドアが存在していたとしても、オンラインでそ
の存在を確認することは難しい。
□LKM rootkit のオンライン状態での検出
オンラインで LKM rootkit を検出する方法としては、kstat や kern_check、
Rkscan、Alamo などのツールを利用することができる。
LKM rootkit は一般的にカーネルのシステムコール テーブルを書き換えるこ
とで様々な機能を実現している。kstat や kern_check ではこのテーブルの
内容が変更されていないかをチェックすることで LKM rootkit がシステム上
に存在していないかを確認するという仕組みを取っている。
LKM rootkit の一つである knark(v0.59) がロードされている RedHat 7.0 上
で kern_check を実行した場合、結果は以下のように表示される。
[root@linux kern_check]# ./kern_check /boot/System.map
WARNING: (kernel) 0xc3848580 != 0xc0108eb8 (map) [sys_fork]
WARNING: (kernel) 0xc3848864 != 0xc012591c (map) [sys_read]
WARNING: (kernel) 0xc3848be8 != 0xc0108f14 (map) [sys_execve]
WARNING: (kernel) 0xc3848638 != 0xc0110738 (map) [sys_kill]
WARNING: (kernel) 0xc38486bc != 0xc012ea3c (map) [sys_ioctl]
WARNING: (kernel) 0xc3848ab0 != 0xc01182d8 (map) [sys_settimeofday]
WARNING: (kernel) 0xc38485dc != 0xc0108ed4 (map) [sys_clone]
WARNING: (kernel) 0xc3848474 != 0xc012ed98 (map) [sys_getdents]
ここで WARNING で表示されたシステムコールは、knark によってフックされ
るようになっており、ユーザーモードで実行されるツールではシステムの正確
な状態を確認することができない。
これに対して Alamo では、LKM rootkit が行ったのと同様の方法で、システ
ムコールのテーブル内容の一部を本来の値へ戻すという作業を行う。
knark(v0.59) はロードされると /proc/knark というディレクトリを作成する
が通常はそのディレクトリは隠蔽されるようになっており、ls などのコマンド
からその存在を確認することはできない。
[root@linux knark-0.59]# ls -F /proc
1/ 2/ 400/ 5/ 728/ 936/ filesystems meminfo slabinfo
1025/ 3/ 401/ 530/ 745/ 946/ fs/ misc stat
1036/ 359/ 411/ 550/ 746/ 955/ ide/ modules swaps
1038/ 369/ 426/ 566/ 747/ 959/ interrupts mounts sys/
1042/ 384/ 4488/ 6/ 748/ apm ioports mtrr tty/
1053/ 3897/ 480/ 608/ 749/ bus/ kcore net/ uptime
1057/ 3898/ 483/ 624/ 750/ cmdline kmsg partitions version
1059/ 3899/ 484/ 634/ 753/ cpuinfo ksyms pci
1060/ 3924/ 491/ 644/ 927/ devices loadavg rtc
1076/ 3925/ 492/ 659/ 932/ dma locks scsi/
1093/ 4/ 499/ 696/ 933/ fb mdstat self@
knark(v0.59) がロードされている RedHat 7.0 上で Alamo をロードし、再度
ls コマンドを実行した場合、結果は以下のように表示され、/proc/knark の
存在を確認することができる。
[root@linux alamo]# /sbin/insmod alamo.o
[root@linux alamo]# ls -F /proc/
1/ 2/ 400/ 5/ 728/ 936/ filesystems mdstat self@
1025/ 3/ 401/ 530/ 745/ 946/ fs/ meminfo slabinfo
1036/ 359/ 411/ 550/ 746/ 955/ ide/ misc stat
1038/ 369/ 426/ 566/ 747/ 959/ interrupts modules swaps
1042/ 384/ 4494/ 6/ 748/ apm ioports mounts sys/
1053/ 3897/ 480/ 608/ 749/ bus/ kcore mtrr tty/
1057/ 3898/ 483/ 624/ 750/ cmdline kmsg net/ uptime
1059/ 3899/ 484/ 634/ 753/ cpuinfo knark/ partitions version
1060/ 3924/ 491/ 644/ 927/ devices ksyms pci
1076/ 3925/ 492/ 659/ 932/ dma loadavg rtc
1093/ 4/ 499/ 696/ 933/ fb locks scsi/
Alamo がロードされた状態では、knark のような LKM rootkit がファイルを
隠すことができなくなる為、ls や Tripwire のようなツールを使うことで隠
されていたファイルやディレクトリを容易に発見することができる。
なお、LKM rootkit により隠されたプロセスを検出する為のツールとしては、
Carbonite を利用することができる。
また、別システムで動作する tcpdump や IDS を利用することで、仕掛けら
れたバックドアを検出することができる場合もある。
□ディレクトリへの書き込みをチェックすることで監視する
□LKM rootkit のオフラインでの検出
オンラインでは検出の難しい LKM rootkit でも、それが動作できないオフ
ライン状態でシステムのチェックを行えば、システム上で隠されたファイル
やディレクトリを容易に検出することができる。
またオフラインでシステムをチェックすることで、オンラインでは見逃して
いたファイルへの変更の有無などを確実にチェックすることができる。
□LKM rootkit への事前対策
動的にモジュールをロードする機能を無効にする
モジュールのロードを検出するツールを導入する
□紹介したツールへのリンク
Tripwire http://www.tripwire.org/
chkrootkit http://www.chkrootkit.org/
kstat http://s0ftpj.org/en/site.html
kern_check http://la-samhna.de/library/lkm.html
Rkscan http://www.hsc.fr/ressources/outils/rkscan/index.html.en
Alamo http://www.rackspace.com/alamo/
Carbonite http://www.foundstone.com/rdlabs/proddesc/carbonite.html
□参考 URL
Detecting Loadable Kernel Modules (LKM)
http://members.prestige.net/tmiller12/papers/lkm.htm
"Root Kits" and hiding files/directories/processes after a break-in
http://staff.washington.edu/dittrich/misc/faqs/rootkits.faq
Packetstome にある関連記事
http://packetstormsecurity.org/groups/thc/LKM_HACKING.html
http://packetstormsecurity.org/papers/unix/bsdkern.htm
http://packetstormsecurity.org/groups/thc/slkm-1.0.html
Fighting Rootkit and Similar Trojans:
Integrity Checkers and Trojan detectors
http://www.softpanorama.org/Security/integrity_checkers.shtml
Linux Loadable Kernel Module(LKM) Hacking
http://cdz4lj.virtualave.net/trash/lkmhack.html
Loadable Kernel Module (LKM) Rootkits
http://la-samhna.de/library/lkm.html
---
セキュリティスタジアム 2001 ボランティアの募集
http://sec-stadium.hawkeye.ac/
Hideaki Ihara <hideaki@xxxxxxxxxxxxx>
Port139 URL: http://www.port139.co.jp/
PGP PUBLIC KEY: http://www.port139.co.jp/pgp/