주제는 리눅스에서 ssh에 대한 보안이다!
시스템의 OS는 리눅스 Centos 64이다.
시큐어 셀 (SSH)이란?
---------------------------------------------------------------------------------
시큐어 셸(Secure Shell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.
SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다.
인용 :(위키 백과)http://ko.wikipedia.org/wiki/%EC%8B%9C%ED%81%90%EC%96%B4_%EC%85%B8
참조 : http://en.wikipedia.org/wiki/Secure_Shell(영문)
_____________________________________________________________________________________________
SSH 설치
---------------------------------------------------------------------------------
1. 다음 두 개의 패키지를 설치한다.
- openssh-clients
- openssh-server
yum -y install openssh-server openssh-clients
예시 화면
2. 서비스 시작하기
chkconfig sshd on
service sshd start
예시 화면
설정 방법
------------------------------------------------------------------------------------------------------------
3. 방화벽 설정
3-1. /etc/sysconfig/iptables 파일 수정
( -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT ) 추가
예시 화면
3-2. 방화벽 재시작
- service iptables restart
예시 화면
---------------------------------------------------------------------------------
SSH 공격 유형
---------------------------------------------------------------------------------
필자가 공격 유형과 실습을 올리는 이유는 보안 심각성을 알리기 위함을 알리며 이기술을 통하여 해킹을 할시 해당 국가에 법에 접촉될수 있음을 경고 합니다.
---------------------------------------------------------------------------------
공격 방어를 위한 방법
---------------------------------------------------------------------------------
1. 설정 변경
2. 2차 인증 방식
여담
---------------------------------------------------------------------------------
개인적으로 리눅스로 서버를 구축하여 사용하는 분들이 많이 있다.
그러나 그런 시스템에 기본적으로 보안이 안되어 있는 경우가 많이 있다. 크래커의 먹이 감이 되는 경우가 종종 있다. 그중에서 ssh 보안을 최소한이라도 설정하자!
---------------------------------------------------------------------------------
크래킹과 보안은 양날의 칼이다!
_____________________________________________________________________________________________
보안에 대한 인식이 확산되면서 ssh 사용자가 많이 늘어나고 있다.
그러나 http 대신 https를 사용한다고 해서 보안에 완벽해 지는 것이 아닌 것처럼,
telnet 대신 ssh를 사용한다고해서 보안에 완벽해 지는 것은 결코 아니다.
단지 SecureShell인 ssh는 telnet이나 현재 거의 사용하지 않는 rlogin에 대한 대체로서
몇 가지 부가 기능을 제공하기는 하지만, 세션을 암호화함으로써 스니핑에 대비하기 위한 것뿐이다.
특히나 ssh 데몬은 root로 가동되고, 통상적으로 root 로그인이 가능하다는 것을 점을
이용해 ssh의 취약성을 이용한 각종 공격이 끊이지 않고 있으므로 ssh의 보안은 매우 중요하다고 할 수 있다.
# cd /etc/ssh/
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config_old /* 원복 파일 백업 */
# vi /etc/ssh/sshd_config
------------------------------------ sshd_config ------------------------------------------------------------------
# PermitRootLogin yes
ssh나 openssh를 사용시 대부분 root로의 직접 로그인을 허용하고 있다. 이러한 경우 무차별 대입법등으로 원격지에서 root로 로그인할 수도 있으므로 root로의 직접 로그인은 가급적 자제하는 것이 좋다.
따라서 일반 유저로 ssh 로그인한 후 su , su - 등을 이용하여 root로 로그인하여야 하는데
굳이 root로의 직접 로그인을 사용하려면 방화벽 등에서 접근통제를 엄격하게 설정하여야 한다.
# PubkeyAuthentication yes
# AuthorizedKeysFile .ssh/authorized_keys
ssh에서 제공하는 인증에는 공개키 인증과 암호 인증법 이렇게 두 가지가 있는데, 공개키 인증을 사용할 것인지에 대해 설정하는 것이다.
공개키 인증 사용시 공개키가 있어야 하므로 더욱 안전하다.
(처음 openssh 설치후 putty로 원격 접속을 시도 했을시 암호화 같은 긴 내용을 보았을 것인데 그것은 암호 인증법이다.)
그리고 인증 접속에 문제가 될 경우 공개키의 내용을 삭제하고 접속하면 다시 물어 본다.
디렉토리 : /etc/ssh
# RhostsRSAAuthentication no
PasswordAuthentication yes
.rhost는 보안상 상당히 위험하므로 사용하지 말아야 한다. 그리고 일반적인 암호 기반의 인증을 사용할 것인지 결정하여야 하는데, 만약 암호기반의 인증을 제공하려면 엄격하게 접근통제를 하여야 할 것이다.
# PermitEmptyPasswords no
암호가 없는 계정에 대해 로그인을 허용할 것인지 지정하는 부분이다. 당연히 no로 지정하는 것이 좋다.
(CentOS 5.1의 경우 주석(#) 처리 되어 있어 암호가 없는 계정은 ssh로 접속이 불가능하다.)
AllowGroups wheel admin오직 wheel이나 admin 그룹에 속한 유저만 로그인할 수 있도록 허용한다. 이외에 그룹에 속한 유저는 암호를 정확히 입력해도 로그인이 거부된다.
(CentOS 5.1과 Fedora Core 6에서는 설정이 없다. 필요하다면 추가해 주면 된다.)
AllowUsers user1 user2
위 그룹에 속한 유저 중에서도 user1과 user2만 로그인을 하용한다.
물론 AllowUsers를 별도로 지정하지 않으면 AllowGroups에서 지정한 그룹은 모두 로그인 가능하며 AllowGroups를 지정하지 않고 AllowUsers만 지정하면 그룹에 관계없이 AllowUsers에 지정된 유저만 로그인 가능하다.
(CentOS 5.1과 Fedora Core 6에서는 설정이 없다. 필요하다면 추가해 주면 된다.)
ListenAddress 0.0.0.0
기본적으로 ListenAddress가 0.0.0.0 으로 되어 있어 인터페이스에 설정된 모든 IP에 대해 리슨(LISTEN)하도록 되어 있다. 만약 여러 IP가 aliasing되어 있다면 꼭 필요한 특정 IP에서만 리슨(LISTEN)하도록 하는 것이 좋다.
Port 875ssh의 기본 포트는 22번이지만 반드시 22번으로 사용할 필요는 없으므로 임의의 번호를 할당하여 외부에서 접속할 때에는 “ssh hostname –p 975”와 같이 접속하면 된다.
만약 여러 포트로 리슨(LISTEN)하도록 하려면 아래와 같이 설정하면 된다.
Port 22
Port 5002
1. 루트로그인 차단 (PermitRootLogin)
# vi /etc/ssh/sshd_config PermitRootLogin no
2. 특정 그룹 또는 유져만 접속가능
# vi /etc/ssh/sshd_config AllowUsers bobo john jason
# vi /etc/ssh/sshd_config AllowGroups sysadmin dba
3. 특정 그룹 또는 유져 접속차단
# vi /etc/ssh/sshd_config DenyUsers cvs apache jane
# vi /etc/ssh/sshd_config DenyGroups developers qa
4. sshd 포트넘버 변경 (Port)
# vi /etc/ssh/sshd_config Port 2222
5. 지정시간내 로그인 유효시간 (LoginGrace Time)
# vi /etc/ssh/sshd_config LoginGraceTime 1m (기본 1분지정, 0은 시간제한없음)
6. sshd Listen Address
# vi /etc/ssh/sshd_config ListenAddress 192.168.0.200
7. 접속후 아무작업이 없을때 접속끊기
# vi /etc/ssh/sshd_config ClientAliveInterval 600 ( 기본 0 보내지않음. 10분간격으로 클라이언트로 메시지를 보내고 응답한다.) ClientAliveCountMax 3 (클라이언트에서 응답이 없을 때 메시지를 보내는 횟수)
출처 : http://betteridea-bank.blogspot.kr/2014/03/sshsecure-shell.html
|