기본 콘텐츠로 건너뛰기

SSH 크랙 , 보안 :: 메두사(Medusa) [소개, 사용법 ] [패스워드 크래킹]

외부에서 서버를 관리하기 위해서는 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   :   사용할수 있는 모듈을 확인할수있습니다.

하나씩 대입후 
패스워드인 toor를 찾았습니다.
이제 이 toor로 ssh서버에 접속하여 보겠습니다.


ssh root@192.168.0.3

ssh명령으로 접속합니다.    @ 를 기점으로 좌측에는 유저네임  우측에는  주소가 들어가게 됩니다.
그럼 패스워드 인증창이 나오는데  아까 위에서 알아낸 toor를 입력하겠습니다.
아무이상없이 ssh서버에 로그인되었습니다.
아까 위에서 피해자의 컴퓨터에서 보았던 터미널을 
즉 쉘을 가지고 있습니다.

현재 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
    

  • 로그를 쉽게 이해하고 로깅 보고서를 작성하기 위해 logcheckloggrepsplunk 또는 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

댓글

이 블로그의 인기 게시물

OllyDbg 64bit 실행방법

OllyDbg 1.1 은 기본적으로 64bit 환경을 지원하지 못합니다. 책의 디버깅 실습은 거의 대부분 OllyDbg 를 이용해서 진행됩니다.  그러나 OllyDbg 1.1 은 64bit 환경을 지원하지 못합니다.  <그림 1. Windows 7 64bit 에서 OllyDbg 1.1 실행시 예외 발생> 64bit OS 에서 "2장 Hello World 리버싱" 실습 예제 파일 HelloWorld.exe 를 OllyDbg 1.1 로 실행시키면 <그림 1>과 같이 예외가 발생하면서 ntdll.dll 모듈 영역의 코드에서 멈춰버립니다. (이것은 OllyDbg 1.1 의 버그입니다.) 64bit 환경에서 OllyDbg 사용할 수 있는 2 가지 방법 #1. 64bit OS + OllyDbg 2.0 OllyDbg 2.0 버전에서는 64bit에서 정상 실행 되지 않는 버그가 수정되었습니다. 다운로드 링크 :  http://www.ollydbg.de/odbg200.zip * 참고 최신 버전 OllyDbg 2.01 beta 2 는 실행 과정에 약간의 문제가 있습니다. 문제가 해결될 때까지는 OllyDbg 2.0 을 사용해 주시기 바랍니다. 위 링크에서 파일을 다운받아 압축을 해제한 후 실행하면 <그림 2> 와 같은 화면이 나타납니다. <그림 2 - Windows 7 64bit 에서 OllyDbg 2.0 으로 HelloWorld.exe 를 띄운 화면> <그림 2>의 화면을 책의  <그림 2.3>  처럼 보이게 하려면 다음과 같이 작업해 주시면 됩니다. 1) 내부의 CPU 윈도우를 최대화 시킵니다. 2) Code/Register/Dump/Stack Window 의 폰트를 변경합니다.    (각각의 창에서 마우스 우측 메뉴 - Appearance - Font - System f

인터넷 웹페이지 디버깅 피들러(fiddler) 사용법

인터넷 디벌깅 툴 피들러 입니다. 개발자들은 인터넷 디버깅 툴을 많이 사용하고 있는데요 인터넷 익스플러워 , 사파리 구글크롬등 디버깅 툴은 내장되어 있습니다.  하지만 원하는 값을 얻기 어렵거나 사용하기 어려운 점도 있습니다. 그래서 사용하기도 간편하고 필요한 기능도 많도 원하는 값을 쉽게 확인 할수 있는 디버깅 툴을 소개 해드리려 합니다. 알고 계시는 분도 많겠지만 피들러 (fiddler) 라는 툴입니다.  피들러에 대하 알아보도록 하겠습니다.  피들러(Fiddler) 설치 피들러 설치를 하기 위해 아래 사이트에 접속합니다.   http://www.telerik.com/fiddler 사이트에 접속하시면 FreeDownload 버튼이 보입니다. 클릭을 해서 피들러 설치를 진행합니다. ▶ 피들러는 닷넷 프레임워크를 사용하는데요 window 7 이상 제품군이시면  Fiddler for NET4을 선택하시고 미만이면 .net2를 선택 하세요  이제 Download Fiddler를 선택합니다.  ▶ 피들러 설치 진행화면이 나옵니다. I Agree를 클릭합니다.    ▶ 설치할 폴더를 선택 후 Install을 클릭합니다.    ▶ 설치가 완료되면 Close 를 클릭합니다.    ▶ 설치가 완료되면 브라우저를 새로 실행 하시고 도구> Fiddler를 선택합니다. 도구메뉴가 안보이시면 Alt를 누르시면 보입니다.    ▶ 우측에도 피들러 메뉴가 있습니다.  도구를 클릭 후 피들러를 클릭합니다.   ▶ 실행이 되면 아래와 같은 화면이 나오는데요  좌측 하든을 보시면 Capturing 가 보입니다. 캡쳐를 진행하는 중이구요 키보드중 F12키를 누르면 캡쳐 중지 다시 F12키를 누르면 캡쳐가 진행됩니다.  원하는 부