1. Trang chủ
  2. » Luận Văn - Báo Cáo

kỹ thuật nghiên cứu và khai thác java web application

67 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Kỹ thuật nghiên cứu và khai thác Java Web Application
Tác giả Đinh Viết Hải
Người hướng dẫn TS. Nguyễn Ngọc Điệp
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Công nghệ thông tin
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 67
Dung lượng 27,51 MB

Nội dung

1Ky Thuat Nghien Cuu Va Khai Thac Java Web Application1Ky Thuat Nghien Cuu Va Khai Thac Java Web Application1Ky Thuat Nghien Cuu Va Khai Thac Java Web Application1Ky Thuat Nghien Cuu Va

Trang 1

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIÊN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN I

ĐỎ ÁN TÓT NGHIỆP

ĐÈ TÀI: KỸ THUẬT NGHIÊN CỨU VÀ KHAI THÁC

JAVA WEB APPLICATION

Giảng viên hướng dẫn : TS Nguyễn Ngọc Điệp

Trang 2

đã tạo điều kiện để em có thé hoc tập và phát triển bản thân trong một môi trường rất

tốt Cảm ơn các Thầy Cô đã cung cấp cho em không chỉ kiến thức mà còn là kỹ năng sông, đó là những hành trang hữu ích cho em trên chặng đường dài phía trước của cuộc đời

Em xin gửi lời cảm ơn đến các anh chị trong phòng An Ninh Hệ Thống Ứng Dụng công ty An Ninh Mạng Viettel nói chung đã cung cấp cho em những kiến thức về lập

trình, an ninh mạng, kiểm thử xâm nhập và tạo điều kiện cho em hoàn thiện đồ án này Cuối cùng, em xin cảm ơn gia đình, bạn bè, những người đã luôn ở cạnh, quan tâm,

giúp đỡ và ủng hộ để bản thân em có thê hoàn thành được đồ án này

Em xin chân thành cảm ơn!

Hà Nội, ngày 12 tháng 12 năm 2020

Sinh viên thực hiện

Đinh Viết Hải

Trang 3

NHAN XET, DANH GIA, CHO DIEM

(Của người hướng dẫn)

““

