🔍

Oktaの新機能「高度なポスチャチェック」のサンプルクエリ(macOS編)

に公開

Oktaの新機能である「高度なポスチャチェック(Advanced Posture Checks)」macOS編についてこちらのOkta日本語ブログの新記事で紹介しています。

「高度なポスチャチェック」自体の説明は、上記ブログ記事で詳細を解説しておりますのでを参照頂くとしまして、こちらのZennの記事では、実際のosqueryのサンプルクエリを共有したいと思います。紹介するサンプルクエリは、私の環境で動作確認を行いましたが、動作自体をお約束するものではありません。サンプルを元に自身の環境に合うようパラメータを変更したり、調整してみて下さい。

Oktaの「高度なポスチャチェック」で利用するためにはosqueryのクエリの結果が"1"(条件を満たす)または"0"(条件を満たさない)で応答するよう記述する必要があります。生成AIに依頼をすると様々なサンプルを作成してもらうことが出来ます。

1. 端末のDNSサーバーのIPアドレス設定が指定のサーバーと一致するかどうか

社内で認められていない一般公開のDNSサーバーが設定されている端末からのOktaの認証を拒否します。

SELECT
  CASE
    WHEN dns_check.is_present = 0 THEN 0
    ELSE 1
  END AS is_dns_8_8_8_8_configured
FROM
  (
    SELECT
      CASE
        WHEN COUNT(*) > 0 THEN 1
        ELSE 0
      END AS is_present
    FROM
      dns_resolvers
    WHERE
      address = '8.8.8.8'
  ) AS dns_check;

こちらはまず冒頭でDNSの設定があるかどうかの判定、またそのDNSのアドレスが8.8.8.8であれば"1"を応答するクエリーです。

2. 特定のファイルやプロセスが存在するかどうか

EDRエージェントやアンチウイルスソフトが動作しているかをプロセスを確認しエントリーがない場合はOktaの認証は拒否します。

SELECT
  EXISTS (
    SELECT
      1
    FROM
      processes
    WHERE
      path LIKE '%/Safari.app/Contents/MacOS/Safari'
  ) AS is_safari_running;

Safari.appのプロセスが存在するかどうかを確認し、存在する場合は"1"を返すクエリです。

3. USBメモリが端末に接続されていないかどうか

osqueryのusb_devicesというテーブルから接続機器を確認し、USBメモリなどのマスストレージが接続されている場合はOktaの認証を拒否します。

SELECT
  CASE
    WHEN (
      SELECT
        1
      FROM
        usb_devices
      WHERE
        class = '8'
      LIMIT
        1
    ) THEN 0
    ELSE 1
  END AS usb_check;

端末に接続されたUSBデバイスのクラスコードを確認し、クラス8、マスストレージの接続がない場合は"1"を返すクエリです。

4. 許可された特定のプライベートIPアドレスからのアクセスかどうか(特定の事業所、部門のネットワーク)

OktaでIPアドレス制限は可能ですが、インターネットGW(プロキシ)のアドレスからの判定しか出来ません。osqueryにより端末のIPアドレスを条件にすることが出来ます。つまり社内のプライベートIPアドレスから事業部や部門が識別できる場合は、これをもとに判定を行うことが可能です。

SELECT
  MAX(
    CASE
      WHEN INSTR(ip_address, '.') > 0 AND
           SPLIT(ip_address, '.', 0) = '192' AND
           SPLIT(ip_address, '.', 1) = '168' AND
           SPLIT(ip_address, '.', 2) = '66' THEN 1
      ELSE 0
    END
  ) AS is_in_target_subnet
FROM (
  SELECT address AS ip_address
  FROM interface_addresses
  WHERE address != '127.0.0.1' AND address NOT LIKE 'fe80:%' AND address NOT LIKE '::1'
);

端末のIPアドレスを取得し第1から第3オクテットがそれぞれ192.168.66と一致するかどうかの判定を行うクエリーです。IPv6やリンクローカルアドレスは除外しています。

まとめ

新機能の高度なポスチャチェックはクエリの書き方次第で可能性は無限大、アイデア次第です。このような使い方をしてみたい、使ってみて上手く言ったといった等あれば是非教えて下さい。Windows版についてもサンプルクエリを提供予定です。

新機能の高度なポスチャチェックについてはOkta Workforce Identityのフリートライアルで試して頂くことも可能です。30日間利用可能なフリートライアル環境はこちらからお申し込み下さい。

Discussion