pam_abl 을 통한 SSH 무작위 공격 방어
- 출처 : http://www.sulinux.net/bbs/board.php?bo_table=success&wr_id=35&page=, su linux 사이트
1. 소개
대부분의 유닉스, 리눅스서버를 관리하기 위해서 SSH 서비스를 사용하여 안전하게 원격지에서 서버로 접속을 합니다. 불행하게도, 악의적인 사용자가 무작위 SSH접속을 시도하여 비밀번호 획득을 시도합니다. 만약 쉬운 비밀번호 ( 예. 123456, aaaa, 계정과 같은 비밀번호)를 사용할 경우 공격자는 비밀번호를 획득하게 되고, 획득된 비밀번호로 서버에 접속하여 시스템을 파괴시키고는 합니다.
이런 공격을 막기 위해서, 특정 계정만 ssh 접속 가능하게 하고, 특정 IP로 ssh 접속을 제한하는 등의 보안 조치를 하게 됩니다.
하지만, 호스팅서버등에서는 불특정 가변 IP의 접속을 허용하여야 하기 때문에 불가능 한 일입니다. 호스팅사용자가 쉬운 비밀번호를 사용하는 경우가 허다하기 때문에 서버는 위험에 처할 수 밖에 없습니다.
서버를 많이 운영하다 보면, 메시지로그(/var/log/messages)에 공격의 흔적을 목격하는 경우가 많을 것입니다. 그럼 이를 효과적으로 막을 수 있는 방법에 대해 알아보도록 하겠습니다.
SSH 무작위 공격을 효과적으로 방어할 수 있는 pam_abl을 소개합니다. pam_abl은 동일한 원격지(IP)에서 여러번 인증에 실패(비밀번호오류)한 경우 또는 동일 한 사용자가 여러번 접속실패(비밀번호오류)한 경우에 아이피 및 사용자를 차단하여 더이상의 공격으로 부터 보호하는 역할을 합니다.
pam_abl은 PAM(pluggable authentication modules)을 이용하여 연동됩니다.
*특징
1. 무작위 접근 시도하는 IP를 차단
2. 무작위 접근 시도하는 사용자를 차단
3. SSH뿐만 아니라 다른 프로그램에도 연결
4. 통계프로그램(pam_abl)을 제공
!!경고!!
본 강좌는 ssh-서버의 pam 을 수정하여 무작위 접근을 막는 방법입니다.
조금의 실수는 ssh 접속 불능의 상태가 되니, 리눅스 기본 명령어 및 편집기(nano,vi등)을 능숙히 다루며, sshd, pam 등의 이해를 필요합니다.
원격지에서 작업해야 한다면, telnet 등의 다른 접속통로를 만들어 놓고 작업 하시기 바랍니다.
2. 설치
소스파일을 다운로드 받아서 설치 합니다.
0) 사전준비
- 소스를 받아서 설치하기 때문에 기본적인 컴파일러(gcc), 라이브러리 등이 필요합니다.
- Berkeley DB를 사용하기 때문에 이미 Berkeley DB가 설치되어 있어야 합니다.
(SULinux 1.5에는 설치되어 있지만, 헤더파일이 없어 db.h 파일을 찾을 수 없다며 에러가 발생하며, db4-devel 패키지를 추가로 설치하면 정상 설치 진행할 수 있습니다.)
1) 다운로드
http://sourceforge.net/project/showfiles.php?group_id=148927
위 URL에서 다운로드 받습니다.
2) 압축해제/컴파일 설치
tar xvfpz pam_abl-0.2.3.tar.gz
cd pam_abl
make install
(이 부분에서 db.h 파일을 찾을 수 없다고 나온다면, db4-devel 패키지를 설치하세요)
3) 설정파일을 특정 디렉토리에 복사
cp conf/pam_abl.conf /etc/security
4) /etc/pam.d/sshd 파일의 아래에 다음 내용을 추가
5) sshd 재 시작
service sshd restart
3. 운영
위와같이 설치하였다면, 특별히 해 줄일은 없습니다.
기본적으로 시간당 10회, 하루 30회 비밀번호가 틀리게 되면, 접속이 차단됩니다. 이런 설정을 변경하려면, 아래의 설정파일 부분을 참조하여 설정파일을 수정하며, sshd 를 재시작합니다.
1) 현재 상태 확인 (차단된 사용자, 아이피 확인)
pam_abl
2) 현재 상태 자세한 확인( 차단된 사용자, 아이피 등 차단된 시간정보등)
pam_abl -rv
3) 실패한 기록 삭제 (설정에 따라 2일이 지나면 자동 삭제)
* 실패한 기록을 삭제하는 것이지, 차단된 아이피, 사용자를 해제하는 것은 아님.
pam_abl -p
4) 차단된 사용자 풀어줌.
pam_abl --okuser=사용자
5) 차단된 host(IP,도메인) 풀어줌
pam_abl --okhost=호스트
4. 설정파일 (/etc/security/pam_abl.conf)
1) 기본 설정파일 설명
** 참고 : 실패 기록을 제거하는 것이지, 차단된 host, user를 풀어주지는 않는다.!!
날짜에 사용되는 형식은 다음과 같습니다.
s : 초, m:분, h:시간, d:일
2) 참고사항
*:10/1h : 모든 host또는 user에대해 10회/시간
root|dba|admin:10/1h : root, dba, admin 상요자에대해 10회/시간
root/sshd|dba/*:3/1d : sshd 데몬에 sshd, dba는 모든 데몬에 해대 3회/일
root:10/1h,20/1d : root사용자에 대해 10회/시간, 20회/하루
*:10/1h root:5/1h,10/1d : 모든사용자는 10회/시간, root는 5회/시간,10회/일
!root:20/1d : root사용자외에 20회/일
5. 마치며
본 강좌가 ssh 공격으로 부터 힘들어하는 사용자들에게 조금이라도 도움이 되었으면 좋겠습니다. 이 훌륭한 프로그램을 만들어주신 제작자에게 감사하는 마음으로 본 강좌를 마무리 합니다.
* 참고 사이트
자세한 설명 : http://www.hexten.net/assets/pam_abl_doc/index.html
공식 사이트 : http://www.hexten.net/pam_abl/
* 테스트 환경 : SULinux 1.5 Server
- 출처 : http://www.sulinux.net/bbs/board.php?bo_table=success&wr_id=35&page=, su linux 사이트
1. 소개
대부분의 유닉스, 리눅스서버를 관리하기 위해서 SSH 서비스를 사용하여 안전하게 원격지에서 서버로 접속을 합니다. 불행하게도, 악의적인 사용자가 무작위 SSH접속을 시도하여 비밀번호 획득을 시도합니다. 만약 쉬운 비밀번호 ( 예. 123456, aaaa, 계정과 같은 비밀번호)를 사용할 경우 공격자는 비밀번호를 획득하게 되고, 획득된 비밀번호로 서버에 접속하여 시스템을 파괴시키고는 합니다.
이런 공격을 막기 위해서, 특정 계정만 ssh 접속 가능하게 하고, 특정 IP로 ssh 접속을 제한하는 등의 보안 조치를 하게 됩니다.
하지만, 호스팅서버등에서는 불특정 가변 IP의 접속을 허용하여야 하기 때문에 불가능 한 일입니다. 호스팅사용자가 쉬운 비밀번호를 사용하는 경우가 허다하기 때문에 서버는 위험에 처할 수 밖에 없습니다.
서버를 많이 운영하다 보면, 메시지로그(/var/log/messages)에 공격의 흔적을 목격하는 경우가 많을 것입니다. 그럼 이를 효과적으로 막을 수 있는 방법에 대해 알아보도록 하겠습니다.
SSH 무작위 공격을 효과적으로 방어할 수 있는 pam_abl을 소개합니다. pam_abl은 동일한 원격지(IP)에서 여러번 인증에 실패(비밀번호오류)한 경우 또는 동일 한 사용자가 여러번 접속실패(비밀번호오류)한 경우에 아이피 및 사용자를 차단하여 더이상의 공격으로 부터 보호하는 역할을 합니다.
pam_abl은 PAM(pluggable authentication modules)을 이용하여 연동됩니다.
*특징
1. 무작위 접근 시도하는 IP를 차단
2. 무작위 접근 시도하는 사용자를 차단
3. SSH뿐만 아니라 다른 프로그램에도 연결
4. 통계프로그램(pam_abl)을 제공
!!경고!!
본 강좌는 ssh-서버의 pam 을 수정하여 무작위 접근을 막는 방법입니다.
조금의 실수는 ssh 접속 불능의 상태가 되니, 리눅스 기본 명령어 및 편집기(nano,vi등)을 능숙히 다루며, sshd, pam 등의 이해를 필요합니다.
원격지에서 작업해야 한다면, telnet 등의 다른 접속통로를 만들어 놓고 작업 하시기 바랍니다.
2. 설치
소스파일을 다운로드 받아서 설치 합니다.
0) 사전준비
- 소스를 받아서 설치하기 때문에 기본적인 컴파일러(gcc), 라이브러리 등이 필요합니다.
- Berkeley DB를 사용하기 때문에 이미 Berkeley DB가 설치되어 있어야 합니다.
(SULinux 1.5에는 설치되어 있지만, 헤더파일이 없어 db.h 파일을 찾을 수 없다며 에러가 발생하며, db4-devel 패키지를 추가로 설치하면 정상 설치 진행할 수 있습니다.)
1) 다운로드
http://sourceforge.net/project/showfiles.php?group_id=148927
위 URL에서 다운로드 받습니다.
2) 압축해제/컴파일 설치
tar xvfpz pam_abl-0.2.3.tar.gz
cd pam_abl
make install
(이 부분에서 db.h 파일을 찾을 수 없다고 나온다면, db4-devel 패키지를 설치하세요)
3) 설정파일을 특정 디렉토리에 복사
cp conf/pam_abl.conf /etc/security
4) /etc/pam.d/sshd 파일의 아래에 다음 내용을 추가
auth required /lib/security/pam_env.so auth required /lib/security/pam_abl.so config=/etc/security/pam_abl.conf auth sufficient /lib/security/pam_unix.so likeauth nullok auth required /lib/security/pam_deny.so |
5) sshd 재 시작
service sshd restart
3. 운영
위와같이 설치하였다면, 특별히 해 줄일은 없습니다.
기본적으로 시간당 10회, 하루 30회 비밀번호가 틀리게 되면, 접속이 차단됩니다. 이런 설정을 변경하려면, 아래의 설정파일 부분을 참조하여 설정파일을 수정하며, sshd 를 재시작합니다.
1) 현재 상태 확인 (차단된 사용자, 아이피 확인)
pam_abl
2) 현재 상태 자세한 확인( 차단된 사용자, 아이피 등 차단된 시간정보등)
pam_abl -rv
3) 실패한 기록 삭제 (설정에 따라 2일이 지나면 자동 삭제)
* 실패한 기록을 삭제하는 것이지, 차단된 아이피, 사용자를 해제하는 것은 아님.
pam_abl -p
4) 차단된 사용자 풀어줌.
pam_abl --okuser=사용자
5) 차단된 host(IP,도메인) 풀어줌
pam_abl --okhost=호스트
4. 설정파일 (/etc/security/pam_abl.conf)
1) 기본 설정파일 설명
#debug host_db=/var/lib/abl/hosts.db ## 인증 실패한 IP를 보관할 DB파일 host_purge=2d ## 인증 실패한 IP를 초기화할 시간 (2일) host_rule=*:10/1h,30/1d ## 시간당 10회, 하루 30회 인증실패한 IP 차단 user_db=/var/lib/abl/users.db ## 인증 실패한 사용자를 보관할 DB파일 user_purge=2d ## 인증 실패한 사용자를 초기화할 시간 (2일) user_rule=!root:10/1h,30/1d ## 시간당 10회, 하루 30회 인증실패한 사용자 차단 |
** 참고 : 실패 기록을 제거하는 것이지, 차단된 host, user를 풀어주지는 않는다.!!
날짜에 사용되는 형식은 다음과 같습니다.
s : 초, m:분, h:시간, d:일
2) 참고사항
*:10/1h : 모든 host또는 user에대해 10회/시간
root|dba|admin:10/1h : root, dba, admin 상요자에대해 10회/시간
root/sshd|dba/*:3/1d : sshd 데몬에 sshd, dba는 모든 데몬에 해대 3회/일
root:10/1h,20/1d : root사용자에 대해 10회/시간, 20회/하루
*:10/1h root:5/1h,10/1d : 모든사용자는 10회/시간, root는 5회/시간,10회/일
!root:20/1d : root사용자외에 20회/일
5. 마치며
본 강좌가 ssh 공격으로 부터 힘들어하는 사용자들에게 조금이라도 도움이 되었으면 좋겠습니다. 이 훌륭한 프로그램을 만들어주신 제작자에게 감사하는 마음으로 본 강좌를 마무리 합니다.
* 참고 사이트
자세한 설명 : http://www.hexten.net/assets/pam_abl_doc/index.html
공식 사이트 : http://www.hexten.net/pam_abl/
* 테스트 환경 : SULinux 1.5 Server