K쉴드 주니어 수업 정리

유닉스 보안 진단 가이드: 항목별 설정 체크

ilsancityboy 2024. 9. 16. 17:49

 이 포스팅에서는 유닉스 시스템 보안 진단을 위한 주요 점검 항목과 그에 따른 설정 방법을 알아본다.
보안 강화를 위해 꼭 필요한 계정 관리, 패스워드 설정, 권한 관리 등을 항목별로 상세하게 다루며, 각 설정 파일에서 무엇을 체크해야 하는지 단계별로 설명하고 스크립트까지 짜 볼 것이다.

 



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 파일에서 관리

 

  • 설정 확인 및 수정 방법
    1. 파일 경로: /etc/security/pwquality.conf
    2. 확인할 항목:
      • 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