“ (

““ ÁÁ

9 90999990940600049490000490900009000000000000000009000009000090000090000000090900090900009090000000000020009002040000204900009090009090909900909000990090000900006009090009096090090°eee°6e ÔÔÓÔÓÔÓÔÔ ` ÔÔÖÔÖÔÖÓÔÓÔÔÔÖÔÖÔÖÔÓÔÔÔÔÓÔÓÔÔÖÔÔÖÔÓÔÔÔÔÖÔÔÔÖÔÖÔÖÔÖÔÔÖÔÖÔÔÖÔÖÔÓÔÓÔÔÔÔÖÔÖÔÖÔÓÔÖÔÓÔÖÔÓÔÔÔÖÔÖÔÖÓÔÖÔÖÔÖÔÖÔÖÖÔÖÔÔÖÔÖÔÖ'ÔÖÓÔÖÔÖÔÒÔÓÔÔÔÔÔÓÔÔÖÖÔÔÖÓÔÔÖÖÔÖÔÔÔÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÓÔÖÓÔÔÖÔÖÔÒÖÔÖÖÓÖÔÖÔÖÔÖ'ÔÖ'ÔÖ'ÖÔÖÔÖÔÖÔÖÔÔÔÔÔÔÔÒÔÔÔÐ ““

POP meee ee eee eee ee EHH EHH EEE EEE EEE HEE EEE EEE EEEE EEE HEE EEE EEE EEHE EEE EEE EEEEE EEE EEE EEEEEEEEEEEEEEE EEE EEE EEE EEE EE HEE EE EEE EE EES POOR eee eee eee EEE HERE EEE EEE EEE EE EEE EEE EEE EE EEE EEE EE EE EEE EEE EE EEE EE EEE EEE EEEE TEESE EEE SEES ESET EEE SEES EEEE TEESE EEE EEE EEE EEE EEE EEES POPP Ố Ố

POR m meee meee eee eee eee HEE EHH EH EE EEE EE EEE EE EE EEE EEE EEE EEE EEE EEE EEE EE EEEE EEE EEEE EEE EEE EE EEHEEEEE EEE EEE EEE EEE EEE E HEHE EEE EEE EEE PRP e meme meee meee eee EHH EEE EEE EEE EEE EEE EEE EEE EE EE EEE EE EE EEE EEE EE EEE EEE EEE EEE TEESE EEE EEE EEE EE EEEE EEE EEE EEE EEE EEE EEE ESE EE EE EEE EEESE ““ Á(Á

“ ÔÔÔÔÔÔ ÔÔÔ.ÔÔ

9 000909990900000909000990000900000000000000009000009000090000000000000090000900009900009000000000002090000290990009090009090900090900000006099006060969006069090°e9eee°e°ese ““

ÔÔÓÔÓÔÓÔÓÔÔ - - _-.- -

““.(Á.(

POPP RO eee eee HEHEHE HEHEHE EEE HEE EEE EEE EEE EEE EE EEEE TEESE EEE HEE EE EEE EEE EE EEEH TEESE EEE EEE EEEHEEEEEEEEEEEEEEEEEE EEE EEHEEE EEE EEE EE EEES “

¬“ (

=

““

¬“ (

~“A ẶỐ Ố.Ố Ố

“ ÓÔÖÔÒÖÒÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÓÔÔÖÔÖÔÖÔÖÔÓÔÖÔÖÓÔÖÔÖÔÓÔÖÔÖÔÖÔÓÔÖÓÔÖÔÓÔÔÖÔÖÔÓÔÖÔÓÔÖÓÔÖÓÔÔÖÓÔÖÔÓÔÖÔÖÓÔÖÔÖÔÓÔÖÔÓÔÔÖÔÔÖÔÖÔÓÔÖÔÔÖÔÖÔÖÔÖÔÓÔÖÔÖÔÖÔÖÔÓÔÖÔÓÔÖÔÖÖÔÖÔÖÔÖÔÓÔÖÔÓÔÖÔÓÔÖÔÖÔÖÔÖÔÖÔÖÔÖÓÔÖÔÓÔÖÔÓÔÖÓÔÔÖÔÖÔÖ'ÔÓÔÖÓÔÖÔÖ'ÔÖÔÓÔÖÔÖÔÔÖÔÖÔÓÔÖÓÔÖÓÔÖÔÖÔÖÓÔÖÔÓÔÖÔÓÔÖÔÖÔÓÔÖÔÓÔÖÔÖÔÖÔÓÖÓÔÔÖÔÓÔÖÔÖÔÖÔÖÔÓÔÓÔÓÔÖÔÖÔÖÔÖÔSÔÖÔÓÔÖÔSÓÔÖÔÖÔÖÔÖSÔÖÔÖÔÖÔÖÔÖÓÔÖ$ÓÔÖÔÔÖÔÖÔÖÓÔÖÔÖÔÖ'ÔÖ'ÔÖÔÔÖÔÒÖÓÔÔÔÒÔÓÔÓÔÔÔÔÔÐ

Điểm: . St ST SE Errrrerererrea (băng Chữ: ẶẶQQQ Sky )

Đồng ý/Không đồng ý cho sinh viên bảo vệ trước hội đồng châm đô án tốt nghiệp?

HàNộI ngày tháng năm 20

CÁN BỘ - GIẢNG VIÊN HƯỚNG DẪN

(ký và ghi rõ họ tên)

Trang 4

NHAN XET, DANH GIA, CHO DIEM

(Của người phản biện)

““

“ (

““.ÁÁ

9 90999990940600049490000909000090000000000000000000000900009000000000200000290900009000000000900000002090000090000909000099000909090090900009900900600909000600909000609609009069eee°6e ÔÔÓÔÓÔÓÔÔÔ ` ÔÖÔÖÓÔÓÔÔÔÖÔÖÔÓÔÔÔÔÖÔÓÔÓÔÔÖÔÔÖÔÓÔÓÔÔÔÔÔÔÔÖÔÖÔÖÖÔÖÔÓÔÔÔÖÔÖÔÓÔÖÔÓÔÖÔÓÔÔÖÔÖÔÖÔÖÔÖÔÖÔÔÖÔÖÔÔÖÔÔÔÖÔÖÔÖÔÓÔÖÔÖÔÓÔÔÖÔÖÔÖ'ÓÔÖÔÔÖÔÔÖÔÖÔÖÓÔÖÓÔÖÔÖÔÖÔÓÔÔÔÔÖÔÓÔÔÔÖÔÔÖÔÓÔÔÔÖÔÔÓÔÔÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÓÔÖÔÔÖÔÖÔÒÖÔÖÓÖÔÖÔÖÔÖÔÖ'ÔÖ'ÔÖÔÖÔÖÔÖÔÔÖÔÔÔÔÔÒÔÔÔÐ ““

POR meee ee eee ee eee EHH EHH EEE EEE EEE EEE EEE EEE EEE EEE EEE EEE EE EEE EE EEEEEEEE EEE EEE EE EEEEEEEE EEE EEE HEHEHE EEEEE EEE EE EEE EEE HEE EE EE EEE EEE “ (

POOH .Ố Ố

.ÔÔÓÔÓÔÓÔÔÓÔÓÔÔÔÓÓ ỏŠôỏÖöốÕ_Ö`:.:-`` ` -ÔÖÔÖÖÔÖ-`- ` .`._-._- - - - `.Ö`.- - - -

¬“ ÔÔÔÖÔÖÔÖÔÖÔÖÔÓÔÖÔÓÔÔÖÔÖÔÖÔÓÔÖÔÖÔÓÔÖÔÓÔÖÔÓÔÖÔÖÔÖÔÓÔÖÓÔÓÔÓÔÖÔÖÔÓÔÖÔÓÔÖÓÔÔÓÔÖÓÔÖÔÓÔÖÔÓÔÔÖÓÔÖÔÓÔÖÔÓÔÓÔÖÔÓÔÖÔÖÔÓÔÔÖÔÖÔÖÔÖÓÖÓÔÓÔÔÖÔÖÔÖÔÓÔÖÓÔÖÔÖSÔÓÔÖÔÓÔÖÔÓÔÖÔÓÔÖÔÖÔÓÔÖÔÖÔÓÔÖÔÖÔÓÔÖÔÓÔÖÔÔÖÔÖÔÖÔÓÖ'ÔÖÔÓÔÔÖÔÖÓÔÖÔÓÔÖÔÖÔÖÔÓÔÖÓÔÖÔÔÖÔÓÔÖÔÓÔÖÔÓÔÖÔÓÔÖÔÖÔÓÔÖÔÓÔÖÔÓÔÖÔÖÔÖÔÓÔÖÔÓÔÖÔSÓÔÔÖÓÔÖÔÓÔÖÔÓÔÔÔÖSÔÖÔÓÔÖÓÔÖÔÖÔÓÔÖÔÖÔSÔÖÔÖÔÖÔÓÔÖÓÖÔÓÔÔÖ'ÔÖÔÖÓÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÖÔÔÔÔÔÓÔÓÔÔÔÔÔÔÒÔỒ ““ Á(Á

“ ÔÔÔÔÔÔ Ô

9 0009990090000699000990000900000000000000000900000900009000000000000009090000900000000090000000290000029900009090000909000909090090900060000099000060969090060699090°e°eee°e°ese ““

¬

ĐH 0 00040000040000400004000000000000000000400090400009000004000000000400020400009400000000400000000204040009040000400004000000000090000000609000606009060609906e°eseee°e°ee ““.(Á

POPP Ố ố

= ẻ

““

“ (

~“A POOP eRe eee eee EHH EHH EEE EEE EEE E EEE EEE EEE EE EEE EEE EEE EE EEE EEE EEE EE EEEEEEEE EEE EEE EEEEEEEEEEEEE EEE EEE EE EEE EEE EEE EEE EEE EE EEE EE EEEE

BiG: ooo ccececcccccccecececscececececeececeveveveveees (bang Chữ: ee )

Đồng ý/Không đồng ý cho sinh viên bảo vệ trước hội đồng chấm đô án tốt nghiệp?

HàNộI, ngày tháng năm 20

CÁN BỘ - GIẢNG VIÊN PHẢN BIỆN

(ký và ghi rõ họ tên)

Trang 5

MỤC LỤC

DANH MỤC CÁC TỪ VÀ THUẬT NGỮ VIẾT TÁTT 5-<- 8

LOI MO DAU 123docz.net ; File bi 1o1 xin henhe: lethikim32072@ hotmail pgm

CHƯƠNG 1: GIOT THIEU TÔNG QUANN 5-5-5< << << << << =s=sesese 11 1.1 Hiện trạng và lý do thực hiỆn o5 55552 5505555555555% 11

1.2 Tong quan về Java Web Appli€afi0In . -5- 5-5-5 sseseseseseses 13

1.3 Các khái niệm quan fFQIIØ << G G6 5 5 5 5 5S S59999999.9.9.9559505599555595 95856 13 1.4 Một số công nghệ Java Web phổ biến .- 5 5 5 ssesesesesesee 14

H44 Ï SCTFVÏÍ 555 S5 S5 5 9 9 0000000888989909909909000000000000000000000 14

J Z AC ló

1.4.3 Spring VA SPring OOÍ c << SG 9666 6.6.6.9 9 0 600006606006 17 1.4.4 Struts VA (ŠÍPHÍS G0 SG S6 6 6 9 9.9.9.9 9.9 0000600000099 08 20 1.4.5 JavaServer Faces (JSF) ú oo c5 SG 9669999866 99999896695909995966599956 21

1.5 Kỹ thuật và kinh nghiệm trong cài đặt và gỡ lỗi -. 22 ITNNNưïnớgớ ẻéẽẻẻ 22

cu, 23 1.6 Một số hướng phát triển và các công cụ hỗ trợ -«- 23

1.6.2 CODE QOL o0 G5555 9.9.9.9 90.0 00 0000800000069 96 24 1.0.3 (ddÐØGf ÏHSDCCÍOF oooooooo 5555 5 6 6S S 6 S 6 6 %6 8966 86 0 0000000000000 00000000006 6066066808 80800 25

1.7 Tổng quan về các lỗ hồng trong Java Web Applieation 25

2.2.4 Path Traversall cccccccccccccccsscssssssssssssssssssssssssssssssssssssssssssssssssssssssssssees 37

2.2.5 Server-.Sidle TeIHDÏAf€ ÏHJ©€CẨ[OHH co 555555555 5555599959999 9999999898 39

Trang 6

2 3 4 IKẾK ÏHUẬTH << << << E9 9E 9E hư ng g0 0e esee ‘0

3.1 Khảo sát ccc co 0 9H 0 0.00000000000000 0000060060060060909999960 50

Ÿ.I.I ŒIỚi ÍÏHIỆN d c 0 0 0 0 0 0 9 9 69 9.9.9.9 9.9.9.9 9.9 9.9.9.9 9.9.9.9 4 0 0000008 30

$.1.2 Mô tỉ chHHg co co œ œ6 6 6 9 6 9 9 9 9999.999 0 0 0 0000 32

3.2 Tiến hành thử nghiệm 5-2- << sss£ S2 s£s£sesSs=eesesesesess 57

3.2 I Cài đặt HÔI [FƯỜNG co G5566 669696969 0066066009999996 37 3.2.2 Phân tích và khi fÏHLÁC ooooo 6555555 5 5S S 6S S3 9 08 08 58

3.2.3 Ket UG vessssscssscscssssssssscssscssssssssssssssssssscssscsssssssssssssssssssssssssscsssssssssseees 62

3.3 Ket €h0nØ ° << << << s3 EsE3ESESES€ES SE E9 3 5 55550500 e2 63

KET LUAN Ma 64

DANH MỤC TÀI LIỆU THAM KHẢO .-< < << sssseseseSe< 65

Trang 7

DANH MUC HINH VE

Hình 1.1 Một số sản phẩm Java Web.o cceccccscscscssesssscsesessssssesscscsesseesvsveasevsssestseeseees II Hình 1.2 Mức lương Java Web theo thống kê từ CareerBuilder - - 25+: 12 Hình 1.3 Thống kê số lượng CVE mỗi năm theo số liệu của NVD -: 12

Hình 1.6 Sơ đồ mối quan hệ giữa các thành phân với vịng đời của Servlet 16

Hình 1.7 Sơ đồ vịng đời JSP (<3 E3 SE E11 E111 E111 11111111 Tre 17

Hình 1.8 Tổng quan về Spring FramewWOrk ¿- ¿+ 2s x+££+E£EE£E££EeEzEeExzrerxersee 18 Hình 1.9 Ví dụ so sánh Spring và Spring BOOI - 2 -ccc S333 vreseeeeeks 19 Hình 1.10 Cách hiểu đơn giản khác giữa Spring và Spring Boot -s-s- 20

Hình 1.11 Kiến trúc Struts Ì -¿-+¿25+22++22x+2Ex2Ex2EttEEtEEtrrtrrrrrrrrrrrrrrrree 20

Hình 1.15 Danh sách CWE Top 2Š 1111111311 1111111111119 11111111 ng và 26 Hình 1.16 Độ phổ biến của các lỗ hồng theo MITRE ¿5-5 2 s+s+E+£++E+Ez£zzx+z 27 Hình 2.1 Minh hoạ quá trình ser1aÏ1ZatIOn - ¿c3 333321 E+++#EEEExeeeeeesrreeres 29 Hình 2.2 Minh hoạ quá trình deser1aÏ1ZafiOT c5 2 c1 33333 **##EEEE++eeeeexseeeessss 30

Hình 2.3 Mơ tả cơ chế của lỗ hồng XXXE - 2E SE SEEEE‡EEEEEEEEEEEEEEEErEerrkred 33 Hình 2.4 Sơ đồ mơ tả quá trình SSÌRE -(- - + SE EEEEEEEEEEEEEEEEEEEEEEEEErkrkrrrrkrkd 35

Hình 2.5 Ví dụ chức năng cho phép Path traversal - «+ s + + + sssssseeesses 38

Hình 2.6 Mơ tả về lỗ hồng SS TI (tk SE EEEEEEE SE EEEEEEEEEESEEEEEEEEEEEEEErErkrrrkrkd 40

Hình 2.7 Mơ tả JNDI với giao thức RMI c1 EEEkkeeeeeeeseeses 42 Hình 2.8 Sơ đồ kịch bản tấn cơng Log4LJ 2526 E‡E‡ESEEEE‡E‡EEEEEEEEEErEekrrerrrrred "

Hình 2.9 Sơ đồ luồng hoạt động trong mã nguồn của thư viện dẫn tới lỗ hồng 45

Hình 2.10 Danh sách giao thức cho phép lookkup - «+5 +++++s*ssvveex+sseeesss 45 Hình 2.11 Sơ đồ khai thác JNDI Injection theo từng phiên bản JDK - 46

Hình 2.12 Sơ đồ luồng tấn cơng - + tk SE EEEE SE EEEEEEEEEEEEEEEEEEEE E111 46

Trang 8

Hinh 2.13 Vi dụ thực hiện mã khai thác Log4J trên VMware vCenter với nuclet 48

Hình 2.14 Các cách khắc phục Log4]J ¿- - - 2+5 +ES£+E+E£EE£E+EeEEEEEEEEeEkrkrrerereee 49

Hình 3.I Giao diện chính của quản ẨTỊ - - - - - -c c5 332222111 E+++eeeeeeeteeeeeeeeeess 51 Hình 3.2 Giao diện chính của người CƠI . 5c 53333322113 ***++*#EEEe+eeeeereeeess 51

Hình 3.3 Mt s6 hinh anh vé cdc bai lab ececccccccccescscsceseccecscscecesescseeceescscsceceetevseeeens 52

Hình 3.4 Giao diện quản lý lab của tài khoản quản tTỊ - 55553 ++<++++ssess2 54 Hình 3.5 Chức năng nộp cờ theo dạng câu hỎI c5 52233 ++++**ssvveeeexeeeeeeess 55 Hình 3.6 Thống kê tiến độ của người chơi - - ¿6s s‡E‡E‡EEEE+E‡EeEeEEEEkrkekrrererrred 55 Hình 3.7 Lab Deser1al1ZafIOTI - - <1 1333211111183 1 11 199111 ng vn ket 56

Hình 3.9 Endpoint của lỗ hồng ¿2 S2 SE+E2E£ESE2E£EEEEEEEEEEEEEEEEEEEEEEEEEE21 1E cke, 58 Hình 3.10 Phương thức gây ra lỗ hồng và blacklist các giao thức - -: 58 Hình 3.11 Sink của lỗ hỗng ¿2E EESEESE2E2E£EEEEEEEEEEEEEEEEE 111171111111 1Xe 59 Hình 3.12 Mã khai thác thứ nhất sử dụng giao thức classpath - 2 - 5x5: 59 Hình 3.13 Mã khai thác thứ hai sử dụng giao thức Jar +++++‡+‡‡+++++++++sssss 60 Hình 3.14 Phương thức gây ra lỗ hồng deserialization - - - 2 2+s+s+s+s+£z£z+s2 6l Hình 3.15 Kết quả deserialization trong RESTEasyy - - 25 S2+x+E+Ee£zEeEerxrxez 62

Trang 9

DANH MUC CAC TU VA THUAT NGU VIET TAT

API Application Programming Interface Giao dién lập trình ứng dụng

CMS Content Management System Hệ quản trị nội dung

CORBA The Common Object Request

Broker Architecture Kiên trúc môi giới yêu câu đôi tượng chung

DNS Domain name server Hệ thông phân giải tên miền

DTD Document Type Definition Định nghĩa loại tài liệu

nhiều class, siêu đữ liệu và các tài

nguyên khác

JDK Java Development Kit

JDK cho phép tao cac chuong

trinh Java cé thé duoc thuc thi va

chay boi JVM va JRE

JDWP Java Debug Wire Protocol dụng trong kiên trúc nên tảng gỡ Là giao thức giao tiếp được sử

lỗi của Java

JNDI Java Naming and Directory

Interface Giao dién dat tén va thu muc Java

JRE Java Runtime Environment

JRE khoi tao JVM va đảm bảo các

phụ thuộc có sẵn cho các chương

trình

JSP Java Scripting Preprocessor Bộ tiền xử lý lệnh Java

Trang 10

JSTL JSP Standard Tag Library Là thư viện thẻ chuẩn

trên máy tính National Vulnerability ta a C

là một địa chỉ web

WAE Web Application Firewall Tường lửa ứng dụng web

Là một file nén các file JAR, trang JavaServer, Java Servlets, lop

WAR Web Archive Java, tệp XML, thư viện the, trang

web tinh và các tài nguyên khác

để tạo thành một ứng dụng web

XML eXtensible Markup Language| Ng6n ngit danh dau mở rộng

Là một loại lỗ hồng bảo mật ở

XSS Cross-site scripting công cho phép kẻ tấn công lẫy đi phía máy dữ liệu người dùng khách Các cuộc tân

Trang 11

LỜI MỞ ĐẦU

Xã hội ngày càng phát triển kéo theo đó là các công nghệ hiện đại ngày càng phát triển không ngừng Internet cũng vậy, sự phát triển của internet đã kết nối mọi người

gân nhau hon bao gid hét Tai day, ban co thé lién lac, két ban va mua hang khap thé

giới Bên cạnh đó có rất nhiều phần mềm và các trang web giúp ích cho cuộc sống và

xã hội đều được lập trình và phát triển từ con người Đặc biệt các ứng dụng web chiếm

tỷ lệ cao trong số các ứng dụng được phát triên Do đó, người dùng đã và đang bị phụ

thuộc vào internet đề thực hiện công việc kinh doanh, liên lạc, giải trí

Có rất nhiều ngôn ngữ đề xây dựng nên một trang web nhưng theo Google thì Java

lại được tìm kiếm và quan tâm hơn nhiều Java đơn giản, mạnh mẽ, an toàn và sử dụng

theo hướng đối tượng cho nên lập trình viên thường sẽ lựa chọn Java làm ngôn ngữ để tạo ra các trang web từ đơn giản cho tới phức tạp Tuy nhiên đi kèm với sự phô biến và phát triển của nó cũng dẫn tới các nguy cơ mất an toàn thông tin Có nhiều nguyên nhân dẫn tới các nguy cơ nhưng thiếu kiến thức lập trình an toàn của lập trình viên là phổ biến hơn cả Rất khó để có thể bảo vệ một trang web với các kỹ thuật tắn công không xác định, do đó những người nghiên cứu bảo mật đã xuất hiện và khắc phục những vấn

đề này

Người nghiên cứu bảo mật là những người vượt ra khỏi những giới hạn trong việc

sử dụng các kỹ thuật khai thác đã biết như SQLi hay XSS từ đó phát hiện ra những mỗi

đe doạ mới, các kỹ thuật mới hay có thê là hướng tấn công mới đối với các ứng dụng web Hay đơn giản chỉ là đôi mới các kỹ thuật hiện có để giúp nó tốt hơn, giải quyết

được nhiều vẫn đề hơn Có thể hiểu đơn giản người nghiên cứu bảo mật cũng giống như

các nhà nghiên cứu y học Đối với một loại vi-rút mới như Covid-19, họ sẽ tiến hành

nghiên cứu và thử nghiệm liên tục, công việc này đòi hỏi rất nhiều tiền và thời gian Tuy nhiên, nhờ các phương pháp và kỹ thuật mới đã từng nghiên cứu trudc day ma gid đây họ đã đây nhanh được tốc độ phát triển vắc xin từ 10 năm rút ngăn xuống chỉ còn

1 năm Do đó ta thấy công việc nghiên cứu nói chung và người nghiên cứu nói riêng là rất quan trọng, nó được ưu hàng đầu trong rất nhiều lĩnh vực trong xã hội

Là một sinh viên ngành An toàn thông tin, với những kiến thức mà bản thân đã tìm

hiểu và nghiên cứu được, sau đó truyền đạt lại kinh nghiệm cho những người chưa biết

hoặc mới bắt đầu nghiên cứu trong lĩnh vực Java Web Application Do vay da quyét định làm đề tài đồ án là "Nghiên cứu và khai thác Java Web Application" Đồ án gồm

ba chương với các nội dung chính như sau: 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

Trang 12

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.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ư:

- 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’

| eray a division of Zoho Corp ea Apache eee”

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

Trang 13

Vị trí Lập Trình Viên Java Địa điểm - Lương khảo sát

(Dữ liệu mức lương được tổng hợp từ 147 mẫu việc làm đăng tuyển tại CareerBuilder )

Xem thêm tại http://vietnamsalary.careerbuilder.vn

Hình 1.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

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

Trang 14

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ả

1.2 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ê

1.3 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

Trang 15

- 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

1.4 Một số công nghệ Java Web phố biến

1.4.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

Trang 16

Http Request Request Object

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

Trang 17

Hình 1.6 Sơ đồ mối quan hệ giữa các thành phần với vòng đời của Servlet

Nguyên nhân tại sao chúng ta cần phải học Servlet, bởi vì nó chính là core của Java Web Rất nhiều khung phần mềm nhúng Servlet ở trong mã nguồn của mình Hiểu về Servlet giúp chúng ta hiểu thêm về cách hoạt động của nhiều khung phần mềm mới hiện nay

1.4.2 JSP

JSP là viết tắt của Java Server Pages là một công nghệ tiêu chuẩn Java cho phép viết các trang động, theo hướng dữ liệu cho các ứng dụng web Java JSP và Servlet là hai công nghệ thường hoạt động cùng nhau, đặc biệt là trong các ứng dụng web Java cũ Đây là một tính năng được phát triển bởi Sun microsystems đề cải tiến cho Servlets, che đậy tất cả các lỗ hồng của Servlets Servlet được sử dụng để chứa cả mã nguôn logic và

mã nguôn giao diện, nhưng nếu sử dụng JSP hai thành phần này được tách ra JSP đóng vai trò là View trong mô hình MVC va có phần mở rộng là jsp

Vòng đời của JSP cũng tương tự như vòng đời của servlet Vòng đời bao gồm các bước sau:

l6

Trang 18

JSP File

Translation phase

¥ Serviet File + Compilation phase Servlet Class

¥ Called once ispinit()

Ỳ Handle multiple request and ispService()

Ỷ Sends response

Called once | ispDestroy()

Hình 1.7 Sơ đô vòng đời JSP

- _ Chuyên đổi mã nguôn JSP sang servlet file (.java)

- _ Biên dịch file java sang bytemã nguồn

- Nap file class vào classloader(JRE)

- Container sé tao | instance cua Servlet

- Container goi phuong thức jspInit(), khởi tạo các kết nối cơ sở dữ liệu, mở file,

tạo bảng tra cứu,

- Khi nao trình duyệt yêu cầu một JSP và trang đã được nạp và khởi tạo thì sẽ gọi

phương thức JspServIce()

- _ Cuối cùng gọi jspDestroy() để huỷ đối với servlet, dọn đẹp, giải phóng kết nói hoặc đóng các file

Với JSP hoàn toàn có thể làm việc được với API, cơ sở đữ liệu Ngoài ra chúng

ta còn có thê sử dụng JSTL (JSP Standard Tag Library), đây là thư viện chuẩn cung cấp các thẻ hỗ trợ các tác vụ phô biến như lặp hay điều kiện, thẻ thao tác với XML hay thẻ SQL,

Đối với an toàn thông tin thì JSP hay được sử dụng trong web shell hoặc dựa vào

việc phân tích mã nguồn để tìm một số lỗ hồng bảo mật

1.4.3 Spring va Spring boot

Spring là khung phần mềm phát triển ứng dụng phô biến nhất dành cho Java doanh nghiệp Ban đầu nó được viết bởi Rod Johnson và lần đầu tiên được phát hành theo giấy phép Apache 2.0 vào tháng 6 năm 2003 Spring có kích thước khá nhẹ, phiên bản cơ bản của Spring khung phần mềm có kích thước khoảng 2MB

17

Trang 19

Spring là một nền tảng mã nguồn mở, một giải pháp gọn nhẹ dành cho Java doanh nghiệp Với Spring các nhà phát triển có thể tạo ra các mã có hiệu suất cao, dễ kiểm thử

và có thể sử dụng lại được

Các tính năng cốt lõi của Spring Framework có thể được sử dụng trong việc phát triên bất kỳ ứng dụng Java nào Bên cạnh đó, phần mở rộng được sử dụng để xây dựng các ứng dụng web trên nền tảng Java EE Spring là một khung phần mềm được ra đời

để giúp các nhà phát triển có thể xây dựng hệ thống và chạy ứng dụng trên JVM một cách thuận tiện, đơn giản và nhanh chóng Đây là một mã nguồn mở được phát triển và rất nhiều người sử dụng

© Spring Framework Runtime

Data Access/Integration Web

Hình 1.8 Téng quan vé Spring Framework

Trên thực tế, Spring là tập hợp gồm rất nhiều các dự án nhỏ khác nhau như: Spring MVC (sử dụng để xây dựng các ứng dụng trên nền tảng web), Spring Data, Spring

Boot,

Đề phát triển một ứng dụng web cơ bản sử dụng Spring, bạn cần trải qua ít nhất 5 công đoạn sau:

- _ Tạo một dự án sử dụng Maven/Gradle với các gói phụ thuộc cần thiết

- Tao mét tap tin web dudi (.xml) dé khai báo DispatcherServlet (thuộc Spring MVC)

- Mé6t tap tin cd cau hinh ctia Spring MVC

- _ Trả về một lớp Controller khi có yêu cầu đến

18

Trang 20

- _ Cuối cùng là phải có một máy chủ web phục vụ triên khai ứng dụng lên chạy

Đề khởi tạo một dự án Spring thông thường tốn rất nhiều thời gian và công, đôi khi

còn quá khó hiểu cho người mới bắt đầu làm quen Lập trình viên sẽ phải khai báo các

cầu hình, các gói phụ thuộc, cực kỳ phức tạp Tuy nhiên sau khi Spring Boot ra đời, việc tạo ra các ứng dụng này sẽ được thực hiện một cách đơn giản, nhanh chóng hơn rất

nhiều từ đó giúp lập trình viên có nhiều thời gian hơn để lập trung vào logic của sản

phẩm Vậy Spring Boot là gì ?

Spring Boot là một khung phần mềm lớn, có nhiều tính năng hữu ích và nó có thể giúp lập trình viên giải quyết rất nhiều vẫn đề một cách nhanh chong Spring Boot da khắc phục được những nhược điểm của Spring Khi sử dụng Spring Boot, rất nhiều thứ

được cải tiến, bỏ qua nhiều không cần thiết và đặc biệt hỗ trợ lập trình viên như:

- Auto config: tu dong cầu hình, lập trình viên cần viết mã nguồn và tiễn hành chạy

hệ thống là được

- _ Dựa trên các Annotation đề tạo lập cac bean thay vi XML

- Server Tomcat cé thé duoc nhung ngay trong file JAR tao ra va cé thé chay 6 bat

kì đâu mà Java chạy được

Trang 21

£ }

` ee

Hình 1.10 Cách hiểu đơn giản khác giữa Spring và Spring Boot

Kết luận cuối cùng là đối với những người bắt đầu hay người làm an toàn thông tin

thì hãy bắt đầu với Spring Boot Nó đã đơn giản quá trình cài đặt và cấu hình, từ đó tiết

kiệm thời gian và công sức, nhưng vẫn có thê làm được sản phâm thực tế Tốt nhất thì chúng ta nên viết một trang web mẫu có các chức năng cơ bản như thêm sửa xoá đề hiểu

cơ bản trước, hiểu cách mà nó điều hướng, câu trúc file và thư mục, cách cẫu hình gỡ lỗi và cuối cùng là chạy được thực tế trên một máy chủ web Chúng ta không cần phải

hiểu quá sâu như lập trình viên nhưng cũng cần biết cơ bản đề việc gỡ lỗi và nghiên cứu

về sau được thuận lợi hơn

(one time) digest struts-config.xml

HTTP Request fees errr -4 Logic]

1.2 create 2.1 (can) use

Trang 22

Struts

HttpServletResponse

Key:

) Serviet Filters "Struts Core | Interceptors User created

