2025年4月24日木曜日

APEXアプリケーションのセキュリティ・チェッカーAPEX-SERTをインストールする

先日、Oracle Corporationでソフトウェア開発のシニア・デイレクターを務めるScott Spendoliniさんより、APEX-SERTが公開され利用可能になったことが報告されました。

APEX-SERT: Now Available

APEX-SERTはAPEX開発者の間では、開発したAPEXアプリケーションのセキュリティ上の問題点をレポートするツールとして評価されていましたが、対応バージョンは5.1で開発が停止していました。過去のAPEX-SERTのGitHubリポジトリはこちらです。

今回、APEX 24.1以降に対応したツールとして新たにAPEX-SERTが公開されました。以前とは異なり、APEX 24.1から導入されたビルダー拡張としてインストールすることにより、オンプレミスおよびAutonomous Database(SQL*Netでの直接接続ができないAPEX Serviceを除く)でもインストールできるようになっています。

以下はAPEX-SERTをビルダー拡張から呼び出し、APEXアプリケーションのセキュリティ評価を実行した動画です。


APEX-SERTはOracle Corporationの製品ではなく、オープンソースで提供されています。GitHubのリポジトリは以下になります。ライセンスはUniversal Permissive License 1.0です。
https://github.com/oracle-samples/apex-sert

APEX-SERTのインストール手順は以下に記載されています。

ただし、オラクル社内に限定して利用されていたときの記述が残っているため、手順が分かりにくい部分があります。

以下より、ローカルのOracle Database 23ai Freeを使って作成したOracle APEXの環境に、APEX-SERTを導入した手順を紹介します。作業はmacOS上で行っていますが、SQLclが使える環境であればOSは選ばないはずです。

APEX-SERTのインストールにはSQLclを使用します。あらかじめ、使用するSQLclのバージョンを確認します。SQLclの要件は24.2以上です。

sql -version

% sql -version


SQLcl: リリース24.4.3.0 Production ビルド: 24.4.3.070.2106

% 


SQLclは以下のページよりダウンロードできます。


インストール・ガイドの確認していきます。

最初にインストール要件を確認します。

APEX-SERTはAPEX 24.1以降で利用できます。今回の作業はAPEX 24.2を対象にしています。APEX 24.2のビルダー拡張は自動的に各ワークスペースにサブスクライブされるように機能拡張されているため(参考記事「Oracle APEX 24.2のビルダー拡張の自動サブスクリプションについて」)、インストールするだけでビルダー拡張としてAPEX-SERTを呼び出せるようになります。APEX 24.1にインストールした場合は、手動でサブスクライブする必要があると思われます。

APEX-SERTは生成したレポートをPDFとして出力するために、AOP - APEX Office Print(ベルギーのUnited Codesが提供している製品およびクラウド・サービスです)およびOracle CloudのDocGenをサポートしています。今回は、これらを利用する構成は行いません。

オンプレミスのデータベースであればSQLclを使ってSYSDBAであるユーザーSYSで接続できること、Autonomous Databaseでは管理者ユーザーADMINで接続できることが条件です。

インストールする表領域には最低50MBの空き容量が必要です。Autonomous Databaseでは表領域DATAを指定します。今回はOracle Database 23ai Freeを対象としているため、表領域USERSにインストールします。

Issue #12にあるように、まだアンインストールするスクリプトは提供されていません。APEX-SERTはアプリケーション開発時に使用するツールなので本番環境にインストールすることはないと思いますが、現時点で本番環境にはインストールしない方がよいでしょう。

次にAPEX-SERTをダウンロードします。

色々な方法がありますが、今回はgit cloneを実行してダウンロードしました。

git clone https://github.com/oracle-samples/apex-sert.git

フォルダapex-sertが作成され、インストールに必要なファイルが配置されます。

% git clone https://github.com/oracle-samples/apex-sert.git

Cloning into 'apex-sert'...

remote: Enumerating objects: 1543, done.

remote: Counting objects: 100% (1543/1543), done.

remote: Compressing objects: 100% (603/603), done.

remote: Total 1543 (delta 963), reused 1464 (delta 897), pack-reused 0 (from 0)

Receiving objects: 100% (1543/1543), 7.63 MiB | 20.56 MiB/s, done.

Resolving deltas: 100% (963/963), done.

%


インストールを行うユーザーACDCを作成します。APEX-SERTの主要な開発者であるMichael Potterさんの出身はオーストラリアです。

product/sert/pre-installに移動します。

cd apex-sert/product/sert/pre-install

% cd product/sert/pre-install 

pre-install %


