본문 바로가기

Security

침투 테스트(포트스캐너 만들기, SSH 봇넷 구축하기)

# 모르스 웜의 공격 기법

  1. 유닉스의 sendmail 프로그램 취약점 이용

  2. 유닉스의 finger 데몬(daemon) 취약점 이용

  3. 사용자이름과 패스워드의 목록을 사용하여 원격 쉘(RSH)로 공격대상 연결 시도

      => 이 중 단 한가지만 성공해도 웜은 프로그램을 사용하여 바이러스의 나머지 부분을 가져올 수 있었음

 

1. 포트스캐너 만들기

    - 정보수집, 공격대상에 어떤 공격을 할 지 결정하기 전에 어디에 취약점이 있는지 먼저 확인한다.

    - 열려있는 TCP 포트를 찾기위해 공격대상을 스캔한다(TCP 포트 통신에 앞서 TCP 소켓을 만들어야함)

    - 포트 스캔의 종류

       TCP SYN : TCP SYN 전송 > TCP ACK 응답 (TCP ACK 응답을 받게되면 해당 포트는 열려있는 것)

       TCP 커넥트 스캔 : 3방향 핸드셰이크를 사용하여 특정 서비스나 포트가 열려있는지 판단

 

 1) TCP 풀 커넥트 스캔

    1. 호스트 이름과 스캐닝할 포트의 목록을 입력한다.

    2. 호스트 이름을 IPv4 인터넷 주소로 변환한다.

    3. 각 포트마다 연결을 시도한다

    4. 포트에서 실행되고 있는 서비스가 무엇인지 판단하기 위해 가비지 데이터를 전송하고 해당 어플리케이션이 전송         하는 배너값을 읽는다.

portscanner.py
실행결과

+ 쓰레드를 사용하면 더욱 효율이 높아짐

 

2) Nmap 포트 스캐너 통합하기

   - TCP 커넥트 스캔은 제한적인데 반해 Nmap은 ACK, RST, FIN, SYN-ACK 등과 같은 다른 종류의 스캔을 지원한다.

   - Nmap은 결과값을 XML형식으로 생성하는데, 파이썬으로 이 기능을 완벽하게 활용가능하여 파이썬으로 Nmap을         많이 사용한다.

nmap.py
20,21,80포트 모두 필터링 되어있음

-> TCP 커넥트 스캔에서 닫혀있다고 생각했던 포트들이 사실은 필터링 되어있었다는 것을 알 수 있음

-> TCP 커넥트 스캔보다 더 정확한 결과를 알 수 있음

 

2.  파이썬으로 SSH 봇넷 구축하기

   - 모리스웜 > 사용자이름과 패스워드를 강요하는 공격 기법 사용 > 시스템 관리자와 원격으로 컴퓨터에 접속하여           여러 터미널 명령어로 컴퓨터를 관리할 수 있는 수단을 제공 > 이후 공개키 암호화, RSH를 함께 사용하는 SSH(시큐       어 쉘) 프로토콜이 RSH를 대체

 

  1) Pexpect로 SSH 연결하기

    - 공격대상의 사용자 계정을 공격하는 자동화 SSH 웜 구현

    - connect() 함수 : 사용자 이름, 호스트 이름 그리고 패스워드를 입력 받아서 SSH 통신을 반환하고 SSH 연결을 함

    - pexpect 라이브러리를 사용하여 스크립트는 클라이언트에서 기대하고 있는 결과값을 기다림

      > 결과값 : 시간 초과, 다른 호스트에 새로운 공개키가 있다는 메시지, 패스워드 프롬프트 

 

     => 실습 안됨..

 

  2) Pxssh SSH 패스워드 공격하기

     - Pxssh는 SSH세션과 직접 연동할 수 있으며, login(), logout(), prompt() 등의 메소드가 정의되어있음

     - passwd.txt의 파일의 pw목록으로 비밀번호 찾기

sshBrute.py

실행결과

pw 찾기 성공

3. SSH 봇넷 구축하기

  - 여러 호스트를 동시에 제어하기

  - 봇넷 : 공격자들이 해킹한 컴퓨터 여러 대를 동시에 악의적인 목적으로 사용하는것

  - 봇넷 만들기 : Client(), Connect(), send_command(), alive()등의 메소드 사용

  - botnet이라는 광역 배열을 만들고, 이 배열에 개개인의 클라이언트 객체를 포함시킴 -> addClient() 함수 만듦

  - botnetCommand()를 통해 모든 배열에 작업한 후 봇넷 배열에 있는 각 클라이언트에 명령어를 전송함

 

botNet.py

실행결과