środa, sierpnia 02, 2006

Javascript - niebezpieczny?

Javascript - niebezpieczny? Do tej pory badacze zajmujący się bezpieczeństwem aplikacji internetowych kierowali swoją uwagę na dziury w przeglądarkach i serwerach internetowych. Teraz chyba mają dodatkowe zajęcie.

JS jest podstawą w rozwoju platformy internetowej Web 2.0 i rozszerza granice możliwości tego co może zrobić strona internetowa. Z drugiej strony "złośliwe" skrypty JS w połączeniu z coraz powszechniejszymi atakami na witryny (wykorzystujące luki w zabezpieczeniach witryn) powodują poważne szkody. JavaScript (później nazwany ECMAScript) - został opracowany przez Netscape Communication w 1995. Za wybór takiej nazwy "winę" ponosi Bill Joy (twórca edytora vi i współzałożyciel firmy Sun), który w rozmowie telefonicznej wywołaną przez przedstawiciela NetScape zapytany zgodził się aby w nazwie zawarte było słowo JAVA. Sam zresztą przyznaje, że nie miał głowy do myślenia, gdyż był na wyjeździe z rodziną. Co ma JavaScript do fali Web 2.0 czyli witryn dynamicznych wykorzystujących technologię AJAX (Asynchronous JavaScript and XML)? Podstawą AJAX-a jest właśnie JavaScript. Język ten ma złą sławę w zakresie nadużyć przez hackerów (Yammer worm w Yahoo Mail, Samy worm w MySpace - wykorzystały dziury w bezpieczeństwie dostępne w JS). Ostatnio badacze zajmujący się bezpieczeństwem odkryli sposób wykorzystania JS do wejście poprzez skrypty JS do sieci domowych i korporacyjnych np. sieci lokalne a nawet do ataków na serwery oraz urzadzenia telekomunikacyjne (rutery czy drukarki) *. Jak wygląda atak? 1) Poprzez skrypty JS wbudowane w stronę www uruchamiane w trakcie przeglądania "złośliwej" witryny (najczęściej podstawionej przez hackerów, mającej nazwę podobną do "dobrej") lub 2) poprzez wykonanie skryptów z innej strony (wykorzystując lukę w zabezpieczeniu zwaną "corss-site scripting") - wiele poważnych firm np. MS, GG załatało tę dziurę. Obrona? 1) Wyłącznie interpretera JS w przeglądarce - ale to pozbawia funkcjonalności wielu stronom. 2) Twórcy aplikacji Web 2.0 powinni więcej czasu poświęcić na sprawy bezpieczeństwa aplikacji a nie rozwijać jej funkcjonalność. Na podstawie:

FAQ: JavaScript insecurities

Wklejono z <http://news.com.com/FAQ+JavaScript+insecurities/2100-7349_3-6100019.html?tag=html.alert>

Informacje dodatkowe:

AJAX has its own share of security pitfalls.

Wklejono z <http://news.com.com/JavaScript+opens+doors+to+browser-based+attacks/2100-7349-6099891.html?part=dht&tag=nl.e433>

  • Firma SPI Dynamics zbudowała skaner lokalnej sieci uruchamiany ze zdalnej strony www i mogący uzyskać dostęp do wszystkich urządzeń sieciowych (np. w celu zmiany konfiguracji pracy i parametrów). Naprawa luki w JS bez utraty funkcjonalności wielu istniejących stron www jest trudna tak, że problem naprawy tej luki będzie przez jakiś czas nierozwiązany.

Jak się mają technologie IT?




Co wybrać narzędzia open-source czy .NET?

Konkluzja: współpraca obu rozwiązań. Wszystkie platformy mają podobną wydajność i dobrze sobie radzą w przeprowadzonych testach. Szczególnie, ku zdumieniu testujących dobrze wypadły mieszanki platformowe w środowisku Windows. Wybór testów - zastosowano dostępne na rynku darmowe narzędzia do testowania obciążenia. Testy obciążały raczej aplikacje a nie stanowiły obiektywnego miernika wydajności danej platformy w oparciu o którą dana aplikacja była stworzona. Aplikacje testowane nie były jakoś specjalnie optymalizowane.

Informacje o testach i wynikach można znaleźć: http://blog.eweek.com/blogs/eweek_labs.

Działy IT budują swoje platformy tzw. IT stacks w oparciu o różnorodne narzędzia i technologie. IT stack składa się z: systemu operacyjnego, serwerów webowych, baz danych, platformy warstwy skryptowej i paltformy rozwoju aplikacji. W oparciu o niego powstają aplikacje korporacyjne: portale, vortale, CMS, CRM lub ERP (enterprise resource planning). Uzależnienie od platformy IT jest tym większe im bardziej firmy orientują się na SOA. Dwie najbardziej znane platformy IT to Microsoft .NET i LAMP (WAMP na Windows).

