Tải bản đầy đủ (.docx) (50 trang)

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)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.53 MB, 50 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA: AN TỒN THƠNG TIN
^ffl^

THỰC TẬP CƠ SỞ CHUN NGHÀNH
AN TỒN PHẦN MỀM

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

Giảng viên hướng
dẫn:
Sinh viên thực hiện:
Lớp:
Mã số sinh viên:
Nhóm:
Khóa:

PGS.TS Lương Thế
Dũng
Trần Quốc Hồng
AT15H
AT150719
13
2018-2023

TP. Hồ Chí Minh, tháng 11 năm 2021

1



BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA: AN TỒN THƠNG TIN
^ffl<^

THỰC TẬP CƠ SỞ CHUN NGÀNH
AN TỒ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


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ực
tiế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 q trình
thực hiện đề tài.
Để có được thành quả như ngày hơm nay, ngồi sự nỗ lực khơng ngừng nghỉ của
cá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è xung
quanh.
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ể hồn thiện
tốt
hơn
các đề tài nghiên cứu sau.
Chúng em xin chân thành cảm ơn!

3


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ứ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 và đặc biệt là nghiên cứu tìm hiểu bài lab Enviroment Variable and
Set-UID.


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.

S et-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.
T ask 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


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 7
Unix, 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 Microsolt, bao gồm cả Microsoft Windows và OS / 2
cũ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ến
tiê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 số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ốn
có 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 API
key 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 (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 đó. Hay nói một cách đơn
giả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, khi
chạy 1 file hay command.”


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 ả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 có 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.

1.4.

Chuẩn bị cho bài Lab
Truy cập đường link: . Để 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
Ô htt p s://www.vi rtua lbox.org/wĩkĩ/Downloads


ooMÉWâl

Box

Download VirìualBox

Here you will fìnd links to VirtualBox binaries and its source code.

VirtualBox binaries
By dovvnloading, you agree to the terms and conditions of the respective license.
I Ifyou're looking forthe latest Virtual Box 6.0 packages, see Virtual Box 6.0 builds. Please also I
I Ifyou're looklng for the latest Virtual Box 5.2 packages, see Virtual Box 5.2 builds. Please also I

VirtualBox 6.1.28 plattorm packages






G»Windows hiosts
G>os X hosts
Linux distribLitions
Gi Solaris hosts
CH Solaris 11 IPS hosts


Oracle VM VirtualBox 6.1.Ỉ6 Setup

Custom Setup

Select the nay you mant tẽatures to be instolled.

Click. on the icons in the tree belom to change the may íeatures mill be installed.

Oracle VM ViitualBox 6.1.26
application.

VirtualBox Application
VirtoalBox USB Support
VirtoalBox Netwũrking

Ệ-

VirtoalBox Bridgei
VirtualBox Host-C
1^1 VirtualBox Python 2.X SL

This teature requires 217MB on
your hard drive. Ithas 3of 3
subteatores selected. The
subteatores requiie 932KB on yo...

Location:

Version 6.1.216

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


Oracle VM VirtualBcEí 6.1.26 Setup


Readvto Install
The Setup Wizard Ẽ ready to begin tìie Custom installatiũn.

Clicklnstall to begin the installatiũn. Ifyou nvaitto review or change any of your
installation settings, clickBack. ClickCancel to exitthe wizard.

Version 6.1.26

< Back

Install

Cancel

'Ạ! Oracle VM ViitualBox 6.1.26 Setup

Oracle VM VirtuaiBox 6.1.26
installation ĩs compiete.
Click the Finish button to exit the Setup Wizard.

0 start Oracle VM VirtualBox 6.1.26 after installation

Versiũn 6.1.26

Finish

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



1.5.

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

Truy cập vào trang web : . Chọn version
16.04 như hình bên dưới và tải về theo đường dẫn đính kèm

Ubuntu 16.04 VM
The SEED Ubuntu 16.04 VM (SEEDUbuntu-16.04-32bit.zip) can be dovvnloaded to your personal
Computer írom the tollovving links:






Gooqle Drive
DigitalOcean
zheịianq University (china)
MD5 value: 12c48542c29c233580a23589b72b71b8
VM Manual: follow this manual to install the VM

You can also run the SEED VM írom a cloud:
• Arnazon AWS: You can find the SEED VM in AWS's community AMIs. Please read the
instruction regarding How to Launch SEEDUbuntu VM in AWS. It should be noted that the
deíault passvvord for this VM has been changed (see the same document).

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



ìii SEEDUbuntu-16.D4-32bit.zip

10/20/2021 10:32 PM WinRARZIP archive 3,511,283 KB

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.

Create Virtual Machine

Name and operating System
Expert Mode I Next I Cancel
Please choose a descriptive name and destination tolder for the new Virtual
machine and select the type of operating System you intend to install on it.
The name you choose will be used throughout VirtualBox to identihy this
madnine.
Name: ubuntu V16.Ũ4

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.
?X

Create Virtual Machine

Hard disk
If you ự-.,ish you can add a Virtual hard disktũ the new machine. You can
either create a new hard disk fìle or select one from the list or from another
location using the tòkter icon.
If you need a niore comples stcirage set-up you can skip this step and make

the changes to the machine settings onoe the machine Ẽ created.
The recommended siie of the hard diskis 10.00 GB.
o Do not add a Virtual hard disk
o Create a Virtual hard disk now
© Use an existing Virtual hard disk file
Empty

T

n

Cancel

Chọn Add


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
V 5EEDUbuntu-16.O4-ỉ2bit.vmdk

6/11/201912:52 PM Virtual Machine Di...

2 KB

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.


Sau đó ấn Create


Hard disk
If you vvish you can add a Virtual hard disk to the new machine. You can
either create a new hard disk fìle or select one from the lỉst or tròm another
location using the folder icon,
If you need a more complex storage set-up you can skip thĩs step and make
the changes to the machine settĩngs once the machine is created.

C2) Do not add a Virtual hard disk