Hinh 1.12 Kién truic Struts 2

Hiện nay thì vẫn còn khá nhiều các trang web sử dụng Struts, chủ yếu là Struts 2

Ví dụ như các trang web nội bộ hoặc các sản phẩm doanh nghiệp cũ Ngoài ra thì 1 sé

sản phẩm lớn vẫn sử dụng như: Confluence,

1.4.5 JavaServer Faces (JSF)

JavaServer Faces (JSF) 1a m6t nén tang web MVC JSF tap trung vào việc đơn giản hóa xây dựng giao diện người dùng (U]) với hơn 100 thé cho tng dung web tt do no giúp cho việc tương tác giữa view và confroller đơn giản hơn Với JSE có đặc trưng công nghệ Facelets, đây là mã nguồn mở về hệ thống web mẫu (Web template system)

Nó là công nghệ xử lý view mặc định cho JSF, yêu cầu đầu vào XML hợp lệ để làm việc Facelets hỗ trợ tat cả các thành phần giao diện của JSF và tập trung hoàn toàn vào xây dựng view cho ứng dụng JSE

21

Trang 23

Model, Helper

Classes JSF Application

Hình L.13 Cấu trúc JSF

Công nghệ JSF có rất nhiều giao diện của khung phần mềm:

- _ Mojarra JavaServer Faces (cung cấp bởi Oracle)

