Brute-Force라 하면 무작위로 여러 가지 경우의 수를 계산해서 시도해보는 것을 의미하는데요. 

사람은 유사한 작업을 반복하는것을 매우 힘들어하고 싫어하는 반면 컴퓨터는 반복 작업도 곧잘 해냅니다. 

이런 컴퓨터에게 수 많은 경우의 수를 감안해서 다양한 무작위 시도를 하게 함으로써 원하는 정보를 획득 하는게 가능합니다. 


일반적으로 'SSH Brute-Force 공격'이 유명하죠. 

성공할 경우 타겟 장비의 root권한을 획득 할 수 있으므로 주의가 필요한 공격 중 하나라고 할 수 있습니다. 


이에 대한 방어를 준비했다면 제대로 방어가 되는지 확인이 필요하겠죠?

이 작업을 도와줄 좋은 도구가 있답니다. 


리눅스용 과 윈도우용 두 가지 간단한 툴을 소개하고자 합니다. 


※ 절대 이 도구를 악의적인 목적으로 사용하지는 마시기 바랍니다. 


  • 파이썬(Python)으로 작성된 리눅스용 Brute-Force 검증 툴


이름은 'Patator'인데요.. 사전상에 정확한 의미는 없지만.. 유추해 보기로는 'patate'를 사람명사로 표현해서 '바보처럼 같은 행위를 반복해주는 녀석' 정도가 아닐까 생각됩니다. 


믿음직 스러운건 구글 코드에 등록되어 있다는 겁니다. (아직 베타 버전인가 봅니다. 버전이 0.3 이네요.)

구글 코드 페이지 에서 기본 사용법인 지원 가능한 리스트를 확인 할 수 있습니다. 

자세한 설명은 다운받은 파일을 문서 편집 툴로 열어서 확인해보시면 됩니다. 


아래 링크를 클릭해서 다운 받으시면 됩니다. 

Patator 다운로드 



Patator 사용법:


다운 받은 실행 파일을 Brute-Force를 시도할 장비로 옮겨둡니다. 

실행 권한을 미리 부여해 두면 사용이 더 편리합니다. 


# chmod 777 ./patator_v0.3.py


이름도 간단하게 변경해 줍시다. 


# mv patator_v0.3.py patator.py



1. 사용 가능한 명령 리스트 조회

이것도 역시 '-h'옵션을 주면 됩니다. 


여기서는 공격 종류를 모듈이라고 부르고 있습니다. 아무래도 공격이라고 하면 왠지 어감이 안좋아서 그런것 같기도 하네요.


모듈 종류별로 별도의 도움말 페이지 조회 방법도 나오네요. 


# ./patator.py -h

Usage:

  $ ./patator.py module --help

or

  $ ln -s patator.py module

  $ ./module --help


