”Linux for Hackers”シリーズでは、ローダブルカーネルモジュール(LKM)についても説明する。
LKMがあれば、カーネルを再コンパイルせずにカーネルに機能を追加する事が出来る。
Linuxはモノリシック(Monolithic)なOSと言われている。
簡単に言えば、カーネルの機能が”1つの大きな塊”としてまとめられているのだ。
その為、デバイスドライバーをカーネルに追加する際には、システム全体に修正が加わることになる為、シャットダウン、再コンパイル、リブート等の操作をする必要があったのだ。
LKMを使えば、そうした操作をする事なくカーネルに機能を追加できる。
カーネルをカスタマイズする際に便利なLKMだが、その拡張性を悪用したらどうだろうか。
攻撃者がLKMをエクスプロイトすれば、ターゲットのLinuxカーネルに、細工を施したモジュールをロードさせる事が出来てしまう。
つまり、ターゲットのシステムをカーネルという深いレベルから手中に収められるのだ。
また、システム、プロセス、ポート、サービス、ハードドライブのスペースが、カーネルに対して送信するレポート内容も制御する事が出来る。
例えば、ルートキットを埋め込んだビデオドライバをLKMに組み込むことができれば、システムとカーネルを制御することが出来る。
このような手法は、Linuxシステムをターゲットしてルートキットを埋め込む手法を使う多くのハッカーによって使われている。
したがって、LKMを理解することは、Linuxシステムの管理者になる為だけでなく、優秀なハッカーになるための重要な鍵なのだ。
ステップ1:カーネルモジュールとは何か?
カーネルは、Kali Linuxを始めとする全てのLinuxオペレーティングシステムの中核だ。
カーネルは、オペレーティングシステムの中枢神経の働きをし、ハードウェアとコンポーネント間のやり取りや、サービスの開始と停止等、オペレーティングシステムに係るすべてを制御する。
カーネルは、ユーザアプリケーションと、CPU、メモリ、ハードドライブといった、ハードウェア同士の連携も行う。
カーネルはオペレーティングシステムで行われているすべてを管理しているため、定期的なアップデートが必要だ。
アップデートには、新しいデバイスドライバ(ビデオカードやUSBデバイスなど)、ファイルシステムドライバ、システム拡張機能などが含まれる。
ここでLKMが登場する。
カーネルモジュールを再コンパイルせずにカーネルモジュールをロードしたりアンロードしたりするだけだ。
ステップ2:カーネルの確認
まず、システムがどのカーネルを実行しているかを確認しよう。
確認方法には、少なくとも2つある。
はじめに以下の様に入力してみて欲しい。
kali> uname -a
このコマンドを実行すれば、カーネルビルド(4.6.4)だけでなく、カーネルが構築されているアーキテクチャ(x86_64)も教えてくれる。
また、/proc/versionファイルを "cat"することでも同様の情報を得る事ができる。
kali> cat /proc/version
ステップ3:Sysctlによるカーネルチューニング
例えば、メモリ割り当ての変更、ネットワーク機能の有効化などだ。
他にはハッカーからの攻撃を防ぐ目的で、カーネル自体のセキュリティ強化も含まれる。
最近のLinuxカーネルには、カーネルオプションを調整するsysctlコマンドが備わっている。
sysctlを使って行った変更は、システムを再起動するまで有効となる。
変更を永久にするには、sysctlの設定ファイルを/etc/sysctl.confで編集する。
適切な知識と経験がなしで編集を行うと、システム全体が起動不能となり、使用できなくなるので、sysctlの取扱いには注意しよう。
それでは今度はsysctlの内容を見てみよう。
kali> sysctl -a | less
sysctlの設定ファイルを表示するには、
/etc/sysctl.confにアクセスする。
kali> less /etc/sysctl.conf
sysctlをハッキングに悪用する方法の1つとして、man-in-the-middle攻撃に対して”ipforwarding”(net.ipv4.conf.default.forwarding)を有効にすることだ。
セキュリティ強化の観点からは、ICMPエコー要求(net.ipv4.icmp_echo_ignore_all)を無効にして、ハッカーが私たちのシステムを見つけるのをより困難にするといいだろう。
ステップ4:カーネルモジュール
カーネルを管理するために、Linuxには少なくとも2つの方法がある。
少し前まで使用されていた方法は、”insmod”コマンドの周りに構築されたコマンドのグループを使用する事だ。
ここでは”lsmod”を使用して、カーネルにインストールされているモジュールを一覧表示する。
kali> lsmod
”insmod”を使用してモジュールをロードまたは挿入し、”rmmod”を使用してモジュールを削除することが出来る。
ステップ5:Modprobe
Kali Linuxを含むLinuxディストリビューションは、LKM管理用の”modprobe”コマンドに変換されている。
モジュールをカーネルに追加するには、以下の様に入力するといい。
kali> modprobe -a <モジュール名>
モジュールを削除するには、-rスイッチとmodprobeのあとにモジュールの名前を使用する。
kali> modprobe -r <削除するモジュール>
”modprobe”コマンドの主な利点は、カーネルモジュールの依存関係、オプション、インストールと削除の手順を理解出来る事だ。
インストールされたモジュールの設定ファイルを見る為にに、/etc/modprobe.d/ディレクトリの内容を一覧表示してみよう。
kali> ls -l /etc/modprobe.d/
LKMモジュールは、Linuxユーザーや管理者の為に用意されているのだが、実はLinuxのセキュリティの観点に立てば弱点とされている。
プロのハッカーになりたければ、よく知っておこう。
LKMを悪用してルートキットをカーネルに仕込み、ターゲットのLinuxシステムを滅茶苦茶にする事が出来るだろう。