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