- _ PrimeFaces (cung cấp bởi PrimeTek — một công ty phần mềm Brazil)

- _ RichFaces (cung cấp bởi JBOSS — Redhat)

- MyFaces Trinidad (cung cap bởi Apache Software Foundation)

- OmniFaces (duoc phát triển chính bởi Arijan Tijims, Bauke Scholtz, Jan Beernink)

- ICEfaces (phat trién boi ICEsoft)

Các giao diện của khung phần mềm giúp mở rộng khả năng AJAX của JSF, giúp cho lập trình viên có thể sử dụng AJAX mà không cần phải học nó Ngoài ra thì các khung phần mềm này còn có các tính năng khác giúp nâng cao việc phát triển các ứng dụng doanh nghiệp

1.5 Kỹ thuật và kinh nghiệm trong cài đặt và gỡ lỗi

1.5.1 Cai dat

Đối với việc cài đặt, chúng ta nên làm như sau:

- _ Bước 1: Đọc sơ qua hướng dẫn cài đặt của hãng hoặc tổ chức để hình dung quá

trình cài đặt

- _ Bước 2: Lên Youtube tìm kiếm video cài đặt và làm theo chính xác các bước

trong video Nếu làm theo các bước này thì gần như là việc cài đặt sẽ thành công Còn nếu trường hợp không tìm thấy video hướng dẫn nào thì chúng ta sẽ tìm các

