1. Trang chủ
  2. » Giáo Dục - Đào Tạo

THỰC tập cơ sở CHUYÊN NGHÀNH AN TOÀN PHẦN mềm NGHIÊN cứu ENVIROMENT VARIABLE AND SET UID (ENVIROMENT VARIABLE AND SET UID LAB)

46 16 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 46
Dung lượng 4,09 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Environment Variables Biến môi trường 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đ

Trang 1

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ

KHOA: AN TOÀN THÔNG TIN

Giảng viên hướng dẫn: PGS.TS Lương Thế Dũng

Sinh viên thực hiện: Trần Quốc Hoàng

Trang 2

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ

KHOA: AN TOÀN THÔNG TIN



THỰC TẬP CƠ SỞ CHUYÊN NGÀNH

AN TOÀN PHẦN MỀM

NGHIÊN CỨU ENVIROMENT VARIABLE AND SET-UID (ENVIROMENT VARIABLE AND SET-UID LAB)

Nhận xét của giáo viên hướng dẫn:

Điểm báo cáo:

Xác nhận của giáo viên hướng dẫn:

2 download by : skknchat@gmail.com

Trang 3

LỜI CẢM ƠN

Chúng em xin chân thành cảm ơn PGS.TS Lương Thế Dũng– giảng viên trựctiếp hướng dẫn, chỉ bảo, tạo mọi điều kiện thuận lợi giúp đỡ chúng em trong quá trìnhthực hiện đề tài

Để có được thành quả như ngày hôm nay, ngoài sự nỗ lực không ngừng nghỉ củacác thành viên trong nhóm thì một phần không nhỏ đóng góp nên thành công này là nhờ

sự quan tâm, chỉ bảo, giúp đỡ của các thầy cô, các anh chị khóa trên và bạn bè xungquanh

Tuy đã có rất nhiều cố gắng và sự nỗ lực của các thành viên để hoàn thiện đề tài, nhưng

chắc chắn đề tài “NGHIÊN CỨU ENVIROMENT VARIABLE AND SET-UID (ENVIROMENT VARIABLE AND SET-UID LAB)” của chúng em còn nhiều thiếu sót.

Chúng em rất mong nhận được sự góp ý từ các thầy giáo để nhóm em có thể hoàn thiện tốt hơncác đề tài nghiên cứu sau

Chúng em xin chân thành cảm ơn!

Trang 4

LỜI MỞ ĐẦU

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ứcthiết yếu Bên cạnh đó, ảnh hưởng của đại dịch COVID-19 cũng đã thúc đẩy nhanh việcchuyể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ấutấ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 và đặc biệt là nghiên cứu tìm hiểu bài lab Enviroment Variable andSet-UID

4download by : skknchat@gmail.com

Trang 5

MỤC LỤC

LỜI CẢM ƠN 3

LỜI MỞ ĐẦU 4

MỤC LỤC 5

CHƯƠNG I: TỔNG QUAN VỀ ENVIRONMENT VARIABLES VÀ SET-UID PROGRAM 6

1.1 Environment Variables 6

1.2 Set-UID Program 6

1.3 Mục tiêu chính của Lab 7

1.4 Chuẩn bị cho bài Lab 7

1.5 Cài đặt môi trường ảo Ubuntu v16.04 của SEED Labs 10

CHƯƠNG II: TIẾN HÀNH THỰC HIỆN VÀ NGHIÊN CỨU CHUYÊN SÂU BÀI LAB THEO THỨ TỰ TỪNG TASK 16

2.3 Task 3: Biến môi trường và hàm execve() 21

2.4 Task 4: Biến môi trường và hàm system () 24

2.5 Task 5: Các biến môi trường và Set-UID program 25

2.6 Task 6: The PATH Environment variable and Set-UID programs 28

2.7 Task 7: The LD_PRELOAD environment variable and Set-UID Programs 31

2.8 Task 8: Gọi các chương trình bên ngoài bằng hàm system() và hàm execve() 37

2.9 Task 9: Capability Leaking 41

