외부에서 서버를 관리하기 위해서는 Telnet 과 같은 원격 쉘을 이용하게 됩니다.
이런 원격 쉘은 시스템에 직접 접근할수 있기 떄문에 특별한 관리와 보안이 필요합니다.
그래서 나온것이 SSH 바로 보안 쉘 입니다.
기본적으로 이동하는 패킷이 암호화 처리 되기 떄문에 TELNET보다는 매우 안전하다고 볼수 있습니다.
오늘은 이 SSH를 크랙하는 방법과 대책에 대해서 약간 알아보겠습니다.
이번에 소개할 툴은 메두사 입니다.
메두사는 Broute Force 공격에 사용되는 툴입니다.
설치
데비안계열 ( 데비안 , Ubuntu , 쿠분투 주분투 등등)
에서는
apt-get install medusa 로 간단하게 설치 할 수 있습니다.
메두사로 SSH서버를 크랙하는 방법에 대해 알아보겠습니다.
메두사의 메뉴얼입니다.
구조는 간단합니다. 상대 SSH서버를 확인한 후에 메두사로 무차별 대입공격을 시도합니다.
물론 상대 시스템에는 로그가 남을수 있겠지요.
일단 실험에 쓰일 노트북(공격자) 데스크탑(피해자) 입니다.
공격자
OS : Debian
Net : wlan0
IP : 192.168.0.26
피해자
OS : BackTrack4
Net : eth0
IP : 192.168.0.3
ssh : OpenSSh ( SSH1)
실험에 쓰일 피해자(backTrack)입니다.
현재 SSH서버를 가동하고 아무작업없이 대기중입니다.
공격자는 포트스캐너와 각종 툴들을 이용해 정보를 수집후
피해자가 SSH서버를 이용한다는것과 OpenSSH(SSH1)을 사용한다는 것을 알아냇다는 전제하에
시작하겠습니다.
공격자는 메두사 툴을 이용해 BruteForce공격을 시작합니다.
medusa -h 192.168.0.3 -u root -P /home/noon/NOON/pass.txt -M ssh
사용된 옵션을 살펴 보자면
-h : 호스트 주소입니다. 고로 타켓 주소
-u : 크랙할 유저의 이름입니다. 유저 목록을 파일로 만들어서 사용할땐 -U /home/User.txt 이런식으로 사용하시면 됩니다. (대문자)
-P : 패스워드 목록입니다. 대문자로 사용시 파일을 사용하는것이고 뒤에있는것이 파일 위치입니다. -p 로 한후에 직접 기술해도 됩니다.
-M : 모듈입니다. 여러가지에 대해 크랙할수 있는 툴이기에 ssh에 사용할 것이라고 일러주는 것입니다.
-q : 사용할수 있는 모듈을 확인할수있습니다.
아무이상없이 ssh서버에 로그인되었습니다.
아까 위에서 피해자의 컴퓨터에서 보았던 터미널을
즉 쉘을 가지고 있습니다.
현재 root로 로그인했기떄문에 시스템 권한을 장악하고 있다고 봐도 무방합니다.
이후에 데이터 유출 , 사이트 변조 등 여러가지 방법으로 타켓을 공격할수 있다고 봅니다.
방치 대책
SSH 연결을 위한 표준 포트가 22라는 사실은 모든 이가 알고 있다. 따라서 시스템의 보안을 더욱 강화하기 위해 취해야 할 첫 번째 단계는 그냥 포트를 사용하지 않는 포트로 변경하고 포트 번호도 22960과 같은 생소한 번호로 변경하는 것이다. 1024를 초과하는 번호는 보통 안전하지만, 발생 가능한 문제를 피하려면 참고자료를 확인한다. 이 변경은 단순히 이 명령행을 사용하여 컴퓨터에 연결해야 한다는 의미다.
이런 원격 쉘은 시스템에 직접 접근할수 있기 떄문에 특별한 관리와 보안이 필요합니다.
그래서 나온것이 SSH 바로 보안 쉘 입니다.
기본적으로 이동하는 패킷이 암호화 처리 되기 떄문에 TELNET보다는 매우 안전하다고 볼수 있습니다.
오늘은 이 SSH를 크랙하는 방법과 대책에 대해서 약간 알아보겠습니다.
이번에 소개할 툴은 메두사 입니다.
메두사는 Broute Force 공격에 사용되는 툴입니다.
설치
데비안계열 ( 데비안 , Ubuntu , 쿠분투 주분투 등등)
에서는
apt-get install medusa 로 간단하게 설치 할 수 있습니다.
메두사로 SSH서버를 크랙하는 방법에 대해 알아보겠습니다.
메두사의 메뉴얼입니다.
구조는 간단합니다. 상대 SSH서버를 확인한 후에 메두사로 무차별 대입공격을 시도합니다.
물론 상대 시스템에는 로그가 남을수 있겠지요.
일단 실험에 쓰일 노트북(공격자) 데스크탑(피해자) 입니다.
공격자
OS : Debian
Net : wlan0
IP : 192.168.0.26
피해자
OS : BackTrack4
Net : eth0
IP : 192.168.0.3
ssh : OpenSSh ( SSH1)
실험에 쓰일 피해자(backTrack)입니다.
현재 SSH서버를 가동하고 아무작업없이 대기중입니다.
공격자는 포트스캐너와 각종 툴들을 이용해 정보를 수집후
피해자가 SSH서버를 이용한다는것과 OpenSSH(SSH1)을 사용한다는 것을 알아냇다는 전제하에
시작하겠습니다.
공격자는 메두사 툴을 이용해 BruteForce공격을 시작합니다.
medusa -h 192.168.0.3 -u root -P /home/noon/NOON/pass.txt -M ssh
사용된 옵션을 살펴 보자면
-h : 호스트 주소입니다. 고로 타켓 주소
-u : 크랙할 유저의 이름입니다. 유저 목록을 파일로 만들어서 사용할땐 -U /home/User.txt 이런식으로 사용하시면 됩니다. (대문자)
-P : 패스워드 목록입니다. 대문자로 사용시 파일을 사용하는것이고 뒤에있는것이 파일 위치입니다. -p 로 한후에 직접 기술해도 됩니다.
-M : 모듈입니다. 여러가지에 대해 크랙할수 있는 툴이기에 ssh에 사용할 것이라고 일러주는 것입니다.
-q : 사용할수 있는 모듈을 확인할수있습니다.
하나씩 대입후
패스워드인 toor를 찾았습니다.
이제 이 toor로 ssh서버에 접속하여 보겠습니다.
ssh root@192.168.0.3
ssh명령으로 접속합니다. @ 를 기점으로 좌측에는 유저네임 우측에는 주소가 들어가게 됩니다.
그럼 패스워드 인증창이 나오는데 아까 위에서 알아낸 toor를 입력하겠습니다.
패스워드인 toor를 찾았습니다.
이제 이 toor로 ssh서버에 접속하여 보겠습니다.
ssh root@192.168.0.3
ssh명령으로 접속합니다. @ 를 기점으로 좌측에는 유저네임 우측에는 주소가 들어가게 됩니다.
그럼 패스워드 인증창이 나오는데 아까 위에서 알아낸 toor를 입력하겠습니다.
아까 위에서 피해자의 컴퓨터에서 보았던 터미널을
즉 쉘을 가지고 있습니다.
현재 root로 로그인했기떄문에 시스템 권한을 장악하고 있다고 봐도 무방합니다.
이후에 데이터 유출 , 사이트 변조 등 여러가지 방법으로 타켓을 공격할수 있다고 봅니다.
방치 대책
SSH 연결을 위한 표준 포트가 22라는 사실은 모든 이가 알고 있다. 따라서 시스템의 보안을 더욱 강화하기 위해 취해야 할 첫 번째 단계는 그냥 포트를 사용하지 않는 포트로 변경하고 포트 번호도 22960과 같은 생소한 번호로 변경하는 것이다. 1024를 초과하는 번호는 보통 안전하지만, 발생 가능한 문제를 피하려면 참고자료를 확인한다. 이 변경은 단순히 이 명령행을 사용하여 컴퓨터에 연결해야 한다는 의미다.
ssh -p 22960 your.machine.url
|
이런 일종의 속임수를 적용하려면 /etc/ssh/sshd_config 파일에서 간단히 변경한다. 파일을 편집하고(이를 위해 루트로 작업해야 함),
포트 22
라는 행을 찾고, 사용자가 선택한 것으로 번호를 변경한다(이 행이 파운드 기호[#
]로 시작하기 때문에 주석 처리되는 경우 주석 처리 제거해야 함). 파일을 저장하고 /etc/init.d/sshd restart
명령으로 SSH를 다시 시작한다. 또한, 방화벽에서 선택한 포트를 열고 포트 22를 닫아야 한다.
또한 사용자 들의 계정관리와 root허용을 비허용으로 전환 시키는게 좋을 것 같습니다.
앞서 몇 가지 코드 예제를 설명했지만, 대부분의 우수한 시스템 관리자들이 일부 SSH 보안 구현의 사용과 기능을 신뢰하지 못한다. 일반적으로 SSH 보안과 원격 호스트 보안에 대한 다양한 접근 방식이 많이 언급되었지만, 여기에서는 원격 호스트 액세스와 관련하여 SSH 보안을 강화하는 데 사용할 수 있는 프로세스 및 구성 목록을 다룬다.
- 다음과 같이 루트 계정을 콘솔 액세스 전용으로 제한한다.
# vi /etc/ssh/sshd_config PermitRootLogin no
- 개인 키의 강력한 비밀번호 문구와 비밀번호 보호 기능을 사용하여 개인-공개 키 쌍을 작성한다(비밀번호가 없는 키 쌍이나 비밀번호가 없고 비밀번호 문구 키도 없는 로그인은 생성되지 않음).
(Use a higher bit rate for the encryption for more security) ssh-keygen -t rsa -b 4096
- 선택된 원격 호스트만 허용하고 원하지 않는 호스트는 거부하도록 TCP 랩퍼를 구성한다.
# vi /etc/hosts.deny ALL: 192.168.200.09 # IP Address of badguy
- 워크스테이션이나 랩탑에서는 SSH 서비스를 끈 후 SSH 서버가 사용 불가능해 지면, SSH 서버 패키지를 제거한다.
# chkconfig sshd off # yum erase openssh-server
- 사용자 액세스를 제한하여 SSH 액세스를 제한한다.
# vi /etc/ssh/sshd_config AllowUsers fsmythe bnice swilson DenyUsers jhacker joebadguy jripper
- SSH Protocol 2만 사용한다.
# vi /etc/ssh/sshd_config Protocol 2
- 유휴 세션을 허용하지 않는다. 그리고 유휴 로그아웃 제한시간 간격을 다음과 같이 구성한다.
# vi /etc/ssh/sshd_config ClientAliveInterval 600 # (Set to 600 seconds = 10 minutes) ClientAliveCountMax 0
- 호스트 기반 인증을 사용하지 않는다.
# vi /etc/ssh/sshd_config HostbasedAuthentication no
- 사용자의 .rhosts 파일을 사용하지 않는다.
# vi /etc/ssh/sshd_config IgnoreRhosts yes
- 알려진 네트워크 세그먼트에서만 SSH 연결을 수락하도록 방화벽을 구성한다.
Update /etc/sysconfig/iptables (Redhat specific file) to accept connection only from 192.168.100.0/24 and 209.64.100.5/27, enter: -A RH-FW-1-INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT -A RH-FW-1-INPUT -s 209.64.100.5/27 -m state --state NEW -p tcp --dport 22 -j ACCEPT
- SSH가 대기하고 바인드될 사용 가능 인터페이스를 제한한다.
# vi /etc/ssh/sshd_config ListenAddress 192.168.100.17 ListenAddress 209.64.100.15
- 강력한 비밀번호를 강제로 사용하게 하여 무차별(brute force) 공격과 사회공학 시도 및 사전 공격을 차단하도록 사용자 정책을 설정한다.
# < /dev/urandom tr -dc A-Za-z0-9_ | head -c8 oP0FNAUt[
Chroot SSHD
를 사용하여 SFTP 사용자가 자신의 홈 디렉토리만 사용하도록 제한한다.# vi /etc/ssh/sshd_config ChrootDirectory /data01/home/%u X11Forwarding no AllowTcpForwarding no
- 비어 있는 비밀번호를 사용 안함으로 설정한다.
# vi /etc/ssh/sshd_config PermitEmptyPasswords no
- 지정된 시간 안에서 수신 포트 2022에 연결되는 연결 수를 제한한다.
Redhat iptables example (Update /etc/sysconfig/iptables): -A INPUT -i eth0 -p tcp --dport 2022 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT -A INPUT -i eth0 -p tcp --dport 2022 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -o eth0 -p tcp --sport 2022 -m state --state ESTABLISHED -j ACCEPT
- 포트 2022에 연결하려는 시도가 30초 안에 세 번만 허용되도록
iptables
를 구성한다.Redhat iptables example (Update /etc/sysconfig/iptables): -I INPUT -p tcp --dport 2022 -i eth0 -m state --state NEW -m recent --set -I INPUT -p tcp --dport 2022 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 3 -j DR
- 로그를 쉽게 이해하고 로깅 보고서를 작성하기 위해
logcheck
,loggrep
,splunk
또는logwatch
와 같은 로그 분석기를 사용한다. 또한, SSH 애플리케이션 자체에서 로깅 상세 수준을 늘린다.Installation of the logwatch package on Redhat Linux # yum install logwatch
- SSH 로깅 상세 수준이 증가하도록 구성한다.
# vi /etc/ssh/sshd_config LogLevel DEBUG
- 패치 작업을 수행하여 SSH 패키지와 필수 라이브러리를 언제나 최신 상태로 유지한다.
# yum update openssh-server openssh openssh-clients -y
- OpenSSH 버전을 감추고 SSH 소스 코드를 요청하여 다시 컴파일한다. 그런 다음, 다음과 같은 업데이트 작업을 수행한다.
# vi /etc/ssh/sshd_config VerifyReverseMapping yes # Turn on reverse name checking UsePrivilegeSeparation yes # Turn on privilege separation StrictModes yes # Prevent the use of insecure home directory # and key file permissions AllowTcpForwarding no # Turn off , if at all possible X11Forwarding no # Turn off , if at all possible PasswordAuthentication no # Specifies whether password authentication is # allowed. The default is yes. Users must have # another authentication method available .
- 시스템에서 rlogin과 rsh 2진 파일을 삭제하고 SSH를 가리키는
기호 링크
로 바꾼다.# find /usr -name rsh /usr/bin/rsh # rm -f /usr/bin/rsh # ln -s /usr/bin/ssh /usr/bin/rsh
SSH는 사용하거나 사용하지 않을 수 있는 다양한 인증 기술과 방법을 많이 지원한다. /etc/ssh/sshd_config 파일 안에 인증 방법으로 나열된 키워드 다음에
yes
나 no
를 입력하여 이러한 구성을 변경한다. 여기에서는 일반적인 구성 변경사항 중 일부만 살펴본다.# RSAAuthentication yes
# PubkeyAuthentication yes
# RhostsRSAAuthentication no
# HostbasedAuthentication no
# RhostsRSAAuthentication and HostbasedAuthentication
PasswordAuthentication yes
ChallengeResponseAuthentication no
# KerberosAuthentication no
GSSAPIAuthentication yes
|
sshd_config 파일 안에 있는
AllowedAuthentications
및 RequiredAuthentications
키워드는 SSH Protocol 2와 함께 사용되는 인증 방법과 구성을 지정하며 비밀번호와 공개 키 인증을 허용하는 해당 구문은 다음과 같다.# vi /etc/ssh/sshd_config
AllowedAuthentications publickey, password
RequiredAuthentications publickey, password
|
댓글
댓글 쓰기