Mechanismy zabezpečení dat
Jednotná autentizace a autorizace, šifrování a hašování dat a subsystémy auditu a monitorování, které chrání data v celé platformě.
Jednotný systém autentizace a autorizace
Jednotný systém autentizace a autorizace je klíčovou součástí ochrany dat, která zajišťuje bezpečný přístup k systémovým zdrojům. Umožňuje spravovat uživatele, jejich oprávnění a přístup k datům na úrovni celého systému.
Připomenutí:
- Autentizace je proces ověření totožnosti uživatele (například pomocí uživatelského jména a hesla).
- Autorizace je proces ověření oprávnění uživatele k provedení určitých akcí (například přístup k datům nebo systémovým funkcím).
Součásti systému
Autentizace
- Jméno a heslo: tradiční způsob autentizace. Při přihlášení se uživatel musí nejprve identifikovat uživatelským jménem a heslem.
- Vícefaktorová autentizace (MFA): použití několika faktorů (například dynamicky obnovovaného softwarového tokenu pro webové API).
Autentizace založená na tokenech zjednodušuje proces pro stávající uživatele. Pro zahájení odešle uživatel serveru požadavek s uživatelským jménem a heslem. Server je ověří proti hodnotám zaregistrovaným ve své databázi totožností. Je-li totožnost potvrzena, server vrátí autentizační token (který se rovněž ukládá do databáze).
Když tentýž uživatel později požádá o přístup k chráněným zdrojům, lze tyto požadavky autorizovat autentizačním tokenem místo uživatelského jména a hesla. Server porovná token s tím, který je zaregistrovaný v databázi, a udělí přístup.
Autorizace
- Role a oprávnění: uživatelům jsou přidělovány role (například správce přístupu, uživatel), které definují jejich oprávnění.
- ACL (Access Control Lists): seznamy, které určují, kdo má přístup ke kterým zdrojům.
- RBAC (Role-Based Access Control): řízení přístupu na základě rolí.
- ABAC (Attribute-Based Access Control): řízení přístupu na základě atributů (například podle denní doby nebo polohy).
Ukládání uživatelských dat
- Databáze uživatelů: ukládá informace o uživatelích, jejich rolích a oprávněních do jediné databáze.
Zabezpečení
- Šifrování: chrání data při přenosu i při ukládání.
- Přístupové tokeny: dynamicky obnovované softwarové tokeny používané ke správě relací.
- Audit: protokolování všech akcí uživatelů pro pozdější analýzu.
Implementace systému
Platforma využívá autentizaci založenou na tokenech. Uživatel se přihlásí jménem a heslem, systém je ověří a vrátí přístupový token, který se pak posílá s každým následujícím požadavkem k autorizaci přístupu k chráněným zdrojům. Jako přihlašovací jméno se používá e-mailová adresa uživatele.
Příklad požadavku ve formátu Curl:
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_inV odpovědi obdržíme následující zprávu:
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Referrer-Policy: strict-origin-when-cross-origin Content-Type: application/json; charset=utf-8 access-token: tgervk9_9xicJYpmSsnnNA
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615227012
uid: api@local.net
ETag: W/"5b9bcc76f7223b72b79d9f2d31ff0fd5"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: c18e06b4-e5bd-40b5-875d-7ac958e2fbb5
X-Runtime: 0.391069
Transfer-Encoding: chunked
{"data":{"id":6,"email":"api@local.
net","provider":"email","uid":"api@local.net","name":"API user"}}V této odpovědi nás zajímá parametr access_token. Hodnota tohoto hlavičkového pole se používá jako heslo pro každý požadavek a s každým požadavkem se mění.
Zde je příklad požadavku, který používá token z předchozí odpovědi:
curl -i --header "access-token: tgervk9_9xicJYpmSsnnNA" \
--header "token-type: Bearer" \
--header "client: D-Uv3ER53873olhnNLjL9w" \
--header "uid: api@local.net" \
--request GET \
--header "Content-Type: application/json" \
--data '{"page":"2"}' \
https://server123/api/v1/stationsV odpovědi obdržíme následující zprávu:
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: application/json; charset=utf-8
access-token: Bmh2GVrxr6aW0Hngor4gPw
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615311367
uid: api@local.net
ETag: W/"ba0df406b647bd92f0bf3a18916714c1"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 35a26441-ae78-48fa-8b2e-e92d2605133b
X-Runtime: 0.167748
Transfer-Encoding: chunked
{"data": [
{"id":1,"name":"865293041101853","equipment_brand_name":"Corrector
BK","phone":"","equipment_id":1},...
],
"total_pages":7,
"current_page":2
}K ukončení relace lze použít proceduru SignOut, případně uložit potřebné hlavičky z posledního požadavku a příště je znovu použít, pokud token dosud nevypršel. Mějte na paměti, že bez ukončení relace zůstává poslední token po určitou dobu platný, a to v závislosti na systémovém nastavení serveru.
Výhody systému
Jednotný systém autentizace a autorizace je výkonný nástroj pro ochranu dat a řízení přístupu. Přináší tyto výhody:
- Centralizovaná správa: zjednodušuje správu uživatelů a jejich oprávnění.
- Zabezpečení: chrání data před neoprávněným přístupem.
- Konzistence: všechny aplikace a systémy používají stejný mechanismus autentizace a autorizace.
- Škálovatelnost: usnadňuje přidávání nových aplikací a uživatelů.
Šifrování dat
K ochraně kritických informací systém využívá šifrování (převod informací do podoby, kterou nelze přečíst bez příslušného klíče) a hašování (převod dat na jedinečný řetězec pevné délky — haš). Jde o jeden z klíčových mechanismů ochrany dat, který zajišťuje důvěrnost, integritu a bezpečnost informací jak při ukládání, tak při přenosu.
Systém používá různé algoritmy šifrování a hašování dat.
Uplatnění šifrování v systému
Šifrování při ukládání
- Databáze: šifrování jednotlivých polí databáze.
- Soubory: šifrování souborů před jejich uložením na disk.
Šifrování dat při přenosu
- HTTPS: použití SSL/TLS k šifrování dat při síťovém přenosu.
- VPN: vytvoření zabezpečeného tunelu pro přenos dat.
Šifrování hesel
Ukládání hašů hesel místo samotných hesel.
Příklady šifrování a dešifrování dat
Podívejme se na příklady šifrování a dešifrování konfiguračních souborů systému.
Šifrování dat
mkdir_p(encrypted_dir_path)
encrypted = Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key')
encrypted.write(File.read(decrypted_file_path))
File.delete(decrypted_file_path)Dešifrování dat
mkdir_p(decrypted_dir_path)
File.write(decrypted_file_path,
Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key').read
)Přínosy šifrování dat
- Důvěrnost: ochrana dat před neoprávněným přístupem.
- Integrita: zajištění, že data nebyla pozměněna.
- Pravost: potvrzení zdroje dat.
- Soulad s předpisy: splnění regulatorních požadavků.
Audit a monitorování
Činnost uživatelů a systému sleduje několik subsystémů, které odhalují podezřelé chování a zajišťují soulad s bezpečnostními požadavky. Společně:
- shromažďují, analyzují a uchovávají informace o činnosti uživatelů a systému, čímž zajišťují odpovědnost a soulad s předpisy;
- nepřetržitě monitorují systém a zařízení v reálném čase, aby bylo možné detekovat incidenty a reagovat na ně.
Cíle
- Odpovědnost: zajištění, že veškerá činnost uživatelů a systému je zaznamenávána.
- Zabezpečení: detekce a předcházení neoprávněné činnosti.
- Odhalování problémů: identifikace hardwarových problémů a anomálií a přijetí nápravných opatření.
- Optimalizace výkonu: analýza výkonu systému a hledání úzkých míst, která vyžadují optimalizaci.
- Predikce a plánování: sběr dat pro předpovídání budoucí zátěže a plánování zdrojů.
- Soulad s předpisy: zajištění souladu s regulatorními požadavky.
- Analýza incidentů: analýza incidentů, k nimž došlo, za účelem předcházení dalším.
Součásti auditu a monitorování
Sběr dat
- Protokoly: záznamy o akcích uživatelů a systému na všech úrovních.
- Metriky: data o výkonu systému (například vytížení procesoru, využití paměti).
Ukládání dat
- Úložiště protokolů: sběr dat z různých zdrojů s distribuovaným ukládáním protokolů a metrik uspořádaným podle tematických oblastí.
- Rotace protokolů: automatické mazání starých protokolů kvůli úspoře místa.
Analýza dat
- Vyhledávání a filtrování: možnost vyhledávat a filtrovat protokoly podle různých kritérií.
- Analytika: použití nástrojů pro analýzu dat (například Zabbix).
Upozornění
- Upozornění: odesílání oznámení o podezřelé činnosti a mimořádných událostech (například e-mailem nebo do chatu Telegram).
- Automatické akce: automatická reakce na incidenty (například zablokování uživatele).
Příklad implementace
Protokolování
Použití knihovny pro protokolování v aplikaci.
# Logs all changes to models
gem "audited"
# Logging settings
Audited.config do |config|
config.audit_class = CustomAudit
end
class CustomAudit < Audited::Audit
default_scope { order(created_at: :desc) }
ACTION_NAME = { 'Create' => 'create',
'Update' => 'update',
'Destroy' => 'destroy' }.freeze
end
# Metering device
class Equipment < ApplicationRecord
audited except: [:password]
...
endSběr chyb v datech z měřidel
# data model for error collection
class ErrorLog < ApplicationRecord
enum message: { invalid_equipment_serial_number: 0,
invalid_equipment_software_version: 1,
...
}
belongs_to :loggable, polymorphic: true
belongs_to :loggable_equipment, class_name: 'Equipment', foreign_key: :loggable_id, optional: true
validates :loggable_type, :loggable_id, :message, presence: true
end
# Event log
unless valid_value?(serial_number)
message_params = {equipment: equipment, new_serial_number: serial_number}
message2logger(loggable_obj: equipment, message: :invalid_equipment_serial_number, params: message_params)
endUkládání protokolů
Použití centralizovaného úložiště pro protokoly.
Tabulka audits
Tato tabulka ukládá informace o protokolování dat.
| Pole | Typ | Popis |
|---|---|---|
id | integer | Jedinečný identifikátor záznamu (primární klíč). |
auditable_id | integer | Odkaz na auditovaný objekt (equipment.id, stations.id …). |
auditable_type | character varying | Auditovaný objekt (equipment, stations …). |
user_id | integer | Odkaz na identifikátor uživatele (users.id) |
action | character varying | Akce |
audited_changes | jsonb | Auditované změny |
version | integer | Verze změn |
remote_address | character varying | Vzdálená adresa |
request_uuid | character varying | Identifikátor události. |
created_at | timestamp(6) without time zone | Datum/čas změny. |
Tabulka error_logs
Tato tabulka ukládá informace o chybách v datech přicházejících z měřidel.
| Pole | Typ | Popis |
|---|---|---|
id | integer | Jedinečný identifikátor záznamu (primární klíč). |
loggable_id | integer | Odkaz na registrovaný objekt (equipment.id …). |
loggable_type | character varying | Registrovaný objekt (equipment …). |
message | integer | Odkaz na identifikátor chyby. |
params | jsonb | Charakteristiky chyby. |
created_at | timestamp(6) without time zone | Datum/čas změny. |
Analýza protokolů
Nástroje používané k analýze protokolů:
- Nastavení webových formulářů pro vizualizaci a analýzu protokolů.
- Vytváření dashboardů pro monitorování činnosti uživatelů.
Upozornění
Přizpůsobená upozornění na podezřelou činnost:
- Konfigurace upozornění v Zabbixu pro monitorování metrik.
- Odesílání oznámení e-mailem nebo do chatu Telegram při poplachových událostech.
Přínosy auditu a monitorování
Audit a monitorování jsou výkonné nástroje ochrany dat, které umožňují sledovat činnost uživatelů a systému, odhalovat podezřelé chování a zajišťovat soulad s bezpečnostními požadavky. Umožňují:
- zajistit odpovědnost a bezpečnost dat;
- identifikovat incidenty a předcházet jim;
- splnit regulatorní požadavky.
Související témata
Byla tato stránka užitečná?
Děkujeme za vaši zpětnou vazbu!