환경 변수(Environment Variable)는 운영 체제에서 사용하는 매번 변할 수 있는 동적인 값들의 모임이다.
시스템의 정보를 갖고 있는 변수를 뜻하며 사용자가 직접 추가 및 수정하거나 삭제할 수 있는 값이다.
리눅스에서 제공하는 명령어들은 "/bin", "/usr/bin" 등의 디렉터리에 위치하는데
우리가 명령어를 입력하면 환경 변수에 명시된 디렉터리에서 명령어를 탐색하고 실행하기 때문에 명령어의 경로를 입력하지 않아도 된다.
환경 변수는 터미널 뿐만 아니라 프로그램에서도 참조한다.
프로그램에서도 명령어를 실행해야 하는 경우에 절대 경로를 입력하지 않아도 명령어를 실행할 수 있다.
이 또한 프로세스를 로드하면서 환경 변수를 초기화하기 때문이다.
환경 변수에 대한 정보는 스택 영역에 존재하며
라이브러리 함수를 실행할 때에도 해당 정보를 참조하기 때문에 환경 변수를 가리키는 포인터가 별도로 선언되어 있다.
(그게 바로 environ!)
envrion 포인터는 로더의 초기화 함수에 의해서 초기화된다.
따라서 해당 라이브러리 주소를 알고 있고 임의의 주소를 읽을 수 있는 취약점이 있다면 스택 주소를 알아낼 수 있다.
그러니까 environ은 환경변수의 값을 가리키는 이중포인터인 걸로 이해했다..
(environ -> 환경변수 배열 -> 환경변수 값)
레퍼런스
https://learn.dreamhack.io/270#4
https://aidencom.tistory.com/189
'background > linux' 카테고리의 다른 글
ptmalloc2 (0) | 2022.11.01 |
---|---|
함수의 프롤로그와 에필로그 (0) | 2022.10.29 |
ELF 파일 보호 기법 (0) | 2022.10.08 |
mprotect (0) | 2022.09.29 |
NOP Sled & RET Sled (0) | 2022.09.29 |