təhlükəsiz proqram təminatının hazırlanma texnologiyaları

Post on 01-Jul-2015

264 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Təhlükəsiz proqram təminatının Java mühitində hazırlanma texnologiyaları

Samir Həsənov

Qafqaz Universiteti

Kompyuter Mühəndisliyi

İnternet nədir?

• Milyonlarla kompyuterin qarşılıqlı məlumat mübadiləsini dəstəkləyən şəbəkə

• Qlobal əlaqə şəbəkəsi

• Ümümdünya kompyuter şəbəkələr sistemi

• Və s.

İnternetdə məlumat ötürmə modelləri

Client-Server Peer-to-Peer

WWW – World Wide Web

• İnternetdə istifadə olunan servislərdən biri

• Veb anlayışı

• Veb resurslar

• İstifadə olunan model: Klient-Server

• Əsas protokol: HTTP

• Request – Response (Sorğu - Cavab) anlayışı

URL, URİ və ya URN

• URL – Uniform Resource Locator

• URİ – Uniform Resource İdentifier

• URN – Uniform Resource Name

http://en.example.org:8080/file.html

Veb proqramlar

• Veb serverdə yerləşdirilir

• Brauzer vasitəsilə qoşulma

• Klient – Server modeli istifadə olunur

• HTTP protokolu istifadə olunur

Veb tətbiqin strukturu

Hər hissəyə uyğun hücum taktikaları

Hər hissəyə uyğun hücum taktikaları

Hər hissəyə uyğun hücum taktikaları

Hər hissəyə uyğun hücum taktikaları

Hər hissəyə uyğun hücum taktikaları

Hansı veb tətbiqlər hücuma daha çox məruz qalır?

Məşhur hücum taktikaları

Baxacağımız taktikalar

• Cross-Site Scripting (XSS, Script İnjection)

• Cross-Site Request Forgery (CSRF)

• Clickjacking

• Directory/Path Traversal

• SQL İnjection

XSS

XSS

• Non-persistent

• Persistent (stored)

• DOM-based xss

1) HTTP sorğu ilə səhifə yüklənə bilən skript

2) Verilənlər bazasından yüklənən skript

3) Dom elementlər ilə yüklənən skript

Non-Persistent XSS

Səhifəyə http sorğudan gələn parametrlər sanitarizasiya keçmədən yüklənirsə. Məs. Tapılmayan axtarış sözü və ya tapılmayan səhifə sorğusu.

Nümunə:

<% String eid = request.getParameter("eid"); %> ... Employee ID: <%= eid %>

Persistent XSS

• HTTP sorğudan gələn parametr sanitarizaiya olunmadan verilənlər bazasına yazılır və gələcəkdə digər istifadəçilərə göstərilirsə.

Nümunə:<%... Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);

if (rs.next();) {

String name = rs.getString("name");

} %>

Employee Name: <%= name %>

XSS nəticələri

• Cookie oğurlamaq

<script>alert(document.cookie);</script>

• Saytı deface etməkhttp://www.example.com/search?s=<script>alert(‘xss’)</script>

<IMG SRC="http://mywebsite.com/defacepic.jpg">

• Redirekt üçün

<script>window.open( "http://www.example.net/" )</script>

XSS Qorunma

• HTTP Sorğu ilə gələn parametrləri sanitarizasiya etmək (html teqlərdən və script-lərdən təmizləmək)

• Bazaya təmizlənmiş input yazmaq

• Səhifəyə render üçün yalnız sanitarizasiya keçmiş verilənlər göndərmək

Cross-Site Request Forgery (CSRF)

CSRF

• Hər hansı istifadəçi adından hal-hazırda aktiv sessiyası olduğu saytlarda əməliyyat keçirtmək üçün istifadə oluna biləcək bir hücum mexanizmidir

Nümunə:

Bank proqramında bir hesabdan digər hesaba pul köçürməsi sadə HTTP GET metodu ilə keçirilir

GET http://bank.com/transfer.do?acct=BOB&amount=100

CSRF

• Xaker seçdiyi istifadəçiyə GET sorğusunun məzmunu dəyişdirib göndərir. Beləliklə aktiv sessiyası olan istifadəçinin hesabından pul çəkilmiş olur

http://bank.com/transfer.do?acct=MARIA&amount=100000

Və ya hər hansı dom element daxilində yerləşdirilən URL<a href="http://bank.com/transfer.do?acct=MARIA&amount=100000">View my Pictures!</a>

<img src="http://bank.com/transfer.do?acct=MARIA&amount=100000" width="1" height="1" border="0">

CSRF Qorunma

• Gizli Cookie dəyişəni istifadə etmək və hər əməliyyat öncəsi ilkin olaraq yoxlamaq

• Əməliyyatlarda HTTP POST metodu istifadə etmək

• Bir biznes əməliyyatını bir neçə addım ilə yerinə yetirmək

Clickjacking

Clickjacking

• Veb səhifəyə şəffaf freym yükləməklə istifadəçinin bu freym üzərində olan əməliyyatları yerinə yetirməsinə nail olmaq