CHƯƠNG III: KẾT LUẬN 43

TÀI LIỆU THAM KHẢO 44

Trang 6

CHƯƠNG I: TỔNG QUAN VỀ ENVIRONMENT VARIABLES

VÀ SET-UID PROGRAM

1.1 Environment Variables

Biến môi trường 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đó

Biến môi trường được giới thiệu ở dạng hiện đại vào năm 1979 với Version 7Unix, do đó được bao gồm trong tất cả các phiên bản và phiên bản hệ điều hành Unix từthời điểm đó trở đi, bao gồm cả Linux và macOS Từ PC DOS 2.0 vào năm 1982, tất cảcác hệ điều hành kế nhiệm của Microsoft, bao gồm cả Microsoft Windows và OS / 2cũng đã bao gồm chúng như một tính năng, mặc dù với cú pháp, cách sử dụng và tên biếntiêu chuẩn có phần khác nhau

Vậy tại sao chúng ta cần thiết lập các biến môi trường? Ví dụ Suy nghĩ một chút,

sẽ rất dễ dàng để hiểu lý do Hiện tại, các developer đang sử dụng github như một công

cụ hữu ích để quản lý code của dự án Các thao tác trên git giúp người quản lý có thể dễdàng kiểm soát tiến trình của dự án đang đến đâu để lên kế hoạch, hoặc dễ dàng chia sẻcode với những thành viên mới gia nhập nhóm phát triển Tuy nhiên, chính vì việc dễdàng chia sẻ với thành viên mới cũng chính là việc những người khác không mong muốncó thể đọc được hết code của bạn, ngay cả các thông tin về tài khoản email hay các APIkey của riêng bạn nữa Để khắc phục vấn đề này, chúng ta sử dụng các biến mỗi trườngđược thiết lập trên mỗi máy là khác nhau để bạn có thể sử dụng tài khoản cá nhân màkhông cần chia sẻ các thông tin đó

1.2 Set-UID Program

Set-UID (SET User ID upon execution), là một loại đặc quyền file (filepermission) đặc biệt, có thể cho phép user tạm có quyền thực thi file bằng chính quyềncủa người sở hữu (owner) để thay đổi hành vi của file thực thi đó Hay nói một cách đơngiản hơn: “Thông thường một file trong linux khi chạy thì sẽ được kế thừa quyền từ userđang login SETUID sẽ cấp quyền “tạm thời” cho user chạy file quyền của user tạo ra file(owner user) Nói một cách khác, user chạy sẽ có UID và GID của người tạo ra file, khichạy 1 file hay command.”

6download by : skknchat@gmail.com

Trang 7

1.3 Mục tiêu chính của Lab

Mục tiêu chính của bài lab này là giúp sinh viên 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 ảnhhưở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 đượcnhiề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ôitrường, các chương trình có thể có lỗ hổng Qua bài lab này, sẽ hiểu rõ cách vận hành củacá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ácbiế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ácchương trình đặc quyền

1.4 Chuẩn bị cho bài Lab

Truy cập đường link: https://www.virtualbox.org/wiki/Downloads Để tải và càiđặt

Sau khi tải về thì chạy chương trình để cài đặt vào máy Chọn Next

Trang 8

Tiếp tục , chọn Next và cuối cùng là chọn Install

8download by : skknchat@gmail.com

Trang 9

Chọn Finish để kết thúc quá trình cài đặt Bên dưới là giao diện sau khi cài đặt hoàn tất

Trang 10

1.5 Cài đặt môi trường ảo Ubuntu v16.04 của SEED Labs

Truy cập vào trang web : https://seedsecuritylabs.org/labsetup.html Chọn version16.04 như hình bên dưới và tải về theo đường dẫn đính kèm

Ở đây em chọn đường dẫn của “Google Drive” Sau khi tải xong chúng ta giải nénfile rar

10download by : skknchat@gmail.com

Trang 11

Quay lại với Oracle VM VirtualBox , Chọn New ,lựa chọn các cài đặt như hình bên dưới và chọn Next.