22

Trang 24

bài viêt của những nhà nghiên cứu trước đã từng cài đặt, hoặc người quen đã

từng cài đặt,

- _ Bước 3: Mỗi khi cài xong một component nào đó thì cần snapshot lại Ví dụ cài

xong may chu Linux thi tao anh chup lai(snapshot),

Làm như này sẽ không mất thời gian và công sức đi sửa một số lỗi do không đúng

phiên bản hoặc cài đặt sai thứ tự hoặc cầu hình sai ở đâu đó Phần cài đặt không khó và rất nhiều người làm được Cái khó là phải tải được tệp cài đặt bởi vì một số hãng không

công khai hoặc phải là những phần mềm doanh nghiệp cần trả phí

15.2 Gỡ lỗi

Nếu chúng ta chỉ đọc mã nguồn mà không gỡ lỗi thì rất khó để tìm lỗi Ta chỉ nên làm thê nếu đó là một ứng dụng đơn giản, ít chức năng Còn đối với những dự án lớn và

phức tạp thì bắt buộc phải gỡ lỗi Bởi vì sau đó sẽ không thê lần theo mã nguồn được

nữa, mã nguôn sẽ gọi các interface và lớp abstract và sẽ không biết nó được triên khai ở

đâu Hoặc có thể chức năng sẽ gọi một loạt rất nhiều các hàm, ta sẽ không thé tim tung tép đề đọc được Do đó việc gỡ lỗi là rất quan trọng

Trước khi bắt đầu gỡ lỗi, việc cần làm đầu tiên là cần lấy được tất cả tệp jar của ứng

dụng web, sau đó thêm tất cả vào một dự án IntelliJ IDEA và thiết lập gỡ lỗi từ xa Ở

một số sản phâm, ứng dụng thì việc bật gỡ lỗi ở phía máy chủ khá dễ, chỉ cần vào ứng

dụng, có thé la bang diéu khién hoac giao dién va thém tham số JDWP và khởi động lại

là xong Một số khác thì lại cần kỹ năng phân tích tiến trình và tìm kiếm tệp chạy ứng dụng đó Sau đó thêm trực tiếp tham số JDWP vào chương trình khởi động này Cuối

cùng khởi động lại đề thực thi

