brunch

You can make anything
by writing

C.S.Lewis

by 복지CEO 조정원 Mar 03. 2017

베일프레임워크 이해(2) - 베일이베이전 활용

보안프로젝트매거진


※ 주의사항

아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.

악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.

해당 문서의 저작권은 해당 프로젝트 참여 저자들에게 모두 있습니다. 외부에 공개시 법적 조치가 가해질 수 있습니다.

해당 원고는 보안프로젝트에서 추진한 책 출간되기 전에 공개되는 일부 내용입니다.


베일이베이전(Veil-Evasion)은 “Evasion”은 의미대로 안티바이러스를 “회피” 또는 “우회”하는 페이로드 파일을 생성하는 도구이다. 안티바이러스 우회 도구의 집합체인 베일프레임워크에서 가장 핵심적인 도구이다. 이번 장에서는 베일이베이전을 처음 접해보는 독자들을 위해 베일이베이전에 대해 하나씩 차근차근 알아볼 것이다.

  

그림 3 1 베일이베이전 실행화면 


베일이베이전을 실행하면 메인 메뉴화면이 출력된다. 베일이베이전의 메인 메뉴에서는 현재 베일이베이전의 버전, 현재 생성 가능한 페이로드 종류의 개수, 그리고 사용 가능한 명령 등을 그림 3 1과 같이 출력한다.

그리고 베일 이베이전 메뉴 화면에서 use, info, list, update, clean, checkvt, exit 등의 명령을 사용할 수 있으며, 각 명령에 대해 알아보도록 한다. use 명령은 베일 이베이전으로 페이로드 파일을 생성할 때 페이로드 파일 종류를 선택할 때 사용하며, 페이로드의 번호나 이름을 같이 입력하여 실행한다. use 명령을 실행하면 해당 페이로드 메뉴로 이동하여 페이로드 생성을 위한 설정값을 사용자가 입력할 수 있다. list 명령은 현재 베일 이베이전에서 사용할 수 있는 페이로드 목록을 출력하는 명령이다. 출력된 페이로드 목록의 정보를 통해 use 명령을 사용하기 전에 페이로드 번호와 이름을 확인할 수 있다. info 명령은 페이로드 번호 또는 이름과 같이 사용하며, 지정된 페이로드의 용도와 페이로드 생성 시 필요한 설정 정보 등을 확인할 수 있는 명령이다. 또한 info 명령은 메인 메뉴뿐만 아니라 페이로드 메뉴 내에서도 사용이 가능한 명령이다. update 명령은 현재 베일 이베이전의 현재 버전과 최신 버전을 비교하여, 현재 설치된 버전이 이전 버전인 경우 자동으로 업데이트를 진행하는 명령이다. clean 명령은 현재 베일 이베이전으로 생성한 페이로드의 저장 경로를 확인하여 해당 경로에 저장된 페이로드를 모두 제거하는 명령이다. checkvt 명령은 베일 이베이전으로 생성한 페이로드의 해쉬값을 생성하여, 바이러스 토탈에 해당 페이로드가 등록되어 있는지 확인하는 명령이다. checkvt 명령을 통해 해당 페이로드를 사용하기 전에 안티 바이러스를 우회할 수 있는지 확인이 가능하다.

 

그림 3 2 베일이베이전 페이로드 목록


페이로드 파일을 생성하려면 우선 생성할 수 있는 페이로드 종류를 파악해야한다. 메인 메뉴 화면에서 list 명령어를 실행하여 그림 3 2과 같이 현재 생성 가능한 페이로드 목록을 확인한다. 

사용자는 페이로드 파일 생성 시 use 명령을 사용하여 페이로드 종류를 설정한다. list 명령으로 출력된 페이로드 번호나 이름을 “use [페이로드 번호/이름]” 형태로 입력하여 생성할 페이로드 종류를 결정한다.

 

그림 3 3 페이로드 파일 설정화면


use 명령을 실행하면 그림 3 3과 같은 페이로드 파일 설정화면이 출력된다. 사용자는 페이로드 설정 화면의 Description을 참고하여 설정값을 고려해야 한다. 사용자가 페이로드 설정을 입력 또는 수정하려면 “set [설정이름] [설정값]”의 형태로 실행한다. 예를 들어 “set LPORT 8080”라는 구문을 실행하면 페이로드를 연결하는 핸들러 포트가 8080으로 설정된다.

