Sec default passwords
| Fiche express | |
|---|---|
| Type | Script SQL*Plus d'audit de sécurité |
| Voir aussi | Sec users · Sec roles |
Sec default passwords détecte les comptes Oracle créés en standard (par les scripts
d'installation ou les options serveur) qui utilisent encore leur mot de passe par défaut,
en comparant le hash stocké dans DBA_USERS.PASSWORD à la liste des hashs de
mots de passe par défaut publiés par Oracle pour ses comptes techniques (DBSNMP,
CTXSYS, MDSYS, OUTLN, SYS,
SYSTEM...). Un compte technique resté sur son mot de passe d'installation est
une porte d'entrée triviale pour un attaquant qui connaît ce catalogue public.
Limite technique importante : cette méthode repose sur l'ancien algorithme de hachage
Oracle (DES, non salé, insensible à la casse), utilisé jusqu'à Oracle 10g. À partir de la
11g, l'authentification par défaut passe en SEC_CASE_SENSITIVE_LOGON=TRUE avec
un hash SHA-1 différent (colonne SPARE4), puis SHA-512 en 12c — le hash lu ici
ne correspond alors plus au mot de passe réel et le script ne détecte plus rien de fiable.
Sur Oracle 11g et plus récent, préférer la vue native DBA_USERS_WITH_DEFPWD,
qui fait exactement ce contrôle en interne, quelle que soit la version de l'algorithme de
hachage utilisée.
Les valeurs de hash ci-dessous sont les constantes publiques associées par Oracle aux comptes standard livrés avec le moteur (pas des identifiants d'un système réel) — c'est le principe même du contrôle : elles servent à repérer un mot de passe resté à sa valeur d'usine, pas à s'y connecter.
Script
SET TERMOUT OFF
COLUMN current_instance NEW_VALUE current_instance NOPRINT
SELECT rpad(instance_name, 17) current_instance FROM v$instance;
SET TERMOUT ON
PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Report : Security - Users with default database password |
PROMPT | Instance : ¤t_instance |
PROMPT +------------------------------------------------------------------------+
SET LINESIZE 180
SET PAGESIZE 50000
CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES
COLUMN username FORMAT a30 HEADING 'User(s) with Default Password!'
COLUMN account_status FORMAT a30 HEADING 'Account Status'
SELECT
username username
, account_status account_status
FROM dba_users
WHERE password IN (
'E066D214D5421CCC' -- DBSNMP
, '24ABAB8B06281B4C' -- CTXSYS
, '72979A94BAD2AF80' -- MDSYS
, 'C252E8FA117AF049' -- ODM
, 'A7A32CD03D3CE8D5' -- ODM_MTR
, '88A2B2C183431F00' -- ORDPLUGINS
, '7EFA02EC7EA6B86F' -- ORDSYS
, '4A3BA55E08595C81' -- OUTLN
, 'F894844C34402B67' -- SCOTT
, '3F9FBD883D787341' -- WK_PROXY
, '79DF7A1BD138CF11' -- WK_SYS
, '7C9BA362F8314299' -- WMSYS
, '88D8364765FCE6AF' -- XDB
, 'F9DA8977092B7B81' -- TRACESVR
, '9300C0977D7DC75E' -- OAS_PUBLIC
, 'A97282CE3D94E29E' -- WEBSYS
, 'AC9700FD3F1410EB' -- LBACSYS
, 'E7B5D92911C831E1' -- RMAN
, 'AC98877DE1297365' -- PERFSTAT
, 'D4C5016086B2DC6A' -- SYS
, 'D4DF7931AB130E37' -- SYSTEM
)
ORDER BY username
/
Toute ligne renvoyée doit déclencher un changement de mot de passe immédiat
(ALTER USER ... IDENTIFIED BY ...) et, pour les comptes technique non utilisés
(SCOTT en tête), un verrouillage (ACCOUNT LOCK) voire une
suppression si le composant associé n'est pas exploité.