Sec default passwords

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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 : &current_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é.

Voir aussi

  • Sec users — état de tous les comptes (statut, profil, tablespaces)
  • Sec roles — rôles et privilèges accordés