Chọn Next cho đến khi đến phần Hark Disk Chọn vào “Use an exitsting virtual hard disk file” và chọn vào icon được khoanh vùng đen

Chọn Add

Trang 12

Chọn đến đường dẫn lúc nãy vừa giải nén file Ubuntu v16.04 và chọn vào file bên dưới nhấn Open

Sau khi chọn đường dẫn xong sẽ hiện giống như ảnh màn hình sau và click vào

“SEEDUbuntu-16.04-32bit.vmdk” và chọn Choose

12download by : skknchat@gmail.com

Trang 13

Sau đó ấn Create

Chọn Start để tiến hành cài đặt bên trong

Trang 14

Quá trình cài đặt hoàn tất

14download by : skknchat@gmail.com

Trang 15

Lưu ý : Khi đóng máy Ubuntu ảo Các bạn nên chọn “Save the machine state”

Để có thể lưu lại những gì mình đang làm

Trang 16

CHƯƠNG II: TIẾN HÀNH THỰC HIỆN VÀ NGHIÊN CỨU CHUYÊN SÂU BÀI LAB THEO THỨ TỰ TỪNG TASK

2.1. Task 1: Thao tác với các biến môi trường

Trong task này, chúng ta nghiên cứu về các câu lệnh có thể được sử dụng để đặt và

gỡ các biến môi trường Chúng ta đang sử dụng Bash trong tài khoản seed Shell mặcđịnh mà người dùng sử dụng được đặt trong tệp /etc/passwd

Trước khi bắt đầu làm việc, để kiểm tra shell mặc định cấu hình cho tài khoảnseed, ta thực thi câu lệnh:

seed@VM:~$ cat /etc/passwdTìm trong các output của lệnh thực thi, tìm tới tài khoản seed, shell mặc định là bash, như được thấy trong trường cuối cùng là:

seed:x:1000:1000:seed,,,:/home/seed:/bin/bash

Đầu tiên, để hiển thị ra toàn bộ các biến môi trường, sử dụng câu lệnh printenv

Kết quả đầu ra cho thấy các biến môi trường chỉ là các cặp variable = value Bên cạnhcâu lệnh printenv, để hiển thị toàn bộ các biến cũng có thể dùng lệnh env

16download by : skknchat@gmail.com

Trang 17

Ngoài ra, nếu cần hiển thị các biến môi trường chỉ định, ví dụ như PWD thì tacũng có thể dùng lệnh printenv PWD thì sẽ chỉ hiển thị ra giá trị của biến PWD Để nhằmmục đích tìm ra các biến liên quan bao gồm các chuỗi con ta dùng lệnh env | grep PWD,

lúc này sẽ hiển thị ra toàn bộ các biến và giá trị có chứa PWD như chuỗi con bên trongchúng

Tiếp theo, để đặt và gỡ các biến môi trường ta dùng cặp lệnh “export” và “unset”

Ta cần phải lưu ý rằng hai câu lệnh này không phải hai chương trình riêng biệt Cả hai chỉcó mức phạm vi hoạt động trong Bash (nếu ta ra khỏi shell mặc định này thì các biến môitrường được set sẽ không hiển thị) Ví dụ: để đặt biến môi trường SEEDAGE với giá trịcủa biến là 5 ta dùng câu lệnh:

seed@VM:~$ export SEEDAGE=5

Để gỡ biến môi trường này ta dùng câu lệnh:

seed@VM:~$ unset SEEDAGE

Như trên, ta cần lưu ý các biến môi trường này chỉ được set trong shell cố định,nếu thoát hoặc chuyển ra shell khác thì các biến môi trường này sẽ không được hiển thị

Trang 18

2.2. Task 2: Kế thừa các biến môi trường từ quy trình cha sang quy trình con

