본문 바로가기

Security

컨피커, 노력하면 된다

  # 컨피커

   - 두 개의 서로 다른 벡터를 사용하여 공격함.

   - 윈도우 서버 서비스에 있는 제로 데이 취약점을 활용함 > 스택을 변조하여 쉘코드를 실행시키고, 감염된 호스트에         자신의 복사본을 다운로드 하게함

   - 이 공격이 실패하면, 디폴트 관리자 네트워크 공유(ADMIN$)의 계정에 무차별 대입공격을 하여 접근 권한을 획득함

 

  # 메타스플로잇 

   - 사용자가 명령어를 입력하여 공격실행 or 배치 파일을 통해 공격 가능

   - 순차적으로 배치 파일에 있는 명령어를 처리하여 공격 실행

   

   1. 메타스플로잇 공격

    - 공격코드 : exploit/windows/smb/ms08_067_netapi

    - 공격대상 : 192.168.--.--

    - 페이로드 : windows/meterpreter/reverse_tcp

    - 공격자 컴퓨터 : 192.168.--.--, 7777번 포트

    - 리버스 연결 지시 > 시스템공격 지시

공격 성공 > 활성세션이 없음

2. 메타스플로잇과 파이썬 연동하기

  - Nmap을 import하여 445번이 열려있는 모든 호스트의 결과값을 반환함 > 공격이 유효한 컴퓨터만을 대상으로 공격      가능

  - 공격에 성공한 컴퓨터를 대상으로 리스터 설정(리스터 or 공격명령 채널은 해킹에 성공하면 공격대상 호스트와 원격      에서 작동할 수 있게 함)

  - 메타스플로잇의 미터프리터는 원격의 컴퓨터에서 실행되면서 공격 명령 호스트로 연결하며, 감염된 대상을 분석 및       제어할 수 잇는 다양한 기능(포렌식 객체 검색, 명령어 실행, 감염된 호스트의 트레픽 경로, 키 로거 설치, 패스워드         해시 덤프)을 제공함

  - 미터프리터가 공격 명령을 위해 공격자로 리버스 연결을 하면, 메타스플로잇은 multi/handler 모듈을 호출함

 

공격 코드 : ms08_067_netapi

LHOST(로컬주소) : 192.168.__.__

LPORT(로컬포트) : 7777

옵션 : -j(작업의 컨텍스트에서) -z(작업과 즉시 상호작용하지 말고)

 

msfconsol 옵션 설정하기

msfconsole을 열어 multi/handler 실행
options에 아무것도 없다면
payload의 reverse_tcp 설정

3. 원격 프로세스 실행 공격하기

 - SMB의 사용자이름/패스워드 조합을 무차별 대입 공격을 하여 원격에서 실행 중인 프로세스(psexec)에 대한 접근 권     한을 획득해야함.

 - smbBrute 함수는 메타스플로잇의 설정 파일, 공격대상 호스트, 패스워드 목록을 저장한 파일, 로컬 주소 그리고 리스     너 포트 등을 입력받음

 - 사용자 이름을 디폴트 윈도우 계정인 Admisitrator로 설정하고 패스워드 파일을 엶

 - 파일에 있는 각 패스워드마다 함수는 메타스플로잇의 설정 파일을 만들어서 원격 프로세스 실행 공격코드를 사용함

 - 사용자이름/패스워드 조합이 성공하면, 공격코드는 미터프리터 페이로드를 로컬 주소와 포트를 사용하여 실행함

conficker.py 실행 커맨드
conficker.py 실행 결과

  // conficker.py 함수부분

setupHandler()
confickerExploit()
smbBrute()

4. 제로 데이 개념의 공격 코드 개발하기

  - 파이썬으로 공격코드 작성 단순화하기

 

 1) 스택 기반의 버퍼 오버플로우 공격

  - 사용자가 입력한 값을 검증하지 않아서 그 값이 프로그램의 다음 지시를 가리키는 EIP를 덮어쓰게 되며 프로그램의 흐름을 제어하게 됨.

  - 공격코드는 공격자가 삽입한 쉘코드가 있는 위치로 EIP레지스터가 포인트하게 만듦

  - 쉘코드 : 공격대상 시스테메 사용자를 추가하거나 공격자로 네트워크 연결 생성하거나, 독립적ㅇ니 실행파일을 다운      로드 하는 중의 공격을 할 수 있음

 

 2) 공격의 핵심 요소 추가하기

  - shellcode 변수에 메타스플로잇 프레임워크로 생성한 페이로드 헥스값으로 인코딩하여 포함시킴

  - overflow 변수에 알파벳 "A(\x41)"가 246개 포함되도록 함

  - return 주소 변수는 스택의 맨 위로 직접 점프(jump)하게 만드는 kernel32.dll로 포인트 함

  - padding 변수에는 150개의 NOP 지시 포함

  - 이 변수들을 모두 조함하여 crash 변수 만듦

 

3) 악성코드 전송하기

  - Berkeley Socket API로 공격대상 호스트의 TCP 21번 포트에 연결함 > 연결 성공 시 사용자이름과 패스워드를 호스        트에 전송함

  - FTP 명령어잉 "RETR"과 crash 변수를 전송함 (프로그램이 사용자 입력값을 제대로 검증하지 않기 때문에 EIP레지스      터를 덮어쓰는 스택 버퍼 오버플로우를 일으킴 > 쉘코드로 점프하여 쉘코드 실행