명심해야할 점은 페이로드 설정에서 Required Options의 Current Value값이 모두 채워져 있어야 파일 생성과정을 진행 가능하다는 점이다. 실습에서 Current Value가 비어있는 LHOST 항목은 반드시 “set LHOST”를 실행하여 설정한다. LHOST는 메타스플로잇 핸들러가 가동중인 시스템의 IP 주소를 의미한다.

 

그림 3 4 페이로드 설정에서 LHOST 설정


사용자는 핸들러를 가동할 시스템의 IP 주소를 확인한 후 LHOST 값으로 설정한다. 설정 후 info 명령어를 실행하면 그림 3 4과 같이 LHOST에 IP주소가 설정되어 있다. 그 외의 설정도 설정값을 수정하려면 마찬가지로 set 명령을 사용한다.

참고로 모든 페이로드 설정에는 기본적으로 LPORT, LHOST, COMPILE_TO_EXE 설정이 존재한다. 여기서 “COMPILE_TO_EXE” 설정은 페이로드 파일을 소스파일로 생성(N)할지 아니면 EXE실행 파일로 생성(Y)할지 결정하는 설정값이다. 이제 사용자가 페이로드 설정을 완료하면 generate 명령어를 실행하여 페이로드 파일을 생성한다.

 

그림 3 5 페이로드 실행파일 생성 도구 설정    


페이로드 설정에서 실행파일로 출력하도록 설정한 후 페이로드 파일 이름을 입력하면 그림 3 5과 같이 페이로드 실행 파일로 생성하는 데 사용할 도구를 결정하는 화면을 출력한다. 파이썬 실행 파일을 생성하는 도구는 생소할 수 있으므로 독자들에게 베일이베이전에서 사용하는 각 실행 파일 생성도구에 대해 알아볼 것이다.

먼저 PyInstaller는 별도의 모듈이나 파이썬 인터프리터의 설치 없이 실행 가능한 파일을 생성하는 프로그램이다. PyInstaller로 생성한 파일 내부에 파이썬 환경을 포함되어 현재의 OS 환경과 상관없이 파일을 실행 가능하다. PyInstaller는 Python 2.7버전이나 3.3 버전 이상만 설치되어 있으면 OS 환경과 상관없이 윈도우즈 실행 파일을 생성한다. 또한, 실행압축 기법을 사용하여 파일을 생성하기 때문에 원래 파일보다 작은 크기의 실행 파일이 생성된다.

두번째 도구인 Pwnstaller는 베일프레임워크의 개발자인 Will Schroeder(@harmjoy)가 개발하여 2014년 BSides Boston에서 소개한 도구이다. PyInstaller로 생성한 파일은 환경과 상관없이 어디에서나 실행할 수 있었기 때문에, 이러한 점을 이용하여 공격자들은 PyInstaller를 사용하여 악성코드를 제작하였다. 이러한 연유로 안티바이러스에서 의심스러운 파일을 검사할 때 실행압축을 해제하여 PyInstaller 로더를 확인하면 악성 파일로 판단하여 해당 파일을 차단하였다. 따라서 PyInstaller 로더로 인해 파일이 검출되는 문제를 해결하기 위해 Pwnstaller는 PyInstaller로더 파일인 runw.exe와 연관된 모든 소스 파일들의 코드를 난독화한다. 난독화된 코드를 컴파일하여 페이로드 실행 파일로 생성한다. 베일이베이전으로 페이로드를 제작할 경우 PyInstaller 로더를 숨길 수 있으므로 일반적인 페이로드보다 생명주기를 확장된다.

세번째 도구인 py2exe는 파이썬 인터프리터가 미설치된 윈도우즈 OS환경에서 작동할 수 있는 파이썬 실행파일을 생성하는 도구이다. py2exe를 설치하려면 윈도우즈 OS환경을 준비하거나, 윈도우즈 OS환경을 설치하기 어려운 경우, 윈도우즈 에뮬레이터를 이용하여 설치할 수 있다. 그리고 파이썬, Py2Exe, PyCrypto, pywin32 등의 프로그램이 설치되어야 한다. 