Công cụ sử dụng để gỡ lỗi thì thường sẽ là Intellij IDEA Công cụ này hỗ trợ đầy

đủ các nền tảng và thư viện của Java Web, các loại máy chủ, Công cụ còn có một SỐ

tinh nang nhu “Find Usages”, cơ bản tính năng này sẽ tìm các vị trí sử dụng phương

thức mà ta chỉ định, không những thế còn hiền thị lớp kề thừa, lớp cha, Bên cạnh đó

nó đòi hỏi mã nguồn phải ở dạng mã nguôn, nếu ở dạng đã biên dịch thì không sử dụng được tính năng này Và tất nhiên sẽ có tính năng Expression, giúp truy vấn trong quá trình gỡ lỗi đề biết giá trị các biến, các tham só, Ngoài ra thì còn rất nhiều các tính năng hữu ích, do đó công cụ này được ưa chuộng bởi các nhà nghiên cứu

1.6 Một số hướng phát triỀn và các công cụ hỗ trợ

Hiện nay có rất nhiều các cách đề tìm lỗ hồng trong các phần mềm, ta sẽ chia làm hai loại chính: thủ công và tự động

- _ Thủ công: phụ thuộc rất nhiều vào khả năng và kinh nghiệm của người nghiên cứu

- - Tự động: sử dụng các công cụ dé tu dong hoa qua trinh tim kiém thi don gian

hơn nhiều hơn nữa còn giúp tiết kiệm sức lực, thời gian Tuy nhiên thường các

23

Trang 25

công cụ sẽ chỉ tìm kiêm được các lỗ hồng đã biết, không tìm được lỗ hồng liên

quan tới logIc,

Một số công cụ điển hình như: CodeQL, Gadget Inspector,

Do vậy việc năm bắt được cả hai phương pháp sẽ giúp việc nghiên cứu tốt hơn Nếu trong tương lai có thể áp dụng các công nghệ học máy hay trí tuệ nhân tạo vào trong các công cụ thì mới có thể giảm bớt việc tìm kiếm thủ công

1.6.1 Audit

Đây là hướng đi cơ bản và cũng là kiêu cô điển mà mỗi nha nghiên cứu nào cũng cần thành thạo Trước khi đọc mã nguồn và gỡ lỗi thì cần phải tìm hiểu về ứng dụng đó trước, tìm hiểu càng kỹ càng tốt Sau đó thì sẽ sử dụng các chức năng cơ bản của ứng dụng, sử dụng các ứng dụng chặn bắt yêu cầu đề xem nó như thế nào Dò xem có chức năng nào đặc biệt không, xác thực người dùng ra sao, dùng nên tảng hay khung phan mém nào, và ghi chú lại Nếu nó được viết bằng một ngôn ngữ mà mình chưa từng biết thì nên dành thời gian thực hành mã nguôn lại một ứng dụng với ngôn ngữ đó để

hiểu xem nó hoạt động như nào Do vậy van đề đọc hiểu mã nguồn và tài liệu khá là

quan trọng ở trong lĩnh vực này, đặc biệt là những chỗ khó, hệ thống càng phức tạp thì

càng khó đề hiểu hơn

Khi bạn đã biết cách đọc mã nguồn và gỡ lỗi một chức năng nào đó của ứng dụng Tiếp theo là lúc đi tìm lỗ hồng mới Với những phần mềm doanh nghiệp hoặc các phần

mềm được viết bởi các tô chức lớn, ta sẽ không biết phải bắt đầu ở đâu và như thế nào

Có thê nói rằng ta sẽ không thể đọc được hết mã nguồn của nó và tìm được hết lỗi của

nó vì nó đã được viết bởi rất rất nhiều người trong vòng hàng chục năm Vì vậy phải

chọn ra một hướng nào đó và thực hiện Dưới đây là một sé hướng:

- _ Tìm từ điểm cuối về điểm đầu, tức là tìm từ nơi có các phương thức gây ra lỗ hồng bảo mật sau đó truy ngược về điểm mà dữ liệu người dùng nhập vào

- Doc va phân tích từng chức năng, có thể lựa chọn theo sở thích hay theo kinh

nghiệm Ví dụ có người thích tìm các lỗ hỗng ở phía máy chủ, có người lại thích tìm lỗ hồng xảy ra ở phía máy khách, có người lại thích khai thác ở các chức năng đơn giản,

- _ Đọc và phân tích từng tệp mã nguồn

- _ Thay vì tìm kiễm ở ứng dụng thì tìm kiếm lỗ hồng trong các thành phần cốt lõi hay khung phần mềm, tập trung vào các lỗi nghiêm trọng thay vì chức năng nghiệp vụ của ứng dụng

- _ Tìm kiếm lỗ hồng ở các thư viện con của ứng dụng

- _ Dựa vào các lỗ hồng mà người khác đã tìm ra và tiếp tục tìm ở cùng mục tiêu, hoặc có thể tìm cách đề vượt qua bản vá của nhà phát triển,

1.6.2 CodeQL

24

Trang 26

CodeQL sử dụng một ngôn ngữ gọi là QL, và ngôn ngữ này chính là đặc trưng của

nó, giống như SQL với các hệ quản trị cơ sở đữ liệu như MySQL, Oracle SQL Các truy vấn được viết băng QL sẽ thực hiện tìm kiếm các điểm khởi đầu (source) và điểm kết thúc (sink) của đữ liệu, hoặc có thể tìm kiếm trực tiếp một vài lỗ hồng đơn giản CodeQL xử lý mã nguồn giống như đữ liệu, cho phép tìm ra các lỗ hồng tiềm ân với

độ tin cậy và tỉ lệ chính xác cao hơn các công cụ phân tích tĩnh trước đây Hiện nay thì

nó đã có rất nhiều các truy vấn được viết sẵn, chúng ta chỉ cần tải vào mã nguồn của mình và sử dụng thay vì phải viết những dòng xử lý phức tạp, nó khá giống với việc sử

dụng các thư viện thuật toan trong C/C++ Với CodeQL sẽ thực hiện 3 bước chính:

- _ Tạo cơ sở dữ liệu CodeQL đại diện cho mã nguồn

- - Chạy các truy van CodeQL trong cơ sở dữ liệu đó và xác định các van dé

- _ Kết quả truy vẫn được hiển thị dưới dạng cảnh báo

Với những lợi ích mà CodeQL đem lại thì vẫn còn một vài nhược điểm:

- _ Hiện tại CodeQL chỉ hỗ trợ 7 ngôn ngữ lập trình, ngôn ngữ được dùng nhiều

như PHP thì vẫn chưa có

- _ Để truy vẫn QL thì đòi hỏi phải xây dựng thành công cơ sở dữ liệu đại diện cho

mã nguôn, việc này rất tốn thời gian và gặp rất nhiều lỗi Đôi khi mã nguôn chỉ

là dịch ngược ra nên không thể xây dựng được

- _ Đôi khi CodeQL tìm không thây nhưng chúng ta kiểm tra, phân tích thủ công thì

lại ra Có thể CodeQL đã hiểu sai logic hoặc chúng ta định nghĩa thiéu,

1.6.3 Gadget Inspector

Công cụ này hỗ trợ việc tìm kiếm các lỗ hồng Deserialization Đây là một lỗ hỗng

được đánh giá mức độ khó và rất khó, nó đã năm trong top 10 OWASP từ khá lâu Với

lỗ hồng này việc cần làm là phải đi tìm các gadget chain Đề nó có thé coi là một lễ hồng

thì cần phải quan tâm tới các phương thức mà chúng ta có thể kiểm soát được tham số truyền vào Công cụ Gadget Inspector [ L] sẽ phân tích mã nguồn dưới dạng mã nhị phân,

sử dụng các thuật toán như DFS, BFS, duyệt cây, đề tự động hoá việc tìm kiếm Và

lưu ý răng các gadget chain mà công cụ tìm thấy chưa chắc có thể sử dụng để khai thác trong một số trường hợp, nêu công cụ không tìm thấy kết quả thì không có nghĩa là ứng

