Slide 1 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 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 Đồ á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, teac.
Trang 2Tà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
Trang 3Nội dung
1 Tổng quan về an toàn phần mềm
Một số lỗi phần mềm thường gặp Các biện pháp an toàn
2 3
4 Tổng kết
Trang 4Toà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
Toà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
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
Trang 51 Tổng quan về an toàn 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 – Toàn vẹn – Sẵn dùng)
Lỗi phần mềm
Trang 61 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)
Trang 74 Tổng kết
Trang 82.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.
Trang 9Sep 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: http://www.securityfocus.com/archive/1/496042
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
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)
Trang 10fn( param1,param2) đuợc gọi
Lưu lại SP RET: Địa chỉ trả
về (IP) Buffer
IP
Trang 112.1 Lỗi tràn bộ đệm
Stack frame của hàm gọi
Lưu lại SP RET: Địa chỉ trả
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
Trang 122.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)
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)
Trang 132.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 …
Trang 142.2 Lỗi không đầy đủ
Lỗi không đầy đủ (Incomplete mediation)
Về bản chất là không kiểm soá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
http://www.things.com/order/final&custID=101&part=555A&qy=20&price=10& ship=boat&shipcost=5&total=205
http://www.things.com/order/final&custID=101&part=555A
&qy=20&price=1&ship=boat&shipcost=5&total=25
Nguồn http://www.informit.com/
Trang 152.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
Trang 162.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
Trang 172.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
Trang 184 Tổng kết
Trang 193 Các biện pháp an toà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 toàn (secure coding)
Trang 20Dùng tool: Kiểm tra khi đang
chạy chương trình
Dùng check list ( best practice)
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)
Quét mã nguồn (Code scanning), Phân tích tĩnh (static analysis – code inspect)
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 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…
Lập kết hoạch kiểm thử và thực hiện
Phân tích tĩnh
Phân tích tĩnh
Phân tích động
Tổng hợp từ Security Testing Services
Trang 213.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 toán học
Chứng minh dựa trên mô hình toán học
Kiểm định mô hình (Model checking)
Kiểm định mô hình (Model checking)
Suy diễn logic (Logical inference)
Suy diễn logic (Logical inference)
Trang 223.2 Kiểm định hình thức
Đặ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 quá trình đó xác định yêu cầu có được thỏa mãn hay không
Kiểm định mô hình
Trang 23 Dựa trên suy diễn logic để xác định yêu cầu có thỏa mãn hay không
Suy diễn logic
Trang 243.2 Kiểm định hình thức
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:
Suy diễn logic
Trang 253.2 Kiểm định hình thức
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 toá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
Trang 263.2 Kiểm định hình thức
Ví dụ 1: Cho mệnh đề dữ liệu vào {A: x,y R; 0<x<1}∈
Đoạn trình P =P1 P2 P3 P4 như sau∪ ∪ ∪ :
x:=1/x+1; (P1)
y:=y+1; (P2)
x:=x+2; (P3)
x:=x+y; (P4)
và mệnh đề dữ liệu ra {B: x,y R; x>y+3}∈
Lúc này ta có dãy biến đổi tính chất dữ liệu vào/ ra như sau:
{A} P1{A1: x,y R; x>2}∈
{A1}P2{A2: x,y R; x>2}∈
{A2}P3{A3: x,y R; x>4}∈
{A3}P4{A4: x,y R; x>y+4}∈
Vậy ta có kết luận {A}P{B} hay nói cách khác là P đúng với dữ liệu
Suy diễn logic
Trang 273.2 Kiểm định hình thức
Hệ tiên đề Hoare:
Tiên đề 1: Tiên đề tuần tự
Nếu mệnh đề {A} sau khi chịu tác động của khối cấu trúc điều khiển P ta được {B} và mệnh đề {B} sau khi chịu tác động của cấu trúc điều khiển
Q ta được {C} thì {A} chịu tác động tuần tự P,Q sẽ thu được {C} Hay nói cách khác, đây chính là tiên đề về dãy thao tác: Nếu {A} P {B} và {B} Q {C} thì {A} P,Q {C}
Tiên đề 2: tính chất của phép gán
Điều kiện để có mệnh đề {B} sau khi thực hiện lệnh gán x: = E (với E là một biểu thức) từ mệnh đề {A} thì trước đó ta phải có {A} suy dẫn được ra {B[x|E]}.
Mệnh đề {B[x|E]} là mệnh đề thu được từ {B} bằng phép thay thế mọi
xuất hiện của x trong {B} bởi E Tức là: {A} x: = E {B} thì {A}=>{B[x| E]}
Suy diễn logic
Trang 282 Với mệnh đề dữ liệu vào {A}, mệnh đề dữ liệu ra {B}, biểu thức logic E, và các đoạn trình P, Q Nếu ta có {A, E}P{B} và {A,!
E}Q{B} thì ta nói rằng mệnh đề {A} và {B} tuân theo cấu trúc rẽ nhánh dạng đủ với cấu trúc P, Q và điều kiện lựa chọn E; tức là: {A}
if E then P else Q; {B}
Suy diễn logic
Trang 293.2 Kiểm định hình thức
Hệ tiên đề Hoare:
Tiên đề 4: Tính bất biến của chương trình
Cho mệnh đề dữ liệu vào {A} và đoạn trình P Nếu ta có {A}P{A} thì ta nói rằng tính chất dữ liệu của mệnh đề {A} không thay đổi khi chịu sự tác động của đoạn trình P và lúc này người ta nói rằng mệnh
đề {A} là bất biến đối với P, tức ta có: {A}P{A}
Tiên đề 5: Tiên đề lặp
Cho mệnh đề dữ liệu vào {A}, biểu thức logic E và đoạn trình P
Nếu mệnh đề {A} tuân theo cấu trúc lặp P với điều kiện lặp E thì mệnh đề {A} sẽ bất biến đối với P trong điều kiện E, tức là
{A,E}P{A}, kết thúc vòng lặp ta có mệnh đề {A,!E} Lúc này ta
viết: {A} while E do P; {A,!E}
Suy diễn logic
Trang 30 Tính đóng gói trong OOP:
Nhằm che dấu thông tin về cách cài đặt
Tương tác thông qua interface
Áp dụng các nguyên tắc lập trình:
Module hóa:
Chia thành các thành phần nhỏ, đơn giản
Mỗi thành phần chỉ làm một nhiệm vụ
Tính đóng gói trong OOP:
Nhằm che dấu thông tin về cách cài đặt
Tương tác thông qua interface
Trang 313.3 Lập trình an toàn
Áp dụng một số quy tắc lập trình an toàn như:
Lập trình theo chuẩn (từ chuẩn đặt tên đến chuẩn phân bố
code)
Luôn kiểm tra các giá trị đầu vào / đầu ra
Sử dụng quyền thấp nhất, vừa đủ để thực hiện các thao tác
Có chiến lược kiểm tra an toàn phần mềm:
Xây dựng kế hoạch từ khởi đầu dự án phần mềm
Kiểm thử an toàn
Áp dụng một số quy tắc lập trình an toàn như:
Lập trình theo chuẩn (từ chuẩn đặt tên đến chuẩn phân bố
code)
Luôn kiểm tra các giá trị đầu vào / đầu ra
Sử dụng quyền thấp nhất, vừa đủ để thực hiện các thao tác
Có chiến lược kiểm tra an toàn phần mềm:
Xây dựng kế hoạch từ khởi đầu dự án phần mềm
Kiểm thử an toàn
Trang 32Nội dung
1 Tổng quan về an toàn phần mềm
Một số lỗi phần mềm thường gặp Các biện pháp an toàn
2 3
Trang 334 Tổng kết
Lỗi tràn bộ đệm (buffer over flow)
Không đầy đủ (Incomplete mediation)
Lỗi đồng bộ (Synchronization)
Lỗi tràn bộ đệm (buffer over flow)
Không đầy đủ (Incomplete mediation)
Trang 34Cảm ơn đã lắng nghe