반응형
정보보안기사 필기 4-5. 유닉스/리눅스 서버 보안(패스워드 관리, 프로세스 실행권한)
1. 시스템 보안
1) 사용자 패스워드 관리
- 패스워드 저장 정책에는 passwd(/etc/passwd) 파일 내 계정 정보와 함께 저장하는 "일반 패스워드 정책"과 shadow(/etc/shadow) 파일에 패스워드를 별도로 저장하는 "shadow 패스워드 정책"이 있다.
- 유닉스/리눅스 시스템에서는 shadow 파일에 암호화된 패스워드를 저장하고 root만이 접근할 수 있도록 제한하여 패스워드 보안을 강화하고 있다.(passwd 파일의 두 번째 필드에 저장하는 방식 X)
1-1) passwd(/etc/passwd) 파일
user_account | user_password | user_ID | group_ID | comment | home_directory | login_shell |
- user_account : 사용자 계정명, root 계정은 시스템에 대한 총괄 권한을 가지고 있는 계정으로 공격자의 목표가 될 수 있으므로 원격 접속을 금지하는 것이 보안상 안전하다.
- user_password : 사용자 패스워드, x의 의미는 패스워드를 사용하지 않는다는 것이 아니라 shadow 패스워드를 사용한다는 의미이다.
- UID : 사용자 ID, root(관리자) 계정의 경우 0으로 부여한다. UID는 중복되어 사용될 수 있으며 동일한 UID가 부여된 계정은 계정명이 달라도 동일한 권한을 부여받는다. 따라서 임의로 생성된 계정에 UID가 0으로 부여되어 있다면 이는 root 권한 탈취를 위한 행위로 의심해 보아야한다.
- GID : 사용자 기본 그룹 ID, root(관리자) 그룹의 경우 0으로 부여한다. GID도 UID와 동일하게 중복되어 부여될 수 있으므로 임의로 생성된 그룹에 GID가 0으로 부여되어있는지 점검해야 한다.
- comment : 설명, 사용자 관련 기타 정보로 일반적으로 사용자 이름을 설정한다.
- home_directory : 홈 디렉터리, 로그인에 성공한 후에 사용자가 위치할 홈 디렉터리로 root(관리자) 계정은 "/root" 디렉터리를 사용하며 일반 사용자는 "/home" 디렉터리 하위에 위치한다.
- login_shell : 로그인 쉘, 리눅스의 경우 기본 쉘로 bash 쉘을 사용한다. 로그인이 불필요한 계정에 대해서는 로그인을 금지하는 것이 보안상 안전하다.
1-2) shadow(/etc/shadow) 파일
user_account | encrypted_password | last_change | minlife | maxlife | warn | inactive | expires |
- 패스워드 정보를 평문으로 저장할 경우 정보 유출 피해가 발생할 수 있으므로 패스워드를 암호화하여 보호해야한다.
- shadow 패스워드를 사용하여 암호화된 패스워드가 저장되도록 하고 관리자만이 읽을 수 있도록 제한한다. 기본적으로 root(관리자)만이 읽을 수 있도록 기본 접근권한이 설정되어 있다.
- shadow 파일에는 계정별 암호화된 패스워드 정보와 패스워드 에이징(aging) 정보가 저장되어 있다. 패스워드 에이징 정보는 시간의 흐름에 따른 패스워드 관리정책을 말한다.
- user_account : 사용자 계정명
- encrypted_password : 암호화된 패스워드패스
※ "$ID$Salt$encrypted_password" 형식으로 구성
① ID : 암호화에 적용된 일방향 해시 알고리즘을 식별하기 위한 ID
- 1 : MD5(안전 ▼)
- 2 : BlowFish
- 5 : SHA-256
- 6 : SHA-512
② 솔트(Salt) : 패스워드 암호화 강도를 높이기 위한 임의의(랜덤) 값으로 사용자가 지정한 패스워드에 서로 다른 솔트를 추가하여 암호화된 패스워드(해시값)를 생성한다.
- 동일한 패스워드여도 솔트에 의해서 실제 암호화된 패스워드(해시값)는 서로 다르다.
- 레인보우 테이블(Rainbow Table) 공격에 효과적으로 대응할 수 있다.
- 레인보우 테이블(Rainbow Table) 공격 : 사전에 해시값을 계산해 두고 그 해시값에 해당하는 평문을 알아내는 공격 기법
③ encrypted_password : 사용자 패스워드에 솔트를 조합하여 해시한 해시값, 암호화된 패스워드
- ID값 중 [*]은 패스워드가 잠긴 상태로 로그인 불가, [!!]는 기본적으로 사용자 계정을 생성하고 패스워드를 설정하지 않으면 [!!]로 설정되며 모든 로그인이 불가, [ ]은 패스워드가 설정되지 않은 상태이지만 로그인이 가능
- last_change : 마지막으로 패스워드 변경한 날(1970년 1월 1일 기준으로 일수로 표시)
- minlife(aging 정보) : 패스워드 최초 사용기간 설정으로 패스워드를 마지막으로 변경한 날 이후부터 패스워드를 변경할 수 없는 일수를 의미한다.
- maxlife(aging 정보) : 패스워드 최대 사용기간 설정으로 패스워드를 마지막으로 변경한 날 이후로부터 패스워드 만료 일수를 의미한다.
- warn(aging 정보) : 패스워드 만료 이전 경고일수를 의미한다.
- inactive(aging 정보) : 패스워드가 만료된 이후 계정이 잠기기 전까지 비활성 일수로 해당 비활성 기간 동안에 패스워드를 변경하지 않으면 계정이 잠기게 된다.
- expires(aging 정보) : 계정 만료일 설정
- 패스워드 잠금 설정(Lock) 명령 : passwd -l [계정명]
- 패스워드 잠금 해제(Unlock) 명령 : passwd -u [계정명]
- 패스워드 설정 해제 명령 : passwd -d [계정명]
1-3) 리눅스 패스워드 정책 설정파일(/etc/login.defs)
- 패스워드 최소 사용일수(mindays) 테스트 : 최근 암호기억을 무력화하고 자주사용하는 패스워드를 지속해서 사용하는 것을 막기위해 설정하는 값(1일로 설정하면 1일이 지나야 패스워드 변경이 가능)
- 패스워드 만료전 경고 일수(Warn days) 테스트
- 패스워드 최대 사용일수(Max days) 및 비활성화 일수(Inactive days) 테스트
1-4) 패스워드 저장 정책 변경(pwconv)
- pwconv 명령어 : 사용자 계정 패스워드 저장 정책을 shadow 패스워드 정책(암호화된 패스워드 별도 저장)으로 변경하는 명령어
- pwunconv 명령어 : 사용자 계정 패스워드 저장 정책을 일반 패스워드 정책(passwd 파일 내 계정 정보와 함께 저장)으로 변경하는 명령어
2. 프로세스 실행권한[SUID, SGID]
1) 프로세스 ID 종류
1-1) 프로세스 관련 식별 ID
- PID, PPID, PGID, SID
1-2) 프로세스 자원접근 권한 판단하기 위한 ID
- RUID(Real User ID) : 실행파일(프로세스)을 실행시킨 사용자의 ID
- RGID(Real Group ID) : 실행파일(프로세스)을 실행시킨 사용자의 GID
- EUID(Effective User ID) : 프로세스가 실행중인 동안만 부여되는 UID로 자원 접근권한을 판단하기 위한 UID로 사용된다.
- EGID(Effective Group ID) : 프로세스가 실행중인 동안만 부여되는 UID로 자원 접근권한을 판단하기 위한 GID로 사용된다.
- SUID(Set UID) 및 SGID(Set GID)는 프로그램이 실행중인 동안에 자원 접근권한을 실행파일 소유자/소유그룹의 권한으로 접근할 수 있도록 하는 권한설정이다.
1-3) SUID(SetUID)/SGID(SetGID) 미설정 시 프로세스 접근권한(일반적인 상황)
- ① 사용자가 실행파일을 실행시키게 되고 프로세스의 접근권한을 판단하기 위한 ID 값이 설정(SUID/SGID 설정이 안되어 있을 시 EUID/EGID는 RUID/RGID를 따라간다)
- ② 프로세스가 작업을 수행하던 중 커널에게 요청하여 파일에 접근(open("batch.dat"))하려고 할 때 그 때의 접근권한은 EUID/EGID(사용자)의 권한으로 접근하게 된다.
1-4) SUID/SGID 미설정 시 프로세스 접근권한
- ① 사용자가 실행파일을 실행시키게 되면 SUID/SGID가 설정이되며, 실행파일의 권한은 "rwsrws"로 설정이 된다.
- ② 프로세스의 접근권한을 판단하기 위한 ID 값이 설정이 되는데 EUID는 실행파일 소유자의 UID를 가지고 오고, EGID 또한 실행파일 소유자의 GUID를 가지고 오게 된다.
- ③ 프로세스가 작업을 수행하던 중 커널에게 요청하여 파일에 접근(open("batch.dat"))하려고 할 때 그 때의 접근권한은 EUID/EGID(root)의 권한으로 접근하게 된다. 사용자가 파일을 실행했지만 실행된 그 프로세스는 root의 권한으로 실행이되고 있게된다.
- 프로세스가 실행중인 동안에 SUID/SGID 설정함으로써 권한상승(Privilege Escalation)이 발생한다.
- SUID가 설정된 실행 프로그램 내에서 새로운 프로그램을 실행하게 되면, 실행 프로그램의 RUID(사용자의 UID)를 기준으로 새로운 프로그램을 실행하게 된다.
- EX) 755 접근권한 batch.dat 파일에 SUID 설정 : chmod 4755 batch.dat
- EX) 755 접근권한 batch.dat 파일에 SGID 설정 : chmod 2755 batch.dat
- EX) batch.dat 파일에 SUID 설정 : chmod u+s batch.dat
2) SUID, SGID 실행파일 주기적 검사
2-1) SUID/SGID가 설정된 실행파일은 일반 사용자가 사용하게되면 권한상승이 발생하게되어 조심스럽게 관리를 해주어야 한다. 임의의 실행파일에 root 소유이면서 SUID/SGID가 설정되어 있는지 주기적인 검사가 필요
- 검사 명령어 : find / -user root -type f \(-perm -4000 -o -perm -2000 \) -exec ls -al {} \;
- 제거 명령어 : chmod -s 실행파일명
2-2) 디렉터리 접근권한(Sticky-bit)
- 일반적으로 공유 디렉터리(/tmp, /var/tmp 등)는 모든 사용자가 이용할 수 있도록 user, group, other에 모두 'rwx(777)' 권한을 부여한다.
- 이렇게 되면 다른 사용자가 만든 파일을 누구나 삭제 또는 파일명 변경을 할 수 있다는 점이다. 따라서 자유롭게 파일을 생성하되 파일 삭제나 파일명 변경은 소유자만이 가능하도록 하기위한 특수권한비트이다.
- EX) /tmp 공유 디렉터리에 sticky-bit 설정 : chmod 1777 /tmp OR chmod o+t batch.dat
- EX) 유닉스는 u+t로 설정, 리눅스는 o+t로 설정한다는 차이점이 있다.
반응형
'정보보안기사 필기 > 1. 정보보안 일반' 카테고리의 다른 글
정보보안기사 필기 4-7. 유닉스/리눅스 서버 보안(PAM:장착형 인증 모듈) (0) | 2022.04.19 |
---|---|
정보보안기사 필기 4-6. 유닉스/리눅스 서버 보안(Stand-alone/슈퍼데몬, TCP Wrapper) (0) | 2022.04.19 |
정보보안기사 필기 4-4. 유닉스/리눅스 서버 보안(프로세스) (0) | 2022.04.19 |
정보보안기사 필기 4-3. 유닉스/리눅스 서버 보안(파일시스템, 하드/심볼릭 링크) (0) | 2022.04.19 |
정보보안기사 필기 4-2. 윈도우 서버 보안 (0) | 2022.04.19 |