Có thể định nghĩa một cách dễ hiểu như sau: An toàn phần mềm bảo là một ý tưởng được thực hiện để bảo vệ phần mềm chống lại ѕự tồn tại ᴄủa một lỗ hổng trong phần mềm, khả năng mà tin tặ
Trang 1AN TOÀN PHẦN MỀM (SOFTWARE SECURITY)
GVHD: PGS.TS Lương Thế Dũng
THỰC TẬP
CƠ SỞ CHUYÊN NGÀNH
Trang 2Sinh viên thực hiện: Võ Minh Sang
Trần Quốc Hoàng
Phạm Nguyễn Tiến Anh
Huỳnh Hải Băng
Lớp: AT15H
Khóa: 15
Nhóm: 13
Trang 4Chương I: Mở đầu
1.1 Lý do chọn đề tài
Ngày nay, với xu hướng chuyển đổi số mạnh mẽ của các doanh nghiệp, công ty, tổ chức dẫn đến việc tạo ra những phần mềm quản lý, điều hành và làm việc cũng hết sức thiết yếu Bên cạnh đó, ảnh hưởng của đại dịch COVID-19 cũng đã thúc đẩy nhanh việc chuyển đổi số Để đảm bảo an toàn cho phần mềm khi tạo ra và vận hành tránh bị kẻ xấu tấn công gây thiệt hại nghiêm trọng Đó cũng là lý do để chúng em chọn chuyên đề Software Security.
1.2 Mục đích chọn đề tài:
Tìm hiểu những kiến thức tổng quan về an toàn phần mềm, tìm hiểu về các cách tấn công, cũng như khám phá môi trường Unix giúp ích cho việc học hỏi, tiếp thu thêm nhiều bài học kinh nghiệm thực tế hơn Thực hiện các bài lab theo trang web
https://seedsecuritylabs.org/Labs_16.04/Software /
Trang 5Chương II: Tổng quan về an toàn phần mềm
2.1 Khái niệm cơ bản
Trang 6Chương II: Tổng quan về an toàn phần mềm
2.1 Khái niệm cơ bản
2.1.2 An toàn phần mềm là gì?
Có thể định nghĩa một cách dễ hiểu như sau: An toàn phần mềm bảo là một ý tưởng được thực hiện để bảo vệ phần mềm chống lại ѕự tồn tại ᴄủa
một lỗ hổng trong phần mềm, khả năng mà tin tặc truу ᴄập ᴠào một lỗ
hổng bảo mật và nguy cơ từ việc tin tặc tấn công lỗ hổng, để giúp phần
mềm có thể tiếp tục chức năng một cách chính xác dưới rủi ro tiềm tàng
như vậy An ninh là cần thiết để cung cấp tính toàn vẹn, xác thực và tính
sẵn sàng.
Trang 7Buffer-Overflow Vulnerability Lab
Race Condition Vulnerability Lab Dirty Cow Attack Lab
Format String Vulnerability Lab Shellshock Attack Lab
6 7
Các bài lab này bao gồm một số lỗ hổng phổ biến nhất trong phần mềm nói chung, cho phép sinh viên thấy các cuộc tấn công hoạt động như thế nào trong việc khai thác các lỗ hổng này
Trang 82.3 Khái quát về các bài lab
2.3.1 Buffer-Overflow Vulnerability Lab
Trang 9Giới thiệu Mục tiêu
• Tràn bộ đệm là một lỗi lập trình có thể gây ra một ngoại lệ truy nhập
bộ nhớ máy tính và chương trình bị kết thúc Tràn bộ đệm được định
nghĩa là điều kiện trong đó chương trình cố gắng ghi dữ liệu vượt ra
ngoài ranh giới của bộ đệm có độ dài cố định được cấp phát trước
• Lỗ hổng này lợi dụng để thay đổi kiểm soát luồng của chương trình,
thậm chí thực thi các đoạn mã tùy ý Lỗ hổng này phát sinh do sự
trộn lẫn giữa bộ lưu trữ cho dữ liệu (ví dụ bộ đệm) và bộ lưu trữ cho
các điều khiển (ví dụ: địa chỉ trả về): phần dữ liệu bị tràn có thể ảnh
hưởng đến luồng điều khiển của chương trình, vì tràn có thể thay đổi
địa chỉ trả về
• Cung cấp một chương trình có lỗ hổng tràn bộ đệm; nhiệm vụ của chúng ta là phát triển một kế hoạch để khai thác lỗ hổng và cuối cùng là giành được đặc quyền root Ngoài các cuộc tấn công, sinh viên sẽ được hướng dẫn thực hiện một số phương án bảo vệ đã được triển khai trong hệ điều hành để chống lại các cuộc tấn công tràn bộ đệm
2.3.1 Buffer-Overflow Vulnerability Lab
Trang 102.3 Khái quát về các bài lab
2.3.2 Return-to-libc Attack Lab
Trang 11Giới thiệu Mục tiêu
• Là một phương pháp khai thác lỗi có ngăn xếp không thực thi được,
nó rất giống với tràn bộ đệm tiêu chuẩn, trong đó địa chỉ trả về được
thay đổi để trỏ đến một vị trí mới mà chúng ta có thể kiểm soát Tuy
nhiên, vì không có mã thực thi nào được phép trên ngăn xếp, ta
không thể chỉ gắn thẻ trong shellcode
• Vì vậy ta sử dụng thủ thuật return-to-libc và sử dụng một hàm được
cung cấp bởi thư viện Ta vẫn ghi đè địa chỉ trả về bằng một trong
các hảm của libc, chuyển cho nó các đối số chính xác và thực thi nó
cho ta Vì các hàm này không nằm trên ngăn xếp, ta có thể bỏ qua
ngăn xếp và thực thi code
• Được trải nghiệm trực tiếp về một biến thể thú vị của tấn công tràn
bộ đệm; cuộc tấn công này có thể bỏ qua một sơ đồ bảo vệ hiện có hiện được triển khai trong các hệ điều hành Linux chính Một cách phổ biến để khai thác lỗ hổng tràn bộ đệm là làm tràn bộ đệm bằng một mã shellcode độc hại, và sau đo khiến chương trình dễ bị tấn công nhảy đến shellcode được lưu trữ trong ngăn xếp
• Để ngăn chặn các kiểu tấn công này, một số hệ điều hành cho phép quản trị viên hệ thống tạo các ngăn xếp không thể thực thi được; do
đo, việc nhảy đến shellcode sẽ khiến chương trình bị lỗi
2.3.2 Return-to-libc Attack Lab
Trang 122.3 Khái quát về các bài lab
2.3.3 Enviroment Variable and Set-UID Lab
Trang 13Giới thiệu Mục tiêu
• Biến môi trường (Enviroment Variable) là những giá trị được cung
cấp và phụ thuộc vào Hệ điều hành, vậy nên sự thay đổi của các
biến môi trường (khi thay đổi môi trường chạy) sẽ ảnh hưởng đến
quá trình thực thi của một ứng dụng, nếu như ứng dụng sử dụng các
biến môi trường đó
• Set-UID (SET User ID upon execution), là một loại đặc quyền file
(file permission) đặc biệt, có thể cho phép user tạm có quyền thực
thi file bằng chính quyền của người sở hữu (owner) để thay đổi
hành vi của file thực thi đó
• Giúp tìm hiểu cách các biến môi trường ảnh hưởng đến chương trình
và hành vi của hệ thống Mặc dù các biến môi trường ảnh hưởng đến các hành vi của chương trình, nhưng cách chúng hoạt động thì không được nhiều lập trình viên hiểu rõ Kết quả là, nếu một chương trình sử dụng các biến môi trường, các chương trình co thể có lỗ hổng Qua bài lab này, sẽ hiểu rõ cách vận hành của các biến môi trường, cách chúng được đề xuất từ quy trình mẹ sang quy trình con,
và cách chúng ảnh hưởng đến các chương trình/ hệ thống
• Đặc biệt quan tâm đến cách các biến môi trường ảnh hưởng đến hoạt động của các chương trình Set-UID, thường là các chương trình đặc quyền
An toàn phần mềm
13
2.3.3 Enviroment Variable and Set-UID Lab
Trang 142.3 Khái quát về các bài lab
2.3.4 Race Condition Vulnerability Lab
Trang 15Giới thiệu Mục tiêu
• Race-Condition là một tình huống xảy ra khi nhiều threads
cùng truy cập và cùng lúc muốn thay đổi dữ liệu (có thể là một
biến, một row trong database, một vùng shared data, memory ,
etc )
• Một race-condition xảy ra khi nhiều quy trình truy cập và thao
tác đồng thời cùng một dữ liệu và kết quả của việc thực thi phụ
thuộc vào thứ tự cụ thể mà việc truy cập diễn ra Nếu một
chương trình đặc quyền có lỗ hổng race-condition, những kẻ
tấn công có thể chạy một quy trình song song để "chạy đua"
với chương trình đặc quyền, với ý định thay đổi các hành vi
của chương trình
• Trong lab này, chúng ta được cấp một chương trình có lỗ hổng race-condition, sinh viên triển khai một kế hoạch để khai thác
lỗ hổng khai thác lỗ hổng để có được đặc quyền root
• Ngoài ra, chúng ta sẽ được hướng dẫn thực hiện một số phương án bảo vệ có thể được sử dụng để chống lại các cuộc tấn công theo Race-Condition
2.3.4 Race Condition Vulnerability Lab
Trang 162.3 Khái quát về các bài lab
2.3.5 Dirty-Cow Attack Lab
Trang 17Giới thiệu Mục tiêu
• Dirty-COW là một trường hợp đặc biệt của lỗ hổng race
condition Nó tồn tại trong nhân Linux từ tháng 9 năm 2007,
được phát hiện và khai thác vào tháng 10 năm 2016 Lỗ hổng
ảnh hưởng đến tất cả các hệ điều hành dựa trên Linux, bao gồm
cả Android, và hậu quả là kẻ tấn công có thể giành được đặc
quyền root
• Bằng cách khai thác lỗ hổng bảo mật nằm trong mã copy-on ghi bên trong nhân Linux để có thể sửa đổi bất kỳ tệp được bảo vệ nào, dù là những tệp này chỉ được đọc
• Hiểu hơn về dạng lỗ hổng Race-Condition bị khai thác bởi cuộc tấn công này và hiểu sâu hơn về các vấn đề bảo mật Race-Condition nói chung Trong lab này, sinh viên khai thác
lỗ hổng Dirty-COW để có được đặc quyền root
2.3.5 Dirty-Cow Attack Lab
Trang 182.3 Khái quát về các bài lab
2.3.6 Format-String Attack Lab
Trang 19Giới thiệu Mục tiêu
• Hàm printf () trong C được sử dụng để in ra một chuỗi theo
một định dạng Đối số đầu tiên của nó được gọi là chuỗi định
dạng, xác định cách định dạng chuỗi Định dạng chuỗi sử dụng
trình giữ chỗ được đánh dấu bởi ký tự % cho hàm printf () để
điền dữ liệu trong quá trình in Việc sử dụng các chuỗi định
dạng không chỉ giới hạn trong hàm printf (); nhiều hàm khác,
chẳng hạn như sprintf (), fprintf (), và scanf (), cũng sử dụng
chuỗi định dạng Một số chương trình cho phép người dùng
cung cấp toàn bộ hoặc một phần nội dung trong một chuỗi định
dạng Nếu những nội dung đó không được làm sạch, người
dùng độc hại có thể sử dụng cơ hội này để lấy chương trình để
chạy mã tùy ý
• Khai thác lỗ hổng bằng các bước sau: (1) làm hỏng chương trình, (2) đọc bộ nhớ trong của chương trình, (3) sửa đổi bộ nhớ trong của chương trình và nghiêm trọng nhất là (4) đưa và thực thi mã độc hại bằng cách sử dụng đặc quyền truy cập chương trình của nạn nhân
• Hậu quả cuối cùng là rất nguy hiểm nếu chương trình dễ bị tấn công là chương trình đặc quyền, chẳng hạn như một root deamon, vì điều đó có thể cung cấp cho những kẻ tấn công quyền truy cập root của hệ thống
2.3.6 Format-String Attack Lab
Trang 202.3 Khái quát về các bài lab
2.3.7 Shellshock Attack Lab
Trang 21Giới thiệu Mục tiêu
• Shellshock là một lỗ hổng bảo mật trong Bash, được công bố
rộng rãi vào ngày 25 tháng 9 năm 2014 Lỗ hổng này có thể
khai thác nhiều hệ thống và được khởi chạy từ xa hoặc từ
một máy cục bộ và giúp kẻ tấn công chiếm quyền điểu khiển
máy nạn nhân mà không cần phải qua bước xác thực
• Lỗ hổng shellhock trong bash liên quan đến các hàm shell - các hàm được xác định bên trong shell Bằng cách khai thác sai lầm do bash mắc phải khi chuyển đổi các biến môi trường thành các định nghĩa hàm
• Lỗ hổng bảo mật này giúp kẻ tấn công chiếm quyền điểu khiển máy nạn nhân mà không cần phải qua bước xác thực
2.3.7 Shellshock Attack Lab
Trang 22Chương III : Thực nghiệm
Demo
Trang 23Chương IV : TỔNG KẾT
4.1 Hạn chế:
Trong suốt thời gian nghiên cứu đề tài, chúng em đã cố gắng hết sức để tìm hiểu và thực hiện đề tài Tuy nhiên với kiến thức, kinh nghiệm và thời gian hạn chế nên không thể không tránh khỏi những thiếu sót Cụ thể:
- Chưa thực hiện được một số task nâng cao.
- Chưa nghiên cứu sâu được
4.2 Kết luận và hướng phát triển:
- Có kiến thức tổng quan về một số khái niệm , định nghĩa thuộc về an toàn phần mềm thông qua việc nghiên cứu.
- Tìm hiểu chi tiết về cách cài đặt môi trường ảo thực hiện lab (VMware, Virtual Box).
- Thực hiện thành công nhiều task của từng bài lab
Tiếp tục tìm hiểu nâng cao, nghiên cứu sâu và áp dụng vào thực tiễn.
Trang 24CẢM ƠN THẦY (CÔ) ĐÃ LẮNG
NGHE