비밀번호 보안 모범 사례 구현

Kali LinuxBeginner
지금 연습하기

소개

비밀번호 보안은 시스템 및 데이터를 무단 액세스로부터 보호하는 데 중요한 구성 요소입니다. 취약하거나 손상된 비밀번호는 공격자가 침입하는 가장 일반적인 경로 중 하나입니다. 강력한 비밀번호 정책을 구현하는 것은 기본적인 보안 관행입니다.

이 실습에서는 Linux 시스템에서 비밀번호 보안을 위한 여러 모범 사례를 구현하는 방법을 배우게 됩니다. 비밀번호 복잡성 규칙을 구성하고, 다단계 인증 (MFA) 을 설정하고, 비밀번호 관리자의 역할을 이해하고, 비밀번호 순환을 강제하고, 사용자 교육의 중요성에 대해 배우게 됩니다.

비밀번호 복잡성 요구 사항 이해

이 단계에서는 사용자가 강력한 비밀번호를 생성하도록 비밀번호 복잡성 규칙을 적용합니다. 강력한 비밀번호는 일반적으로 대문자, 소문자, 숫자 및 특수 문자의 조합을 포함하며 충분한 길이를 가집니다. 이를 위해 Pluggable Authentication Module (PAM) 인 pam_pwquality를 사용합니다.

먼저 필요한 도구를 제공하는 libpam-pwquality 패키지를 설치합니다.

sudo apt-get install libpam-pwquality -y

이제 PAM 스택을 구성하여 비밀번호 변경 시 이 모듈을 사용하도록 해야 합니다. /etc/pam.d/common-password 파일을 편집합니다. 이 파일에는 비밀번호 관리에 대한 공통 구성이 포함되어 있습니다.

nano 편집기를 사용하여 파일을 엽니다.

sudo nano /etc/pam.d/common-password

pam_unix.so가 포함된 줄을 찾고 그 위에 다음 줄을 추가합니다. 이렇게 하면 pam_unix 모듈이 실제로 비밀번호를 변경하기 전에 품질 검사가 수행됩니다.

password        requisite       pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

이 옵션들을 살펴보겠습니다.

  • retry=3: 사용자는 규정을 준수하는 비밀번호를 입력할 기회가 3 번 주어집니다.
  • minlen=12: 최소 비밀번호 길이는 12 자입니다.
  • ucredit=-1: 최소한 하나의 대문자를 요구합니다.
  • lcredit=-1: 최소한 하나의 소문자를 요구합니다.
  • dcredit=-1: 최소한 하나의 숫자를 요구합니다.
  • ocredit=-1: 최소한 하나의 특수 문자 (기타) 를 요구합니다.

파일은 다음과 유사하게 표시되어야 합니다 (일부 줄은 다를 수 있습니다).

## /etc/pam.d/common-password

...
password        requisite       pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
password        [success=1 default=ignore]      pam_unix.so obscure sha512
...

Ctrl+X, Y, Enter를 눌러 파일을 저장하고 nano를 종료합니다.

이제 새 정책을 테스트해 보겠습니다. labex 사용자의 비밀번호를 변경해 보겠습니다.

passwd

먼저 현재 비밀번호를 입력합니다 (labex에 비밀번호가 설정되어 있지 않으므로 그냥 Enter를 눌러도 됩니다). 그런 다음 password와 같이 약한 비밀번호를 설정해 보세요. 시스템은 복잡성 요구 사항을 충족하지 못하므로 이를 거부하고 오류 메시지를 표시해야 합니다.

(current) UNIX password:
New password:
BAD PASSWORD: The password is shorter than 12 characters
Retype new password:
Sorry, passwords do not match.
passwd: Authentication token manipulation error
passwd: password unchanged

이제 Labex!P@ssw0rd와 같이 강력한 비밀번호로 다시 시도해 보세요. 이 비밀번호는 허용되어야 합니다.

시스템에서 비밀번호 복잡성 요구 사항을 성공적으로 구성했습니다.

다단계 인증 구현

이 단계에서는 다단계 인증 (MFA) 을 구현하는 방법을 배우게 됩니다. MFA 는 사용자가 액세스 권한을 얻기 위해 두 개 이상의 인증 요소를 제공하도록 요구하여 보안 계층을 추가합니다. Google Authenticator PAM 모듈을 사용하여 시간 기반 일회용 비밀번호 (TOTP) 인증을 추가합니다.

먼저 libpam-google-authenticator 패키지를 설치합니다.

sudo apt-get install libpam-google-authenticator -y

다음으로 사용자 계정에 대한 MFA 구성을 생성해야 합니다. labex 사용자로 다음 명령을 실행합니다 (sudo 사용 안 함).

google-authenticator

