Chương I trình bày giới thiệu tống quan, các khái niệm và hiện trạng, lý do thực hiện. Chương 2 sẽ nghiên cứu một số lỗ hồng đặc trưng và phân tích CVE-2021-44228. Chương 3 trình bày nội dung về xây dựng lab thử nghiệm về các lỗ hồng đặc trưng. 10 CHUONG 1: GIOI THIEU TONG QUAN Chuong I trinh bày hiện trạng và lý do thực hiện, tông quan và các khái niệm quan trọng, công nghệ phô biên, kỹ thuật và kinh nghiệm cài đặt và gỡ lôi, một sô hướng phát triên và các công cu ho tro.
Bên cạnh đó chương này còn nêu ra tông quan về các lô hồng trong Java Web Application 1. Hiện trạng và lý do thực hiện Hiện nay có rât nhiêu trang web đang chạy trên nên Java. Ngoài ra còn có các CMS, khung phân mêm nôi tiêng sử dụng Java làm cơ sở đê phát triên các gói dịch vụ của họ, dưới đây là danh sách một vài các sản phâm nôi tiêng như: - Liferay - Vmware - Cac sản phẩm cua Atlassian - Manage engine - Jenkins - Zimbra - _ Các sản phẩm của Apache - _ Các sản phẩm của Oracle - __ Và rất nhiều các sản phẩm của các công ty công nghệ nỗi tiếng được viết trên nền Java nhu: Twitter, Amazon, Apple, SonicWall,. 3) COIQACL€' zimb ra’ &.
3 Lif ManageEngine) PROJECT PERSPECTIVES | eray a division of Zoho Corp. ea eee” Apache RocketMQ * e (3 # 13) / O KPACHE ' Apache Flink and The Apache Way & # h Jenkins DPBBBO t2mzz” , TOP-LEVEL PROJECT Hình 1.1 Một số sản phẩm Java Web Java Web rất phô biến và phát triển do lương cho lập trình viên khá cao. Java xuất hiện lần đầu năm 1995 cho tới nay ước tính có tới hơn 3 tỉ thiết bị chạy Java. Java là một nền tảng miễn phí, dễ đọc, có một cộng đồng lớn, số lượng API và thư viện rộng.
Ngoài ra Java có tài liệu tham khảo chi tiết và phong phú. Đặc biệt các công cụ phát triên, kiếm thử và gỡ lỗi rất mạnh. 11 Vị trí Lập Trình Viên Java Địa điểm - Lương khảo sát ma Lương trung bình 9,8 Tr 173 Tr „ i i 13,5 Tr/ tháng ' ' STr 13,5 Tr 45 Tr Luong trung binh 13,5 Tr Luong bac cao 17,3 Tr (Thấp nhất) (Trung bình. Xem thêm tại http://vietnamsalary.2 Mức lương Java Web theo thống kê từ CareerBuilder Bên cạnh sự phô biến đó thì rất nhiều lập trình viên không cân thận, thiếu kiến thức đảm bảo an toàn,.
Dẫn đến hệ luy là trong các sản phẩm còn chứa rất nhiều lỗ hồng. Do đó việc nghiên cứu và tìm lỗi nằm trong các thư viện, khung phần mềm và nền tảng này là điều hết sức cần thiết. CVEs Per Year 20000 4 17500 3 15000 3 12500 3 New CVEs 10000 + 75004 5000 + 2500 4 1990 1995 2000 2005 2010 2015 Date Hình 1.3 Thong ké sé luong CVE moi nam theo sé liéu ctia NVD Dù có khá nhiều các công cụ, phần mềm hỗ trợ phân tích tĩnh nhưng những phan mềm này tìm được lỗi thì hầu hết người khác và các công ty, tổ chức của các sản phẩm cũng đã mua và chạy rồi nên xác suất tìm được lỗi không cao, đặc biệt là không thể tìm được các lỗi và kỹ thuật chưa biết. Do vậy việc tìm kiếm các kỹ thuật và lỗ hồng mới phải do con người nghiên cứu và phân tích thủ công.
Hiện nay các tài liệu và mạng internet thi hầu hết chưa có nhiều về lĩnh vực nghiên cứu lỗ hồng. Kiến thức thường khái quát và dàn trải, dẫn tới khi muốn nghiên cứu về một thứ gì đó mới thường sẽ tốn thời gian và công sức, đặc biệt là khó phân biệt đúng sai. Về một nội dung tông hợp cơ bản về hướng nghiên cứu trong lĩnh vực Java Web 12 Application thì hiện tại chưa có. Chính vì vậy, đỗ án này được thực hiện nhằm hướng dẫn những người mới bắt đầu về những nội dung cơ bản.
Các nội dung soạn ra bao gồm kiến thức trọng tâm, những thứ bắt buộc phải học để bắt đầu nghiên cứu. Sau khi hoàn thành chương trình này, người đọc có thể tự chọn được hướng đi của bản thân, tiết kiệm được thời gian và công sức nhưng vẫn đem lại hiệu quả. Téng quan vé Java Web Application Java Web Application là một tập hợp các tài nguyên động (chăng hạn như Serviet, trang JavaServer, cac classes va jars) và các tài nguyên fĩnh (các trang HTML và hình ảnh). Một ứng dụng web Java có thể được triên khai dưới dạng tệp WAR.
Java cung cấp các API của Servlet và JSP giúp đơn giản hoá việc thực hiện tạo trang web. Đối với Java Web Application rất dễ tiếp cận, mục tiêu nhiễu, công cụ tài liệu cũng rất rất nhiều. Dễ tiếp cận vì kiến thức không quá phức tạp nhưng khá dàn trải, mục tiêu nhiều do thế giới mạng ngày càng to lớn, rất rất nhiều thứ được phát triển trên web. Do đây là mảng nhiều người quan tâm nhất, do đó tỉ lệ công cụ và tài liệu cũng tỉ lệ thuận VỚI nÓ.
Java Web Application su dung mô hinh Web Server va Client: - May chủ Web là một phần mềm có thể xử lý yêu cầu của máy khách và gửi phản hồi lại cho máy khách. Ví dụ, Apache là một trong những máy chủ web được sử dụng rộng rãi nhất. Máy chủ Web chạy trên một số máy vật lý và lắng nghe yêu cầu của khách hàng trên một công cụ thê. - May chủ Web là một phần mềm có thể xử lý yêu cầu của máy khách và gửi phản hồi lại cho máy khách.
Ví dụ, Apache là một trong những máy chủ web được sử dụng rộng rãi nhất. Máy chủ Web chạy trên một số máy vật lý và lắng nghe yêu cầu của khách hàng trên một công cụ thê. Các khái niệm quan trọng Những khái niệm trong phần này đều là những khái niệm cốt lõi, nó không chỉ giúp ích cho việc tìm hiểu về Java Web Application mà còn giúp chúng ta dễ dàng trong việc nghiên cứu lỗ hồng, cài đặt và gỡ lỗi. Những phần này hầu hết đều là kiến thức dành cho lập trình viên, là những yêu cầu cơ bản và bắt buộc các nhà nghiên cứu cần phải biết.
Danh sách các khái niệm cần nắm rõ bao gồm: - - Hướng đối tượng và cơ sở dữ liệu. - _ Lập trình với Java và Java Web. - May chu wng dung web (Java Application Servers): Tomcat, Websphere, Weblogic, JBoss, Jetty. - Trinh quan ly goi (Package Manager): Maven va Gradle.
- API phan chiéu (Java Reflection API). - Triéu goi phuong thi tu xa (Remote Method Invocation). 13 - Tai lop trong Java (Java Class Loading). - Ngén ngit biéu thc (Expression Language): SpEL, OGNL, MVEL, JBoss EL.
- Bo xv ly mau (Template Engine): Thymeleaf, Freemarker, Velocity, JSP. Một số công nghệ Java Web phố biến 1. Servlet Servlet là 1 công nghệ hay API và là một thành phần để xây dựng ứng dụng web động năm về phía máy chủ. Đóng vai trò là một controller trong mô hình kiến trúc MVC.
Servlet nhận yêu cầu từ phía client sau đó thực hiện các yêu cầu cần xử lý và gửi phản hồi về phía người dùng. Nó được tải sẵn ở máy chủ web một lần duy nhất khi ứng dụng web được triển khai và các nhà phát triển không cần phải khởi tạo nó. Các Servlet mở rộng khả năng của một máy chủ vì chúng có thể đáp ứng nhiều loại yêu cầu, nó hoạt động giống như các thùng chứa đề lưu trữ các ứng dụng web trên các máy chủ web. Nó hỗ trợ gần như tất cả các giao thức máy khách-máy chủ, nhưng thường được sử dụng với HTTP và còn được gọi là HTTP servlet.
Cách thức hoạt động cơ bản như sau: - _ Người dùng gửi yêu cầu tới máy chủ web thông qua giao thức HTTP - _ Web Server chuyền tiếp yêu cầu cho thùng chứa web - _ Thùng chứa web lại chuyền tiếp yêu cầu cho Servlet ở dạng đối tượng yêu cầu ( Request ObJect) - Servlet sé tạo ra đối tượng phản hồi (Response Object), có thể tương tác với cơ sở dữ liệu tại đây và gửi nó lại thùng chứa web - _ Web Container sẽ chuyên đổi đối tượng phản hôi đó thành phản hồi HTTP ( HTTP Response) và gửi đến máy chủ web - _ Cuối cùng máy chủ web gửi phản hỏi lại cho người dùng và hiển thị ra màn hình Web Server Http Request Web Container Http Response ————+ Database Hình L.4 Kiến trúc của Servlet 14 Http Request Request Object Http Request Web Container < <= Http Response Browser Http Response Response Object Hình 1.5 Kiến trúc chỉ tiết Như chúng ta thấy, người dùng trước kia chỉ có thê yêu cầu 1 web tĩnh (static web) từ máy chủ. Tuy nhiên, như vậy vẫn là chưa đủ nếu người dùng muốn tương tác với trang web dựa trên dữ liệu của người đó hay là truy vấn cơ sở dữ liệu để lấy thông tin,. Cơ bản thì người dùng yêu câu gì thì web làm theo như thế (web động). Ví dụ người dùng nhập thông tin vào web và yêu cầu lưu thông tin đó lại và hiển thị trên trang cá nhân.
Ý tưởng cơ bản của thùng chứa web là sử dụng Java đề tự động tạo trang web ở phía máy chủ, xử lý các yêu cầu tính toán từ phía máy khách và tra lại các kết quả cho người dùng. Vậy nên, web container thực chất là một phần của máy chủ web và có nhiệm vụ tương tác với các servlet. Và đúng như tên gọi thì nó giỗng như l cái thùng chứa, chứa tat cả các servlet ở bên trong. Về vòng đời hay là một tiễn trình đây đủ từ khi được tạo ra đến khi bị huỷ, bao gồm các giai doan: - _ Servlet được khởi tạo bởi gọi phương thức init(): chi duoc goi 1 lan khi Servlet lần đầu được tạo - _ Servlet gọi phương thức service() để xử lý một yêu cầu từ Client: là phương thức chính đề thực hiện các tác vụ, khi nhận I yeu cầu mới thì server tạo I thread mới, sau đó kiểm tra kiểu yêu cầu GET, POST,.
và gọi các phương thức tương ứng doGet, doPost,. Chúng ta sẽ cần ghi đè các phương thức này đề có thể xử lý tuỳ ý yêu cầu. - _ Servlet bị hủy bởi triệu hồi phương thức destroy(): cũng chỉ được gọi 1 lần ở giai đoạn cuối trong vòng đời của Servlet, thực hiện đóng kết nối Database, dừng thread,. - __ Cuối cùng, servlet trở thành rác và được thu thập bởi Garbage Collector cua JVM.
15 : init() Concurrent ' Http Requests ‘ Web Container. (Servlet Container) service() , Web server \ JVM N “ Hình 1.