Available modules:

  + ftp_login     : Brute-force FTP authentication

  + ssh_login     : Brute-force SSH authentication

  + telnet_login  : Brute-force Telnet authentication

  + smtp_login    : Brute-force SMTP authentication

  + smtp_vrfy     : Enumerate valid users using SMTP VRFY

  + smtp_rcpt     : Enumerate valid users using SMTP RCPT TO

  + http_fuzz     : Fuzz HTTP/HTTPS

  + pop_passd     : Brute-force poppassd authentication (http://netwinsite.com/poppassd/ not POP3)

  + smb_login     : Brute-force SMB authentication

  + ldap_login    : Brute-force LDAP authentication

  + mssql_login   : Brute-force MSSQL authentication

  + oracle_login  : Brute-force Oracle authentication

  + mysql_login   : Brute-force MySQL authentication

  + pgsql_login   : Brute-force PostgreSQL authentication

  + vnc_login     : Brute-force VNC authentication

  + dns_reverse   : Reverse lookup subnets

  + dns_forward   : Forward lookup subdomains

  + snmp_login    : Brute-force SNMP v1/2/3 authentication

  + unzip_pass    : Brute-force the password of encrypted ZIP files

  + keystore_pass : Brute-force the password of Java keystore files


2. 모듈 별 사용법 조회 
FTP에 대한 설명을 조회해봅시다. 
위에서 확인했던 명령어로 조회를 하면 됩니다. 

간단한 사용법까지 나와있어 옵션에 대한 설명을 다 보지 않더라도 사용이 가능합니다. 

# ./patator.py ftp_login --help
Usage:
ftp_login host=10.0.0.1 user=FILE0 password=FILE1 0=logins.txt 1=passwords.txt -x ignore:mesg='Login incorrect.' -x ignore,reset,retry:code=500 -x reset:fgrep='Login successful'

Module options:
  host          : hostnames or subnets to target
  port          : ports to target [21]
  user          : usernames to test
  password      : passwords to test
  persistent    : use persistent connections [1|0]



3. 명령 실행
위에 나온 사용 예제를 활용해서 실행하면 됩니다. 

# ./patator.py ftp_login host=10.0.0.1 user=FILE0 password=FILE1 0=logins.txt  1=passwords.txt -x ignore:mesg='Login incorrect.' -x ignore,reset,retry:code=500 -x reset:fgrep='Login successful'

여기서 사용된 옵션에 대해 간략히 살펴보면 이렇습니다. 
  1. host로 설정해준 '10.0.0.1'에 대해 FTP 로그인을 시도합니다. 
  2. FTP 로그인에 시도할 user ID와 password는 별도의 파일에 리스트 형식으로 입력해줍니다. 
  3. logins.txt에는 user ID를 한 줄에 한 개씩 가능성 있는 ID들을 입력해 줍니다. 
  4. passwords.txt에는 password를 ID처럼 가능성 있는 다양한 비밀번호를 입력해 줍니다. 
  5. 로그인 실패 메시지는 무시하고, 성공하게 되면 다른 ID/PW로 시도하기 위해 현재 연결을 끊어줍니다. 
  6. 문법 오류가 있을 때 발생하는 에러 코드 500 에 대해서도 무시하도록 합니다. 


실행 과정을 모두 보고 싶다면 뒷 부분 옵션을 생략하면 됩니다. 

# ./patator.py ftp_login host=10.0.0.1 user=FILE0 password=FILE1 0=logins.txt  1=passwords.txt


4. 결과 확인
간략한 사용결과를 보기 위해 ID만 파일에서 읽어오도록 하고 실행한 결과입니다. 

# ./patator.py ftp_login host=192.168.10.10 user=FILE0 password=qwe123 0=logins.txt
18:24:17 patator    INFO - Starting Patator v0.3 (http://code.google.com/p/patator/) at 2012-09-18 18:24 KST
18:24:17 patator    INFO -
18:24:17 patator    INFO - code & size     | candidate                   |   num | mesg
18:24:17 patator    INFO - ---------------------------------------------------------------
18:24:17 patator    INFO - 230 17          | root                        |     7 | Login successful.
18:24:20 patator    INFO - 530 16          | admin                       |     1 | Login incorrect.
18:24:20 patator    INFO - 530 16          | administrator               |     2 | Login incorrect.
18:24:20 patator    INFO - 530 16          | user                        |     3 | Login incorrect.
18:24:20 patator    INFO - 530 16          | guest                       |     4 | Login incorrect.
18:24:20 patator    INFO - 530 16          | tmp                         |     5 | Login incorrect.
18:24:20 patator    INFO - 530 16          | test                        |     6 | Login incorrect.
18:24:20 patator    INFO - Hits/Done/Size/Fail: 7/7/7/0, Avg: 2 r/s, Time: 0h 0m 3s


시간대 별로 로그인을 시도한 ID별로 결과 코드와 메시지가 출력됩니다. 
메시지에 'Login successful'이 출력되어 있다면 FTP Brute-Force에 의해 취약점이 드러난게 됩니다. 


실행시에 디펜던시(dependency)가 걸린 다른 프로그램이 있다면 실행이 되지 않겠죠? 
추가적으로 설치 해야할 게 있다면 이렇게 오류 메시지가 나타나게 됩니다. 

# ./patator.py ssh_login --help
ERROR: paramiko (http://www.lag.net/paramiko/) is required to run ssh_login.
Please read the README inside for more information.

해당 프로그램을 설치 한 후에 다시 실행 하시면 됩니다. 


=== 본문 내용 추가 ===
디펜던시를 파일들을 설치하는 법에 대한 문의가 있어 내용을 추가합니다. 
우선 파이썬(Python)을 처음 접해보시거나 익숙하지 않으시다면 파이썬 파일들을 간편하게 설치할 수 있도록 도와주는 툴을 하나 다운받아 설치 하세요. 
우리가 사용할 것은 'easy_install'인데 이것은 'setuptools'에 포함되어 있습니다. 
해당 사이트에 가서 'setuptools' 파일을 다운 받아 주세요.  wget 명령어로 받으셔도 됩니다. 

개인 사정으로 Ubuntu환경에서 설치하는 과정을 올리게 됐습니다. 다른 OS라면 감안하셔서 진행해주세요. 

$ wget https://pypi.python.org/packages/source/s/setuptools/setuptools-1.1.6.tar.gz

파일을 받았다면 압축을 풀어주세요. 

$ tar xvf setuptools-1.1.6.tar.gz 

압축을 다 풀고 나면 폴더에 들어가서 설치를 진행해 주면 됩니다. 

$ python setup.py  build
$ sudo python setup.py  install

setup.py라는 파일을 실행하면 되는데, 뒤에 'build', 'install'처럼 수행할 명령어를 지정해주면 됩니다. 
'install'은 root 권한이 있어야만 됩니다. 

이제 easy_install이란 명령어가 사용 가능할 겁니다. 이 명령어로 디펜던시 파일들을 설치 하시면 됩니다. 
한 예로 ssh_login 모듈에 필요한 'paramiko'를 설치하는 법을 알아봅시다. 

먼저 에러 메시지에 있는 링크에 들어가서 'paramiko' 파일을 받아줍니다. 물론, wget으로 받아도 됩니다. 

$ wget https://github.com/paramiko/paramiko/archive/v1.12.0.tar.gz

압축을 풀고 폴더에 들어가서 조금전에 설치 했던 'easy_install'을 활용해서 설치를 진행합니다. 

$ sudo easy_install ./
Processing 
Writing /home/kyungtae/Workspace/Reference/paramiko-1.12.0/setup.cfg
Running setup.py -q bdist_egg --dist-dir /home/kyungtae/Workspace/Reference/paramiko-1.12.0/egg-dist-tmp-8Fc0eB
warning: no files found matching '*' under directory 'docs'
zip_safe flag not set; analyzing archive contents...
Adding paramiko 1.12.0 to easy-install.pth file

Installed /usr/local/lib/python2.7/dist-packages/paramiko-1.12.0-py2.7.egg
Processing dependencies for paramiko==1.12.0
Searching for ecdsa
Reading https://pypi.python.org/simple/ecdsa/
Best match: ecdsa 0.9
Downloading https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.9.tar.gz#md5=2b9c35245ce391d6b7d8f991aad5c630
Processing ecdsa-0.9.tar.gz
Writing /tmp/easy_install-_16pCs/ecdsa-0.9/setup.cfg
Running ecdsa-0.9/setup.py -q bdist_egg --dist-dir /tmp/easy_install-_16pCs/ecdsa-0.9/egg-dist-tmp-0hYqTP
zip_safe flag not set; analyzing archive contents...
Adding ecdsa 0.9 to easy-install.pth file

Installed /usr/local/lib/python2.7/dist-packages/ecdsa-0.9-py2.7.egg
Finished processing dependencies for paramiko==1.12.0

설치가 완료 되었다면 다시 patator를 실행해봅시다. 

$ python patator.py  ssh_login
Usage: 
ssh_login host=10.0.0.1 user=root password=FILE0 0=passwords.txt -x ignore:mesg='Authentication failed.' -x ignore,reset,retry:mesg='No existing session' -x reset:code=0

설치가 정상적으로 되었군요. 이제 사용법에 맞는 명령어를 써서 사용하시면 됩니다. 



추천은 저를 춤추게 합니다 ^^




  • 윈도우용 GUI기반 Brute-Force 검증 툴 

Bruteus라는 툴입니다. 
최근에는 업데이트가 되고 있지는 않지만.. Brute-Force가 워낙 고전적인 방식이라.. 검증하는데는 크게 문제가 없어보입니다. 윈도우7에서도 정상적으로 동작합니다. 

홈페이지에서 설명 및 다운이 가능합니다. 


Brutus 사용법:

BrutusA2.exe 를 실행 시킵니다. 
한 눈에 보기에도 직관적으로 사용이 가능할 정도로 심플합니다. 

먼저, Target에 검증 할 서버의 IP주소를 넣어줍니다. 
Type에서 원하는 종류를 선택 후 'Start'버튼을 눌러주면 됩니다. 


화면 하단에 현재 진행 상황에 대한 메시지와 함께 진행률이 표시됩니다. 


사용자 ID와 비밀번호 파일은 함께 제공되고 있습니다. 

비밀번호는 800여개나 되네요. 만약 저 파일에 제공되는 비밀번호 중 하나를 사용중이라면 변경하는게 좋겠죠? 



우리의 서버 우리가 먼저 검증해서 안전하게 지킵시다~ 


Posted by KT한
,