Ocena wątku:
  • 1 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5

MySQL - Bezpieczeństwo haseł stron internetowych

Bug  Bezpieczeństwo haseł stron internetowych
Internet to jeden wielki modem do którego podłączone są komputery stacjonarne, laptopy, serwery w centrach danych oraz inne maszyny. Dzięki nim istnieje komunikacja między ludźmi.

[Obrazek: avgx.jpg]

Serwery dzierżawione są w potężnych centrach danych, działają na nich usługi typu www, ftp, bazy danych, pop3 itd. Dzięki silnikom www możemy przez przeglądarki przeglądać strony internetowe w naszej globalnej sieci. Najpopularniejszym silnikiem www dla serwerów jest „apache”, są także inne silniki na przykład „nginx”, „light httpd”, „idea web server” itp. Dzięki tym silnikom klient może wyświetlić daną stronę.

Przykładowa składnia kodu php:
Kod:
<?php
echo 'Old Sessam';
?>

Bezpieczeństwo stron internetowych zależy od poprawnego skonfigurowania maszyny serwerowej oraz poprawnie pisać kod źródłowy strony www. Jako, że php poszło bardzo do przodu osoby trzecie mogą odczytać loginy oraz hasła do administracji serwerów wpisując odpowiednią składnie w pasku url. Najbardziej popularnym atakiem na strony www jest atak SQL Injection. Polega on na odpowiednim spreparowaniu kodu aby serwer zwrócił dany komunikat z bazy danych serwera np: MySQL.

Przykład błędu znanego radia internetowego (http://www.radioparty.pl).
[Obrazek: lro9.jpg]

Jak widać wyżej plik prezenter („prezenter.php” jest podatny na ten atak). Serwer zwrócił komunikat „Unknown column '18' in 'order clause'” z bazy danych, że nie znaleziono 18 kolumny w bazie danych.

[Obrazek: td3m.jpg]

Znaleziono 18, czyli musi być 17 tabel w danej bazie. Możemy odpowiednio redagować zapytanie do serwera MySQL np: wyświetlić strukturę tabeli gdzie są zapisane hasła do konta administratora strony.

(Nie będę Wam tłumaczył jak dokładnie to działa, aby dzieci nie narobiły sobie problemów).

Jeżeli piszesz już jakieś strony www oparte na bazie danych warto pamiętać o hashu aby baza danych nie wyglądała tak:
[Obrazek: 0koa.jpg]

Warto użyć jakiegoś hashu, np:

W hashu są zakodowane hasła. Ja przedstawię hash typu „md5” czyli zamiast „testowe haslo” otrzymamy ciąg znaków.

Przykład hashu md5 w „testowe haslo”
md5("testowe haslo") = "1b668b9b1bcc0e0a2e2e2bd7dac22c27"

Jednak hakerzy znaleźli pewien sposób na przełamanie tego hashu metodą brute force (prób i błędów). Napisałem skrypt w bashu który przedstawia atak tego typu.

Hasło: test zakodowane w md5 = 098f6bcd4621d373cade4e832627b4f6
Jako, że hash działa w jedną stronę (da się go tylko zakodować). Skrypt generuje hashe i porównuje kombinacje. Jeżeli występuje kolizja hashu skrypt pokazuje wynik kolizji. Wynikiem jest zakodowane hasło md5.

[Obrazek: nk9l.png]

W przypadku włamania trzeba sprawdzić logi serwera www oraz MySQL jakie polecenia zostały wydane do bazy danych przez osobę trzecią następną rzeczą jakom zrobić to poprawić błędy i naprawić szkody. Kolejnym zabezpieczeniem hasła jest dodanie tak zwanego ziarna (soli) inaczej salt do hashu i stworzyć odpowiednie reguły w php aby czytał hasła.

Przykład kodu ze solą:
Kod:
<?php
$haslo = 'test';
$salt = 'ziarno_321';
$hashed = md5($haslo.$salt);
?>

W tym przypadku skrypt zaktualizuje zaszyfrowane hasło „test” z ziarnem do naszej bazy danych.
Porównanie hasła „test” z ziarnem oraz bez ziarna:
„test” z ziarnem = 15d48611a95ecf9d0f14558368200e36
„test” bez ziarna = 098f6bcd4621d373cade4e832627b4f6


Jeżeli osoba trzecia wydobędzie zaszyfrowany hash nie będzie wstanie się zalogować po rozkodowaniu i otrzyma komunikat, że hasło jest błędne.

Przeglądałem sobie strony rządowe i znalazłem błąd w kodzie na stronie rządowej Argentyny. (http://www.lacumbre.gov.ar)

[Obrazek: b3ub.png]

Jak wyżej na zdjęciu widać można łatwo włamać się na jedną z wielu stron rządu Argentyny wykorzystując metodę SQL Injection. Internet jest pożyteczny lecz czasami może zaszkodzić. Nie odpowiednie osoby mogą odczytać treść którą nie powinny.

Wyżej wymienione przykłady były robione w celach edukacyjnych w 100% przeze mnie i nie miały nikomu zaszkodzić. Wszelkie błędy zostały wysłane do administratorów stron www. Mam nadzieje, że mnie nie zamkną za tą Argentynę.

Pozdrawiam,
Mateusz (Old Sessam).
polubienia 1 +1