Trzecia najbardziej ważna w obszarze korporacyjnym jest platform J2EE (inwariant to JSP). Te trzy platformy można łączyć i mieszać ze sobą. Wybór takiej a nie innej warstwy oparty jest nie o przesłanki technologiczne ale o socjalne i tradycyjne.

Testy portalowe: SharePoint portal Server 2003 (I-sze miejsce wytłumaczone doskonałą integracją wszystkich warstw platformy), XOOPS (PHP), Plone (Python - na bazie ZOPE, wydajność średnia), Liferay (używa lekkiej bazy HyperSonic SQL obecnie H2 oraz J2EE) i JBoss Portal (JSP, produkt niedojrzały jeszcze: miał problemy w wydajnością na platformie JBoss/CentOs/MySQL lepiej mu szło pod Windows). Narzędzie do obciążenie testami - nie OpenSTA ale SilkPerformer (dawniej z firmy Segue Software teraz Borland).

Konkluzja:

"The results we saw with the WAMP stacks were probably the biggest surprise in our entire test. Enterprise IT managers shouldn't hesitate to look into the option of deploying open-source stacks on a Windows Server platform."

Wklejono z <http://www.eweek.com/article2/0,1895,1983367,00.asp>

Niektóre wyniki testów:


Informacje różne

  • Przechrzta - zmiana nazwy WinFX na .NET 3.0."The .Net Framework 3.0 is still comprised of the existing .Net Framework 2.0 components, including ASP.Net, WinForms, ADO.Net, and the CLR, as well as new developer-focused innovative technologies in WPF, WCF, WF and WCS." Dodano następujące komponenty: WCF (Windows Communication Foundation), WPF (Windows Presentation Foundation), WF (Windows Workflow), and InfoCard—now known as WCS (Windows CardSpace) as part of the renaming scheme.http://www.eweek.com/article2/0,1895,1974865,00.asp

niedziela, lipca 30, 2006

PKI

VPN i PKI

VPN coraz częściej staje się wartością dodaną każdej sieci biznesowej. Szeroki dostęp do Internetu pozwala wykorzystać VPN oraz inwestycje w sieci lokalne do poszerzenia usług wewnętrznych na zewnątrz tej infrastruktury (głównie dla partnerów, klientów oraz pracowników). Możliwość korzystania z sieci wewnętrznej firmy poprzez Internet nosi nazwę tunelowania VPN.

VPN pozwala na dwie rzeczy: dostęp do sieci wewnętrznej dla upoważnionych do tego osób (VPN poszerza w sposób bezpieczny LAN); szyfrowanie całego ruchu sieciowego. Normalnie w Internecie jest możliwe podsłuchanie komunikacji, VPN uniemożliwia tego rodzaju szpiegostwo. Do tej pory był możliwy dostęp do zasobów wewnętrznych sieci np. poprzez dostęp typu dial-up ale było to bardzo zawodne i drogie rozwiązanie.

Technologia VPN

Tunel VPN łączy dwie lokacje. W tym przypadku użytkownika oraz zdalną sieć wewnętrzną. Kiedy użytkownik zewnętrzny pragnie połączyć się do sieci lokalnej poprzez VPN i korzystać z jej zasobów musi się najpierw przedstawić (zweryfikować, zautentykować). Po udanej autentykacji serwis VPN nawiązuje bezpośrednie połączenie z serwisem VPN na serwerze zdalnym. Taki kanał nosi nazwę tunelu poprzez Internet pomiędzy dwoma sieciami. Od tego momentu każdy komunikat sieciowy między tymi dwoma sieciami będzie przechodził przez ten właśnie kanał. Usługi VPN na obu końcach tego kanału będą dodatkowo szyfrowały i deszyfrowały wszystkie komunikaty. Jest wiele implementacji VPN, każda ma swoje wady i zalety. Dwie najpopularniejsze technologie konstruowania kanału VPN to:

  • P2PTP lub PPTP (Point to point tunneling protocol)
  • L2TP/IPSec (Layer 2 tunneling protocol with IPSec)