dung an toan,

1.7 Tổng quan về các lỗ hong trong Java Web Application

Trong lĩnh vực an toàn thông tin nói chung, khi muốn tìm hiểu kiến thức về các lỗ hồng, chúng ta thường bắt đầu với top 10 OWASP [2] Đây là một danh sách nhóm các

lỗ hổng phô biến nhất và nó được tổng hợp mỗi 4 năm Danh sách này dựa rất nhiều nguồn đữ liệu và khảo sát từ các công ty chuyên về bảo mật ứng dụng và khá nhiều cá nhân có chuyên môn trong ngành Dữ liệu bao gồm các lỗ hồng được thu thập từ hàng trăm các tổ chức và hơn 100.000 ứng dung va API trong thế giới thực

25

Trang 27

2017 2021

A01:2017-Injection A01:2021-Broken Access Control

A02:2017-Broken Authentication A02:2021-Cryptographic Failures

A03:2017-Sensitive Data Exposure A03:2021-Injection

_(N@w) A04:2021-Insecure Design

=“ A05:2021-Security Misconfiguration

A06:2021-Vulnerable and Outdated Components A07:2021-Identification and Authentication Failures o-oo - {New) A08:2021-Software and Data Integrity Failures

A09:2017-Using Components with Known Vulnerabilities er A09:2021-Security Logging and Monitoring Failures* A10:2017-Insufficient Logging & Monitoring (New) A10:2021-Server-Side Request Forgery (SSRF)*

* From the Survey

Hinh 1.14 OWASP Top 10

A05:2017-Broken Access Control

của các lỗ hồng theo điểm và tổng hợp từ tệp dữ liệu của kho lưu trữ dữ liệu lỗ hồng

quốc gia (NVD) [3], các lỗ hổng được tìm thấy bao gồm cả lỗ hồng được và không được gán CVE

[1] CWE-787 ||Out-of-bounds Write 65.93

[2] CWE-79 |\Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting’) 46.84 [3] CWE-125 ||Out-of-bounds Read 24.9 [4] CWE-20 |Improper Input Validation 20.47 [5] CWE-78 |\Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')|} 19.55 [6] CWE-89 |lImproper Neutralization of Special Elements used in an SQL Command (‘SQL Injection’) 19.54 [71 CWE-416 Í|Use After Free 16.83 [8] CWE-22 ||Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal’) 14.69 [9] CWE-352 ||Cross-Site Request Forgery (CSRF) 14.46 [10] | CWE-434 ||Unrestricted Upload of File with Dangerous Type 8.45 [11] || CWE-306 ||Missing Authentication for Critical Function 7.93 [12] || CWE-190 ||Integer Overflow or Wraparound 7.12

[13] || CWE-502 ||Deserialization of Untrusted Data 6.71 [14] || CWE-287 ||Improper Authentication 6.58

[15] || CWE-476 |/NULL Pointer Dereference 6.54 [16] || CWE-798 ||Use of Hard-coded Credentials 6.27

[17] || CWE-119 ||Improper Restriction of Operations within the Bounds of a Memory Buffer 5.84 [18] | CWE-862 ||Missing Authorization 5.47

[19] || CWE-276 ||Incorrect Default Permissions 5.09 [20] | CWE-200 ||Exposure of Sensitive Information to an Unauthorized Actor 4.74 [21] || CWE-522 ||Insufficiently Protected Credentials 4.21 [22] || CWE-732 ||Incorrect Permission Assignment for Critical Resource 4.2

[23] || CWE-611 |Improper Restriction of XML External Entity Reference 4.02

[24] || CWE-918 |/Server-Side Request Forgery (SSRF) 3.78 [25] CWE-77 ||Improper Neutralization of Special Elements used in a Command (‘Command Injection’) 3.58

Hinh 1.15 Danh sach CWE Top 25

26

Trang 28

Rank CWE NVD Count Avg CVSS Overall Score

- 783 7.39 14.69

- 741 7.60 14.46 CWE-434 381 8.36 8.45

~ 381 7.98 7.93

- 368 7.56 7.12 CWE-502 280 8.87 6.71

20 - 330 6.16 4.74

21 - 232 7.23 4.21 CWE-732 249 6.87 4.20

23 - 206 7.62 4.02

24 - 207 7.26 3.78 [25] || CWE-77 164 8.28 3.58

Theo đó thì các lỗ hỗng sẽ phân tích chỉ tính riêng với Java Web Application là:

- _ Deserialization (CWE-502 số lượng 280)

- Xml External Entities (CWE-611 với số lượng 206)

- _ Server-side Request Forgery (CWE-918 với số lượng 207)

- Path Traversal (CWE-22 với số lượng 783)

- JNDI Injection (Truéc day khong phô biến nhưng hiện tại đang dần phổ biến trở lại với nhiều CVE của các vendor lớn và gây ra nhiều ảnh hưởng)

1.8 Kết chương

Chương I đã trình bày những khái niệm cơ bản và kiến trúc trong Java, nêu ra những

kinh nghiệm thực tẾ, những công cụ hỗ trợ mà các nhà nghiên cứu thường xuyên sử

dụng, bên cạnh đó còn nêu tổng quan về các lỗ hồng trong Java Web Application Chương tiếp theo sẽ đi vào cách khai thác và nghiên cứu các lỗ hồng đặc trưng

27

Trang 29

CHUONG 2: PHAN TICH MOT SO LO HONG DAC TRUNG

Nội dung của chương 2 bao gôm phân tích và khai thác một số lỗ hồng đặc trưng

và phân tích về lỗ hồng mới xuất hiện gân đây CVE-2021-44228

2.1 Đặt vẫn đề

Như đã đề cập ở phần trước, chúng ta sẽ không thực hiện phân tích toàn bộ mà chỉ phân tích một vài lỗ hồng phô biến Các lỗ hỗng này bao quát mức độ từ dễ tới khó và

nó thường gặp trong các dự án cũng như các sản phẩm thực tế

Trước đây, mỗi lần muốn tìm hiểu, nghiên cứu một lỗ hồng nào đó thì phải tìm kiếm rất nhiều trang web, nhiều nguồn tài liệu khác nhau bởi vì nếu chỉ đọc một trang

hoặc một nguồn thì kiến thức sẽ luôn bị thiếu Đặc biệt là hầu hết kiến thức chưa có ở

tiếng Việt, hoặc nếu có thì những tài liệu đó khá khó hiểu và mới chỉ phân tích ở môi

trường hộp đen do vậy nên chưa giúp ích được nhiều cho người đọc cần tìm hiểu ở hộp trăng hay hộp xám

Ví dụ:

- - Khi tìm kiếm về lỗ hồng Deserialization trong Java Khi tìm kiễm Google với

từ khoá “lỗ hồng deserialization java” hay “lỗ hồng insecure deserialization

trong java” đối với ngôn ngữ tiếng Việt thì chỉ có một bài ở diễn đàn Viblo [4],

nội dung chỉ nói về khái niệm và phân tích một bài CTE Đối với tiếng Anh thì

có khá nhiều, với nguồn tiêu biêu như OWASP [5] thì có đủ cả hộp đen và hộp

trăng, tuy nhiên thì còn hơi sơ sài và chưa phân loại rõ Còn với Portswigger [6] thì cũng mới chỉ dừng ở khái niệm, chỉ phân tích ở phía hộp đen

-_ Còn về lỗ hỗng khác như JNDI Injection trong Log41 thì không có bài phân tích chuyên sâu nào băng tiếng Việt, tiếng Anh thì có một số bài như bài nghiên cứu

ở Veracode [7] hoặc ở Blackhat [8] tuy nhiên những bài viết này vẫn khó hiểu

VớI người mới, chưa có ví dụ tan cong cu thể và các công cụ hỗ trợ

Do vậy, một tài liệu diễn giải các lỗ hồng theo cách dễ tiếp cận sẽ được thê hiện

