Linux版 キーロガーを有効にするとlddの結果が異なる

Document created by Tomo_Fujita Employee on Mar 27, 2015
Version 1Show Document
  • View in full screen mode

文書番号: JTEC000166

 

製品名:Privileged Identity Manager

 

バージョン:All

 

OS:All

 

◆ 内容

CA ControlMinderでキーロガーを有効にすると、ldd でシェルを指定して実行した際に、その出力結果が状況によって異なる。

 

◆ 詳細内容

ControlMinderのキーロガー機能(kbl)はキーボードから入力されたコマンドを記録する機能です。
kblが有効となっている場合、シェルに対する入力を取得するために、ControlMinderでシェルの起動を検知した際には、

kblのイベントハンドラであるcmdlogを実行します。cmdlogは、その後シェルを実行し、キー入力を取得してシェルとControlMinderに転送します。

lddは指定されたファイルに必要な共有ライブラリを表示するOSコマンドです。例えば、lddで/bin/bashを指定すると/bin/bashに必要な共有ライブラリが表示されます。

 

ControlMinder 12.5 SP5 / RHEL 5.6での例

# ldd /bin/bash linux-vdso.so.1 =>  (0x00007fffa9dfc000) libtermcap.so.2 => /lib64/libtermcap.so.2 (0x0000003585e00000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003586200000) libc.so.6 => /lib64/libc.so.6 (0x0000003585a00000) /lib64/ld-linux-x86-64.so.2 (0x0000003585600000) 

しかし、kblが有効となっており、lddによって/bin/bashが実行される際にcmdlogが実行されるような状況下では、lddの出力結果が上記とは異なり、cmdlogの共有ライブラリが表示されます。この事象は/bin/bashにかぎらず、lddでシェルを指定すると発生します。

ControlMinder 12.5 SP5 / RHEL 5.6での例

# ldd /bin/bash linux-vdso.so.1 =>  (0x00007fff7f22f000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003599800000) libutil.so.1 => /lib64/libutil.so.1 (0x0000003593800000) libpam.so.0 => /lib64/libpam.so.0 (0x0000003591400000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003586200000) libnsl.so.1 => /lib64/libnsl.so.1 (0x0000003589e00000) libresolv.so.2 => /lib64/libresolv.so.2 (0x000000358f800000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003586600000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003598000000) libm.so.6 => /lib64/libm.so.6 (0x0000003585e00000) libc.so.6 => /lib64/libc.so.6 (0x0000003585a00000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003593c00000) libaudit.so.0 => /lib64/libaudit.so.0 (0x000000358be00000) /lib64/ld-linux-x86-64.so.2 (0x0000003585600000) 

上記事象は、具体的には以下のような状況で発生します。

  • ControlMinderが起動していない状況でログインし、その後ControlMinderを起動してlddを実行した場合
  • sshでログインと同時にlddを実行した場合
    # ssh localhost ldd /bin/bash
  • sudoやsuでユーザの成り代わりと同時にlddを実行した場合で、成り代わるユーザの監査モードにinteractiveが設定されている場合
    $ sudo ldd /bin/bash
    $ su root -c “ldd /bin/bash”

 

kblが有効となっている状態でも、ControlMinderが起動後にログインしてlddを実行した場合には、lddの親プロセスである、

lddを実行したシェルでcmdlogがすでに実行されているため、lddで指定したシェルがlddから実行される時にcmdlogは実行されません。

こちらの動作はControlMinderの仕様動作ですが、このような場合にはlddは指定された/binbashの共有ライブラリを正しく表示します。

一方で、具体的な発生状況に記載したような場合には、親プロセスでcmdlogが実行されていないと認識される状況となっているため、

lddで指定したシェルがlddから実行される時にcmdlogが実行されます。こちらの動作もControlMinderの仕様動作ですが、

このような場合にはlddは指定された/bin/bashではなく、cmdlogの共有ライブラリを表示します。

なお、当事象はRHEL 5.7 (glibc-2.5-65)以前で発生し、RHEL 5.8 (glibc-2.5-81)以降では発生しないことが確認できています。

事象発生OSバージョンにおいて、上記のようにlddがcmdlogの共有ライブラリを表示する原因に関しては明確ではありませんが、

OS側のlddの動作としてそのような動作となっていると考えられ、この動作に関してControlMinder側での対応を行うことはできず、また回避策もありません。

 

Attachments

    Outcomes