MS oczywiście implementował obie te technologie , ale jest jeszcze trzecia OpenVPN autorstwa James Yonan. Dlaczego ta trzecia? Dlatego:

  • PPTP jest protokołem MS i na początku rozwoju miał wiele kłopotów z bezpieczeństwem, obecnie zostały one usunięte ale pojawił się problem kłopotów we współpracy z innymi platformami. Np. protokół ten używa do konstrukcji kanału VPN i pakietów danych protokołu tzw. GRE (general routnig encapsulation) i niektóre routery blokują tego rodzaju ruch sieciowy. OpenVPN do konstrukcji pakietów w tunelu VPN używa wyłącznie protokołu UDP oraz TCP.
  • L2TP/IPSec nie dostarcza bezpieczeństwa, jedynie jest protokołem enkapsulującym dane, IPSec służy do szyfrowania i autentykacji stron. Ma jeszcze jedną wadę - VPN realizowany przy pomocy L2TP/IPSec nie może działać w środowisku NAT (Network Address Translation) działających na niektórych routerach. NAT wykorzystywany jest w małych sieciach i routerach obszaru SOHO (small office/hme office). Nowe routery DSL wspierają już NAT poprzez Universal Plug and Play (UPnP) NAT Traversal ale nie są jeszcze popularne. Protokół L2TP/IPSec jest skomplikowany w konfiguracji i konserwacji dlatego, że jest częścią większej infrastruktury sieciowej i działa na niższej warstwie. PPTP działa na wyższym poziomie i łatwiej zlokalizować i wykryć w nim problemy.
  • OpenVPN wydaje się pozbawiony powyższy wad i na dodatek jest łatwiejszy w instalacji (wystarczy UDP i/lub TCP). Do zabezpieczeń używa SSL (Secure Socket Layer) protokół opracowany przez Netscape. Od 1999 roku SSL został przemianowany na TLS (transport layer security) przez Internet Engineering Task Force (IETF). Bezpieczeństwo TLS wzmocnione jest przez technologię certyfikatów X.509. W najnowszej co prawda beta wersji OpenVPN 2.0 dodano niezwykle cenną właściwość - walidację podczas procesu autentykacji certyfikatów z listą odwołanych certyfikatów (CRL - Certificate Revocation List), inną nowością jest to, że usługa VPN uruchamia się jako jeden proces.

OpenVPN stosuje TLS do uzyskania bezpieczeństwa, sam protokół TLS w trakcie procesu weryfikacji i szyfrowania polega na cyfrowym obiekcie zwanym certyfikatem X.509. Po właściwym skonfigurowaniu PKI można również udostępnić wiele innych zabezpieczonych w ten sposób usług np. web services (uslugi sieciowe) i pocztę.

Technologią podstawową do zapewnienia bezpieczeństwa jest kryptografia oparta na kluczy publicznym - polega na bezpiecznej komunikacji wykorzystującej dwa rożne klucze: klucz publiczny dostępny każdemu oraz klucz prywatny zastrzeżony jedynie dla właściciela. Oba klucze są generowane na podstawie skomplikowanego algorytmu kryptograficznego. Mają one pożyteczną właściwość: zaszyfrowanie komunikatu jednym kluczem jest możliwoe do odczytania przy pomocy drugiego klucza. Tzn. po wygenerowaniu pary kluczy, użytkownik może odszyfrować kluczem publicznym komunikat zaszyfrowany kluczem prywatnym i na odwrót.

Przykładowy scenariusz:

  • Obiekt A wysyła zaszyfrowaną wiadomość do obiektu B, obiekt B wygenerował swoją parę kluczy i przekazał klucz publiczny m.in. do obiektu A, przy zaszyfrowaniu obiekt A korzysta z klucza publicznego B.
  • Obiekt B otrzymuje wiadomość i tylko on deszyfruje ją swoim kluczem prywatnym
  • Uwaga 1: dopóki obiekt B trzyma w sekrecie swój klucz prywatny tylko on może deszyfrować wiadomości od różnych osób szyfrujących jego kluczem publicznym
  • Uwaga 2: czy w przypadku odwrotnym kiedy obiekt B chce wysłać zaszyfrowaną wiadomość przeznaczoną wyłącznie dla obiektu A. Jak wiadomo w Internecie wszystkie komunikaty można przechwycić, jedynie te zaszyfrowane są niedostępne dla osób niepowołanych. Czy można skorzystać z istniejących kluczy obiektu B? Otóż nie, gdyby obiekt B wysłał komunikat do obiektu A szyfrując go swym kluczem prywatnym do WSZYSCY w Internecie mający jego klucz prywatny. Wniosek - NADAWCA chcąc wysłać do kogoś zaszyfrowaną wiadomość musi ją zaszyfrować kluczem publicznym ODBIORCY.

Cyfrowe certyfikaty

Widać w tym scenariuszy jeden mankament - brak możliwości zarządzania kluczami PUBLICZNYMI (a nie prywatnymi). Skąd NADAWCA wie, że wysyła wiadomości i szyfruje je właściwym kluczem publicznym ODBIORCY (strona trzecia może podsunąć NADAWCY fałszywy klucz, dzięki czemu NADAWCA szyfrując nim dane jest w błędzie myśląc, że one mogą być odszyfrowane przez właściwego ODBIORCĘ - nosi to nazwę maskarady). W tym celu wymyślono cyfrowy certyfikat, który jest strukturą danych weryfikującą klucz publiczny i zawiera:

  • Nazwisko właściciela klucza publicznego
  • Nazwisko urzędu certyfikacyjnego potwierdzającego autentyczność klucza
  • Właściwy klucz publiczny
  • Cyfrowa suma kontrola certyfikatu zaszyfrowana kluczem prywatnym urzędu certyfikacyjnego