trong đồ án Tài liệu này sẽ bồ sung thêm các hàm có thể gây ra lỗi và các công cụ đã tìm hiểu và tham khảo được từ các chuyên gia lâu năm Việc hiểu rõ bản chất của các

lỗ hồng sẽ khiến chúng ta đào sâu được van đề hơn, mở rộng được lỗi suy nghĩ, loại bỏ

Trang 30

Serialization (qua trinh ngugc lai thi goi la Deserialization hay Unserialization) don giản là I tính năng trong Java Cho phép chuyền đổi đối tượng thành 1 dạng đặc biệt

mà có thể di chuyền hoặc lưu trữ

Lô hông Deserialization xuât hiện khi giải tuân tự hoá dữ liệu mà người dùng có

thê kiêm soát Hâu hệt các cuộc tân công deserialization sẽ dựa vào các thư viện, gói phụ thuộc tôn tại ở trong trang web

Trong Java thì dữ liệu tuần tự hoá có dạng nhị phân Đây là dạng khó khai thác, tuy nhiên nhờ thành quả của quá trình nghiên thì giờ đây hoàn toàn có thể có thể dễ dàng

nhận biết được dữ liệu đã bị tuần tự hoá hay chưa khi xem xét cả ở blackbox bởi vì dữ liệu đã tuần tự hoá nó luôn bắt đầu với cùng các bytes, bắt đầu với `AC ED 00 05` hoặc

`AÁC ED' hay `0xAC 0xED` ở dạng thập lục phân và `rO0` ở dạng base64 => ching ta gọi những bytes này là “số ma thuật” Ngoài ra còn có thể xác định thông qua loại nội dung ở phần tiêu đề trả về nếu là “application/x-java-serialized-object” Một số ứng dụng lưu dữ liệu đã tuần tự hoá ở cookies, tiêu đề hay phần thân yêu cầu

Ngoài ra có I sô cách kiêm tra xem deserialization thành công hay tôn tại:

e _ Sử dụng mã khai thác tìm kiếm DNS để kiểm tra xem có kết nối DNS ra ngoài không

e Dua vao ngoại lệ, có thê từ kết quả lỗi trả về Ví dụ: Ngoại lệ ClassNotFound

xuất hiện khi lớp này không năm trong classpath

Đề đơn giản hoá thì lấy sẽ ví dụ là một trò chơi quen thuộc là Pokemon Chúng ta

sẽ thường sử dụng hướng đối tượng để quản lý các đối tượng ở trong trò chơi Giả sử cần làm lại trò chơi này, nếu muốn viết chức năng lưu game sau khi chơi thì sẽ phải làm

các bước đó là phải chọn đôi tượng cần lưu, thực hiện tuần tự hoá Còn ngược lại khi

muốn chơi tiếp thì chúng ta sẽ giải tuần tự hoá và tải đối tượng trở lại

Khi muốn lưu game lại hay nói cách khác là tuần tự hoá Đây là quá trình chuyển

hoá trạng thái của một đối tượng trở thành một chuỗi dữ liệu mà ta có thể lưu trữ hoặc

Trang 31

Chơi tiếp hay giải tuần tự hoá là quá trình ngược lại, từ chuỗi đữ liệu nhận được, tái tạo lại trạng thái của đối tượng

class Trainer { name,

Hinh 2.2 Minh hoa qua trinh deserialization

Mot so khai niém trong Deserialization:

Gadget: Don gian là những mảnh ghép nhỏ để tạo thành hình lớn Trong Java thì nó là các đoạn mã nguôn tổn tại trong ứng dụng mà giúp ích cho việc tạo thành mã khai thác VD: Xếp lego Rã súng thành mảnh nhỏ > ghép lại khâu súng

Gadget Chain: được xây dựng lên từ nhiều gadget VD: Từ các mảnh nhỏ lego

=> tao ra | toa nhà lớn từ lego

Source: 1a diém bat dau cla gadget chain, la noi ma khi deserialize sé goi method readObject()

Sink: La diém cui gadget chain, là nhưng phương thức nếu mà nhận các dau

vào độc hại sẽ dẫn tới lỗ hồng bảo mật Thường sink sẽ có các phương thức hữu ich dé đọc tệp, ghi tệp hay RCE, hoặc có thê SQLi

Thường thì các nhà nghiên cứu sẽ đi ngược từ sink về source đê tìm lô hông Không như các loại khai thác khác, gadget chain không phải được lấy từ kẻ tấn công, mà nó đã tôn tại sẵn ở trong trang web Thứ duy nhất kẻ tấn công phải điều khiến đó là đữ liệu truyền vào gadget chain Và tất nhiên lỗ hồng này nếu không có được mã nguồn, thi rat

rất khó có thể khai thác thành công bởi vì không biết luồng hoạt động thực sự của

chương trình, hay là các thông tin thư viện của ứng dụng, phiên bản,

Trang 32

- URLDNS: HashMap + URL

- Commons Collections | : AnnotationInvocationHandler + Transformer

- Commons Collections 2 : PriorityQueue + Transformer/TemplatesImpl

- Commons Collections 3 : AnnotationInvocationHandler + TemplatesImpl

- Commons Collections 4 : PriorityQueue/TreeBag + TemplatesImpl

- Commons Collections 5 : BadAttributeValueExpException + Transformer

- Commons Collections 6 : HashMap/HashSet + Transformer

- Commons Collections 7 : Hashtable + Transformer

- Commons Beanutils : PriorityQueue + TemplatesImp!l

- Spring! : AnnotationInvocationHandler + TemplatesImpl

- Spring2 : AnnotationInvocationHandler + TemplatesImpl

- Hibernatel : HashMap + TemplatesImpl

- Hibernate2 : HashMap + JdbcRowSetImpl

- Groovy! : AnnotationInvocationHandler + MethodClosure

- FileUpload1 : DiskFileltem + DeferredFileOutputStream

- Wicket! : DiskFileltem + DeferredFileOutputStream

- MozillaRhinol : BadAttributeValueExpException + TemplatesImpl

31

Trang 33

- MozillaRhino2 : NativeJavaObject + TemplatesImpl

- Myfacesl : HashMap + ValueExpression

- Myfaces2 : HashMap + ValueExpression

- ROME] : HashMap + TemplatesImpl

- BeanShelll : PriorityQueue + BshMethod

- C3P0: PoolBackedDataSourceBase + URLClassLoader

- Clojurel : HashMap + Compiler

- Clickl : PriorityQueue + TemplatesImpl

- Vaadin1 : BadAttributeValueExpException + TemplatesImpl

- AspectJWeaver : HashSet + SimpleCache$StorableCachingMap

- Jython : PriorityQueue + PyBytem4 nguồn

- JavassistWeld : InterceptorMethodHandler + TemplatesImpl

- JBossInterceptors : InterceptorMethodHandler + TemplatesImpl

2.2.1.4 Công cụ

Trong phân này sẽ chỉ liệt kê các công cụ mà hầu hết các chuyên gia thường dùng nhât Bên cạnh đó thì các nhà nghiên cứu họ sẽ thường chỉnh sửa và tôi ưu lại các công

cụ này đê tạo ra một công cụ của riêng bản thân, phục vụ một sô mục đích nhât định

Gadget Inspector: Céng cu phan tich byte cla ma ngu6n dé tim gadget chains Ysoserial: Giới hạn các mắt xích ở các thư viện cụ thể và tập trung ở JDK ObJectlnputStream Đây được coI như một bộ sưu tập các gadget chan và mã

Trước khi tìm hiểu về lỗ hồng này, cần phải biết và năm rõ XML, thuc thé XML

được hiểu đơn giản là ngôn ngữ đánh dấu mở rộng Đây là 1 công cụ được phát triển để lưu trữ và vận chuyên dữ liệu Nó dùng đê câu trúc, lưu trữ và trong trao đôi dữ liệu

32

Ngày đăng: 11/06/2024, 23:14

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN