Security Scanner und Oracle Patch Storage

Selbst wenn die DBAs jeden Oracle Critical Patch Update einspielen, melden Security Scanner, dass die Systeme noch nicht gepatched sind – sprich, die Security-Leaks bestehen potentiell noch.

Was passiert eigentlich, wenn man mit OPatches die Oracle Patches einspielt?

Zuerst wird überprüft, welche Files durch den Patch verändert werden. Damit ein Rollback eines Patches möglich ist, werden diese Files im Rahmen des Einspielens zuerst gesichert. Diese Sicherung landet im Verzeichnis $ORACLE_HOME/.patch_storage.

Das bedeutet aber, dass natürlich auch die von den Security-Leaks betroffenen Dateien nicht überschrieben oder gelöscht, sondern nur in ein anderes Verzeichnis kopiert werden. Damit sind diese für die Security Scanner immer noch auffindbar und erzeugen die entsprechenden Meldungen.

Wie kann man das Problem lösen?

Leider ist es nicht ganz so einfach. Im Artikel Oracle OPatch hat endlich zusammenräumen gelernt! habe ich bereits beschrieben, wie man die mit aktuellen OPatch Versionen nicht mehr benötigte Backups archiviert.

Das bietet den Vorteil, dass OPatch in Zukunft beim Patching wieder schneller wird. Es werden alle Backups in allen im Verzeichnis $ORACLE_HOME/.patch_storage darauf geprüft, ob eine Datei schon einmal gesichert wurde. Allerdings gibt es noch ein letztes Problem. Es werden beim Zusammenräumen nicht alle alten Patchbackups gelöscht. Zumindest das Backup für den zuletzt eingespielten Patch ist immer noch vorhanden!

Dies kann man durch das Archivieren des Backups umgehen. Im Artikel Opatch Archive Utility findet man die Anleitung, wie man die noch im $ORACLE_HOME/.patch_storage vorhandenen Backups archivieren kann. Dieses Archiv kann man jederzeit wieder restoren, sollte man den Patch rollbacken müssen.

Sicheres Cleanup aller Patch Backup Files

Zuerst kann man sich die Liste der inactiven Patches ausgeben lassen (optional, kann ausgelassen werden):

$ORACLE_HOME/OPatch/opatch util listorderedinactivepatches

Oracle Interim Patch-Installationsprogramm Version 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation.  All rights reserved. Alle Rechte vorbehalten.


Oracle Home: /u01/app/oracle/product/19.0.0/dbhome_ee
Zentrales Bestandsverzeichnis: /u01/app/oraInventory
   von: /u01/app/oracle/product/19.0.0/dbhome_ee/oraInst.loc
OPatch-Version: 12.2.0.1.40
OUI-Version : 12.2.0.7.0
Speicherort der Logdatei: /u01/app/oracle/product/19.0.0/dbhome_ee/cfgtoollogs/opatch/opatch2023-11-01_21-19-57PM_1.log

Invoking utility "listorderedinactivepatches"
List Inactive patches option provided

The oracle home has the following inactive patch(es) and their respective overlay patches:

The number of RU chains is  3

***** There are 7 inactive RU patches in chain 1
-Inactive RU/BP 29517242:Database Release Update : 19.3.0.0.190416 (29517242), installed on: Thu Apr 18 09:21:17 CEST 2019, with no overlays
-Inactive RU/BP 29834717:Database Release Update : 19.4.0.0.190716 (29834717), installed on: Thu Sep 12 07:24:30 CEST 2019, with no overlays
-Inactive RU/BP 31771877:Database Release Update : 19.9.0.0.201020 (31771877), installed on: Fri Oct 23 14:18:13 CEST 2020, with no overlays
-Inactive RU/BP 32218454:Database Release Update : 19.10.0.0.210119 (32218454), installed on: Wed Jun 16 09:27:20 CEST 2021, with no overlays
-Inactive RU/BP 32545013:Database Release Update : 19.11.0.0.210420 (32545013), installed on: Wed Jun 16 10:16:34 CEST 2021, with no overlays
-Inactive RU/BP 33192793:Database Release Update : 19.13.0.0.211019 (33192793), installed on: Sat Jan 29 13:02:10 CET 2022, with no overlays
-Inactive RU/BP 33515361:Database Release Update : 19.14.0.0.220118 (33515361), installed on: Mon Feb 14 13:02:36 CET 2022, with no overlays
-Active RU/BP 35643107:Database Release Update : 19.21.0.0.231017 (35643107), installed on: Wed Nov 01 19:37:55 CET 2023, with no overlays