Urząd certyfikacyjny gwarantuje autentyczność klucza publicznego (tj. że należy do strony żądającej certyfikatu zwanej też PODMIOTEM - subject). Strony wystawiająca certyfikat nosi nazwę WYSTAWCY (issuer). Format certyfikatu zgodnego z X.509 zakodowuje te nazwy zgodnie ze specjalną syntaktyką -DN (distinguish names).

WYSTAWCA tworząc certyfikat zbiera informacje o stronie żądającej go, tworzy ciąg: nazwa strony żądającej dane + klucz publiczny żądającej strony + swoją własną nazwę i oblicza sumę kontrolną takiej struktury. Urząd certyfikacyjny szyfruje wynik tej sumy kontrolnej przy pomocy swego własnego klucza prywatnego i dopisuje to do struktury certyfikatu.

Od tej chwili każdy może sprawdzić czy dany klucz publiczny udostępniony w Internecie faktycznie należy do WYSTAWCY. Mówiąc ogólnikowo UC przechowuje unikalne świadectwo autentyczności CERTYFIKATU, jest ono nieznane innym stronom.

Struktura Klucza Publicznego

PKI jest to zespół oprogramowania, baz danych oraz usług sieciowych pozwalających organizacji na wystawienie, opublikowanie oraz odwołanie certyfikatu cyfrowego.

Identyfikacja dostępu do zasobów w Windows


Przeprowadzanie autentykacji użytkowników w serwerze internetowym IIS

Spojrzenie historyczne - prawa dostępu użytkowników do zasobu w środowisku Windows są przechowywane w samych zasobach. Generalnie istnieją dwa protokoły autentykacji: named pipes (domyślny do MS SQL) oraz TCP/IP.

Zabezpieczenie IIS jest o tyle zagmatwane, że IIS korzysta z zabezpieczeń Windows - IIS jest środkiem do udostępniania plików z serwera w przeglądarce klienta. Jak nieznany użytkownik sieci może być autentykowany? Drogą do tego jest specjalne konto "wytrych" wpuszczające (potencjalnie) do wewnątrz zasobów Windows - IIS Anonymous User. Administrator musi stworzyć dla niego lokalne konto - IUSR_machinename (np. IUSR_marekw) który ma prawo "log on locally" i należy do grupy "Guest". Teoretycznie jest to bezpieczne.

Typy autentykacji (i podanie danych akredytacji do otrzymania dostępu do zasobów, gdy konto anonimowe jest zablokowane:

  1. Challenge/Response - działa dobrze w domenie Windows i tylko gdy przeglądarką klienta jest IE (czyli po zalogowaniu się do domeny, użytkownik jest automatycznie widziany przez IIS).
  2. Basic Authentication - jeżeli C/R nie uda się - przeglądarka prezentuje dialog żądający podania konta i hasła (są one wysyłane do IIS - czystym tekstem zakodowane Base64), zwykle wzmacnia (chroni przed podsłuchem) się tę transmisję poprzez SSL. Po otrzymaniu danych IIS przedstawia się w Windows jako ten użytkownik którego konto uzyskał w wyniku dialogu z przeglądarką.

Sposób aby programistycznie można wymusić autentykację:

<%

Response.Clear

Response.Buffer = True

Response.Status = "401 Unauthorized"

Response.AddHeader "WWW-Authenticate","NTLM"

Response.End

%>

Impersonifikacja (przestawienie się) - serwer IIS obsługuje pobranie zawartości pliku poprzez przedstawienie się jako konkretny użytkownik (anonimowy - IUSR_marekw, lub jako ten którego akredytację podał przy ekranie logowania). Użytkownik ten musi mieć prawo logowania się lokalnego do serwera Windows.

Oddelegowanie (delegation) - nie ma go w NT 4.0

SSL - oprogramowanie kodujące transmisję, duży narzut na wydajność serwera.


Zabezpieczenie MS SQL Server'a

Ma trzy poziomy: standard (wbudowany i pomija autentykację z domeną), zintegrowany z NT (wykorzystuje do logowania do MS SQL konto zalogowanego do domeny użytkownika - najczęściej wykorzystuje się protokół 'named pipes'), hybrydowy. Należy pamiętać, żeby stosować 'SYSTEM DSN' oraz podawać jako nazwę serwera 'local', gdy serwer SQL jest na tej samej maszynie co IIS - poprawia to wydajność.

Sprawy się naprawdę komplikują w przypadku zainstalowanie MS SQL na innym serwerze niż IIS.