bünyamin demir - 10 adımda yazılım güvenliği

Post on 20-Jul-2015

154 Views

Category:

Technology

11 Downloads

Preview:

Click to see full reader

TRANSCRIPT

10 AdımdaYazılım Güvenliği

OWASP-Turkey

Bünyamin Demir

Bünyamin Demir ( @bunyamindemir )– Lisans Kocaeli Üni. Matematik Bölümü– Yüksek Lisans Kocaeli Üni Fen-Bilimleri, Tez; Oracle Veritabanı

Güvenliği– Uygulama Geliştirici – OWASP Türkiye Bölüm Lideri– Sızma Testleri Uzmanı

• Web, Mobil, Network, SCADA, Wireless, Sosyal Mühendislik, ATM, DoS/DDoS ve Yük testi

• Kaynak kod analizi

– Eğitmen• Web/Mobil Uygulama Güvenlik Denetimi• Güvenli Kod Geliştirme• Veritabanı Güvenliği

2

3

OWASP

4

Why is OWASP Special?

• OWASP Top 10

• OWASP Zed Attack Proxy (ZAP)

• OpenSAMM

• Cheat Sheets

• ESAPI

• ASVS

• Testing Guide

• Development Guide5

OWASP Projects

6

Application Security Verification Standart

1 - Girdi Denetimi

7

public boolean validateUsername(String username) {

String usernamePattern = "^[a-zA-Z0-9]{6,12}$";

if (username == null) {

return false;

}

Pattern p = Pattern.compile(usernamePattern);

Matcher m = p.matcher(username);

if (!m.matches()) {

return false;

}

return true;

}

if (!validateUsername(username)) {

//uygun olmayan kullanıcı adı

}

ESAPI ile Girdi Denetimi

8

Validator.Username=^[a-zA-Z0-9]{6,12}$

String username = request.getParameter("username");

boolean booluser = ESAPI.validator().isValidInput("User name", username, "Username", 12, false);

if (!booluser) {

// uygun olmayan kullanıcı adı

}

2-Sanitization

9

String safeMarkup = ESAPI.validator().getValidSafeHTML( "Rich Text", richTextInput, 2500, true );

<%

String address = "Sumbul mah.,<script>alert(1);</script> kartal sk., manolya sitesi, bahar apart., D/Blok, No:5";

String safeAddressText = ESAPI.validator().getValidSafeHTML("Address Text", address, 200, true);

%>

<div><%= safeAddressText %></div>

<div>Sumbul mah., kartal sk., manolya sitesi, bahar apart., D/Blok, No:5</div>

3 – HttpOnly Cookie

10

Set-cookie: JSESSIONID=p9JtQGHSrTQTzfK8912y72VTv2y4Jyr5zTbV1h1Mc7Lmf4fMg1ly; Domain=www.site.com; Path=/; Secure; HttpOnly

4 – Secure Cookie

11

Set-Cookie: JSESSIONID=p9JtQGHSrTQTzfK8912y7Mg1ly; Domain=www.site.com; Path=/; Secure; HttpOnly

5 – Oturum Anahtarı

12

ESAPI.httpUtilities().changeSessionIdentifier();

Users user = new LoginDAO().login(username, password);

if (user.isAuthenticated()) {currentSession = request.getSession(true);currentSession.invalidate();

HttpSession newSession = request.getSession(true);} else {

request.setAttribute("loginerr", "username or password is invalid");request.getRequestDispatcher("login.jsp").forward(request, response);

}

6 – Güvenli Chaptcha

13

7 – getCanonicalPath()

14

getCanonicalPath()

http://www.site.com/getFile.jsp=file=/../../../../etc/passwd

getCanonicalPath(/www/data/site_com/files/../../../../etc/passwd)

/etc/passwd != /www/data/site_com/files/

8 – HTTPS

15

Kimlik doğrulama işlevi barındıran uygulamaların güvenli kanallar ile iletişim sağlıyor olması gerekir.

9 – Form Token

16

<form name="comment" action="product_comment.jsp?pid=53" method="POST">Comment: <input type="text" name="comment"/><input type="submit" value="Submit"/><input type="hidden" name="CSRFToken” value="30Dfd45645Ddssdf4567fdfdgAA..."></form>

10 – Prepared Statement

17

...String className = request.getParameter("class");

String query = "SELECT * FROM students WHERE class = '" + className + "'";

ResultSet rs = stmt.execute(query);...

...String className = request.getParameter("class");

PreparedStatement psmt = conn.prepareStatement("SELECT * FROM students WHERE class=?");psmt.setString(1, className);

ResultSet rs = psmt.executeQuery();...

18

top related