Проблеми безпеки даних в системі 1С Бухгалтерія 7.7. і MSSQL 2000, Різне, Security & Hack, статті

Введення


Всі користувачі 1С працюють з сервером MSSQL за допомогою одного облікового запису MSSQL. Права користувача на роботу з базою даних повинні бути Проте db_owner. Потрібно зазначити, що в 90% випадків адміністратори забувають виконувати цю процедуру до кінця і роблять як простіше – призначають обліковий запис від імені
sa.
Потенційно отримавши пароль на
sa, Зловмисник отримує повний контроль над сервером і відповідно даними, розміщеними на ньому. Отримати ж пароль та обліковий запис, на базу даних, прописуємо в конфігураторі НЕ просто – а дуже просто. Не будемо розповідати, як це робиться в цій статті. Досить в пошуку по
Internet набрати кілька фраз і в вашому розпорядженні буде низка програм (або опису алгоритмів) за допомогою яких можна елементарно отримати пароль та обліковий запис навіть недосвідченому користувачеві.
Наслідки цього можна уявити – це можливість вкрасти, модифікувати або знищити всю необхідну інформацію користувачеві з мінімальним набором прав.


В даній статті розглянемо способи захисту даних, які дозволять обійти вищеописані проблеми безпеки і в теж час не призведуть до ускладнення адміністрування системи.


Розглянемо два варіанти організації системи захисту для 1С Підприємство 7.7. MSSQL на базі Windows авторизації. Природно матеріал даної статті передбачає певний рівень підготовки читача, розуміння термінології а також основних принципів організації доменної структури безпеки.


Опис технології безпеки на базі Windows авторизації та застосування application role в MSSQL 2000.


Основні вимоги до системі:



Реалізація

Необхідно всіх користувачів бази розбити на три Windows NT групи:

  1. Звичайні користувачі 1С
    Звичайні користувачі, що не володіють правами для монопольного входу в систему.
  2. Просунуті користувачі 1С
    Користувачі, що володіють правами монопольного входу в систему. Вони можуть виконувати регламентні процедури: відкриття періоду, додавання нових рахунків і т.п.
  3. Програмісти 1С
    Користувачі, що володіють правами на вхід в конфігурацію системи і зміна структури БД

Кожна група Windows NT буде відповідати певної application role c обмеженими правами доступу до SQL.



Виникає питання, а навіщо взагалі потрібен механізм application role якщо можна було б відповідні права дати прямо на Windows NT групу?
Відповідь очевидний, тільки для того що б користувач не міг зайти з іншої програми в базу, наприклад з Query Analyzer. З цієї вимоги виникає додаткове вимога – у всіх трьох груп на рівні Windows аутентифікації є права доступу тільки public, тобто тільки на з’єднання з базою.


Також для кожної з груп необхідно розробити окрему програму стартер. Права на запуск свого стартера будуть мати тільки члени відповідної групи.


Стартер потрібен для того, щоб визначати поточного Windows користувача і його домен. Після визначення користувача стартер запускає процес 1cv7s.exe передавати туди в якості параметрів командного рядка ім’я користувача та ім’я бази.
Під час запуску процесу 1cv7s.exe, стартер підміняє виклик сесії 1С зі стандартного на коннект з Windows авторизацією. Після авторизації користувача, поки що у нього немає ніяких прав до бази, стартер ініціює застосування application role яка наділяє відповідного користувача необхідними правами.
Алгоритм зберігання пароля або навіть автогенерації пароля реалізований всередині стартера і добре захищений.


Зауважимо, що в даному механізмі немає патчінга bkend.dll тощо


З точки зору адміністратора ця схема налаштування безпеки виглядає наступним чином:

Необхідно виконати наступні пункти:

  1. Завести три доменні групи
  2. Для кожної групи завести відповідну application role і призначити їм паролі або визначивши для стартера алгоритм генерації.
  3. Видати права на запуск відповідного стартера по групах. Розмістити їх природно потрібно на яких або мережевих ресурсах.
  4. Усередині 1С всіх користувачів необхідно завести відповідно до імені login name Windows NT за чітко визначеним алгоритмом.
    Наприклад користувач з доменним ім’ям domenivanov в 1С повинен називатися ivanov_domain.
  5. Прописати в конфігурації
    ПріНачалеРаботиСістеми виклик методу компоненти, яка буде перший раз після зміни структури видавати права execute на всі процедури бази для ролі Звичайні користувачі 1С. Також в процедурі ПріНачалеРаботиСістеми необхідно прописати перевірку на відповідність імені Windows NT до імені користувача в 1С.
    Якщо відповідність буде порушуватися – то можна або закривати 1С, або діяти за будь-якого іншого алгоритмом.

Як виглядає для користувача використання 1С при подібною схемою реалізації захисту?
Вони це навіть можуть і не відчути зовсім. Користувач буде запускати стартер, який можна навіть назвати 1cv7s.exe і дати йому ярлик відповідний стандартному 1С.
Після запуску стартера він потрапляти в 1С де після вибору бази автоматом увійде в неї під конкретним користувачем 1С (Який відповідає доменному).


Розглянемо варіанти, які може спробувати застосувати зловмисник, що б несанкціоновано увійти в базу:



  1. Якщо він спробує запустити 1С без стартера в надії обійти систему, то це в нього не вийде – прав то до бази у його групи немає (якщо він не адміністратор). Права йому видасть тільки потім стартер при завантаженні
    application role.
  2. Спроба зайти з зовнішнього застосування до бази йому теж нічого не дасть. Windows права в нього тільки на public да і то якщо він заведений як користувач 1С.
  3. Спроба без відповідного набору прав запустити стартер завершиться невдачею. Запустити процес без прав на нього з боку Windows NT дуже складна завдання.
  4. Отримати пароль application role теж досить складне завдання, крім усього іншого ставляться ще кілька унікальних рівнів захисту, які в рамках цієї статті не описуються.

Опис технології безпеки на базі Windows авторизації із застосуванням в
MSSQL 2000.


Відмінність даного механізму реалізації від вищеописаного в тому, що захист доступу до даних SQL будується не на базі application role а на базі Windows аутентифікації.
Питання закриття доступу з інших програм вирішується шляхом заклади паралельних облікових записів пароль, на які користувач не знає. Стартер при запуску визначає поточного користувача і запускає під відповідною йому обліковим записом процес 1С.
Пароль облікового запису користувач не знає і, отже, зайти наприклад з QA не зможе. В стартере реалізований алгоритм, який визначає цей пароль і запускає процес 1С.
Природно можна в відповідність кожному з користувачів поставити одну обліковий запис, але це ускладнить подальші завдання адміністрування. Всі користувачі з точки зору SQL зіллються як би в одного користувача. Їх буде складно ідентифікувати в процесі роботи. Тому має сенс кожному користувачеві завести такого ж користувача з префіксом «1С» наприклад.

Приклад:
Група Windows NT:
User domain – 1C User domain
Користувачі групи User domain:
ivanov – 1C_ivanov
Sidorov – 1C_sidorov
….
….

Стартер при запуску буде ідентифікувати поточного користувача «User» і буде запускати процес 1С під користувачем «1С_User». Таким чином, користувачі будуть чітко ідентифіковані з точки зору SQL.


Природно вручну робити це незручно, тому краще реалізувати все це через обробку, яка буде автоматично робити «дзеркальну» групу, відповідні «дзеркальні» облікові записи і призначати їм пароль за алгоритмом, який вкаже адміністратор.


Цілком логічно виникає питання: “а як запустити 1С під іншим користувачем якщо це дійсно потрібно, робити log off “? Природно цей варіант можливий, але вкрай незручний. Для подібної операції в Windows реалізований стандартний інтерфейс. Досить виділити ярлик програми яку ми хочемо запустити, натиснути
shift і одночасно натиснути праву кнопку миші. Після чого вибрати в меню Run as. Вибравши цей пункт ми в діалозі вказуємо windows користувача і запускаємо процес 1С під ним.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*