py2exe를 실행하면 실질적인 페이로드의 소스파일인 payload.py 파일과 py2exe를 실행할 때 필요한 모듈과 파일을 포함하는 setup.py 파일 그리고 페이로드를 실행파일로 변환하는 runme.bat을 생성한다. 생성된 파일들은 페이로드가 설치될 시스템의 파이썬 경로에 위치한다. 그리고 배치 파일을 실행하면 payload.py과 setup.py파일을 묶어서 실행 파일로 변환된다.

 


그림 3 6 페이로드 실행파일 생성결과 출력


페이로드 실행 파일을 생성하면 그림 3 6과 같이 생성된 파일의 상세 정보가 출력된다. 출력 화면에는 생성된 페이로드 실행파일의 경로, 페이로드 생성 언어, 사용된 페이로드 종류, 페이로드 옵션 설정, 페이로드 파일 경로, 핸들러 파일 경로 등의 정보가 출력된다. 

이제 생성한 페이로드 실행파일을 실습에 사용해보자. 실습 환경은 칼리리눅스가 설치된 공격자 호스트와 윈도우즈 XP 운영체제가 설치된 공격 대상 시스템이 존재한다. 그리고 동일한 가상 네트워크 대역 내에 두 호스트가 위치하도록 환경을 구성한다. 

 

그림 3 7 베일이베이전으로 생성한 페이로드 실행파일

 

그림 3 8 페이로드 실행파일과 함께 생성된 핸들러 파일 (.rc 파일)


칼리리눅스에는 실습을 진행하기 위해 베일이베이전으로 생성한 exe 형태의 페이로드 파일 Test.exe를 그림 3 7과 같이 준비한다. 그리고 실행된 페이로드를 통해 세션을 연결하기 위한 핸들러 파일 Test_handler.rc도 그림 3 8과 같이 준비한다. 함께 생성된 핸들러 파일의 내부를 확인하면 메타스플로잇의 핸들러를 사용하도록 작성되었다. 핸들러 파일을 작동시키려면 msfconsole 명령에 핸들러 파일 경로를 –r 옵션으로 입력하여 실행한다. 핸들러 파일이 실행되면 그림 3 9와 같이 메타스플로잇에서 핸들러 생성 메시지가 출력된다. 생성 완료 후에 공격코드 실행을 기다린다.

 

그림 3 9 메타스플로잇 핸들러 작동 및 리스닝 포트 오픈


앞서 베일이베이전의 페이로드 실행파일을 생성하는 과정에서 역방향 연결을 사용하는 페이로드(revserse_https)를 사용하였다. 핸들러 파일이 정상적으로 실행되면 역방향 연결 요청을 받기 위해 LPORT로 설정한 포트가 LISTENING 상태로 변경된다. 그리고 핸들러는 그림 3 9와 같이 백그라운드 프로세스(exploit -j)로 작동하여 페이로드가 설치된 시스템에 접속을 요청하는 것을 대기한다. 

 

그림 3 10 대상이 되는 시스템에서 연결 시도 화면


페이로드가 핸들러에 연결 요청을 보내도록 하기 위해 윈도우 XP 운영체제에 전달된 Test.exe 파일을 실행한다. 파일이 실행되면 파일 내 페이로드는 연결 요청을 보내고 대기중인 핸들러가 해당 연결 요청을 받는다. 이 과정을 통해 연결이 수립되면 그림 3 10과 같이 페이로드가 설치된 시스템과 미터프리터 세션이 연결된다. session opend 메시지가 발생해야 정상적으로 연결된것이다. 정상적으로 연결 메시지가 출력되지 않으면 다시 같은 절차로 실행해보자.

 

그림 3 11 페이로드 파일 해시값으로 바이러스토탈 검색


생성한 페이로드들이 안티바이러스를 우회하는지 확인하기 위해 checkvt 기능을 실행한다. checkvt를 실행하면 페이로드 파일 저장경로에 위치한 각 파일의 해시값을 생성한다. 그리고 바이러스토탈 API를 이용하여 파일의 해시값으로 질의한다. 질의에 대한 응답을 받으면 해당 응답을 분석하여 페이로드가 바이러스토탈에 등록되어 있는지 확인한다. 실습에서 생성한 페이로드는 그림 3 11과 같이 바이러스토탈에 등록되지 않은 페이로드임이 확인된다. 이상으로 베일이베이전을 사용하여 페이로드를 생성하는 실습을 마무리한다.
 

매거진의 이전글 강사후기-모의해킹실무과정 7기 중간발표 진행
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari