悪意のある攻撃者への対策

この章では悪意のある攻撃者からArmadillo-IoT ゲートウェイ G4を守る方法を説明します。

8.1. KASLR

KASLR(Kernel Address Space Location Randomization)は、Linuxカーネルの実行時の仮想アドレス空間を起動のたびにランダム化するセキュリティ機能です。

KASLRを有効化すると、攻撃者がLinuxカーネル内の特定の機能やデータのアドレスを予測することが困難になります。それによって、アドレスが判明している場合に可能な攻撃に対する保護レベルを向上させることができます。

工場出荷状態のArmadillo-IoT ゲートウェイ G4では、KASLRは無効化されています。

[ティップ]

ユーザランドでも同様の仕組みとしてASLRという機能があります。工場出荷状態のArmadillo-IoT ゲートウェイ G4では、ASLRは有効化されています。

ASLRが有効化されていることを確認するには、randomize_va_spaceの値が0以外になっていることを確認してください。

[armadillo ~]# cat /proc/sys/kernel/randomize_va_space
2

ここからはKASLRを有効化し、有効化されていることを確認する方法を説明します。

8.1.1. KASLRの有効化

電源を投入するとすぐに以下のように uboot からデバッグ出力されます。 その間にシリアル通信ソフトウェア上で何らかのキーを押して、 uboot の プロンプトに入ってください。

Hit any key to stop autoboot:  2
u-boot=>

環境変数optargsの値を確認します。nokaslrが指定されている場合は、KASLRは無効化されています。

u-boot=> env print optargs
optargs=quiet nokaslr

環境変数optargsからnokaslrを削除します。上記で、quietとnokaslrが指定されていることを確認したので、quietのみを指定します。

u-boot=> env set optargs quiet

設定が反映されていることを確認します。optargsにquietのみが指定されていることが確認できます。

u-boot=> env print optargs
optargs=quiet

設定を保存します。

u-boot=> env save
Saving Environment to MMC... Writing to MMC(2)... OK

以上でKASLRの有効化を終わります。

8.1.2. KASLRの有効化確認

Linuxを起動して、シンボルのアドレスを確認します。ここでは例としてvprintk_deferredのアドレスを確認します。

[armadillo ~]# cat /proc/kallsyms | grep vprintk_deferred
ffffdaffcac98530 T vprintk_deferred

ffffdaffcac98530であることが確認できます。再起動後、再度vprintk_deferredのアドレスを確認します。

[armadillo ~]# reboot
: (省略)
[armadillo ~]# cat /proc/kallsyms | grep vprintk_deferred
ffffa5c2de898530 T vprintk_deferred

ffffa5c2de898530であることが確認でき、アドレスが変化していることが確認できました。

[ティップ]

上位16bitと下位20bitはランダム化されません。