Major Study./System hacking

시스템 보안 03.쉘 환경변수 변경 문제

sosal 2010. 11. 22. 04:45
반응형

/*
 http://sosal.tistory.com/
 * made by so_Sal
 */

환경변수? / 네이버 백과사전
시스템의 속성을 기록하고 있는 변수라는 IT용어로, OS의 셸 등에 설정되어 있다. 변수의 이름과 의미는 미리 정해져 있기 때문에 환경변수를 읽으면 시스템의 설정을 어느 정도 알 수 있다. 사용자가 의도적으로 변환할 수 있는 환경변수도 많으며, 특히 웹 브라우저에서는 자신의 정체를 숨길 목적으로 브라우저 등의 변수를 변환하는 경우도 있다.

일단 접속해봅시다.



-------

사용자의 쉘환경변수들은 그 설정값에 따라 때로는 보안상의 문제점을 야기시키기도 한다.
현재의 bash 쉘환경변수 설정을 살펴보고 보안상 문제가 있는 부분을 바로 잡으시오.

단, 이문제에서는 현재 접속되어 있는 쉘에 대해서만 일회성으로 바로잡으면 되며,
쉘환경변수 값을 영구적으로 바로잡기 위해 resource파일을 변경할 필요는없다.

-------

문제를 풀기 위해서, 쉘 환경변수의 설정을 살펴봐야겠다.

# export
export를 치면, 현재 사용자의 화면에 켜져있는 쉘의 환경변수 목록이 출력됩니다.



declare -x PATH="./:/usr/sbin:/usr/bin:/usr/ucb:/etc"
이부분이 문제의 핵심입니다.


일반적인 환경변수는 어떨까요? (제가 개인적으로 사용하는 리눅스 일반계정의 PATH 환경변수입니다.)
declare -x PATH="/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/sosal/bin"

일반 사용자들이 ls, cd, ps, w 등, 많은 명령어를 사용하는데,
이런 명령어들은 대부분 /bin/ 디렉토리에 저장되어있는 ELF 실행파일입니다.
실행파일이면, 절대경로를 입력하지않았는데, 명령어들이 실행되는 이유는 바로 환경변수 때문입니다.

제 서버 계정의 PATH 환경변수에, /bin 풀더가 올라와 있기 때문에,
/bin 디렉토리 안에있는 ls, cd 등의 명령어들이 제 쉘에서
절대경로를 입력하지 않아도, 자동으로 실행되는 것입니다

문제에서는 현재 디렉토리 "./"가 가장 처음으로 등록되어 있습니다.
그말은, ls라는 명령어를 쳤을 때, 현재 디렉토리에 ls라는 프로그램이
있는지 가장 먼저 조사 한 후, 가장 우선적으로 실행한다는 뜻입니다.

보안상 문제점 :
간단한 예를 들자면, su와 같은 비밀번호를 필요로 하는 프로그램을 실행시킬 때,
누군가 악의적으로 사용자가 위치한 디렉토리에 같은 이름의 프로그램을 만들어,
패스워드를 빼돌리도록 한다면 공격자에게 패스워드를 노출시키는 일이 일어날 수 있게됩니다.


따라서 이 문제를 해결하기 위해서는, PATH 환경변수의 젤 첫번째에 등록되어 있는
"./" 위치를 없애거나, 뒤로 옮기면 되겠습니다.
# export PATH="/usr/sbin:/usr/bin:/usr/ucb:/etc:./"

//finish


문제에서 "쉘환경변수 값을 영구적으로 바로잡기 위해 resource파일을 변경할 필요는없다."
라는 말을 했는데, 만약 쉘을 로그인 하였을때 PATH의 환경변수가 이 문제의 값과
같은것으로 초기화 된다면 계속적으로 환경변수를 바꿔줘야만 합니다.

이를 편하게 하기 위해, 쉘이 실행될 때
자동으로 환경변수를 바꾸는 .bashrc 파일을 변조해 보겠습니다.

제 서버에 일반 계정(sosal)으로 막 접속했을 때, 환경변수들 입니다.


자동으로 "sosal" 이라는 환경변수를 생성해보겠습니다.



이렇게 등록을 해주시면, 이제부터 sosal이란 아이디로 로그인 할 시,
sosal이란 환경변수를 "My_name_is_sosal" 이란 값으로 자동으로 등록하여 줍니다.




참고 : 네이버 백과사전, 리눅스 man-page