An toàn phần mềm
Lỗi phần mềm
Giáo viên hướng dẫn: TS. Trần Đức Khánh
Học viên thực hiện :
1. Trương Thảo
Nguyên
2. Vũ Đình Phú
3. Nguyễn Hồng Tâm
4. Đỗ Ngọc Phục
5. Lê Gia Vĩnh
Tài liệu tham khảo
1. Bài giảng An toàn phần mềm – lỗi phần mềm
TS. Trần Đức Khánh, Đại học Bách Khoa Hà Nội
2. Security in Computing, Fourth Edition.
Charles P. Pfleeger, Shari Lawrence Pfleeger
3. Đồ án “Lỗi tràn bộ đệm trên Windows”
Lương Khánh Hoàng, lớp Tin5 – K48 Bách Khoa Hà Nội
4. Websites wikipedia, security focus, teach target, etc
07/27/22
An toàn phần mềm
2
Nội dung
07/27/22
1
Tổng quan về an toàn phần mềm
2
Một số lỗi phần mềm thường gặp
3
Các biện pháp an toàn
4
Tổng kết
An toàn phần mềm
3
1. Tổng quan về an tồn phần mềm
Bí mật (Confidentiability): tài sản
chỉ được truy nhập bởi những người
có quyền
Tồn vẹn (Intergrity): tài sản chỉ
được tạo/xóa/sửa đổi bởi những
người có quyền
Sẵn dùng (Availability): tài sản sẵn
sàng để đáp ứng sử dụng cho những
người có quyền
07/27/22
Tổng quan về an tồn phần mềm
4
1. Tổng quan về an tồn phần mềm
Lỗi phần mềm
Có các lỗi phần mềm thơng thường
Có các lỗi về an toàn phần mềm ( kẻ xấu lợi dụng
để vi phạm tính Bí mật – Tồn vẹn – Sẵn dùng)
Code injection
07/27/22
Ping of death
Tổng quan về an toàn phần mềm
WebDav
5
1. Tổng quan về an toàn phần mềm
Lỗi tràn bộ đệm ( buffer over flow)
Lỗi không đầy đủ ( Incomplete mediation)
Lỗi đồng bộ (Synchronization)
07/27/22
2. Một số lỗi an toàn thường gặp
6
Nội dung
07/27/22
1
Tổng quan về an toàn phần mềm
2
Một số lỗi phần mềm thường gặp
3
Các biện pháp an toàn
4
Tổng kết
An toàn phần mềm
7
2.1. Lỗi tràn bộ đệm
Hàm gets đọc nội dung từ stdin ghi vào buf
Nếu đầu vào lớn hơn 80 byte, hàm gets sẽ ghi đè lên
bộ nhớ vượt quá bộ nhớ buf
Đây là lỗi phần mềm – lỗi tràn bộ đệm.
07/27/22
2. Một số lỗi phần mềm thường gặp
8
2.1. Lỗi tràn bộ đệm
Lỗi tràn bộ đệm (Buffer over flow)
Chèn mã lệnh và thực hiện mã lệnh
Phạm vi ảnh hưởng lớn (phụ thuộc vào quyền của
người dùng đăng nhập vào hệ thống và mã thực thi xấu)
Sep 05 2008: Google Chrome 0.2.149.27 'SaveAs' Function Buffer Overflow
Vulnerability
Discoverer: Le Duc Anh - SVRT – Bkis
Description : The vulnerability is caused due to a boundary error when handling
the "SaveAs" function. On saving a malicious page with an overly long title
(<title> tag in HTML), the program causes a stack-based overflow
and makes it possible for attackers to execute arbitrary code on
users' systems.
Nguồn: />07/27/22
2. Một số lỗi phần mềm thường gặp
9
2.1. Lỗi tràn bộ đệm
0x00…0
fn( param1,param2) đuợc gọi
Stack
Buffer
0x0012D000
Lưu lại SP
Nội dung file exe
Heap
Kernel
0xFF…F
07/27/22
IP
RET: Địa chỉ trả
về (IP)
Stack frame của
hàm gọi
5. fn(…)
6. fn1(…)
Nội dung hàm fn
2. Một số lỗi phần mềm thường gặp
10
2.1. Lỗi tràn bộ đệm
Buf quá lớn, SP và RET sẽ
bị ghi đè
Có thể khéo léo ghi đè địa
chỉ trả về RET là địa chỉ của
đoạn mã độc
Sau khi hàm fn thực hiện
xong, sẽ thực thi tiếp đoạn mã
độc
07/27/22
Buffer
Lưu
lại SP
……..
RET:
Địa chỉ
Địacủa
chỉmã
trả
vềđộc
(IP)
Stack frame của
hàm gọi
2. Một số lỗi phần mềm thường gặp
11
2.1. Lỗi tràn bộ đệm
Hình thức khai thác
Ghi đè vào địa chỉ trả về hàm
Ghi đè lên SEH (Structured Exception Handling)
Tràn Heap (Heap over flow)
Lập trình an toàn
Phát hiện: StackGuard, Microsoft Visual Studio /GS
(2003)
Nguồn />
07/27/22
2. Một số lỗi phần mềm thường gặp
12
2.2. Lỗi không đầy đủ
len là một số âm, copy một đoạn lớn bộ nhớ => họat động
sai, hệ thống crash …
07/27/22
2. Một số lỗi phần mềm thường gặp
13
2.2. Lỗi không đầy đủ
Lỗi không đầy đủ (Incomplete mediation)
Về bản chất là khơng kiểm sốt được giá trị đầu vào,
người lập trình khơng kiểm tra (check) giá trị đầu vào
Dễ khai thác tuy nhiên ít được sử dụng hơn lỗi tràn bộ
đệm do khó gây tác hại lớn hơn.
Link đặt hàng trên things.com
/>ship=boat&shipcost=5&total=205
/>&qy=20&price=1&ship=boat&shipcost=5&total=25
Nguồn />07/27/22
2. Một số lỗi phần mềm thường gặp
14
2.3. Lỗi đồng bộ
Trong Linux, đoạn code C dưới đây được sử dụng
trong chương trình setuid bị lỗi đồng bộ
Nguồn: Wikipedia
07/27/22
2. Một số lỗi phần mềm thường gặp
15
2.3. Lỗi đồng bộ
Mặc dù việc thay đổi hệ thống phải thực hiện chính
xác trong khoảng thời gian nhỏ, nhưng kẻ tấn cơng vẫn
có khả năng thực hiện được
Vấn đề ở đây là người lập trình viên khơng thể chắc
chắn được là hệ thống có thay đổi hay khơng giữa hai
câu lệnh access và open.
Có thể gây ảnh hưởng với việc kiểm tra truy nhập. Kẻ
tấn công có thể lợi dụng để chiếm quyền điều khiển hoặc
thực hiện thao tác bất hợp pháp
07/27/22
2. Một số lỗi phần mềm thường gặp
16
2.4 Phịng chống lỗi đồng bộ
Chưa có giải pháp chung nhưng có một số chiến thuật
sau:
-Kiểm tra tĩnh cho mối nguy hiểm
-Hack chương trình setuid
-Phát hiện nguyên nhân và thiệt hại
-Sử dụng chế độ người dùng phát hiện động
-Thay đổi giao diện
07/27/22
2. Một số lỗi phần mềm thường gặp
17
Nội dung
07/27/22
1
Tổng quan về an toàn phần mềm
2
Một số lỗi phần mềm thường gặp
3
Các biện pháp an toàn
4
Tổng kết
An toàn phần mềm
18
3. Các biện pháp an tồn
Có nhiều biện pháp khác nhau để xác định, xây dựng
một phần mềm an toàn.
Kiểm thử phần mềm (testing)
Kiểm định hình thức (formal verification)
Lập trình an tồn (secure coding)
07/27/22
3. Các biện pháp an toàn
19
3.1 Kiểm thử
Lập kết
hoạch kiểm
thử và thực
hiện
Phân tích
động
Kiểm thử đơn vị, Kiểm thử tích
hợp, Kiểm thử chức năng, Kiểm
thử hiệu năng, Kiểm thử chấp
nhận, Kiểm thử cài đặt…
Kiểm
Kiểmthử
thử
an
antồn
tồnphần
phần
mềm
mềm
Phân tích
tĩnh
Dùng tool: Kiểm tra khi đang
chạy chương trình
Dùng check list ( best practice)
Quét mã nguồn (Code
scanning), Phân tích tĩnh (static
analysis – code inspect)
Tổng hợp từ Security Testing Services
07/27/22
3. Các biện pháp an toàn
20
3.2. Kiểm định hình thức
Formal verification
Mục đích: Nhằm chứng minh hệ thống đáp ứng
được các yêu cầu an toàn.
Việc chứng minh thường thơng qua:
Mơ hình hóa hệ thống bằng mơ hình tốn học
Chứng minh dựa trên mơ hình tốn học
Kiểm định mơ
hình (Model
checking)
07/27/22
Suy diễn logic
(Logical
inference)
3. Các biện pháp an toàn
21
3.2. Kiểm định hình thức
Kiểm định mơ hình
Đặc tả phần mềm bằng mộ hình là một tập các
trạng thái hữu hạn
Giữa các trạng thái có các chuyển tiếp (transition)
Kiểm định: Duyệt qua tất cả các trạng thái thông
qua tất cả các chuyển tiếp. Trong q trình đó xác định
u cầu có được thỏa mãn hay khơng
07/27/22
22
3.2. Kiểm định hình thức
Suy diễn logic
Đặc tả phần mềm bằng một tập các biểu thức logic:
Đầu vào, đầu ra của phần mềm, chức năng bị ràng
buộc bằng một biểu thức logic
Phần mềm cũng bị ràng buộc bằng một biểu thức
logic
Dựa trên suy diễn logic để xác định u cầu có thỏa
mãn hay khơng
07/27/22
3. Các biện pháp an toàn
23
3.2. Kiểm định hình thức
Suy diễn logic
Giả sử chương trình P là một bộ biến đổi tuần tự P để chuyển đầu
vào x thành đầu ra y; ở đây x và y hoàn toàn được xác định trước.
Như vậy, một chương trình P được gọi là đúng nếu nó thực hiện
chính xác những mục tiêu do người thiết kế đặt ra. Gọi:
+ Giả thiết {A} là mệnh đề được phát biểu để thể hiện tính chất của
đầu vào, gọi tắt là mệnh đề dữ liệu vào.
+ Kết luận {B} là mệnh đề được phát biểu để tính chất cần có của
dữ liệu ra, gọi tắt là mệnh đề dữ liệu ra.
Do P có tính tuần tự và hữu hạn nên có thể biểu diễn P là một dãy
liên tiếp các cấu trúc điều khiển P1, P2,....,Pn. Dẫn đến:
07/27/22
3. Các biện pháp an toàn
24
3.2. Kiểm định hình thức
Suy diễn logic
P1 biến đổi {A} thành {A1}
P2 biến đổi {A1} thành {A2}
....
Pn biến đổi {An-1} thành {An}
Và dựa vào quy tắc tốn học, {An} có thể suy ra {B} thì ta
có thể nói rằng P là đúng với cái vào {A} và cái ra {B}. Lúc
này ký hiệu {A}P{B}
Nói cách khác, để chứng minh P là đúng, ta chứng minh theo
sơ đồ sau:
{A} P1 {A1}
{A1} P2 {A2}
….
{An-1}Pn{An}
{An}=>{B}
07/27/22
An toàn phần mềm
25