Trong task này, chúng ta sẽ nghiên cứu về cách các biến môi trường được các tiếntrình con kế thừa từ các tiến trình cha của chúng Trong Unix, hàm fork () tạo ra một quytrình mới bằng cách sao chép quy trình gọi Quy trình mới, được gọi là con, là một bảnsao chính xác của quy trình gọi, được gọi là quy trình cha; tuy nhiên, một số thứ khôngđược kế thừa cho quy trình con (vui lòng xem hướng dẫn của fork () bằng cách gõ lệnh

man fork Trong task này, chúng ta cần biết các biến môi trường của quy trình cha mẹ có

kế thừa cho quy trình con hay không

Nội dung của file output child p2cc của chương trình p2c.c chứa quy trình conhiển thị tất cả các biến môi trường của tiến trình con

Nội dung của file output parent p2cp của chương trình p2c.c sao khi bỏ commentcủa quy trình cha và thêm comment vào phần quy trình con Tiến trình này đưa ra outputvới lệnh printenv có kết quả tương tự tiến trình p2cc

18download by : skknchat@gmail.com

Trang 19

Các tệp sau được tạo do các tác vụ trên:

p2c.c Chương trình chính của task trên

p2cc Tệp thực thi với tiến trình printenv của child processp2cp Tệp thực thi với tiến trình printenv của parent processchild File output của child process

parent File output của parent process

Trang 20

Sau đây, là các lệnh từng bước để compile và chạy chương trình child process, sauđó comment vào child và compile và chạy parent process, gán output vào file child vàparent tương ứng Để so sánh sự khác nhau giữa 2 file output ta dùng câu lệnh:

seed@VM:~/ /labEV$ diff child parent

Đầu ra của câu lệnh diff này được hiểu như sau:

67c67 có nghĩa là ở dòng thứ 67 (bên trái) trong tệp bên trái được thay đổi thànhdòng thứ 67 (bên phải) trong tệp bên phải, trong đó c là viết tắt của sự thay đổi và các sốbên trái và bên phải cho biết số dòng <_=./p2cc biểu thị các dòng bên trái; >=./p2cp biểuthị các dòng bên phải thay đổi

Điều này cho thấy rằng biến môi trường _ nhận giá trị của lệnh cuối cùng đượcthực thi, ở đây là lệnh thực hiện chương trình Nó được coi là một biến shell đặc biệt vàchứa các giá trị khác nhau tùy thuộc vào từng tình huống

Điều này cho thấy rằng biến _ môi trường thay đổi tùy thuộc vào chương trình đãbiên dịch đang được chạy nhưng khác với điều đó là không có thay đổi trong các biếnmôi trường Nếu cả hai chương trình được biên dịch thành một tệp có cùng tên, sẽ khôngcó bất kỳ sự khác biệt nào giữa đầu ra của tiến trình cha và con

Vậy ta có thể đưa ra kết luận, các biến môi trường của quy trình cha được kế thừacho quy trình con, ngoại trừ một biến đó là giá trị tên của chương trình

20download by : skknchat@gmail.com

Trang 21

2.3 Task 3: Biến môi trường và hàm execve()

Trong task này, chúng ta nghiên cứu về cách các biến môi trường bị ảnh hưởngnhư thế nào khi một chương trình được thực thi thông qua execve() Hàm execve() gọimột lệnh gọi hệ thống để tải một lệnh mới và thực thi nó; hàm này sẽ không trả về.Không có quy trình mới nào được tạo ra; thay vào đó, văn bản, dữ liệu, bss và ngăn xếpcủa quá trình gọi bị ghi đè bởi chương trình đã tải Về cơ bản, exevec() chạy chương trìnhmới bên trong quá trình gọi Chúng ta sẽ tìm hiểu những gì xảy ra với các biến môitrường; chúng có tự động được kế thừa bởi chương trình mới hay không?

Đầu tiên, ta sẽ cho biên dịch và thực thi chương trình envex.c trên đây thành cácoutput tương ứng và output này sẽ được lưu trữ trong file beforeeditoutput

Như ta quan sát thấy output của chương trình này là rỗng

Trang 22

Tiếp theo, ta bắt đầu chỉnh sửa file envex.c trên tại điểm:

execve("/usr/bin/env", argv, environ);

Sau đó, tiến hành biên dịch và thực thi chương trình vừa chỉnh sửa thành outputtương ứng và lưu vào file aftereditoutput

Như ta quan sát được, khác với beforeeditoutput rỗng thì aftereditoutput lại có output

22download by : skknchat@gmail.com

Trang 23

Giải thích cho điều này là mặc dù biến môi trường chung đã được chỉ định trongchương trình, chương trình trước đó chứa NULL là đối số thứ ba của trình thực thi vàchương trình afteredit chứa biến môi trường là đối số thứ ba của trình thực thi Thay đổinày ảnh hưởng đến kết quả đầu ra của chương trình vì đối số thứ ba của hàm execute ()chỉ định biến môi trường của tiến trình hiện tại Vì biến môi trường không được thôngqua trong chương trình ban đầu và do đó không có biến môi trường nào được liên kết vớiquy trình mới này, kết quả đầu ra là null Nhưng sau khi chỉnh sửa chương trình, ta đãchuyển biến môi trường làm đối số thứ ba để thực thi, nó chứa tất cả các biến môi trườngcủa quy trình hiện tại, kết quả đầu ra của chương trình có tất cả các biến môi trường, nhưmong đợi Kết luận, đối số thứ ba của lệnh execute () nhận các biến môi trường củachương trình.

Trang 24

2.4 Task 4: Biến môi trường và hàm system ()

Trong task này, chúng ta nghiên cứu các biến môi trường bị ảnh hưởng như thếnào khi một chương trình mới được thực thi thông qua hàm system () Hàm này được sửdụng để thực thi một lệnh, nhưng không giống như execute (), trực tiếp thực thi một lệnh,system () thực sự thực thi "/bin/sh -c command", tức là, nó thực thi /bin/sh và yêu cầushell thực hiện lệnh

Nếu ta nhìn vào quá trình thực thi của hàm system (), bạn sẽ thấy rằng nó sử dụngexecutel () để thực hiện /bin/sh; excel () gọi execve (), truyền cho nó mảng các biến môitrường Do đó, bằng cách sử dụng hàm system (), các biến môi trường của quá trình gọiđược chuyển tới chương trình mới /bin/sh Đầu tiên ta sẽ biên dịch và chạy chương trìnhcallsys.c dưới đây và quan sát

Chương trình được biên dịch và thực thi và như đã thấy, mặc dù chúng ta khônggửi rõ ràng bất kỳ biến môi trường nào trong chương trình, nhưng kết quả đầu ra vẫn hiểnthị biến môi trường của quy trình hiện tại Điều này xảy ra bởi vì hàm system() chuyểnngầm các biến môi trường đến hàm /bin/sh được gọi

24download by : skknchat@gmail.com

Trang 25

2.5 Task 5: Các biến môi trường và Set-UID program

Đầu tiên, nhắc lại Set-UID là gì? Set-UID là một cơ chế bảo mật quan trọng trong

hệ điều hành Unix Khi chương trình Set-UID chạy, chương trình đó sẽ thừa nhận các đặcquyền của chủ sở hữu Ví dụ: nếu chủ sở hữu của chương trình là root, thì khi bất kỳ aichạy chương trình này, chương trình sẽ nhận được các đặc quyền của root trong quá trìnhthực thi Set-UID cho phép chúng tôi làm nhiều điều thú vị, nhưng nó làm tăng đặc quyềncủa người dùng khi thực thi, khiến nó trở nên khá rủi ro Mặc dù các hành vi của cácchương trình Set-UID được quyết định bởi logic chương trình của họ, không phải bởingười dùng, người dùng thực sự có thể ảnh hưởng đến các hành vi thông qua các biếnmôi trường Để hiểu các chương trình Set-UID bị ảnh hưởng như thế nào, trước tiênchúng ta hãy tìm hiểu xem các biến môi trường có được quy trình của chương trình Set-UID kế thừa từ quy trình của người dùng hay không

Tiếp theo, ta tiến hành biên dịch và chạy chương trình envsu.c dưới đây

Ngày đăng: 28/03/2022, 15:38

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w