본문 바로가기
공부/리눅스

2-10~13. 리눅스 취약점 조치(파일 및 디렉토리 관리) - 시작 및 환경 파일 등 점검

by SLkittys 2024. 1. 31.
728x90

1. 계정관리

   1 - 1. Root 계정 원격접속 제한  * KISA 다운로드 링크 포함

   1 - 2. PW 설정

   1 - 3. 계정 잠금 임계값 설정

   1 - 4. PW 파일 보호

2. 파일 및 디렉토리 관리

   2 - 1. root 홈, 패스 디렉터리 권한 및 패스 설정

   2 - 2. 파일 및 디렉토리 소유자 설정

   2 - 3 ~ 8. /etc 하위 디렉토리 파일 소유자 및 권한 설정

   2 - 9. SUID, SGID, 설정 파일 점검

   2 - 10 ~ 13. 시작 및 환경 파일 등 점검 (현재글)

 

 가. 사용자, 시스템 시작파일 및 환경파일 소유자 및 권한 설정

    1) 앞전에 2 - 1. root 홈, 패스 디렉터리 권한 및 패스 설정 에서 환경변수를 잠깐 다루었었다.

        홈 디렉터리의 환경변수를 root와 해당 디렉터리의 파일 소유자 외의 다른 사용자가 쓰기 권한이 있다면

        악용될 여지가 있기 때문에 보안에 취약해진다.

        점검해야할 홈디렉터리 환경변수 파일은 여러가지가 있으나, 이는 OS버전 등에 따라 여러가지로 나눠지는데

        통상 있는 파일 종류들은 다음과 같다.

ㆍ .profile
ㆍ .kshrc
ㆍ .cshrc
ㆍ .bashrc
ㆍ .bash_profile
ㆍ .login
ㆍ .exec
ㆍ .netrc
등등...

 

User 계정의 홈디렉토리

'.ICEauthority'와 'Xauthority', '.esd_auth'는 이름만 봐도 알겠지만 인증관련 파일이다.
'.bash_history'는 쉘에서 실행한 명령어의 기록들을 저장하는 곳으로 기본적으로 세션 종료 전까지 저장한다.
'.bash_logout'은 사용자가 로그아웃 시 GUI가 아닌 환경에서 화면을 지우는 등

사용자의 셸을 종료시킬때 마무리작업을한다.

위와 같은 파일들을 제외하면
필자의 경우 '.bash_profile', '.bashrc', '.zshrc' 정도가 있다.

아까도 말했지만, OS 버전 및 본인이 사용하는 환경에 따라 환경변수의 종류는 다르기 때문에 직접 확인하는 것이 좋겠다.
이렇게 확인한 후 만약 해당 홈디렉터리의 소유자와 root외에 다른 사람도 쓰기권한이 있다면

$ chown      - 소유자 변경
$ chmod o-w                      - 일반 사용자 쓰기 권한 제거

위와 같이 조치해주도록 하자.

 

 나. world writable 파일 점검

    1) world writable 파일이란 : 파일을 모든 사용자에 대해 쓰기가 허용된 파일

        ex) rwxrwxrwx root root <파일명>

         

       당연한 얘기지만... 모든사용자가 RW권한 및 실행권한이 있는 root의 파일에 접근이 가능해진다는건..

       굳이 설명이 필요한가 싶다.

파일 존재 여부 확인방법(root에서 실행)

# find / -type -f -perm -2 -exec ls -l {} \;

시스템 전체에서 권한이 2인 파일을 찾으라는 명령어이다.
(권한이 2인 파일 = 그룹에 쓰기 권한이 부여된 파일)

 

world writable 파일이 존재할 경우 사용 목적을 명확하게 알고 불필요 한 경우에 삭제해야한다.

필요한 파일일 경우 일반 사용자의 쓰기 권한을 제거해주자.

 

하지만 이렇게해서 검색을한다면...

너무 많이나온다.

 

정말 필요한 파일이라면 최근에도 지속적으로 사용을 했을터!

다음의 명령어를 사용하겠다.

# find / -type f -perm -2 -mtime -7 -exec chmod o-w {} \;

해당 명령어는 시스템 전체에서 권한이 2로 설정된 파일들 중, 일주일 이내 수정된 파일을 찾고,

chmod o-w 를 사용해 일반 사용자의 쓰기 권한을 제거하는 명령어이다.

o-w는 other(o) 에서 write(w) 권한을  빼는(-) 명령어이다.

 

해당 명령어를 실행하게되면

대부분 changing permissions.... 라고 뜨며 거부될 것이다.

아마 수많은 파일들에서 명령을 허용하지 않을 수 있는데, 안정성을 위한 경우로

권한이 없으면 안되기 때문에 시스템 상 수정이 안되는 것이 당연하다.

 

 다. /dev에 존재하지 않는 device 파일 점검

    1) 다음의 명령어를 통해 점검한다.

# find /dev -type f -exec ls -l {} \;

보통은 아무것도 안뜰텐데, 불필요한 device 파일 존재 시 삭제를 권고한다.

 

 라. $HOME/.rhosts, hosts.equiv 사용 금지

    1) 아래의 명령어를 사용하여 점검한다.

# ls -al /etc/hosts.equiv

$ ls -al .rhosts

 

rocky8에서는 해당 서비스들을 지원하지 않는다.

하지만 구서비스에서는 여전히 rlogin, rsh 등 'r' comman를 사용하니 확인 후 조치가 필요하다.

 

필요한 조치 내역은 다음과 같다.

1) /etc/hosts.equiv 및 $HOME/.rhosts 파일 소유자를 root 또는 해당 계정으로 변경
    # chown root /etc/hosts.equiv
    # chown <user_name> $HOME/.rhosts

2) /etc/hosts.equiv 및 $HOME/.rhosts 파일 권한을 600 이하로 변경
    # chmod 600 /etc/hosts.equiv
    # chmod 600 $HOME/.rhosts

3) /etc/hosts.equiv 및 $HOME/.rhosts 파일에서 '+'를 제거하고 최소한의 허용 호스트 및 계정을 등록한다.
    # vi /etc/hosts.equiv(or $HOME/.rhosts)

아래에서 +를 찾아 제거한다.
---------------------------------------------
+          +     : 모든 호스트의 계정을 신뢰
+         test   : 모든 호스트의 test 계정을 신뢰
Web1   +     : Web1 호스트의 모든 계정을 신뢰

 

728x90