2017. 11. 29. 17:43ㆍIT-분석/보안
일반적으로 서버의 SSH 접속하기 위해 사용자의 아이디와 비밀번호가 필요하다. 이 말은 즉슨 대충 ID만 알아도 Brute Force Attack 할 수 있다는 얘기가 된다. 서버 관리자 입장에서 생각해보면 여간 짜증나는 일이 아니다. 로그인이 안 된다 할지라도 해킹이 시도되는 동안 소모되는 서버 자원은 어쩔 것인가 ㄷㄷㄷㄷ
이를 방지하기 위해 Fail2Ban 과 같은 Python 기반의 스크립트를 이용하여 지정된 횟수 이상으로 로그인을 실패하면 해킹으로 판단하여 일정시간 접근을 차단시키는 방법도 있다. 하지만 이 방법도 지정된 횟수 이내로.. 예를 들면 로또보다 더한 확률로 1~2번 시도만에 로그인이 성공하면 낭패다. (그러니 유저들을 추가할 땐 비밀번호 정책을 빡세게 합시다 ㄷㄷㄷ)
하지만 OTP를 이용하게 되면 약간은 안심이 될 것 같다. 1분마다 6자리의 숫자가 갱신이 되고 그 이전의 숫자조합은 무용지물이 되어버리니 이 얼마나 짱짱한가. 몇가지 OTP 서비스들이 있긴 하지만 Google OTP(정확히 말하면 Google Authenticator) 를 이용하기로 했다. 별 거 없다. 왜냐면 구글신이니까..
말머리에서 언급한 바와 같이 SSH 접속하기 위해선 사용자의 아이디와 비밀번호가 필요하지만 Google Authenticator 를 이용하면 그 중간에 OTP 번호를 입력하는 절차가 추가된다.
예를 들면 다음과 같다.
세팅하는 방법을 순서대로 나열하겠다. 기존의 타 블로그들에서 작성된 대부분의 Google Authenticator 세팅 방법들은 크게 문제가 없지만 중요한 부분이 빠져있다. 이 글에선 빠지지 않고 모두 작성해놨으니 그대로 차근차근 실행만 한다면 될 것이다.
- CentOS 6.8 & 7 기준으로 작성
- root (최고관리자) 권한 기준으로 작성
- 작업시작 전 모든 패키지들을 업데이트 (하지 않아도 크게 상관 없음)1yum -y update
- .ssh 디렉토리 권한 변경
* 필수 작업 – 0700으로 맞추지 않으면 로그인이 제대로 작동하지 않는다.1chmod 0700 ~/.ssh - Google OTP 패키지 설치에 필요한 필수 패키지 설치1yum -y install git pam-devel autoconf automake libtool gcc
- Git 으로 Google OTP 다운로드1git clone https://github.com/google/google-authenticator.git
- 소스 컴파일 작업1234cd ./google-authenticator/libpam./bootstrap.sh./configure --libdir=/lib64 (32비트일 경우 --libdir=/lib64 삭제)make && make install
- Google Authenticator 설정1google-authenticator -t -d --label=이름 --issuer=메인도메인 -r 3 -R 30 -s ~/.ssh/google_authenticator
- y 누르고 엔터 (일반적으로 2번)
- 스마트 폰에 Google Authenticator 앱 설치 후, 모니터에 나타나는 QR코드 촬영 또는 Secret Key 작성으로 OTP 추가
- PAM 설정1nano /etc/pam.d/sshd
8.1. %PAM-1.0 바로 밑에 다음 내용 추가 (한 줄임)1auth required pam_google_authenticator.so nullok no_increment_hotp secret=${HOME}/.ssh/google_authenticator
8.2 저장 - SSH 설정1nano /etc/ssh/sshd_config
9.1. 다음 설정사항들을 모두 yes로 변경123PasswordAuthentication (기본 yes)ChallengeResponseAuthentication (기본 no)UsePAM (기본 yes)
9.2 저장 - SSH 재시작1service sshd restart
- (옵션) 모든 유저에게 OTP 부여가 완료되었고 더이상 유저 추가 계획이 없을 경우 8.1. 에서 추가된 내용 중 nullok 를 삭제한다.
– nullok 삭제시 해당 서버 SSH에 접근하는 모두가 OTP를 거쳐야 함.
위 과정을 모두 마치면 Google Authenticator 를 거쳐 로그인을 할 수 있다. 이렇게 되면 어제 작성했던 Root 비밀번호 자동 변경 쉘 스크립트에서 비밀번호를 좀 더 약하게 생성시켜도 괜찮을 듯 하다.
약 2주간 적용하고 싶은 마음에 수많은 삽질을 했고 결국 성공했다. 별 거 아닌데 뿌듯하다.
'IT-분석 > 보안' 카테고리의 다른 글
Dotfuscator 이해 및 강좌 (펌) (0) | 2019.02.19 |
---|---|
Hash 종류와 값 길이 (펌) (0) | 2018.12.11 |
구글OTP - 2 - 사용방법 (0) | 2017.11.29 |
구글OTP - 1 - 사용방법 (0) | 2017.11.29 |
PUP / PUA (potentially unwanted program / potentially unwanted application) (0) | 2016.05.16 |