Февраль 2002


Профессионалу администратору


Пит Финиган

Проблемы с параметром инициализации "fixed_date"
(Issues with the initialisation parameter "fixed_date")

Источник: http://www.pentest-limited.com/fixed-date.htm

В этой небольшой статье описан параметр инициализации"fixed_date" (фиксированная дата) и рассмотрены проблемы, которые могут возникнуть при использовании функции SYSDATE и этого параметра, если он плохо защищен.

Проблема

Немало приложений пользуются простыми встроенными средствами Oracle для работы с датами. Я видел несколько финансовых приложений, в которых платежи процентов базируются и вычисляются с помощью дат, возвращаемых функцией SYSDATE. Представим ошибки вычислений, которые могут возникнуть при таких расчетах, если системная дата установлена некорректно.

Параметр инициализации"fixed_date" может быть установлен в файле инициализации init{SID}.ora или динамически командой ALTER SYSTEM. Этот параметр позволяет устанавливать постоянную дату, которую SYSDATE всегда будет возвращать вместо текущей даты. Формат даты: YYYY-MM-DD-HH24:MI:SS. В файле инициализации дату можно также задавать без указания элементов времени, например:

	fixed_date="30-nov-2001"

	или

	fixed_date = 30-nov-2001

Дата задается с двойными кавычками, вообще без кавычек, нельзя только использовать одиночные кавычки. Oracle заявляет, что этот параметр, главным образом, предназначен для тестирования.

Плохие новости

Плохие новости заключаются в том, что нарушитель или злоумышленный пользователь, который знает, что важные функции и вычисления в приложении зависят от SYSDATE, может использовать этот параметр для своей выгоды. Все что нужно, это найти пользователя, который имеет привилегию ALTER SYSTEM, или пользователя, который имеет право выдавать эту привилегию. Затем нарушитель может изменить дату в момент доступа к приложению или перед запуском ночных пакетных заданий и разрушать систему платежей.

Пример

Для демонстрации данной проблемы рассмотрим пример из нескольких команд.

SQL> sho user
USER is "SYS"
SQL> select grantee

  2  from dba_sys_privs
  3  where privilege='ALTER SYSTEM';

GRANTEE
------------------------------
CTXSYS
DBA
MDSYS
PORTAL30
PORTAL30_SSO


SQL> connect portal30/portal30
Connected.
SQL> select sysdate
  2  from dual;

SYSDATE
---------
19-NOV-01

SQL> alter system set fixed_date='2001-11-01';


System altered.

SQL> select sysdate
  2  from dual;

SYSDATE
---------
01-NOV-01

SQL> connect dbsnmp/dbsnmp
Connected.

SQL> select to_char(sysdate,'DD-MON-YYYY')
  2  from dual;

TO_CHAR(SYS
-----------
01-NOV-2001

SQL> connect sys/change_on_install
Connected.
SQL> select grantee
  2  from dba_sys_privs
  3  where privilege='ALTER SESSION';


GRANTEE
------------------------------
CONNECT
CTXSYS
DBA
MDSYS
PORTAL30
PORTAL30_SSO
RECOVERY_CATALOG_OWNER

7 rows selected.

SQL> connect ctxsys/ctxsys
Connected.

SQL> alter session set fixed_date='2001-10-12';
alter session set fixed_date='2001-10-12'
                  *
ERROR at line 1:
ORA-02096: specified initialization parameter 
is not modifiable with this option

SQL>

В приведенном примере сначала показано соединение с базой данных привилегированного пользователя, который имеет право запрашивать привилегии из представления dba_sys_privs. Он находит пользователей, имеющих привилегию ALTER SYSTEM. Как мы видим, это несколько пользователей, создаваемых по умолчанию, а также роль DBA (далее на этом этапе можно проверить, какие пользователи имеют эту роль, но в данном примере мы этого делать не будем). Затем соединимся как один из выбранных пользователей, portal30, используя его пароль по умолчанию. Далее проверим, что SYSDATE показывает корректную дату, а затем изменим параметр fixed_date, и вновь проверим, что SYSDATE действительно изменилась. Наконец, соединимся как какой-нибудь другой пользователь и проверим, что SYSDATE выдает неправильные даты для всех пользователей.

Последняя часть примера просто показывает, что параметр fixed_date нельзя изменять, имея только привилегию ALTER SESSION.

Заключение

Очевидно, что этот параметр может быть очень опасным, если в выполняемых функциях приложения используется SYSDATE. Если использование дат критично, следует рассмотреть возможность отказа от SYSDATE (что не всегда просто). По крайней мере, нужно проверить, какие пользователи имеют привилегию ALTER SYSTEM, и ограничить к ней доступ. Кроме того, следует удалить ненужных пользователей, создаваемых по умолчанию, или изменить их пароли. У всех нужных пользователей, создаваемых по умолчанию, необходимо изменить пароли, заданные по умолчанию.

E-mail this page