Use an existing Virtual hard dĩsk fìle
SEEDUbuntu-16.O-q--32bit.vmdk (Normab 20.00 GB)

Cancel

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


Oracle VM VirtualBox Manager
File Machine Help

Tools
New Settings Discard start

Preview

General

ưbuntu V 16.04

Name:

ubuntuv 16.04
Operating System: ubuntu (32-bit)

Powered off

|T| System
Base Memory: 1024 MB
Boot Order: Floppy, Optical, Hard Disk
Acceleration: VT-x/AMD-V, Nested Paging, PAE/NX, KVM Paravirtualization

Ubuntu V16.04

H. Display
Video Memory:
16 MB
Graphics Controller:
VMSVGA
Remote Desktop Server: Disabled
Recording:
Disabled

' storage
Controller: IDE
IDE Secondary Device 0: [Optical Drive] Empty
Controller: SATA
SATA Port 0:
SEEDUbuntu-16.04-32bit.vmdk (Normal, 20.00 GB)
(02 Audio
Host Driver: Windows DirectSound
Controller: ICH AC97


[■£• Netvvork
Adapter 1: Intel PRO/1000 MT Desktop (NAT)

(ỳ USB
lisacnatmllpr- OHTI____________________________________________________

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

td CD

Q[]C£ỉ(õjRigbtcH



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.


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ản
seed, ta thực thi câu lệnh:
seed@VM:~$ cat /etc/passwd
Tì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

pulse:x:117:124:PulseAudio
daemon,,,:/vaũ/run/pulse:/bin/false
rtkit:X:118:126:RealtimeKit,,,:/proc:/bin/false
Isaned:x:119:127::/var/lib/saned:/bin/false
usbmux:x:120:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
c;ppd:ỵ: 1OQO: 1000: ^ppd ; /họmpMppíi: /hin/ha<;h

vboxadd:X:999:1::/var/run/vboxadd:/bin/false
telnetd:X:121:129::/nonexistent:/bin/false
sshd:x:122:65534::/var/run/sshd:/usr/sbin/nologin
ftp:X:123:130:ftp daemon,,,:/srv/ftp:/bin/false
bind:x:124:131::/var/cache/bind:/bin/false

Đầu tiên, để hiển thị ra tồ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ạnh
câu lệnh printenv, để hiển thị tồn bộ các biến cũng có thể dùng lệnh env.


N
gồi ra, nếu cần hiển thị các biến mơi trường chỉ định, ví dụ như PWD thì ta
cũng có thể dùng lệnh printenv PWD thì sẽ chỉ hiển thị ra giá trị của biến PWD. Để nhằm
mụ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 tồn bộ các biến và giá trị có chứa PWD như chuỗi con bên trong
chúng.




[
10/29/21]
seed(WM:-$
/home/seed
[10/29/21]seed@VM:~$
env
PW[=/home/seed
[10/29/21]seed0VM:~S I

prlntenv

PWD

grep

PWD

I

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ơi
trườ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
[10/29/21]seed@VM:-S
export SEEDAGE-5
[10/29/21]seed@VM:~S
echo SEEDAGE
SEEDAGE

echo SSEEDAGE
[10/29/21]seed@VM:-S
5
printenv SEEDAGE
[10/29/21] sccd(aVH: -S
5
env I grep SEEDAGE
[10/29/21]seed@VM:~S
SEEDAGE=5
[10/29/21]seed@VM:~S
Để gỡ biến môi trường này ta dùng câu lệnh:
1
8


seed@VM:~$ unset SEEDAGE

[10/29/21]seedộVMi-í unset SEEDAGE
[10/29/21]seed(ãvM:~S echo SSEEDAGE
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ị.

1
9


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ến

trì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 quy
trì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ản
sao 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 con
hiể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ỏ comment
củ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 output
với lệnh printenv có kết quả tương tự tiến trình p2cc.

2
0


Các tệp sau được tạo do các tác vụ trên:
p2c.c
p2cc
p2cp
child
parent

Chương trình chính của task trên
Tệp thực thi với tiến trình printenv của child process
Tệp thực thi với tiến trình printenv của parent process
File output của child process
File output của parent process


2
1


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
Terminal

[10/29/21]seed@VM:-/.
[10/29/21]seed@VM:~/.
[10/29/21]seedẽvM:-/.
[10/29/21 ] seed[10/29/21]seedẽvM:-/.
[10/29/21]seedỒVM:-/.
[10/29/21]seedẽvM:-/.
67c67
< _=./p2cc
> _=./p2cp
[10/29/21]seed@VM:~/.

./labEV$
./labEVS
./labEVS
:—/. ./labEV$
./labEVS
./labEV$
./LabEV$


u ta * H>)) 5:56 PM

man fork
gcc p2c.c -o p2cc
./p2cc > child
subl p2c.c
gcc p2c.c -o p2cp
7/p2cp > parent
diff child parent

./labEVS II

Đầ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ành
dò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ểu
thị 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 được
thự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ến
mô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ơng
có 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ừa
cho quy trình con, ngoại trừ một biến đó là giá trị tên của chương trình.

2
2



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ưởng
như thế nào khi một chương trình được thực thi thông qua execve(). Hàm execve() gọi
mộ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ếp
củ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ình
mớ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ơi
trườ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ác
output tương ứng và output này sẽ được lưu trữ trong fĩle beforeeditoutput.
Terminal

tị fĩì! $ 4>)) 4:44 AM

_ [11/02/21]seed@VM:~/.../labEV$ subl envex.c
® [11/02/21]seed@VM:~/.../labEV$ Is
child envex.c p2c p2cc p2c.c p2cp parent
[11/02/21]seed@VM:~/.../labEV$ gcc envex.c -0 betoreedi
[11/02/21]seed@VM:~/.../labEV$
./beforeedit
1—1 toutput
■■ [ 11/02/21]seed@VM:~/. . ./labEV$ betoreeditoutput
- 1 bash: ./betoreeditoutput: Permission denied
——


[ll/02/21]seed@VM:~/.../labEV$
bash:
./beĩoreeditoutput:
[11/02/21]seed@VM:~/.../labEV$ ./betoreedit

[11/02/21]seed@VM:~/.../labEV$

betoreedi

./beforeeditoutput
Permission
denied

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

2
3

>


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 output
tương ứng và lưu vào file ìereditoutput.

Như ta quan sát được, khác với beforeeditoutput rỗng thì aftereditoutput lại có output.
tị (3 I H>)) 4:54AM

Terminal


XDG SEAT=seat0
LANGUAGE=en us
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
XDG SESSION DESKTOP=ubuntu
LOGNAME=seed
DBUSSESSION BUS_ADDRESS=unix:abstract=/tmp/dbus-0sj34N
7UrV
J2SDKDIR=/usr/lib/jvm/java-8-Oracle
XDG DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/l
ocal/share/:/us r/share/:/var/lib/snapd/desktop
QT4 IM_MODULE=xim
LESSOPEN=| /usr/bin/lesspipe %s
INSTANCE=
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0
XDG CURRENT_DESKTOP=Unity
GTK IM MODULE=ibus
J2REDIR=/usr/lib/jvm/java-8-oracle/j re
LESSCLOSE=/usr/bin/Iesspipe %s %s
XAUTHORITY=/home/seed/.Xaiithority
=./afteredit
[11/02/21]seed@VM:~/.../tabEV$

2
4


Giải thích cho điều này là mặc dù biến mơi trường chung đã được chỉ định trong
chươ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 đổi
nà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ơng
qua 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ới
quy 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ường
củ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ủa
chương trình.

2
5


×