본문 바로가기
취약점 진단/UNIX 취약점 진단

[UNIX] U-05 root홈, 패스 디렉터리 권한 및 패스 설정

by 게으른 피글렛 2024. 10. 5.
반응형

U-05 root홈, 패스 디렉터리 권한 및 패스 설정

항목중요도 : 상

1. 취약점 개요

▶ 점검내용 : root 계정의 PATH 환경변수에 “.”이(마침표) 포함되어 있는지 점검

 점검목적 : 비인가자가 불법적으로 생성한 디렉터리 및 명령어를 우선으로 실행되지 않도록 설정하기 위해 환경변수 점검이 필요함

 보안위협

 · root 계정의 PATH(환경변수)에 정상적인 관리자 명령어(예: ls, mv, cp등)의 디렉터리 경로 보다 현재 디렉터리를 지칭하는 “.” 표시가 우선하면 현재 디렉터리에 변조된 명령어를 삽입하여 관리자 명령어 입력 시 악의적인 기능이 실행 될 수 있음 

 참고

※ 환경변수: 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 집합으로 Path 환경변수는 실행파일을 찾는 경로에 대한 변수임

2. 점검대상 및 판단 기준

  대상 : SOLARIS, LINUX, AIX, HP-UX 등

  판단기준

 · 양호 : PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되지 않은 경우

 · 취약 : PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되어 있는 경우

  조치방법 : root 계정의 환경변수 설정파일(“/.profile”, “/.cshrc” 등)과 “/etc/profile” 등에서 PATH 환경변수에 포함되어 있는 현재 디렉터리를 나타내는 “.”을 PATH 환경변수의 마지막으로 이동
※ “/etc/profile”, root 계정의 환경변수 파일, 일반계정의 환경변수 파일을 순차적으로 검색하여 확인

 

3. LINUX 초기 설정값

※ 테스트한 LINUX의 버전은 AWS로 구성된 CentOS 9 입니다.

 

확인방법

$ echo $PATH

출력되는 PATH 변수 내에 “.” 또는, “::” 포함 여부 확인합니다. 존재할 경우 취약입니다.

 

[ec2-user@localhost ~]$ echo $PATH
/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

쉘이 명령어를 입력할 때, 이 경로들을 순서대로 검색하여 해당 명령어가 존재하는지 확인합니다. 첫 번째로 찾은 경로에서 실행 가능한 파일을 발견하면 그 파일을 실행합니다.

 

1순위 /home/ec2-user/.local/bin

2순위 /home/ec2-user/bin

3순위 /usr/local/bin

4순위 /usr/bin

5순위 /usr/local/sbin

6순위 /usr/sbin

 

1순위 /home/ec2-user/.local/bin 에도 /.이 존재하는데 이부분은 취약이 아닙니다.

/.은 현재 디렉터리를 나타내는 것입니다.

 

취약의 경우는 

:.:

.:

입니다.

4. 조치

조치가 필요할 경우 직접 경로에 들어가서 수정해줘야합니다.

[ec2-user@localhost ~]$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
    PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
        for rc in ~/.bashrc.d/*; do
                if [ -f "$rc" ]; then
                        . "$rc"
                fi
        done
fi

unset rc

PS1='[\u@localhost \W]\$ '

 

# User specific environment 하단을 아래와 같이 변경합니다.

차이를 보이기 위해 /.local -> /local 로 수정하여 반영할 겁니다.

# User specific environment
# 기존에 기재되어있던 부분은 주석처리했습니다.
#if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
#then
#    PATH="$HOME/.local/bin:$HOME/bin:$PATH"
#fi
PATH="$HOME/local/bin:$HOME/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin"
    
export PATH

 

수정 저장 후 아래 명령어로 변경사항을 적용합니다.

# 변경사항 적용 명령어
$ source ~/.bashrc

 

 

 

5. 결과

경로가 이렇게 뜹니다.

변경 완료입니다!

[ec2-user@localhost ~]$ echo $PATH
/home/ec2-user/local/bin:/home/ec2-user/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

 

 

※ PATH경로는 계정별로 수정해야합니다.

다른 계정의 경우 반영되지 않음을 확인 할 수 있습니다! 꼭 계정별로 점검하셔서 취약한지 확인하셔야 합니다!

[it-mskim@ip-172-31-8-135 ~]$ echo $PATH
/home/it-mskim/.local/bin:/home/it-mskim/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

 

 

Linux를 마스터하는 그날까지

화이팅!

 

반응형