***** There are 5 inactive RU patches in chain 2
-Inactive RU/BP 29774421:OJVM RELEASE UPDATE: 19.4.0.0.190716 (29774421), installed on: Thu Sep 12 07:26:03 CEST 2019, with no overlays
-Inactive RU/BP 32067171:OJVM RELEASE UPDATE: 19.10.0.0.210119 (32067171), installed on: Wed Jun 16 09:20:19 CEST 2021, with no overlays
-Inactive RU/BP 32399816:OJVM RELEASE UPDATE: 19.11.0.0.210420 (32399816), installed on: Wed Jun 16 10:11:47 CEST 2021, with no overlays
-Inactive RU/BP 33192694:OJVM RELEASE UPDATE: 19.13.0.0.211019 (33192694), installed on: Sat Jan 29 12:58:11 CET 2022, with no overlays
-Inactive RU/BP 33561310:OJVM RELEASE UPDATE: 19.14.0.0.220118 (33561310), installed on: Sat Jan 29 14:10:30 CET 2022, with no overlays
-Active RU/BP 35648110:OJVM RELEASE UPDATE: 19.21.0.0.231017 (35648110), installed on: Wed Nov 01 19:46:38 CET 2023, with no overlays

***** There are 1 inactive RU patches in chain 3
-Inactive RU/BP 29585399:OCW RELEASE UPDATE 19.3.0.0.0 (29585399), installed on: Thu Apr 18 09:21:33 CEST 2019, with no overlays
-Active RU/BP 33529556:OCW RELEASE UPDATE 19.14.0.0.0 (33529556), installed on: Sat Jan 29 14:03:15 CET 2022, with no overlays

OPatch succeeded.

Diese inaktiven Patches kann man im Anschluss mit dem folgenden Befehl sauber vom System löschen:

$ORACLE_HOME/OPatch/opatch util deleteinactivepatches -silent

Oracle Interim Patch-Installationsprogramm Version 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation.  All rights reserved. Alle Rechte vorbehalten.


Oracle Home: /u01/app/oracle/product/19.0.0/dbhome_ee
Zentrales Bestandsverzeichnis: /u01/app/oraInventory
   von: /u01/app/oracle/product/19.0.0/dbhome_ee/oraInst.loc
OPatch-Version: 12.2.0.1.40
OUI-Version : 12.2.0.7.0
Speicherort der Logdatei: /u01/app/oracle/product/19.0.0/dbhome_ee/cfgtoollogs/opatch/opatch2023-11-01_21-25-40PM_1.log

Invoking utility "deleteinactivepatches"
Inactive Patches Cleanup option provided
Delete Inactive Patches .......

***** There are 7 inactive RU patches in chain 1

***** 6 inactive patches will be deleted
-To be deleted inactive RU/BP 29517242:Database Release Update : 19.3.0.0.190416 (29517242), installed on: Thu Apr 18 09:21:17 CEST 2019, with no overlays
-To be deleted inactive RU/BP 29834717:Database Release Update : 19.4.0.0.190716 (29834717), installed on: Thu Sep 12 07:24:30 CEST 2019, with no overlays
-To be deleted inactive RU/BP 31771877:Database Release Update : 19.9.0.0.201020 (31771877), installed on: Fri Oct 23 14:18:13 CEST 2020, with no overlays
-To be deleted inactive RU/BP 32218454:Database Release Update : 19.10.0.0.210119 (32218454), installed on: Wed Jun 16 09:27:20 CEST 2021, with no overlays
-To be deleted inactive RU/BP 32545013:Database Release Update : 19.11.0.0.210420 (32545013), installed on: Wed Jun 16 10:16:34 CEST 2021, with no overlays
-To be deleted inactive RU/BP 33192793:Database Release Update : 19.13.0.0.211019 (33192793), installed on: Sat Jan 29 13:02:10 CET 2022, with no overlays
-To be retained inactive RU/BP 33515361:Database Release Update : 19.14.0.0.220118 (33515361), installed on: Mon Feb 14 13:02:36 CET 2022, with no overlays
-Active RU/BP 35643107:Database Release Update : 19.21.0.0.231017 (35643107), installed on: Wed Nov 01 19:37:55 CET 2023, with no overlays

