본문 바로가기
Hacking/infra 진단

[Linux] U-17 (상) $HOME/.rhosts, hosts.equiv 사용 금지

by 알거음슴 2021. 8. 23.
취약점 개요
점검 내용 /etc/hosts.equiv 파일 및 .rhosts 파일 사용자를 root 또는, 해당 계정으로 설정한 뒤 권한을 600으로 설정하고 해당파일 설정에 ‘+’ 설정(모든 호스트 허용)이 포함되지 않도록 설정되어 있는지 점검
점검 목적 r’ command 사용을 통한 원격 접속은 인증 없이 관리자 원격접속이 가능하므로 서비스 포트를 차단해야 함
보안 위협 login, rsh 등과 같은 ‘r’ command의 보안 설정이 적용되지 않은 경우, 원격지의 공격자가 관리자 권한으로 목표 시스템상의 임의의 명령을 수행시킬 수 있으며, 명령어 원격 실행을 통해 중요 정보 유출 및 시스템 장애를 유발시킬 수 있음. 또한 공격자 백도어 등으로도 활용될 수 있음
r-command(rlogin, rsh) 서비스의 접근통제에 관련된 파일로 권한설정을 미 적용한 경우 r-command 서비스 사용 권한을 임의로 등록하여 무단 사용이 가능함
참고 ‘r’command: 인증 없이 관리자의 원격접속을 가능하게 하는 명령어들로 rsh(remsh), rlogin, rexec 등이 있으며, 포트번호 512,513,514 (TCP)를 사용함
점검대상 및 판단 기준
대상 LINUX
판단기준 양호 : login, shell, exec 서비스를 사용하지 않거나, 사용 시 아래와 같은 설정이 적용된 경우
 1. /etc/hosts.equiv $HOME/.rhosts 파일 소유자가 root 또는, 해당 계정인 경우
 2. /etc/hosts.equiv $HOME/.rhosts 파일 권한이 600 이하인 경우
 3. /etc/hosts.equiv $HOME/.rhosts 파일 설정에 ‘+’ 설정이 없는 경우
취약 : login, shell, exec 서비스를 사용하고, 위와 같은 설정이 적용되지 않은 경우
조치 방법 Step 1) /etc/hosts.equiv $HOME/.rhosts 파일 소유자를 root 또는, 해당 계정으로 변경
Step 2) /etc/hosts.equiv $HOME/.rhosts 파일 권한을 600 이하로 변경
Step 3) /etc/hosts.equiv $HOME/.rhosts 파일에서 “+”를 제거하고 반드시 필요한 호스트 및 계정만 등록 (해당 내역 요청)

 

점검 및 조치
점검 Step 1) 파일 소유자 및 권한 확인
 #ls –al /etc/hosts.equi
 #ls –al $HOME/.rhosts
 rw------- root <hosts.equiv 파일>
 rw------- root <$HOME/.rhosts 파일>
Step 2) 계정 별 ‘+’ 부여 적절성 확인
 #cat /etc/hosts.equiv
 #cat $HOME/.rhosts
/etc/hosts.equiv : 서버 설정 파일
$HOME/.rhosts : 개별 사용자의 설정 파일
/etc/hosts.equiv $HOME/.rhosts” 파일의 소유자가 root가 아니거나 파일의 권한이 600이 아닌 경우 아래의 보안설정방법에 따라 설정을 변경함
조치 Step 1) “/etc/hosts.equiv” “$HOME/.rhosts” 파일의 소유자를 root 또는, 해당 계정으로 변경
 #chown root /etc/hosts.equiv
 #chown <user_name> $HOME/.rhosts
Step 2) “/etc/hosts.equiv” “$HOME/.rhosts” 파일의 권한을 600 이하로 변경
 #chmod 600 /etc/hosts.equiv
 #chmod 600 $HOME/.rhosts
Step 3) “/etc/hosts.equiv” “$HOME/.rhosts” 파일에서 “+”를 제거하고 허용 호스트 및 계정 등록
 #cat /etc/hosts.equiv (or $HOME/.rhosts)

 

점검 스크립트

#!/bin/bash

. function.sh

BAR
CODE [U-17] $HOME/.rhosts, hosts.equiv 사용 금지
cat << EOF >> $RESULT
[양호]: login, shell, exec 서비스를 사용하지 않거나, 사용 시 아래와 같은 설정이 적용된 경우
   1. /etc/hosts.equiv 및 $HOME/.rhosts 파일 소유자가 root 또는, 해당 계정인 경우
   2. /etc/hosts.equiv 및 $HOME/.rhosts 파일 권한이 600 이하인 경우
   3. /etc/hosts.equiv 및 $HOME/.rhosts 파일 설정에 ‘+’ 설정이 없는 경우
[취약]:  login, shell, exec 서비스를 사용하고, 위와 같은 설정이 적용되지 않은 경우
EOF
BAR

FILENAME1='/etc/hosts.equiv'
FILENAME2=~/.rhosts

# 1) service edable?
SERVICE=$(systemctl list-unit-files | grep rsh.socket | awk '{print $2}') # enabled|disabled

if [ $SERVICE = 'enabled' ] ; then
   INFO "서비스가 활성화 되어있습니다."
   # 2) hosts/equiv check / $HOME/.rhosts check
   CHECK1=$(find $FILENAME1 -user root -perm 600 2>/dev/null)
   CHECK2=$(find $FILENAME2 -user root -perm 600 2>/dev/null)
   if [ -n "$CHECK1" ] && [ -n "$CHECK2" ] ; then
      CONFIG1=$(cat $FILENAME1 | grep "+")
      CONFIG2=$(cat $FILENAME2 | grep "+")
      if [ -n "$CONFIG1" ] && [ -n "$CONFIG2" ] ; then
         OK "login, shell, exec 서비스를 사용하지 않거나, 사용 시 아래와 같은 설정이 적용된 경우"
      else
         VULN "login, shell, exec 서비스를 사용하고, 위와 같은 설정이 적용되지 않은 경우"
      fi
   else
      VULN "login, shell, exec 서비스를 사용하고, 위와 같은 설정이 적용되지 않은 경우"
   fi
else
   VULN "login, shell, exec 서비스를 사용하고, 위와 같은 설정이 적용되지 않은 경우"
fi

cat $RESULT