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 3NHAN 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 4NHAN 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 5MỤ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 62 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 7DANH 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 8Hinh 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 9DANH 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 10JSTL 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 11LỜ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 12CHUONG 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 13Vị 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 14Application 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 16Http 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 19Spring 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 22Struts
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 23Model, 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 24bà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 25cô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 26CodeQL 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 272017 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 28Rank 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 29CHUONG 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 30Serialization (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 31Chơ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