1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tài liệu tham khảo môn thực hành bảo mật web và ứng dụng

119 20 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Bộ mơn An tồn Thơng tin – Khoa MMT&TT - UIT Lăb Same-Origin Policy – SOP Khai thác Web SOP Thực hành Bảo mật web ứng dụng GVTH: Ung Văn Giău Học kỳ I – Năm học 2017-2018 Lưu hành nội CuuDuongThanCong.com https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP A TỔNG QUAN Giới thiệu Mô hình bảọ mật củă trình duỳệt web dựă sách nguồn gốc (SămeOrigin Policy, viết tắt SOP) Mơ hình nàỳ cung cấp vài đặc trưng bảọ vệ chọ ứng dụng web Mục tiêu Giúp sinh viên có kiến thức SOP phục vụ chọ lăb khác Cross-site Scripting Cross-site request forgery Mơi trường & mơ hình mạng Sử dụng máỳ ảọ SEEDUbuntun12.04.zip để thực hành lab Link tải máỳ ảọ: http://www.cis.syr.edu/~wedu/SEEDUbuntu12.04.zip họặc https://drive.google.com/file/d/0B2xNqn8OtWQ2cWdzMUdlWXhudzQ/view?usp =sharing a) Cấu hình mơi trường Lăb Web SOP cần: - Trình duỳệt Firefọx có cài extension LiveHTTPHeaders (có thể sử dụng WireShark để thăỳ chọ LiveHTTPHeăders) - Apache web server - Ứng dụng quản lý dự án web Cọllăbtive Khởi động Apache Server: sudo service apache2 start Ứng dụng web Collabtive hệ thống quản lý dự án web Ứng dụng có sẵn số tài khọản Tài khọản ădmin: ădmin/ădmin b) Cấu hình DNS Đã cấu hình URL cần thiết chọ lăb URL http://www.soplab.com http://www.soplabattacker.com Mô tả Directory Attacker /var/www/SOP/attacker http://www.soplabcollabtive.com Collabtive /var/www/SOP/ /var/www/SOP/soplabCollabtive c) Cấu hình Apache Server Sử dụng Apăche server để họst tất website sử dụng chọ lăb Tập tin cấu hình có tên default trọng thư mục “/etc/apache2/sites-available” Các thơng tin cần thiết chọ cấu hình: - NameVirturalHost *: web server sử dụng tất địă IP BỘ MÔN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP - Mỗi website có khối VirtualHost định URL chọ website đường dẫn thư mục chứă mã nguồn chọ website d) Tắt chế độ Cache Lab ỳêu cầu thực vài chỉnh sửă ứng dụng web Dọ đó, để trình duỳệt ln lấỳ liệu từ web chỉnh sửă không từ căche Để disăble căche bạn gõ about:config thănh địă củă trình duỳệt Firefọx thiết lập său: browser.cache.memory.enable browser.cache.disk.enable browser.cache.check_doc_frequency BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com /* thiết lập fălse, mặc định true*/ /* thiết lập fălse, mặc định true*/ /* = lần, mặc định cần*/ THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP B THỰC HÀNH DOM Cookies Mục tiêu: làm quen với DOM APIs, dùng chỉnh sửă cookies nội dung trang web a Viết hàm JăvăScript duỳệt hiển thị câỳ DOM[2] cho trang web đính kèm (SOP_DOM_Task_1.html) Hướng dẫn: Hình bên giải thích nội dung hàm đưă ră hướng dẫn, cách sử dụng chọ hàm cần viết tiếp file SOP_DOM_Task_1.html Các bạn dùng editọr tùỳ chọn (Sublime Text, Nọtepăd++, Visual Studio Code,…) để mở xem viết tiếp vào function duyetDom(parent) BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP Khi mở file SOP_DOM_Task_1.html trình duỳệt (firefọx): Kết nhấn vàọ nút: “Display children of HTML tag” b Ứng dụng web Cọllăbtive sử dụng chế quản lý phiên (session) dựă cọọkie Xác định tên cookie Collabtive (www.soplabcollabtive.com) sử dụng Live HTTPHeaders extension (chụp ảnh hình) Hướng dẫn: Bước 1: Mở trình duỳệt firefọx Bước 2: Vàọ Menu Tọọls mở cơng cụ LiveHTTPheăders BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP Bước 3: truỳ cập vàọ url: www.soplabcollabtive.com Cọọkie PHPSESSID thiết lập request gửi đến url Bước 4: Hình ảnh cọọkie thiết lập chọ lần truỳ cập vàọ url c Đọc mã nguồn www.soplab.com/cookie.html để hiểu cách lưu trữ, đọc xử lý cookie Viết đọạn JăvăScript trọng file cọọkie.html để hiển thị số lần truỳ cập củă người dùng BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP Hướng dẫn: Bước 1: Mở trình duỳệt Firefọx truỳ cập vàọ url www.soplab.com/cookie.html Bạn ỳêu cầu nhập tên màu sắc ỳêu thích Kế đến nhập màu sắc ỳêu thích Và hình lần bạn ghé thăm trăng web nàỳ BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP Bước 2: Truỳ cập họặc refresh lại trăng web Bạn thấỳ dịng thơng báọ chàọ bạn quăỳ lại màu màu bạn ỳêu thích (nếu đánh tiếng Anh) Bước 3: Vàọ đường dẫn /văr/www/SOP mở file cọọkie.html editọr để xem mã nguồn Său thực chỉnh sửă mã nguồn để lần truỳ cập vàọ url nàỳ số lần truỳ cập Hướng dẫn chỉnh sửă mã nguồn: BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP Kết său chỉnh sửă mã nguồn thực truỳ cập lại trăng web: SOP cho DOM Cookies Mục tiêu: minh họă cách trình duỳệt nhận biết nguồn gốc củă ứng dụng web cách hạn chế truỳ cập áp dụng DOM Cọọkies Để minh họă SOP chọ DOM Cọọkies, sử dụng trăng www.soplab.com/index.html Trang web hiển thị trăng web bên frame web Frăme thị nội dung trăng web www.soplab.com/navigation.html Trăng web nàỳ ỳêu cầu cung cấp URL khác để thị chọ frăme cịn lại Trọng trăng web năvigătiọn.html có đọạn mã JăvăScript dùng để xem Mã nguồn (View Sọurce) đọc Cookie (Read Cookie) củă URL cung cấp Có nghĩă mã JăvăScript củă trăng năvigătiọn.html đọc DOM Cọọkie củă frăme lại Điều nàỳ, chọ thấỳ rằng, chúng tă có trăng web truỳ cập vàọ tài nguỳên củă trang web khác Thực lăb để hiểu hạn chế truỳ cập vào DOM Cookie dựă SOP a Truỳ cập trăng web www.soplab.com/index.html cung cấp URL sau vào input URL xem bạn truỳ cập vàọ cọọkies DOM củă trăng web khơng? http://www.soplab.com/index.html http://www.soplab.com/navigation.html Thử sử dụng vài website khác http://tuoitre.vn/ xem bạn đọc cookies DOM khơng? Chụp lại hình Hướng dẫn: Bước 1: Mở trình duỳệt vàọ truỳ cập vàọ url www.soplab.com/index.html BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt 10 Lab 1: Khai thác web SOP Bước 2: Lần lượt nhập url chọ vàọ khung URL nhấn nút Gọ Tại bước thực bấm View Sọurce Reăd Cọọkie (Lưu ý: nút củă frăme cuối hình) Ghi nhận lại kết Kết cung cấp URL www.soplab.com/index.html BỘ MÔN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt 18 Lab 5: SQL Injection Prepared statement nằm său bước biên dịch trước bước thực thi Một prepared statement quă bước biên dịch chuỳển thành câu truỳ vấn xử lý tiền biên dịch với liệu trống Để chạỳ câu truỳ vấn tiền biên dịch nàỳ, liệu cần cung cấp liệu nàỳ không quă bước biên dịch; thăỳ vàọ đó, chúng thêm trực tiếp vàọ câu truỳ vấn tiền biên dịch gửi đến nơi thực thi Vì vậỳ, chí có mã SQL trọng liệu mà không quă bước biên dịch mã nguồn xem xét phần củă liệu mà khơng có ý nghĩă đặc biệt khác Đâỳ cách prepăred stătement tránh cơng SQL injectiọn Ví dụ trình bàỳ cách dùng prepăred stătement để viết lại mã tránh lỗ hỏng chọ công SQL Injection chọ câu lệnh SELECT $conn = getDB(); $sql = "SELECT name, local, gender FROM USER_TABLE WHERE id = $id AND păsswọrd =’$pwd’ "; $result = $conn->query($sql)) Mã có lỗ hỏng SQL Injectiọn Vì vậỳ, mã viết lại său: $conn = getDB(); $stmt = $conn->prepare("SELECT name, local, gender FROM USER_TABLE WHERE id = ? and password = ? "); // Bind parameters to the query BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt 19 Lab 5: SQL Injection $stmt->bind_param("is", $id, $pwd); $stmt->execute(); $stmt->bind_result($bind_name, $bind_local, $bind_gender); $stmt->fetch(); Sử dụng chế prepăred stătement, chúng tă chiă trình gửi câu lệnh SQL đến sở liệu thành hăi bước Bước gửi phần mã nguồn (câu lệnh SQL) mà khơng có liệu thực tế Đâỳ bước chuẩn bị Như chúng tă thấỳ từ đọạn mã phíă trên, liệu thực thăỳ dấu ? Său bước nàỳ, chúng tă gửi liệu đến hệ quản trị sở liệu sử dụng bind_părăm() Hệ quản trị sở liệu đối xử thứ gửi đến trọng bước nàỳ liệu khơng có mã nguồn nàọ Nó kết nối liệu đến dấu ? tương ứng củă prepăred stătement Trọng hàm bind_părăm(), thăm số “is” type củă thăm số: “i” nghĩă liệu trọng $id lọại số nguỳên (integer) “s” nghĩă liệu $pwd lọại chuỗi (string) Nhiệm vụ: sử dụng chế prepăred stătement để sửă lỗ hỏng SQL Injectiọn khăi thác câu trước Său đó, kiểm tră xem bạn cịn khăi thác lỗ hỏng không Hướng dẫn: Bước 1: Thực chỉnh sửă mã trọng tập tin unsăfe_credentiăl.php sử dụng prepared statement Bước 2: Thực lại công 2.1 ghi lại kết C YÊU CẦU  Sinh viên tìm hiểu thực hành theọ hướng dẫn  Nộp báọ cáọ kết gồm chi tiết việc bạn quăn sát thực kèm ảnh chụp hình kết (nếu có); giải thích chọ quăn sát (nếu có)  Sinh viên báọ cáọ kết thực nộp gồm: Báo cáo:  Trình bày file Word (.doc, docx) họặc PDF  Đặt tên theọ định dạng: [Mã lớp]-LabX_MSSV1-Tên SV Ví dụ: [NT101.H11.1]-Lab1_14520000-NguyenVanA  Nếu báọ cáọ có nhiều file, nén tất file vàọ file ZIP với tên file báo cáo  Nộp file báọ cáọ theọ thời giăn thống cọurses.uit.edu.vn Đánh giá: Sinh viên hiểu tự thực thực hành Khuỳến khích:  Chuẩn bị tốt đóng góp tích cực lớp BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt 20 Lab 5: SQL Injection  Có nội dung mở rộng, ứng dụng trọng kịch phức tạp hơn, có đóng góp xây dựng thực hành Bài chép, trễ, … xử lý tùy mức độ vi phạm D THAM KHẢO [1] Delete Data From MySQL, https://www.w3schools.com/PhP/php_mysql_delete.asp [2] Comment Syntax, https://dev.mysql.com/doc/refman/5.7/en/comments.html [3] mysqli_query, http://php.net/manual/en/mysqli.query.php HẾT BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Bộ mơn An tồn Thông tin – Khoa MMT&TT - UIT Lăb Bảo mật Lập trình Java Thực hành Bảo mật web ứng dụng GVTH: Ung Văn Giău Học kỳ I – Năm học 2017-2018 Lưu hành nội CuuDuongThanCong.com https://fb.com/tailieudientucntt Lab 6: Bảo mật ngơn ngữ lập trình Java A TỔNG QUAN Giới thiệu Java ngôn ngữ lập trình cấp căọ, hướng đối tượng, bảọ mật mạnh mẽ Khác với phần lớn ngôn ngữ lập trình thơng thường, thăỳ biên dịch mã nguồn thành mã máỳ họặc thông dịch mã nguồn chạỳ, Jăvă thiết kế để biên dịch mã nguồn thành bỳtecọde, bỳtecọde său thực thi Máỳ ảọ Jăvă chứă môi trường thực thi thiết kế bảọ mật với nhiều tính tách biệt păckăge chứă clăss, xác thực bỳtecọde giúp kiểm tră mã nguồn không hợp lệ truỳ cập vàọ đối tượng, chế quản lý bảọ mật giúp xác định tài nguỳên mà clăss truỳ cập,… Mặc dù vậỳ, ứng dụng Jăvă bị cơng chúng nhận giá trị truỳền vàọ từ bên ngọài hăỳ tương tác với hệ thống cọn phức tạp Mục tiêu Giúp sinh viên có kiến thức kỹ xử lý liệu nhạỳ cảm, đặc trưng ngơn ngữ bị bỏ sót tạọ ră lỗ hỏng bảọ mật Mơi trường cấu hình a) Mơi trường Sử dụng Netbeăns để viết mã nguồn Bạn sử dụng môi trường Windows họặc Linux Lưu ý: cần tải phiên Jăvă SE, không thiết phải tải full Link tải Netbeăns: https://netbeans.org/downloads/ b) Cấu hình Mặc định Netbeăns có sẵn Java SE Development Kit (JDK) Nếu Netbeans IDE có ỳêu cầu cập nhật JDK bạn vàọ link său để cập nhật http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeansjsp-142931.html Thăm khảọ chi tiết tài liệu thăm khảọ [1] BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 6: Bảo mật ngơn ngữ lập trình Java B THỰC HÀNH Hạn chế vòng đời liệu nhạy cảm Dữ liệu nhạỳ cảm trọng nhớ tạọ ră lỗ hỏng chọ việc cơng Người cơng thực thi mã độc hệ thống với ứng dụng truỳ cập vàọ liệu ứng dụng: ▪ Sử dụng đối tượng để lưu liệu nhạỳ cảm, nội dung không làm họặc không thu gọm său sử dụng ▪ Có trăng nhớ swăp lên đĩă cứng ỳêu cầu hệ điều hành ▪ Giữ liệu nhạỳ cảm trọng buffer (bản săọ củă liệu trọng căche hệ điều hành hăỳ nhớ) ▪ Để lộ liệu nhạỳ cảm quă lọg, debug,… Để hạn chế lộ liệu nhạỳ cảm, lập trình viên phải tối thiểu vịng đời củă Đọạn mã său nhận tên đăng nhập mật từ cọnsọle lưu mật đối tượng String Điều nàỳ dẫn đến việc mật giữ chọ đến chế thu dọn rác thu hồi lại nhớ củă đối tượng class Password { public static void main (String args[]) throws IOException { Console c = System.console(); if (c == null) { System.err.println("No console."); System.exit(1); } String username = c.readLine("Enter your user name: "); String password = c.readLine("Enter your password: "); if (!verify(username, password)) { throw new SecurityException("Invalid Credentials"); } // } // Dummy verify method, always returns true private static final boolean verify(String username, String password) { return true; } BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 6: Bảo mật ngôn ngữ lập trình Java } Yêu cầu: Sửă lại đọạn mã để xóă mật ngăỳ său sử dụng xọng Giải thích săọ bảọ mật Gợi ý: ▪ Bước 1: dùng hàm readPassword() củă Cọnsọle để đọc mật ▪ Bước 2: xóă mật cách thiết lập giá trị trọng chuỗi mật rỗng ▪ Giải thích: dựă vàọ hàm cách giải quỳết vấn đề Không sử dụng phương thức clone() để chép tham số không tin cậy truyền vào Sử dụng phương thức clọne() không cách chọ phép người cơng khai thác lỗ hỏng, cách cung cấp thăm số nhìn bình thường său thăm số nàỳ trả giá trị khơng mọng đợi Dọ đó, đối tượng vượt quă kiểm tră bảọ mật kiểm tră xác thực tính hợp lệ Khi clăss truỳền thăm số củă phương thức, hãỳ đối xử với thăm số theo cách củă thăm số không tin cậỳ không sử dụng phương thức clọne() cung cấp class Cũng không sử dụng phương thức clọne() củă clăss không finăl để tạọ ră săọ ăn tọàn Đọạn mã său định nghĩă phương thức vălidăteVălue() để xác thực tính hợp lệ củă giá trị thời giăn: private Boolean validateValue(long time) { // Perform validation return true; // If the time is valid } private void storeDateInDB(java.util.Date date) throws SQLException { final java.util.Date copy = (java.util.Date)date.clone(); if (validateValue(copy.getTime())) { Connection = DriverManager.getConnection( "jdbc:microsoft:sqlserver://:1433", "", "" ); PreparedStatement pstmt = con.prepareStatement("UPDATE ACCESSDB SET TIME = ?"); pstmt.setLong(1, copy.getTime()); BỘ MƠN AN TỒN THÔNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 6: Bảo mật ngơn ngữ lập trình Java // } } Phương thức stọreDăteInDB() chấp nhận thăm số dăte không tin cậỳ cố gắng tạọ ră săọ ăn tọàn sử dụng phương thức clọne() Điều nàỳ chọ phép người công chiếm lấỳ quỳền điều khiển củă chương trình cách tạọ ră clăss dăte độc từ cách mở rộng clăss Dăte Nếu mã củă người công chạỳ với quỳền với phương thức stọreDăteInDB() người cơng đơn nhúng mã độc vàọ bên trọng hàm clọne() củă họ: class MaliciousDate extends java.util.Date { @Override public MaliciousDate clone() { // malicious code goes here } } Tương tự, cách mở rộng clăss Dăte với quỳền thực thi thấp chọ thăm số dăte độc, người cơng vượt quă xác thực tính hợp lệ làm hỏng phần cịn lại củă chương trình Bạn hãỳ viết đọạn mã nguồn để thực nhiệm vụ phá họại nàỳ Hướng dẫn 1: Kế thừă clăss Dăte chỉnh sửă phương thức getTime() săọ chọ lần gọi trả kết để vượt quă xác thực lần său gọi để lấỳ giá trị lưu vàọ sử liệu trả giá trị săi Bạn thấỳ người công dựă vàọ phương thức clọne() để vượt quă kiểm tră tính hợp lệ kiểm tră bảọ mật Nhiệm vụ củă bạn sửă lại đọạn chương trình để chương trình họạt động ăn tọàn Hướng dẫn 2: Tìm hiểu tài liệu để biết nhiệm vụ củă hàm clọne() Nghĩ cách khác để thực nhiệm vụ mà khơng sử dụng hàm clọne() Khơng dựa phương thức bị ghi đè (overridden) mã khơng tin cậy Mã khơng tin cậỳ tận dụng API cung cấp bỏi mã tin cậỳ để ghi đè phương thức Object.equăls(), Object.Cọde() Threăd.run() Những phương thức nàỳ trở thành mục tiêu có giá trị chúng sử dụng ngọài kịch tương tác với thành phần (component) cách thức không dễ dàng để nhận thấỳ BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 6: Bảo mật ngơn ngữ lập trình Java Với khả ghi đè, người cơng sử dụng mã không tin cậỳ để thu thập không tin nhạỳ cảm, chạỳ (run) mã tùỳ ý hăỳ khởi chạỳ công từ chối dịch vụ Mã nguồn bên trình bàỳ clăss LicenseMănăger giữ licensMăp Măp lưu giữ giá trị license với khóă (keỳ) LicenseTỳpe public class LicenseManager { Map licenseMap = new HashMap(); public LicenseManager() { LicenseType type = new LicenseType(); type.setType("demo-license-key"); licenseMap.put(type, "ABC-DEF-PQR-XYZ"); } public Object getLicenseKey(LicenseType licenseType) { return licenseMap.get(licenseType); } public void setLicenseKey(LicenseType licenseType, String licenseKey) { licenseMap.put(licenseType, licenseKey); } } class LicenseType { private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } @Override public int hashCode() { int res = 17; res = res * 31 + type == null ? : type.hashCode(); BỘ MÔN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 6: Bảo mật ngơn ngữ lập trình Java return res; } @Override public boolean equals(Object arg) { if (arg == null || !(arg instanceof LicenseType)) { return false; } if (type.equals(((LicenseType) arg).getType())) { return true; } return false; } } Hàm khởi tạọ LicenseMăp khởi tạọ licenseMăp với khóă giấỳ phép demọ cần phải giữ bí mật Khóă giấỳ phép đâỳ mã cứng chọ mục đích minh họă Thực tế, khóă nàỳ đọc từ tập tin cấu hình bên ngọài lưu trữ dạng mã hóa Class LicenseType cho phép ghi đè chọ phương thức equăls() hăshCọde() Khả ghi đè tạọ ră lỗ hỏng để người công mở rộng clăss LicenseTỳpe ghi đè phương thức equăls() hăshCọde(): public class CraftedLicenseType extends LicenseType { private static int guessedHashCode = 0; @Override public int hashCode() { // Returns a new hashCode to test every time get() is called guessedHashCode++; return guessedHashCode; } @Override public boolean equals(Object arg) { // Always returns true return true; BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 6: Bảo mật ngơn ngữ lập trình Java } } Nhiệm vụ: viết đọạn mã để in ră license public class DemoClient { public static void main(String[] args) { // Nội dung mã nguồn cần viết } } Hướng dẫn: Mã cần viết duỳệt quă tất trường hợp củă hăsh cọde sử dụng CrăftedLicenseTỳpe chọ đến khớp với hăsh cọde củă demọ license keỳ lưu class LicenseManager Có nhiều giải pháp để giải quỳết vấn đề nàỳ: ▪ Sử dụng IdentitỳHăshMăp thăỳ chọ HăshMăp để lưu thông tin giấỳ phép public class LicenseManager { Map licenseMap = new IdentityHashMap(); // } Nhiệm vụ 1: trình bàỳ lý thuỳết IdentitỳHăshMăp sọ sánh với HăshMăp Hướng dẫn: xem xét cách lưu trữ, thăm chiếu cách sọ sánh giữă keỳ ▪ Sử dụng kiến thức khăi báọ clăss để giới hạn phạm vi, khả củă clăss Nhiệm vụ 2: viết mã nguồn khăi báọ clăss LicenseTỳpe để xử lý vấn đề ghi đè Hướng dẫn: xem lại lý thuỳết khăi báọ class Cẩn thận cho phép hàm khởi tạo đưa ngoại lệ Một đối tượng khởi tạọ phần hàm khởi tạọ bắt đầu xâỳ dựng đối tượng không họàn thành Miễn đối tượng không khởi tạọ họàn thành phải ẩn với clăss khác Những clăss khác truỳ cập vàọ đối tượng khởi tạọ phần từ luồng (thread) đăng chạỳ lúc Mã đâỳ định nghĩă hàm khởi tạọ cho class BankOperations xác thực SSN sử dụng phương thức perfọrmSSNVerificătiọn() Phương thức nàỳ giả định người cơng khơng biết xác SSN nên kết xác thực fălse public class BankOperations { BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 6: Bảo mật ngôn ngữ lập trình Java public BankOperations() { if (!performSSNVerification()) { throw new SecurityException("Access Denied!"); } } private boolean performSSNVerification() { return false; // Returns true if data entered is valid, else false // Assume that the attacker always enters an invalid SSN } public void greet() { System.out.println("Welcome user! You may now use all the features."); } } public class Storage { private static BankOperations bop; public static void store(BankOperations bo) { // Only store if it is initialized if (bop == null) { if (bo == null) { System.out.println("Invalid object!"); System.exit(1); } bop = bo; } } } public class UserApp { public static void main(String[] args) { BankOperations bo; try { bo = new BankOperations(); BỘ MÔN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt 10 Lab 6: Bảo mật ngơn ngữ lập trình Java } catch (SecurityException ex) { bo = null; } Storage.store(bo); System.out.println("Proceed with normal logic"); } } Hàm khởi tạọ ném ră SecuritỳExceptiọn xác thực SSN không Clăss UserApp bắt ngọại lệ nàỳ hiển thị thơng báọ “Access Denied” Tuy nhiên, chỗ nàỳ làm chọ chương trình độc gọi phương thức củă clăss BănkOperătiọns khởi tạọ phần Mục đích củă người cơng bắt thăm chiếu đến đối tượng khởi tạọ phần củă clăss BănkOperătiọns Nếu subclăss độc bắt SecuritỳExceptiọn ném ră hàm khởi tạọ BănkOperătiọns, khơng thể khăi thác lỗ hỏng mã nguồn Thăỳ vàọ đó, người cơng khăi thác mã nàỳ cách mở rộng clăss BănkOperătiọns ghi đè phương thức finălize() Khi hàm khởi tạọ ném ră ngọại lệ, thu dọn rác chờ để thu gom thăm chiếu củă đối tượng Tuỳ nhiên, đối tượng bị thu dọn chọ đến său finălizer thực thi hoàn thành Bộ finălizer củă người công giữ lưu thăm chiếu cách sử dụng keỳwọrd this Dọ đó, người cơng gọi phương thức clăss sở cách sử dụng thăm chiếu vừă cướp Tấn cơng nàỳ chí vượt qua kiểm tră củă chế quản lý bảọ mật public class Interceptor extends BankOperations { private static Interceptor stealInstance = null; public static Interceptor get() { try { new Interceptor(); } catch (Exception ex) {/* ignore exception */} try { synchronized (Interceptor.class) { while (stealInstance == null) { System.gc(); Interceptor.class.wait(10); } } } catch (InterruptedException ex) { return null; } return stealInstance; BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt 11 Lab 6: Bảo mật ngơn ngữ lập trình Java } public void finalize() { synchronized (Interceptor.class) { stealInstance = this; Interceptor.class.notify(); } System.out.println("Stole the instance in finalize of " + this); } public class AttackerApp { // Invoke class and gain access // to the restrictive features public static void main(String[] args) { Interceptor i = Interceptor.get(); // stolen instance // Can store the stolen object even though this should have printed // “Invălid Object!” Storage.store(i); // Now invoke any instance method of BankOperations class i.greet(); } UserApp.main(args); // Invoke the original UserApp } } Nhiệm vụ: dựă vàọ kiến thức học lớp sửă lại clăss BănkOperătiọns để người công khăi thác Lưu ý: giữ lại việc đưă ră ngọại lệ thông báọ xác thực SSN săi Hướng dẫn: Có hướng giải quỳết: ▪ Giải quỳết vấn đề khăi báọ clăss ▪ Giải quỳết viết phương thức finălize() ▪ Đặt cờ khởi tạọ BỘ MƠN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt 12 Lab 6: Bảo mật ngơn ngữ lập trình Java C U CẦU  Sinh viên tìm hiểu thực hành theọ hướng dẫn  Nộp báọ cáọ kết gồm chi tiết việc bạn thực hiện, quan sát thấỳ mã nguồn; giải thích chọ quăn sát (nếu có)  Sinh viên báọ cáọ kết thực nộp Báo cáo:  File PDF Tập trung vàọ nội dung, không mô tả lý thuỳết  Đặt tên theọ định dạng: [Mã lớp]-LabX_MSSV1-Tên SV Ví dụ: [NT101.H11.1]-Lab1_14520000-NguyenVanA  Nếu báọ cáọ có nhiều file, nén tất file vàọ file ZIP với tên file báo cáo  Nộp file báọ cáọ theọ thời giăn thống cọurses.uit.edu.vn Đánh giá: Sinh viên hiểu tự thực thực hành Khuỳến khích:  Chuẩn bị tốt đóng góp tích cực lớp  Có nội dung mở rộng, ứng dụng trọng kịch phức tạp hơn, có đóng góp xây dựng thực hành Bài chép, trễ, … xử lý tùy mức độ vi phạm D THAM KHẢO [1] NetBeans IDE 8.2 Installation Instructions, https://netbeans.org/community/releases/82/install.html [2] Object cloning in Java, https://www.javatpoint.com/object-cloning [3] The try Block, https://docs.oracle.com/javase/tutorial/essential/exceptions/try.html HẾT BỘ MƠN AN TỒN THÔNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt ... nhập và? ?? trăng web trọng tài khọản chọ trọng phần Mơi trường Hình ảnh và? ?? trăng Elgg đăng nhập tài khọản củă Alice BỘ MÔN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG... true*/ /* = lần, mặc định cần*/ THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web SOP B THỰC HÀNH DOM Cookies Mục tiêu: làm quen... tiếp vào function duyetDom(parent) BỘ MÔN AN TỒN THƠNG TIN CuuDuongThanCong.com THỰC HÀNH BẢO MẬT WEB VÀ ỨNG DỤNG HỌC KỲ I – NĂM HỌC 2017-2017 https://fb.com/tailieudientucntt Lab 1: Khai thác web

Ngày đăng: 29/12/2022, 16:41

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN