본문 바로가기

보안

보안기사 - UNIX/Linux 서버 시스템 보안

패스워드 관리

과거에는 사용자의 패스워드를 /etc/passwd 파일의 두 번째 필드에 저장했지만 최근에는 /etc/shadow 파일에 암호화된 패스워드 저장

/etc/passwd 파일

  1. root 계정은 시스템에 대한 총괄 권한 가져 공격자의 목표가 될 수 있으므로, 원격 접속을 금지한다. su를 허용하는 계정 그룹을 생성하여 해당 계정으로 접속 후 root 계정으로 전환하여 사용하도록..
  2. /etc/passwd 파일의 두 번째 필드(사용자 비밀번호)가 x인 것은 shadow 패스워드 사용한다는 의미
  3. 임의로 생성된 계정에 UID가 0으로 부여되어 있다면 root 권한 탈취를 위한 행위로 의심
  4. GID 도 마찬가지
  5. 로그인이 불필요한 계정(시스템 및 어플리케이션 계정)은 로그인을 금지하는 것이 보안상으로 안전 (login_shell 필드를 /sbin/nologin 또는 /bin/false로 설정)

/etc/shadow 파일

계정별 암호화된 패스워드 정보와 패스워드 aging정보가 저장되어 있다 (시간의 흐름에 따른 패스워드 관리정책)
[user_account]:[encrypted_password]:[last_change]:[minlife]:[maxlife]:[warn]:[inactive]:[expires]

  • aging 정보

    필드명 설명
    last_change 마지막으로 패스워드 변경한 날 (1970.1.1 기준으로 일수로 표시)
    minlife 패스워드 최소 사용기간 설정. last_change 이후부터 패스워드 변경할 수 없는 일수 (1일, 1주 권장)
    maxlife 패스워드 최대 사용기간 설정. last_change 이후부터 패스워드 만료 일수 (90일, 12주 권장)
    warn 패스워드 만료 이전 경고일수
    inactive (Linux) 패스워드 만료 이후 계정 잠기기 전까지 비활성 일수. 비활성 기간 동안 패스워드 변경하지 않으면 계정 잠김.
    (Unix) 마지막 로그인 이후 비활성 일수동안 로그인 하지 않으면 계정 잠김
    expires 계정 만료일 설정 (1970.1.1 기준으로 일수로 표시)
  • encrypted_password 필드
    $id$salt$encrypted_password 형식
    encrypted_password 필드에는 해시값이 들어가지만, 아래와 같은 기호가 설정될 수 있다

    [Linux]

    기호 설명
    * 패스워드가 잠긴 상태. 패스워드 로그인은 불가하지만 별도의 인증방식을 사용해 로그인 가능(ex. SSH 인증키)
    !! 패스워드가 잠긴 상태로 모든 로그인 불가
    빈값 패스워드 설정되지 않은 상태. 패스워드 없이 로그인 가능

    [Unix(SunOS)]

    기호 설명
    NP No Password. 로그인이 불가능한 계정. 시스템 및 어플리케이션 계정 용도로 주로 사용
    *LK* Lock. 패스워드가 잠긴 상태로 로그인 불가능
    빈값 패스워드 설정되지 않은 상태. 로그인시 패스워드 설정과정 진행

프로세스 실행권한 (SUID, GUID)

  • EUID, GUID
    프로세스의 자원에 대한 접근권한 판단하기 위해 부여하는 ID

    이름 설명
    RUID (Real User ID) 프로세스를 실행시킨 사용자의 UID
    RGID (Real Group ID) 프로세스를 실행시킨 사용자의 GID
    EUID (Effective User ID) 프로세스가 실행중인 동안에만 부여되는 UID. 자원 접근권한 판단 위한 UID로 사용
    EGID (Effective Group ID) 프로세스가 실행중인 동안에만 부여되는 GID. 자원 접근권한 판단 위한 GID로 사용
  • SUID(Set UID), SGID(Set GID)
    프로세스가 실행중인 동안에 해당 실행파일의 소유자, 소유그룹의 권한으로 자원에 접근할 수 있도록 하는 권한 설정

  • 특수권한 비트
    4 : s(suid)
    2 : s(sgid)
    1 : t(sticky-bit)
    • ex) 755 접근권한 a.out 파일에 suid 설정
      chmod u+s a.out
      chmod 4755 a.out
  • root 소유의 실행파일에 SUID 권한 설정하면 RUID는 실행자의 UID, EUID는 root의 UID(0)로 설정됨
    -> 실행프로그램 내에서 자원에 접근할 때 EUID 설정에 따라 root 권한으로 접근하게 됨


    ex) passwd 명령어 - SUID, SGID가 설정되어 있어 root만 접근 가능한 /etc/shadow 파일에 접근하여 패스워드 변경할 수 있는 것
    주기적으로 검사 필요
    find / -user root -type f ( -perm -4000 -o -perm -2000 ) -exec ls -al {} ;
    chmod -s 파일명 : suid, sgid 권한 모두 제거

  • 디렉터리 접근권한 (sticky-bit)
    sticky-bit가 설정된 디렉터리는 모든 사용자들이 자유롭게 파일을 생성하되 파일 삭제나 파일명 변경은 소유자 또는 root만이 가능
    일반적으로 공유 디렉터리(/tmp, /var/tmp)에 설정

    • ex) /tmp 디렉터리에 sticky-bit 설정
      chmod o+t /tmp (Unix는 u+t로 지정)
      chmod 1777 /tmp