Nümunə:Css z-index ilə səhifəyə yüklənən şəffaf freym səhifə kontentinin üzərinə yerləşdirilir. Hər hansı düyməyə klik edən istifadəçi əslində freymin üzərində yerləşdirilmiş düyməni klikləmiş olur

Clickjacking nəticələri

• Sosial şəbəkələrdə geniş istifadə olunan hücum texnikasıdır (facebook-da istifadəçilərə səhifələri LİKE etdirmək)

• İstifadəçinin aktiv sessiyası olan saytlarda URL dəyişdirilməsi ilə əməliyyatlar icra etmək (elektron məktub və məlumatları silmək kimi)

• Flash ilə isitfadəçinin kompyuter kamera və dinamikindən istifadə etmək

• Sosial şəbəkələrdə istifadəçini profil məlumatlarını gizli rejimdən çıxarmaq və s.

Clickjacking Qorunma

• HTTP Response Header istifadə etməkX-Frame-Options Header:

1. DENY – iframe-lərə icazə verməmək

2. SAMEORİGİN – yalnız cari saytdan freym qəbul etmək

3. ALLOW-FROM uri – yalnız göstərilmiş adresdən freym qəbul etmək

• Klient tərəf xüsusi skript istifadə etmək (hazırki işləyən pəncərənin ən üst layda olduğunu yoxlamaq üçün)

Directory/Path Traversal

Directory/Path Traversal

• “../” (dot dot slash) hücumu da deyilir

• Serverdə yerləşən faylları əldə etmək imkanı yaradır

• Serverdə yerləşən hər hansı proqram təminatını remote olaraq işlətmək imkanı

Directory Traversal

• Nümunə:http://some_site.com.br/get-files.jsp?file=report.pdf http://some_site.com.br/get-page.php?home=aaa.html http://some_site.com.br/some-page.asp?page=index.html

Burada server http sorğuda gələn adlı faylı istifadəçiyə göstərir.

Fayl adı yerinə yazsaq “../../../../some dir/some file”

Ümumi sorğu belə alınar:

http://some_site.com.br/get-files?file=../../../../some dir/some file

Directory Traversal

Kataloq arası keçid simvolları:

1. Unix – Root kataloq “ / ”

Unix – Kataloq keçidi “ / ”

2. Windows – Root kataloq “KataloqAdı: \ ”

Windows – Kataloq keçidi “ / ” “ \ ”

Directory Traversal – Sadə Filtri Keçmək üçün sorğu kodlaşdırılması

Sorğu dəyişmə

“%2e%2e%2f” = ../

“%2e%2e/” = ../

“..%2f” = ../

“%2e%2e%5c ” = ..\

“%2e%2e\ ” = ..\

“..%5c” = ..\

“%252e%252e%255c” = ..\və s.

Url Encoding

• “..%c0%af” = ../

• “..%c1%9c” = ..\

Directory Traversal Qorunma

• Fayl sistemi ilə işləyərkən istifadəçidən gələn məlumatı direkt istifadə etməmək

• İstifadəçinin sorğusuna faylı adını və ya tam yolunu deyil, sadəcə hər fayla verilmiş index (id) istifadə etmək (məs. 1-test.pdf, 2 – a.txt)

• İstifadəçinin yazdığı fayl adını server tərəfdə fayl kodu ilə başlamaq

• Hər hansı kataloq keçid operatorlarını istifadəçidən qəbul etməmək

SQL İnjection

SQL İnjection

• SQL inyeksiya relyasiya verilənlər bazası ilə işləyən və sql sorğuları düzgün generasiya etməyən proqramlarda müvəffəqiyyətli olur

• Dinamik SQL sorğular da bu inyeksiyaya məruz qala bilərlər

SQL İnjection

Nümunə - İstifadəçidən gələn sorğu ilə sql generasiyawww.example.com/login.jsp?username=user&password=pass

SQL – “select * from users u where u.username=‘” + user + “’ and u.password=‘” + password + “’”;

Istifadəçi adı yerinə “' or '1'='1' --” yazılarsa (Oracle üçün)

SQL – “select * from users u where u.username=‘’ or ‘1’=‘1’ --and u.password = ..”

“--” komment etmək operatorudur, sql sonu nəzərə alınmır

1=1 doğru olduğundan sorğu nəticə qaytarır

SQL İnjection Qorunma

• Javada SQL sorğuları üçün PreparedStatement sinfindən istifadə etmək:

String usr = req.getParameter(“user");

String pass = req.getParameter(“password");

String query = "SELECT id, firstname, lastname FROM authors WHERE username = ? and password = ?";

PreparedStatement pstmt = connection.prepareStatement( query );

pstmt.setString( 1, usr);

pstmt.setString( 2, pass);

SQL Injection Qorunma

• Dinamik SQL sorğular yerinə Oracle PLSQL prosedur dilindən istifadə etmək

• PrepaparedStatement sinfinin setXxx() metodları vasitəsilə məlumatları sorğu daxilinə yerləşdirmək

Son söz

• Veb proqram yazılarkən əsas diqqət yetirilməli məsələlər

• İstifadəçi potensial xaker ola bilər, istifadəçidən gələn hər məlumat həm klient həm server tərəfdə validasiya keçməlidir

• Defensive kod yazmaq

top related