이 명령은 일련의 질문을 합니다. 이 실습에서는 다음과 같이 답변합니다.

  • Do you want authentication tokens to be time-based (y/n): y를 누르고 Enter를 누릅니다.
  • QR 코드, 비밀 키 및 비상 스크래치 코드가 표시됩니다. 실제 시나리오에서는 휴대폰의 인증 앱으로 QR 코드를 스캔하게 됩니다. 이 실습에서는 계속 진행합니다.
  • Do you want me to update your "/home/labex/.google_authenticator" file? (y/n): y를 누르고 Enter를 누릅니다. 이렇게 하면 비밀 키가 저장됩니다.
  • Do you want to disallow multiple uses of the same authentication token?: y를 누르고 Enter를 누릅니다.
  • Do you want to increase the time-skew window?: n을 누르고 Enter를 누릅니다.
  • Do you want to enable rate-limiting for the authentication module?: y를 누르고 Enter를 누릅니다.

이렇게 하면 홈 디렉터리 (home/labex) 에 .google_authenticator 파일이 생성됩니다.

이제 SSH 가 이 MFA 토큰을 사용하도록 구성해 보겠습니다. 먼저 PAM 에 SSH 세션에 대해 이를 요구하도록 알려야 합니다.

/etc/pam.d/sshd 파일을 엽니다.

sudo nano /etc/pam.d/sshd

파일 끝에 다음 줄을 추가합니다.

auth required pam_google_authenticator.so

파일을 저장하고 종료합니다 (Ctrl+X, Y, Enter).

다음으로 SSH 서버 구성에서 챌린지 - 응답 인증을 활성화해야 합니다.

/etc/ssh/sshd_config를 엽니다.

sudo nano /etc/ssh/sshd_config

ChallengeResponseAuthentication no 줄을 찾아 yes로 변경합니다. 줄이 #로 주석 처리되어 있다면 #을 제거합니다.

## /etc/ssh/sshd_config
...
ChallengeResponseAuthentication yes
...

파일을 저장하고 종료합니다. 실제 시스템에서는 SSH 서비스를 다시 시작해야 합니다. 그러나 이 컨테이너화된 환경에서는 sshd와 같은 서비스를 다시 시작하는 것은 지원되지 않습니다. 핵심은 SSH 에 MFA 를 활성화하는 데 필요한 구성 단계를 이해하는 것입니다.

비밀번호 관리자 사용

이 단계에서는 비밀번호 관리자의 중요성에 대해 논의합니다. 서로 다른 서비스에서 비밀번호를 재사용하는 것은 심각한 보안 위험입니다. 한 서비스가 침해되면 공격자는 유출된 비밀번호를 사용하여 다른 계정에 액세스할 수 있습니다. 비밀번호 관리자는 모든 서비스에 대해 고유하고 강력한 비밀번호를 생성, 저장 및 관리하는 데 도움이 됩니다.

KeePassXC 는 인기 있는 오픈 소스 무료 비밀번호 관리자로, 비밀번호를 안전하게 암호화된 데이터베이스에 저장합니다. 그래픽 애플리케이션이지만, 이러한 도구가 사용자 워크플로우에 어떻게 통합되는지 이해하기 위해 설치해 보겠습니다.

apt-get을 사용하여 KeePassXC 를 설치해 보겠습니다.

sudo apt-get install keepassxc -y

설치가 완료된 후 명령의 존재 여부를 확인하여 설치를 확인할 수 있습니다.

which keepassxc

다음과 같은 출력이 표시되어야 하며, 이는 애플리케이션이 설치되어 시스템 경로에서 사용할 수 있음을 나타냅니다.

/usr/bin/keepassxc

데스크톱 환경에서는 KeePassXC 를 실행하고 강력한 마스터 비밀번호로 새 암호화된 데이터베이스를 생성한 다음 다양한 웹사이트 및 서비스에 대한 로그인 자격 증명을 추가하기 시작합니다. 이 애플리케이션은 매우 강력한 비밀번호를 자동으로 생성할 수도 있습니다. 핵심 원칙은 관리자를 잠금 해제하기 위해 하나의 강력한 마스터 비밀번호를 기억하고, 관리자가 다른 모든 복잡한 비밀번호를 처리하도록 하는 것입니다.

정기적으로 비밀번호 변경

이 단계에서는 비밀번호 만료라고도 하는 비밀번호 순환을 강제하는 방법을 배우게 됩니다. 비밀번호를 정기적으로 변경하면 도난당한 비밀번호를 가진 공격자의 기회 창을 제한할 수 있습니다.

Linux 에서는 /etc/login.defs 파일에서 시스템 전체 비밀번호 만료 정책을 설정할 수 있습니다. chage 명령을 사용하여 개별 사용자에 대한 정책을 설정할 수도 있습니다. 여기서는 chage 명령에 초점을 맞춥니다.

먼저 labex 사용자에 대한 현재 비밀번호 만료 설정을 확인해 보겠습니다.

sudo chage -l labex

대부분의 값이 never로 설정된 다음과 유사한 출력이 표시됩니다.

Last password change                                    : May 20, 2024
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

Maximum number of days between password change99999로 설정되어 있어 사실상 비밀번호가 만료되지 않음을 의미합니다. 이를 90 일마다 비밀번호 변경을 강제하도록 변경해 보겠습니다.

최대 만료일을 설정하기 위해 -M 옵션과 함께 chage 명령을 사용합니다.

sudo chage -M 90 labex

이제 설정을 다시 확인하여 변경 사항을 확인합니다.

sudo chage -l labex

출력에는 이제 최대 일수가 90 일로 표시되어야 합니다. Password expires 날짜도 이에 따라 업데이트됩니다.

Last password change                                    : May 20, 2024
Password expires                                        : Aug 18, 2024
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7

사용자에 대한 비밀번호 순환 정책을 성공적으로 구성했습니다.

사용자에게 비밀번호 위생 교육

이 단계에서는 보안의 인간적인 측면에 초점을 맞춥니다. 기술적 통제는 필수적이지만, 사용자가 좋은 비밀번호 위생을 실천할 때 가장 효과적입니다. 사용자에게 보안 모범 사례에 대해 교육하는 것은 중요하며 비기술적인 통제입니다.

좋은 비밀번호 위생의 주요 사항은 다음과 같습니다.

  • 비밀번호 재사용 금지: 모든 계정에 고유한 비밀번호를 사용하십시오.
  • 비밀번호 공유 금지: IT 직원에게도 누구와도 비밀번호를 공유하지 마십시오.
  • 피싱 주의: 로그인 자격 증명을 요청하는 이메일이나 메시지를 의심하십시오.
  • 화면 잠금: 자리를 비울 때는 항상 컴퓨터를 잠그십시오.
  • 구문 사용: J%7d*fQ!와 같이 짧고 복잡한 비밀번호보다 correct-horse-battery-staple과 같이 긴 구문이 더 안전하고 기억하기 쉬울 수 있습니다.

사용자 대상 정책 문서 생성 시뮬레이션을 위해 프로젝트 디렉터리에 이러한 규칙을 요약하는 간단한 텍스트 파일을 만들어 보겠습니다.

먼저 파일을 만들고 echo 명령과 출력 리디렉션 >를 사용하여 첫 번째 규칙을 추가합니다.

echo "1. Do not share your password with anyone." > ~/project/password_policy.txt

이제 추가 연산자 >>를 사용하여 파일에 두 개의 규칙을 더 추가해 보겠습니다.

echo "2. Use a unique password for each service." >> ~/project/password_policy.txt
echo "3. Beware of phishing emails asking for credentials." >> ~/project/password_policy.txt

마지막으로 cat 명령을 사용하여 새 정책 문서의 내용을 표시합니다.

cat ~/project/password_policy.txt

다음과 같은 출력이 표시되어야 합니다.

1. Do not share your password with anyone.
2. Use a unique password for each service.
3. Beware of phishing emails asking for credentials.

이 간단한 연습은 보안 정책을 문서화하고 공유하는 방법을 보여줍니다. 실제 조직에서는 이는 광범위한 보안 인식 프로그램의 일부가 될 것입니다.

요약

이 실습에서는 Linux 환경에서 비밀번호 보안을 위한 몇 가지 주요 모범 사례를 성공적으로 구현했습니다. 기술적 통제와 사용자 교육을 결합한 다층적 접근 방식은 무단 액세스로부터 가장 강력한 방어를 제공합니다.

다음과 같은 방법을 배웠습니다.

  • pam_pwquality를 사용하여 복잡성 요구 사항을 구성하여 강력한 비밀번호 생성을 강제합니다.
  • pam_google_authenticator로 다단계 인증 (Multi-Factor Authentication) 을 설정하여 중요한 두 번째 보안 계층을 추가합니다.
  • KeePassXC 와 같은 비밀번호 관리자가 고유하고 강력한 비밀번호를 생성하고 저장하는 역할을 이해합니다.
  • chage 명령을 사용하여 비밀번호 순환 정책을 구현하여 손상된 자격 증명으로 인한 위험을 제한합니다.
  • 사용자 교육의 중요성과 좋은 비밀번호 위생을 위한 보안 정책 문서화의 중요성을 인식합니다.

이러한 관행을 적용하면 관리하는 모든 시스템의 보안 상태를 크게 향상시킬 수 있습니다.