본문 바로가기
잡동사니

SEED 고급해킹실습 Lab1 [LD_PRELOAD 후킹 공격]

by L3m0n S0ju 2022. 3. 26.

Lab1_Privileged programs (Set-UID programs) and environment variables_.pdf
0.09MB

 

 

Task 2

 

Purpose

부모 프로세스의 환경변수가 자식 프로세스에게 상속이 되는지 확인하는 과제이다.

 

 

Step 1

주어진 코드를 컴파일하고 파일을 실행하면 위 그림과 같이 환경변수 값들이 출력된다.

 

 

 

 

 

Step 2

parent printenv 주석을 해제하면 부모 프로세스의 환경변수가 출력된다.

 

 

 

 

 

 

 

Step 3

diff 명령어로 차이를 비교하면 언더바에 각각의 파일 이름이 들어가있고 나머지는 모두 동일하다.

 

 

 

 

 

 

 

Consideration

부모 프로세스의 환경변수와 자식 프로세스의 환경변수가 동일하므로 환경변수가 상속된다고 볼 수 있다.

 

 

 

 

 

 

 

.


Task3

Purpose

execve 함수를 사용할 때 어떻게 환경변수를 상속할 수 있는지 확인하는 과제이다.

 

 

 

 

Step1

주어진 프로그램을 실행하면 아무것도 출력되지 않는다.

 

 

 

 

 

Step2

null 대신 environ을 입력하고 다시 컴파일 하면 환경변수가 출력된다.

 

 

 

 

 

 

Consideration

extern은 외부 소스의 전역파일을 불러오는 역할을 합니다. environ은 외부 환경변수를 가져오게 되고 execve 3번째 인자에 환경변수 파라미터가 있으면 해당 환경에서 앞 명령어를 실행하게 됩니다. 따라서 처음에 Null 값이 들어있을 때는 환경이 없으므로 환경변수가 출력되지 않고 이후 environ값을 넘겨줬을 때는 환경변수가 출력됩니다.

 

 

 

 

 

 

 

 


Task 5

Purpose

setuid와 환경변수의 위험성을 알아보는 과제이다.

 

export PATH=hello:$PATH

export LD_LIBRARY_PATH=hello:$LD_LIBRARY_PATH

export Lemon_soju=hello:$Lemon_soju

 

위 세가지 명령어로 환경변수에 hello를 추가했다. 아래 그림과 같이 각 변수의 젤 앞에 입력한 hello가 제대로 들어있는 것을 확인했다.

 

 

 

 

 

 

 

setuid가 설정된 foo를 실행하면 환경변수에 hello가 들어있는 것을 확인할 수 있다.

 

 

 

 

Consideration

seed 계정에서 root 권한으로 파일을 실행했는데 seed 계정의 환경변수가 들어있으므로 seed는 환경변수를 조작할 수 있기 때문에 보안상 문제가 될 것 같다.

 

 

 

 

 

 

 

 

 

 


Task7

Purpose

LD_PRELOAD가 언제 적용 가능하고 불가능한지 알아보는 과제이다.

 

 

• Make myprog a regular program, and run it as a normal user.

 

seed 계정으로 myprog를 실행하면 I am no sleeping!이라는 문구가 출력된다.

 

 

 

 

 

 

• Make myprog a Set-UID root program, and run it as a normal user.

 

myprog root setuid로 설정하고 seed 계정으로 실행하면 1초동안 프로세스가 멈췄다가 종료된다.

 

 

 

 

 

 

 

• Make myprog a Set-UID root program, export the LD PRELOAD environment variable again in the root account and run it.

 

root 계정으로 전환 후 환경변수에 LD_PRELOAD 값에 libmylib.so.1.0.1을 추가하고 실행하면 I am not sleeping! 이라는 문구가 출력된다.

 

 

 

 

 

 

• Make myprog a Set-UID user1 program (i.e., the owner is user1, which is another user account), export the LD PRELOAD environment variable again in a different user’s account (not-root user) and run it.

 

lemon이라는 사용자를 추가하고 lemon 계정에서 LD_PRELOAD를 추가하고 실행했다. 그리고 다시 seed 계정에서 myprog를 실행하니 프로세스가 1초동안 멈췄다.

 

 

 

 

 

Consideration

 

LD_PRELOAD setuid가 걸려있거나 다른 소유자의 파일의 경우 영향을 줄 수 없다. 자기 자신의 파일에만 LD_PRELOAD를 이용해 후킹을 할 수 있다.

'잡동사니' 카테고리의 다른 글

git 정리  (0) 2022.11.06
SEED 고급해킹실습 Lab2 [RTL 공격]  (0) 2022.03.26
에이티식스 리뷰  (0) 2022.01.28
목소리의 형태 리뷰  (0) 2022.01.02
Git 사용법  (0) 2021.12.31

댓글