이 포스팅에서는 유닉스 시스템 보안 진단을 위한 주요 점검 항목과 그에 따른 설정 방법을 알아본다.
보안 강화를 위해 꼭 필요한 계정 관리, 패스워드 설정, 권한 관리 등을 항목별로 상세하게 다루며, 각 설정 파일에서 무엇을 체크해야 하는지 단계별로 설명하고 스크립트까지 짜 볼 것이다.
1. root 계정 원격 접속 제한
- 파일 경로: /etc/ssh/sshd_config
- 확인할 설정: PermitRootLogin no
- 설명: 이 설정은 SSH를 통해 root 계정으로 원격 접속하는 것을 막습니다. 기본적으로 PermitRootLogin yes로 설정되어 있으면 root 계정이 원격으로 접속할 수 있는데, 이를 no로 변경하여 원격 root 접속을 차단합니다.
- 작업: PermitRootLogin no가 설정되어 있는지 확인하고, 없다면 추가하거나 수정합니다.
/etc/ssh/sshd_config 파일을 들어간다.
PermitRootLogin 부분이 주석처리 되어있는것 뿐 아니라 설정값이 prohibit-password로 되어있어 취약점 진단 체크리스트에 취약으로 해당되어 있다고 볼 수 있다.
주석처리 되어있는 PermitRootLogin 을 주석처리 해제하고 설정값을 prohibit-paasword가 아닌 no로 바꿔주어 취약하지 않게끔 처리해주는 것이 좋다.
점검 스크립트를 하나씩 써 내려가보자.
파일명.sh 로 파일을 하나 만들고
grep으로 /etc/ssh/sshd_config 파일내에서 찾아낸다. 무엇을? -> "^PermitRootLogin" => PermitRootLogin이라는 문자열로 시작하는 줄을 찾아내서 no가 되어있는지 찾아낸다. [[:space:]] 는 공백을 무시하는 의미이다. 즉 PermitRootLogin과 no를 찾아내는데 이 사이에 공백이 몇개있던 상관없이 두 문자열이 있는지만 찾아내는것.
if문에 넣어 만약 PermitRootLogin no 가 있다면 safe 아니라면 not safe를 띄우는 코드를 작성한것.
잘 된다.
2. 패스워드 복잡성 설정
패스워드 복잡성 설정은 유닉스 시스템에서 비밀번호를 설정할 때 최소 요구사항(예: 최소 길이, 숫자, 대문자, 소문자, 특수문자 포함 여부)을 정의하는 항목
주로 PAM 모듈을 사용하여 설정
이 설정은 보통 /etc/security/pwquality.conf 또는 /etc/pam.d/common-password 파일에서 관리
- 설정 확인 및 수정 방법
- 파일 경로: /etc/security/pwquality.conf
- 확인할 항목:
- minlen = 8 (비밀번호 최소 8자)
- dcredit = -1 (숫자 최소 1개)
- ucredit = -1 (대문자 최소 1개)
- lcredit = -1 (소문자 최소 1개)
- ocredit = -1 (특수문자 최소 1개)
이또한 주석처리되어있으며 설정값도 취약한 상태. 이부분을 안전하게끔 값 설정 및 주석해제 해주면 된다.
스크립트
먼저 minlen 문자열을 conf 파일안에서 찾아내고 minlen의 문자열에서 = 를 기준으로 두번째 요소를 가져오게한다
만약 두번째 요소가 변수에 담기지 않았다면 can not find minlen option check config file을 출력시킨다.
(세팅이 주석처리 되어있다면 이 문자열이 뜨게끔 설정하는것)
만약 변수에 담겼다면 최소길이인 8과 비교하여 8보다 크거나 같다면 안전하고 아니라면 안전하지않다 를 출력시킨다.
3. 계정 잠금 임계값 설정
**"계정 잠금 임계값 설정"**은 사용자가 로그인 시도에서 일정 횟수 이상 실패할 경우 계정을 잠그는 설정
설정 위치
- pam_tally2 또는 faillock 모듈을 사용하여 설정합니다.
- 일반적으로 /etc/pam.d/common-auth 또는 /etc/pam.d/system-auth 파일에서 설정을 확인할 수 있습니다.
/etc/pam.d/common-auth 파일 모습이다. 따로 임계값 설정이 되어있지 않은 상태인데
auth required pam_tally2.so deny=5 unlock_time=600 onerr=fail audit
이 라인을 추가하여 임계값 설정을 해준다.
스크립트
-oP 옵션:
- -o: 매칭된 텍스트만 출력합니다. 즉, 파일 전체가 아니라 패턴과 일치하는 부분만 출력합니다.
- -P: Perl 호환 정규식을 사용합니다. 이 옵션은 일반적인 정규식보다 조금 더 복잡한 패턴을 처리할 수 있습니다.
"deny=\K[0-9]+":
이 부분은 실제로 grep에서 사용할 정규 표현식입니다.
- deny=: deny=라는 문자열을 찾습니다.
- \K: \K는 Perl 정규식에서 사용하는 메타 문자인데, 그 전에 매칭된 부분을 버리고, 그 이후의 문자열만 매칭 결과에 포함시킵니다. 즉, deny=는 패턴에서 매칭하지만 출력에서는 제외되고, 그 뒤의 숫자 부분만 출력됩니다.
- [0-9]+: 하나 이상의 숫자를 의미합니다. 즉, deny= 뒤에 오는 숫자 부분을 매칭합니다.
4. 패스워드 파일 보호
**"패스워드 파일 보호"**는 유닉스 및 리눅스 시스템에서 비밀번호와 관련된 중요한 파일들의 권한을 적절하게 설정하고 보호하는 것
비밀번호 정보가 저장된 파일은 매우 민감하기 때문에, 권한이 적절하게 설정되어 있어야만 합니다.
대상 파일들
/etc/passwd: 사용자 계정 정보가 들어 있는 파일로, 암호화된 비밀번호는 포함하지 않고, 사용자 ID, 그룹 ID, 홈 디렉토리 등의 정보만 포함
권한: 일반적으로 읽기 전용이어야 합니다. 권장되는 권한은 644입니다
/etc/shadow:
- 암호화된 비밀번호가 저장된 매우 민감한 파일입니다. 이 파일은 root 사용자만 읽을 수 있어야 합니다.\
기본적인 확인방법은 ls -al 명령어로 해당 파일의 권한을 읽고 맞게 대처하면 됩니다.
stat -c "%a" /etc/passwd: stat 명령어를 사용하여 파일의 권한을 숫자 형식으로 가져옵니다. %a는 파일 권한을 숫자 형식으로 출력하는 옵션
이를 사용해 스크립트 작성
'K쉴드 주니어 수업 정리' 카테고리의 다른 글
진단 실습 - 웹 취약점 (1) | 2024.10.04 |
---|---|
진단 실습 (2) | 2024.09.28 |
프로젝트 주제 선정과정 (0) | 2024.09.01 |
5일차 (0) | 2024.08.26 |
4일차 (0) | 2024.08.21 |