Шифрование паролей в СУБД Oracle

       

Подмена пакетов


Разрешение имен в БД Oracle производится в следующей последовательности:

  • Если имеется объект с таким названием в текущей схеме, то используется он
  • Если имеется приватный синоним с таким названием в текущей схеме, то используется он.
  • Если в БД имеется общедоступный синоним с таким названием, то используется он.

Описанная система имеет тот недостаток, что злоумышленник может произвести подмену пакетов, без ущерба для работоспособности объектов схемы. Для этого в текущей схеме создается новый пакет, с таким же именем, как и вызываемый (например, dbms_crypto), который делает некоторые дополнительные действия (например, вызов процедуры utl_http, utl_mail, utl_smtp и т.д.) а затем вызывает настоящий dbms_crypto. В результате пользователь может и не заметить подмены, компиляция всех объектов схемы будет происходить успешно, а пароли будут утекать в Интернет.

Пароли к схемам можно получить из файла логов http-web-access.log или путем включения трассировки

Бороться с подменой пакетом можно

  • путем полной адресации объекта, например SQL > exec SYS.dbms_crypto …
  • также путем отнимания привилегий на потенциально опасные пакеты UTL_MAIL, UTL_SMTP, UTL_TCP, UTL_HTTP, UTL_FILE, DBMS_RANDOM:

    REVOKE EXECUTE ON UTL_SMTP FROM PUBLIC; REVOKE EXECUTE ON UTL_TCP FROM PUBLIC; REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC; REVOKE EXECUTE ON UTL_FILE FROM PUBLIC; REVOKE EXECUTE ON DBMS_RANDOM FROM PUBLIC;

  • Обнаружение потенциальных злоумышленников производится запросом:

    SELECT * FROM DBA_TAB_PRIVS WHERE PRIVILEGE = 'EXECUTE' AND GRANTEE = 'PUBLIC' AND TABLE_NAME IN('UTL_SMTP','UTL_TCP','UTL_HTTP','DBMS_RANDOM') ;

    SELECT GRANTEE AS USERNAME, PRIVILEGE, ADMIN_OPTION FROM DBA_SYS_PRIVS WHERE ( PRIVILEGE LIKE '% ANY %' OR PRIVILEGE LIKE '%DATABASE LINK%' OR PRIVILEGE LIKE '%UNLIMITED%' OR PRIVILEGE = 'BECOME USER' OR ADMIN_OPTION = 'YES' ) AND GRANTEE NOT IN ( 'SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'DBA', 'CONNECT', 'RESOURCE', 'EXP_FULL_DATABASE', 'IMP_FULL_DATABASE', 'AQ_ADMINISTRATOR_ROLE', 'OEM_MONITOR', 'CTXSYS', 'IFSSYS', 'IFSSYS$CM', 'MDSYS', 'ORDPLUGINS', 'ORDSYS', 'TIMESERIES_DBA', 'WKSYS', 'SYSMAN', 'OLAPSYS', 'OLAP_DBA', 'EXFSYS', 'SCHEDULER_ADMIN', 'WMSYS', 'SI_INFORMTN_SCHEMA', 'JAVADEBUGPRIV', 'MDDATA', 'RECOVERY_CATALOG_OWNER' ) AND GRANTEE NOT IN ( SELECT USERNAME FROM DBA_USERS WHERE ACCOUNT_STATUS != 'OPEN' ) ORDER BY 1, 2 ;

    А обнаружение потенциальных Троянов производится запросом: SELECT * FROM DBA_SYNONYMS WHERE OWNER = 'PUBLIC' AND NOT TABLE_OWNER IN ('SYS','SYSMAN','SYSTEM','WMSYS','EXFSYS','ORDSYS','MDSYS', 'XDB');



    Содержание раздела