***** There are 5 inactive RU patches in chain 2

***** 4 inactive patches will be deleted
-To be deleted inactive RU/BP 29774421:OJVM RELEASE UPDATE: 19.4.0.0.190716 (29774421), installed on: Thu Sep 12 07:26:03 CEST 2019, with no overlays
-To be deleted inactive RU/BP 32067171:OJVM RELEASE UPDATE: 19.10.0.0.210119 (32067171), installed on: Wed Jun 16 09:20:19 CEST 2021, with no overlays
-To be deleted inactive RU/BP 32399816:OJVM RELEASE UPDATE: 19.11.0.0.210420 (32399816), installed on: Wed Jun 16 10:11:47 CEST 2021, with no overlays
-To be deleted inactive RU/BP 33192694:OJVM RELEASE UPDATE: 19.13.0.0.211019 (33192694), installed on: Sat Jan 29 12:58:11 CET 2022, with no overlays
-To be retained inactive RU/BP 33561310:OJVM RELEASE UPDATE: 19.14.0.0.220118 (33561310), installed on: Sat Jan 29 14:10:30 CET 2022, with no overlays
-Active RU/BP 35648110:OJVM RELEASE UPDATE: 19.21.0.0.231017 (35648110), installed on: Wed Nov 01 19:46:38 CET 2023, with no overlays

Möchten Sie fortfahren? [y|n]
Y (auto-answered by -silent)
User Responded with: Y
Deleted RU/BP patch: 29517242
Deleted RU/BP patch: 29834717
Deleted RU/BP patch: 31771877
Deleted RU/BP patch: 32218454
Deleted RU/BP patch: 32545013
Deleted RU/BP patch: 33192793
Deleted RU/BP patch: 29774421
Deleted RU/BP patch: 32067171
Deleted RU/BP patch: 32399816
Deleted RU/BP patch: 33192694

OPatch succeeded.

Jetzt holt man sich die noch vorhandenen Patch-Backup-Informationen…

$ORACLE_HOME/OPatch/opatch util listorderedinactivepatches

Oracle Interim Patch-Installationsprogramm Version 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation.  All rights reserved. Alle Rechte vorbehalten.


Oracle Home: /u01/app/oracle/product/19.0.0/dbhome_ee
Zentrales Bestandsverzeichnis: /u01/app/oraInventory
   von: /u01/app/oracle/product/19.0.0/dbhome_ee/oraInst.loc
OPatch-Version: 12.2.0.1.40
OUI-Version : 12.2.0.7.0
Speicherort der Logdatei: /u01/app/oracle/product/19.0.0/dbhome_ee/cfgtoollogs/opatch/opatch2023-11-01_21-40-19PM_1.log

Invoking utility "listorderedinactivepatches"
List Inactive patches option provided

The oracle home has the following inactive patch(es) and their respective overlay patches:

The number of RU chains is  3

***** There are 1 inactive RU patches in chain 1
-Inactive RU/BP 33515361:Database Release Update : 19.14.0.0.220118 (33515361), installed on: Mon Feb 14 13:02:36 CET 2022, with no overlays
-Active RU/BP 35643107:Database Release Update : 19.21.0.0.231017 (35643107), installed on: Wed Nov 01 19:37:55 CET 2023, with no overlays