APEX-SERTをインストールするデータベースに、ユーザーSYS(Autonomous DatabaseであればADMIN)で接続します。

今回はローカルのOracle Database 23ai FreeのFREEPDB1に接続します。接続先がAutonomous Databaseの場合はas sysdbaは不要です。

Autonomous Databaseの場合、LOWのサービスに接続します。HIGHだとパラレル実行が有効になり、ORA-12838が発生するとのことです。

sql sys/[パスワード]@localhost/freepdb1 as sysdba

% sql sys/********@localhost/freepdb1 as sysdba



SQLcl: 木 4月 24 15:34:56 2025のリリース24.4 Production


Copyright (c) 1982, 2025, Oracle.  All rights reserved.


接続先:

Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

Version 23.7.0.25.01


SQL>


スクリプトcreate_acdc_schema.sqlを実行します。

@create_acdc_schema.sql ACDC [ACDCに設定するパスワード] [インストール先の表領域]

SQL> @create_acdc_schema.sql ACDC [パスワード] USERS

--

-- Create install schema

--


-- Schema name

ACDC


-- Check schema name

Completed.


User "ACDC" created




PL/SQLプロシージャが正常に完了しました。


--

-- Grants for install schema

--


-- Schema name

ACDC


-- Check schema name

Completed.


-- Grant roles

Completed.


-- Grant object privileges

Completed.


-- Grant system privileges

Completed.


WARNING: "ACDC" did not recieve all defined grants.

         This is usually not cause for concern; some privileges are not available in ADB

         or cannot be granted to non-ADMIN schemas


-- Failed grants

TYPE     | GRANT                                              | REASON

----------------------------------------------------------------------

OBJECT   | execute on c##cloud$service.dbms_cloud             | Object does not exist



PL/SQLプロシージャが正常に完了しました。


--

-- Revoke any existing privileges for schema

--


-- Schema name

ACDC


-- Check schema name

Completed.


-- Revoke privileges

Completed.


-- Revoke object privileges

Completed.


-- Revoke system privileges

Completed.


All grant revocations completed.




PL/SQLプロシージャが正常に完了しました。


--

-- Additional setup for schema

--


-- Schema name

ACDC


-- Check schema name

Completed.


-- Add ORA_APP_PROFILE profile to schema

Profile "ORA_APP_PROFILE" does not exist or is already assigned.




PL/SQLプロシージャが正常に完了しました。


Granting OCI resource principal access to ACDC...

WARNING: Unable to grant resource principal; probably not ADB



PL/SQLプロシージャが正常に完了しました。



PL/SQLプロシージャが正常に完了しました。



View ACDC.ACDC_RELEASE_Vは作成されました。



Synonym ACDC.ACDC_RELEASEは作成されました。


ACDC_RELEASE not set; assuming manual execution.

ACDC release table will be updated with today's date



PL/SQLプロシージャが正常に完了しました。


ACDC release set to:


RELEASE_TAG          

____________________ 

2025.04.24_manual    


1行が選択されました。 


Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

Version 23.7.0.25.01から切断されました

pre-install %


フォルダapex-sertに戻ります。

ファイルsert.propertiesを修正します。最低限、sert_admin_email_addressはご自身の電子メール・アドレスに置き換えます。

sert_app_idおよびsert_admin_idは、APEX-SERTをインストールすると作成されるAPEXアプリケーションのアプリケーションIDになります。APEXのインスタンス全体で未使用のアプリケーションIDを指定します。すでにアプリケーションIDが2100および2101であるアプリケーションが作成されている場合、これらの値を未使用のIDに変更する必要があります。

インストール先の表領域を指定したい場合はsert_data_tablespaceおよびsert_temp_tablespaceを指定します。

今回の作業では、sert_admin_email_addressのみを私自身のメール・アドレスに置き換えました。
########################################################################
# SERT Properties File
########################################################################
sert_apex_workspace = sert
sert_admin_user = sert_admin
sert_app_id = 2100
sert_admin_id = 2101
#sert_aop_url = https://xgbu-ace-aop.sniadprshared1.gbucdsint02iad.oraclevcn.com
sert_admin_email_address = michael.potter@oracle.com
sert_email_from = noreply@oracle.com
sert_mode = standalone

# if you leave the tablespace properties BLANK, installer will attempt to identify default tablespaces
# this is fine for ADB and some PDBs that are well configured, but for deployment one should
# explicitly define the tablespaces you install into. This only have effect on first install
sert_data_tablespace =
sert_temp_tablespace =

以上で準備ができたので、APEX-SERTのインストール・スクリプトを実行します。

ユーザーACDCでデータベースに接続し、install.sqlを実行します。スクリプトが記号&を含んでいるため、set define offを実行しておきます。

sql acdc@localhost/freepdb1
set define off
@install

apex-sert % sql acdc@localhost/freepdb1



SQLcl: 木 4月 24 15:36:56 2025のリリース24.4 Production


Copyright (c) 1982, 2025, Oracle.  All rights reserved.


パスワード (**********?) ************

Last Successful login time: 木 4月  24 2025 15:37:01 +09:00


接続先:

Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

Version 23.7.0.25.01


                                                                                

SQL> set define off

SQL> @install

--Starting Liquibase at 2025-04-24T15:37:24.494777 (version 4.25.0 #4.25.1 built at 2025-01-21 15:25+0000)

Running Changeset: product/sert/pre-install/base_schema.sql::sert_core_create::mipotter


Running Changeset: product/sert/pre-install/base_schema.sql::set-user-quota-default::SERT


Running Changeset: product/sert/pre-install/base_schema.sql::set-user-custom-tablespace::SERT

Running Changeset: product/sert/pre-install/base_schema.sql::set-user-custom-temp-tablespace::SERT


UPDATE SUMMARY

Run:                          4

Previously run:               0

Filtered out:                 0

-------------------------------

Total change sets:            4


Liquibase: Update has been successful. Rows affected: 4



操作が正常に完了しました。


--Starting Liquibase at 2025-04-24T15:37:25.475348 (version 4.25.0 #4.25.1 built at 2025-01-21 15:25+0000)

Running Changeset: product/sert/_dba/create_users.sql::sert_core_create::mipotter

Running Changeset: product/sert/_dba/create_users.sql::set-user-quota-default::SERT


Running Changeset: product/sert/_dba/create_users.sql::set-user-custom-tablespace::SERT

Running Changeset: product/sert/_dba/create_users.sql::set-user-custom-temp-tablespace::SERT

Running Changeset: product/sert/_dba/create_users.sql::sert_pub_create::mipotter


Running Changeset: product/sert/sert_core/table/builder_urls.sql::create_table_sert_core.builder_urls_1721795986865::mipotter


Running Changeset: product/sert/sert_core/table/builder_urls.sql::alter_table_sert_core.builder_urls_add_constraint_builder_urls_un_1721796960845::mipotter


Running Changeset: product/sert/sert_core/table/categories.sql::create_table_sert_core.categories_1721796023931::mipotter


Running Changeset: product/sert/sert_core/table/categories.sql::alter_table_sert_core.categories_add_constraint_categories_un_1721796977977::mipotter


Running Changeset: product/sert/sert_core/table/comments.sql::create_table_sert_core.comments_1721796087167::mipotter


[中略]


Running Changeset: product/sert/post_install/1500_migrate_exceptions.sql::migrate_exceptions_sert_2024::mzimon

Running Changeset: product/sert/post_install/setup_builder_menu_entries.sql::post_install_builder_remove_apex_sert_menu_entry::mipotter


Running Changeset: product/sert/post_install/setup_builder_menu_entries.sql::post_install_builder_add_menu_entry::mipotter


Running Changeset: product/sert/post_install/setup_builder_menu_entries.sql::post_install_setup_builder_extension_grants::mipotter

apex_instance_admin.grant_extension_workspace( p_from_workspace => :from_workspace, p_to_workspace => upper(:to_workspace), p_read_access => true, p_menu_label => 'APEX SERT');

Running Changeset: product/sert/post_install/upgrade_sert_apex_version.sql::check_upgrade_sert_apex_version::mipotter



UPDATE SUMMARY

Run:                        432

Previously run:               0

Filtered out:                 0

-------------------------------

Total change sets:          432


Liquibase: Update has been successful. Rows affected: 432



操作が正常に完了しました。


Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

Version 23.7.0.25.01から切断されました

apex-sert %


以上でAPEX-SERTのインストールは完了です。

APEXの開発ツールにサインインして、APEX-SERTを呼び出してみます。

ビルダー拡張のメニューから、APEX SERTExtensionsを呼び出します。


APEX-SERTアプリケーションに移動します。

APEX-SERTで評価するアプリケーションを選択します。現時点ではRule SetSECURITYのみなので、セキュリティに関する評価が実施されます。処理をバックグランドで実施するかどうかを選択し、Evaluateを実行します。


(Backgroundがオフの場合)評価が完了すると、評価結果が表示されます。


ルールに違反していなければPASS、違反していればFAILとマークされます。やむを得ずルールの違反を許容する場合はExceptionとします。その場合、ステータスはPENDINGになるようです。

今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。