Ukrywanie danych w bazie danych

0

Czesc, zalozmy ze mam jakis program cos typu TODO list napisany w asp.net mvc wspolpracujacy z baza MSSQL. Wszyscy uzytkownicy pracuja na 1 bazie, w jaki sposob zrobic tak aby nikt nie mial dostepu do tych danych, tzn zeby nawet admin nie mogl podejrzec zaplanowanych zadan uzytkownikow?

0

np sprawdzasz czy zadanie ktore chcesz zobaczyc jest stworzone przez Ciebie jak nie to nie pokazujesz

0

Nie o to chodzi :)

Chce zeby admin nie mogl sobie otworzyc bazy wpisac selecta i zobaczyc wszystkich danych.

2

Użyj CMS do szyfrowania bajtów i zakoduj je w bazie jako np. base64 (jeśli Twoja wiadomość to tekst to użyj np. Encoding.UTF8.GetBytes żeby dostać bajty). W .NET do szyfrowania bajtów masz EnvelopedCms.

Generalnie działa to tak (na pierwszą część poszukaj gotowca - jeśli nie ma to poszukaj testów do tej klasy na githubie (np.: https://github.com/dotnet/corefx/blob/master/src/System.Security.Cryptography.Pkcs/tests/EnvelopedCms/GeneralTests.cs#L21)):

  • generujesz certyfikat (klucz publiczny np. RSA albo ECDH - są podzielone opinie które jest lepsze) i klucz prywatny
  • w CMS podajesz certyfikat jako odbiorce i co ma zaszyfrować
  • CMS generuje Ci byte[] które sam wie jak odczytać - wewnętrznie działa to tak, że CMS generuje losowe bajty jako klucz AES (lub inny wybrany algorytm) który służy do zaszyfrowania dokumentu. te losowe bajty zaszyfrowane są za pomocą klucza publicznego z certyfikatu. Żeby odczytać ten klucz potrzebujesz klucza prywatnego (nawet osoba która szyfrowała nie jest w stanie odczytać). Dodatkowo CMS koduje te bajty w postacie zgodnej ze specyfikacją tak, że jest w stanie je później jednoznacznie odczytać
  • byte[] zapisujesz albo bezpośrednio w bazie jeśli Ci baza na to pozwala albo jako text w postaci base64: https://docs.microsoft.com/en-us/dotnet/api/system.convert.tobase64string?view=netframework-4.7.2
0

@krwq: A jak ma się to szyfrowanie do prac na bazie, tworzenia indeksów, wyszukiwania itp? Czy z takiej bazy korzysta się analogicznie do "zwykłego" SQL, po prostu dajesz zapytanie SELECT FROM i całe odszyfrowywanie dzieje się w tle, całkiem przezroczyście? I czy (jeśli tak, to jaki) ma to wpływ na wydajność całego SQL'a (przy mniejszym obciążeniu pewnie niezauważalne, ale czy nie spowalnia to działania w przypadku większego ruchu)?

1

MSSQL ma wbudowane mechanizmy do szyfrowania:
https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/sql-server-encryption?view=sql-server-2017

Przykład:

https://www.mssqltips.com/sqlservertip/2431/sql-server-column-level-encryption-example-using-symmetric-keys/

Problem polega na tym, że można nie nadawać uprawnień dla sysadminow, ale sysadmini mogą je sobie nadać sami, nie wiem czy pisząc admin masz na myśli admina Twojej aplikacji, czy admina w rozumieniu silnika SQL...

0

Problem polega na tym, że można nie nadawać uprawnień dla sysadminow, ale sysadmini mogą je sobie nadać sami, nie wiem czy pisząc admin masz na myśli admina Twojej aplikacji, czy admina w rozumieniu silnika SQL...

Chcę, żeby nikt nie miał dostępu do tych danych. Żeby to były prywatne notatki jakichś osób i żaden admin systemu, programista itp nie mógł się do nich dostać. Podejrzewam, że jednak nie da się tak zrobić.

1

No to nie możesz używać do tego bazy tylko szyfrować po stronie clienta jego kluczem, a w bazie trzymać tylko zaszyfrowane dane

0

@Panczo: To chyba nawet nie jest kwestia zaufania. Zauważ, że w dużych firmach często masz hierarchie, do pewnych danych mają dostęp jedynie określone osoby. I nie chodzi mi tylko o IT, ale np. kwestia płatności. Często jest tak, że jedna księgowa/osoba odpowiedzialna za płatności wystawia polecenia przelewu, ale inna je akceptuje. W ten sposób ograniczasz ryzyko, że ktoś przeleje wszystko na swoje konto, a potem ucieknie. Tak samo tutaj - jeśli jest jakiś admin, który ma dostęp do wszystkiego, to może zrobić wiele złego. Może skopiować wszystkie dane, może je skasować itp. A ponadto - jeśli ktoś się włamie na jego konto/dojdzie do kompa, to też może narobić zamieszania.

Moim zdaniem takie ograniczanie uprawnień nie jest przejawem paranoi czy braku zaufania, ale raczej rozsądnym podejściem do kwestii bezpieczeństwa systemów.

3

Bez przesady. Jeśli ktoś ma zarządzać danymi, to znaczy, że firma ma (musi) mieć do niego zaufanie. To tak jakbyś szefowi firmy nie pozwalał wchodzić do magazynu, żeby nie widział ile towaru jest na stanie...
Argument z włamaniem do kompa również nie jest trafiony. Prędzej się włamie na konto właściciela notatki niż na konto sysadmina.

0

Mi glownie chodzi o taka sytuacje, ze np jestem uzytkownikiem jakiegos portalu, na ktorym moge sobie zapisywac swoje prywatne notatki i nie chce zeby ktokolwiek poza mna je czytal. Nie chce zeby jakis admin ogladal moje notaki bo np mam tam zapisane hasla itp.

0

Popatrz w takim razie jak są szyfrowane hasła w managerach haseł, pierwszy z brzegu przykład: https://www.lastpass.com/how-lastpass-works

Your data is encrypted and decrypted at the device level. Data stored in your vault is kept secret, even from LastPass. Your master password, and the keys used to encrypt and decrypt data, are never sent to LastPass’ servers, and are never accessible by LastPass.

Nic po stronie serwera nie jest szyfrowane/deszyfrowane

0

moge sobie zapisywac swoje prywatne notatki i nie chce zeby ktokolwiek poza mna je czytal

To jest coś innego, bo takie dane można szyfrować po stronie klienta i zapisać w bazie w formie utajnionej.
Mi chodzi raczej o coś innego - o dostęp do wszystkich danych w bazie.
Nie do końca się zgadzam z tym, co piszesz @Panczo. Owszem, admin powinien mieć świadomość tego, co jest w bazie. Ale czym innym jest wiedza jakiego typu dane są przechowywane, a czym innym znajomość ich konkretnych wartości.
Przykładowo - baza z danymi pacjentów. Jedna z kolumn to PESEL. Doskonale wiadomo, jakie to są dane, można dopasować odpowiedni typ kolumny, sposób przetwarzania itp, ale niekoniecznie admin musi mieć wgląd do konkretnych wartości, a jak nie będzie stanie połączyć Jana Nowaka z danym PESELEM, to w żaden sposób nie wpłynie to negatywnie na poziom jego pracy.
Z drugiej strony - jeśli koleś ma dostęp do wszystkiego, to klika kliknięć i wszystkie pesele ludzi ma na mailu. O to mi chodzi - jakiś poziom zabezpieczeń wykraczający za "Piotrek do dobry chłopak, nie zrobiłby niczego takiego" ;)

0

Takimi danymi się ekscytujesz przez miesiąc. Potem traktujesz to jak zwykłą pracę.

@Marcin.Miga: A potem wpadasz w hazard/zaczynasz ćpać/potrzebujesz kasy na nowe auto i ktoś składa Ci bardzo korzystną propozycję. Przecież nikt się nie dowie, skąd te dane wyciekły, a ode mnie masz szybko dużą gotówkę do ręki.

Żeby nie było, że wymyślam i snuję jakieś opowieści z krypty - sam znam osobiście (dość dobrze - brat kumpla) kolesia, który przez kilkanaście lat prowadził firmę, miał kilku pracowników, wypracował sobie markę, a z działalności otrzymywał przyjemną kasę co miesiąc (duża chata kupiona bez kredytów, co 2 lata nowy samochód z wyższej półki, wypad kilka razy w roku na narty, kanary itp.).
Aż pewnego dnia zaczął grać na automatach. Nie wiem kiedy się uzależnił (o wszystkim dowiedziałem się już pod koniec). Siedział tam kilka godzin dziennie i przepuszczał prawie całą kasę, jaka mu wpadła w ręce. Z tego powodu w firmie brakowało pieniędzy, więc nie było tez za co kupić towaru ani opłacić pracowników. Klienci szybko pouciekali, nie spłacił dostawców, firma się zwinęła. Komornik zabrał chatkę i samochody, koleś został dosłownie z niczym i od kilku lat pracuje jako kucharz w Anglii i przysyła tylko kasę na dzieciaki swojej (już byłej) żonie.

I teraz się zastanów - czy jakby on w takiej sytuacji miał możliwość wsadzenia pendrive do kompa i przerzucenia na niego bazy danych, to czy by się długo wahał? Moim zdaniem wcale. To nie chodzi o "podniecanie się" danymi do których masz dostęp, ale o zabezpieczenie się przed różnymi sytuacjami, które mogą się przydarzyć. Tak samo jak z polisą domu - 99% osób nigdy z niej nie skorzyta, ale czy to jest argument, żeby jej nie mieć?

1

@cerrato zapewniam Cie, ze jakbym pracował w jednostce medycznej jako DBAdmin to przy dobrych chęciach miałbym dane z systemu bez dostępu do tabel... Przecież mając zaszyfrowane dane musze je pokazać odszyfrowane Czynnik ludzki, jak nie zabezpieczysz, ktoś kto będzie chciał je wyciągnąć zrobi to.

Przykład kumpla nie najlepszy, bo o ile rozmaiwamy o sysadminie, to pokaż mi szefa-właściciela któremu sysadmin odmówi dostępu do danych?

0

@Panczo: Ale szef to inna bajka i w żaden sposób nie podważa tego, co pisałem - czyli faktu, że nawet mając sprawdzoną ekipę, nieraz jakieś okoliczności mogą popchnąć ludzi do zachowań, o które byś ich nie podejrzewał.

Pewnie dałbyś radę wyciągnąć dane z bazy, tylko kwestia czy dostaniesz je w formie jawnej, czy będziesz musiał się męczyć, żeby je wyskubać. Ale nie zgadzam się z takim podejściem, że skoro i tak je dostaniesz jeśli chcesz, to nie powinniśmy stosować polityki zabezpieczeń i ograniczonego zaufania. To trochę jakby zostawić na ulicy otwarte auto albo domu nie zamykać na klucz, bo przecież złodziej jak będzie chciał to i tak wejdzie. Zresztą jest takie powiedzenie, że okazja czyni złodzieja :P

1

Ale nie zgadzam się z takim podejściem, że skoro i tak je dostaniesz jeśli chcesz, to nie powinniśmy stosować polityki zabezpieczeń i ograniczonego zaufania.

Tego nie napisałem, ale szyfrowanie danych, aby admin ich nie widział, to jest zabawa, a nie profesjonalne podejście do bezpieczeństwa. Kiedyś jak mocno się szkoliłem z security wykładowca powiedział, że jak chcesz mieć bezpieczne dane to odepnij wszystkie kable i zakop 3 metry pod ziemią...

Do rzeczy: szyfrowanie może być jakimś elementem zabezpieczenia, ale twierdzenie, że zaszyfrowane dane to polityka bezpieczeństwa jest nadużyciem.

0

zaszyfrowane dane to polityka bezpieczeństwa

Wiadomo, że oparcie się jedynie na szyfrowaniu to trochę mało. Raczej powinno to stanowić jeden z elementów całej polityki. To trochę jak z zabezpieczeniami fizycznymi - są kraty w oknach, okna i drzwi antywłamaniowe, systemy alarmowe, monitoring CCTV, karty dostępu do pomieszczeń i pan Heniu w portierni, który pyta po co przyszedłeś, a wieczorem jak ktoś się będzie kręcił przy budynku to wezwie ochronę. Żaden z tych elementów nie stanowi sam w sobie zapieczenia, ale one łącznie dają poczucie względnego bezpieczeństwa.

0

@cerrato: zostałem wywołany, więc odpowiem. hazard/ćpanie przerabiałem już w swym życiu. Nowe auto mi nie potrzebne - nie mam żadnego. A że nikt sie nie dowie? kolejna z bajek... nawet jesli sie nie dowie, to i tak pierwsze podejrzane jest IT o świadome, bądź nie działanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1