***** There are 1 inactive RU patches in chain 2
-Inactive RU/BP 29585399:OCW RELEASE UPDATE 19.3.0.0.0 (29585399), installed on: Thu Apr 18 09:21:33 CEST 2019, with no overlays
-Active RU/BP 33529556:OCW RELEASE UPDATE 19.14.0.0.0 (33529556), installed on: Sat Jan 29 14:03:15 CET 2022, with no overlays

***** There are 1 inactive RU patches in chain 3
-Inactive RU/BP 33561310:OJVM RELEASE UPDATE: 19.14.0.0.220118 (33561310), installed on: Sat Jan 29 14:10:30 CET 2022, with no overlays
-Active RU/BP 35648110:OJVM RELEASE UPDATE: 19.21.0.0.231017 (35648110), installed on: Wed Nov 01 19:46:38 CET 2023, with no overlays

OPatch succeeded.

… und kann die noch vorhandenen Patches mit dem Archive Utility archivieren. Dazu muss man die Patchnummern (in Klammern) als Liste mit Beistrichen getrennt und OHNE Leerzeichen in dem folgenden Befehl einfügen:

$ORACLE_HOME/OPatch/opatch util archive \
   -patches 33515361,29585399,33561310,35643107,33529556,35648110 \
   -archive_dir /u01/opatch_archive

Oracle Interim Patch-Installationsprogramm Version 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation.  All rights reserved. Alle Rechte vorbehalten.


Oracle Home: /u01/app/oracle/product/19.0.0/dbhome_ee
Zentrales Bestandsverzeichnis: /u01/app/oraInventory
   von: /u01/app/oracle/product/19.0.0/dbhome_ee/oraInst.loc
OPatch-Version: 12.2.0.1.40
OUI-Version : 12.2.0.7.0
Speicherort der Logdatei: /u01/app/oracle/product/19.0.0/dbhome_ee/cfgtoollogs/opatch/opatch2023-11-01_21-43-10PM_1.log

Invoking utility "archive"

Archiving Patch - 33515361 ....
Sucessfully archived patch - 33515361 in /u01/opatch_archive/33515361_Jan_13_2022_06_14_07.zip

Archiving Patch - 33561310 ....
Sucessfully archived patch - 33561310 in /u01/opatch_archive/33561310_Jan_5_2022_08_13_10.zip

Archiving Patch - 35643107 ....
Sucessfully archived patch - 35643107 in /u01/opatch_archive/35643107_Oct_3_2023_13_34_29.zip

Archiving Patch - 35648110 ....
Sucessfully archived patch - 35648110 in /u01/opatch_archive/35648110_Aug_25_2023_10_22_03.zip

Archiving Patch - 33529556 ....
Sucessfully archived patch - 33529556 in /u01/opatch_archive/33529556_Jan_9_2022_21_15_36.zip
Succesfully verified the created archive. Deleting the original patch from  - /u01/app/oracle/product/19.0.0/dbhome_ee/.patch_storage/33515361_Jan_13_2022_06_14_07
Succesfully verified the created archive. Deleting the original patch from  - /u01/app/oracle/product/19.0.0/dbhome_ee/.patch_storage/33561310_Jan_5_2022_08_13_10
Succesfully verified the created archive. Deleting the original patch from  - /u01/app/oracle/product/19.0.0/dbhome_ee/.patch_storage/35643107_Oct_3_2023_13_34_29
Succesfully verified the created archive. Deleting the original patch from  - /u01/app/oracle/product/19.0.0/dbhome_ee/.patch_storage/35648110_Aug_25_2023_10_22_03
Succesfully verified the created archive. Deleting the original patch from  - /u01/app/oracle/product/19.0.0/dbhome_ee/.patch_storage/33529556_Jan_9_2022_21_15_36
Patch archive operation completed successfully.

OPatch succeeded.

Als letzte Kontrolle schauen wir uns den Platzverbrauch im Verzeichnis $ORACLE_HOME/.patch_storage an:

du -sh $ORACLE_HOME/.patch_storage

30M	/u01/app/oracle/product/19.0.0/dbhome_ee/.patch_storage

Dieser darf nur noch im Bereich von kB/MB liegen. Es dürfen keine Sub-Verzeichnisse mehr vorhanden sein, die mit einer Patchnummer beginnen:

ls -la $ORACLE_HOME/.patch_storage

drwxr-xr-x.  ...   .
drwxr-xr-x.  ...   ..
drwxr-xr-x   ...   .archive_xml_bck
drwxr-xr-x   ...   backup_delete_inactive
-rw-r--r--   ...   interim_inventory.txt
-rw-r--r--   ...   LatestOPatchSession.properties
drwxr-xr-x.  ...   NApply
-rw-r--r--   ...   newdirs.txt
drwxr-xr-x   ...   NRollback
-rw-r--r--   ...   .patch_archive_mapping.xml
-rw-r--r--   ...   record_inventory.txt

Hinweis: zur besseren Lesbarkeit wird ein Teil des Outputs durch „…“ ersetzt.

Was findet man in /u01/opatch_archive?

ls -la /u01/opatch_archive

insgesamt 2028876
drwxr-xr-x   ...  .
drwxr-xr-x.  ...  ..
-rw-r--r--   ...  33515361_Jan_13_2022_06_14_07.zip
-rw-r--r--   ...  33529556_Jan_9_2022_21_15_36.zip
-rw-r--r--   ...  33561310_Jan_5_2022_08_13_10.zip
-rw-r--r--   ...  35643107_Oct_3_2023_13_34_29.zip
-rw-r--r--   ...  35648110_Aug_25_2023_10_22_03.zip

Damit haben wir sauber zusammengeräumt. Die Security Scanner werden jetzt nichts mehr finden. Sollte der Security Scanner auch in ZIP Files prüfen, muss man das Verzeichnis /u01/opatch_archive von der Prüfung ausnehmen.

Was macht man, wenn man den letzten Patch rollbacken muss?

Tritt danach ein Problem auf und es wird ein Rollback des letzten Patches benötigt, muss man diesen zuerst „unarchiveren“. Woher weiss Oracle eigentlich, was und von wo zu restoren ist?
Dieses Geheimnis steht im File $ORACLE_HOME/.patch_storage/.patch_archive_mapping.xml.

Zum „unarchivieren“ nutzt man den folgenden Befehl, wobei man auch hier mehrere Patchnummern anführen kann:

$ORACLE_HOME/OPatch/opatch util unarchive -patches 33529556

Oracle Interim Patch-Installationsprogramm Version 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation.  All rights reserved. Alle Rechte vorbehalten.


Oracle Home: /u01/app/oracle/product/19.0.0/dbhome_ee
Zentrales Bestandsverzeichnis: /u01/app/oraInventory
   von: /u01/app/oracle/product/19.0.0/dbhome_ee/oraInst.loc
OPatch-Version: 12.2.0.1.40
OUI-Version : 12.2.0.7.0
Speicherort der Logdatei: /u01/app/oracle/product/19.0.0/dbhome_ee/cfgtoollogs/opatch/opatch2023-11-01_22-08-27PM_1.log

Invoking utility "unarchive"
Unarchive given patches for given OH
Started : unarchiving the patch dirs to OH/.patch_storage
User specified list :[33529556]
Total Space Needed for Unarchive :244784693
Unarchive successful :/u01/app/oracle/product/19.0.0/dbhome_ee/.patch_storage/33529556_Jan_9_2022_21_15_36
Unarchive  session is complete
To clean up archives from custom storage path,Run the following command :'/u01/app/oracle/product/19.0.0/dbhome_ee/OPatch/opatch util cleanuparchives'

OPatch succeeded.

Anschliessend den Patch wie gewohnt rollbacken:

$ORACLE_HOME/OPatch/opatch rollback -id 33529556

Danach datapatch nicht vergessen (für alle Datenbanken, die dieses Oracle Home nutzen), damit auch das Data Dictionary wieder zur Oracle Softwareversion passt.

Damit wird der Security Scanner viel weniger Treffer finden und die Server sind ein Stück sicherer, sofern alleine die Existenz eines Files zu einer Security Lücke führt (meist ist es nur die Ausführung von Files).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

This site uses Akismet to reduce spam. Learn how your comment data is processed.