Exploitation
1) 용어
(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이다.
2) Risks
일반적으로 Exploit과 Post-Exploit 과정에서 Risk가 가장 크다.
- 어플리케이션끼리의 충돌
- 서버 다운
- 성능 손실
- 구성(구조) 변화
- 기밀정보 누설
- 잊혀진 백도어
위와 같은 리스크들을 완화하기 위해서는 다음에 주의해야한다.
- 현재 기술로 대체할 수 있는 오래된 서비스는 제외한다
- 시간날 때 critical system을 테스트해본다.
- 테스트 환경에서 먼저 Pen Test를 진행해본다
- Pen Test 전에 모니터링 환경을 만들어둔다.
- 자동 테스트를 다시 조정한다
- clean-up 플랜을 세운다.
3) Exploit Databases
: Pen Test를 위해 개발된 취약한 소프트웨어와 public exploit의 저장소
가장 유명한 exploit database는 'www.exploit-db.com'이다. 이는 CVE-Compatible Database 이다.
※ CVE : 정보 보안 취약점 표준 코드(Common Vulnerabilities and Exposures). CVE는 알려진 취약점을 식별하는 방식을 표준화하는 데 목적이 있다.
Manual Exploitation
exploit database를 이용해 exploit을 진행해보자.
다음과 같은 순서로 진행된다.
- MS03_026 취약점을 위해 개발된 exploit 코드를 검색한다.
- exploit 코드를 컴파일한다
- exploit을 시행한다.
- 타겟 시스템에 shell을 가진다.
-
Exploitation Framework
앞에서와 같이 manual하게 exploit을 수행하기에는 여러 어려움이 존재한다.
exploit 코드를 직접 찾고, 그 코드를 컴파일 한다. 또, 에러나 버그가 생기면 직접 수정을 해야하고, 알맞은 exploit을 수행하기 위해 타겟 시스템의 버전을 찾아봐야 할 수도 있다. 그리고 exploit 코드가 안정적이지 못할 수 있고, 결정적으로 한번의 exploit에 하나의 payload밖에 사용하지 못한다.
그렇기에, 우리는 Exploit Framework를 사용할 것이다.
Exploit Framework는 Manual Exploitation의 어려움들을 해결해준다.
그 종류로는 Core Imapct, Immunity Canvas, Metasploit 등이 있는데, 우리는 Metasploit을 사용한다.
우리는 Metasploit을 이용해 컴퓨터 시스템의 취약점을 테스트해볼 수도 있고, 원격 시스템에 침입할 수도 있다.
1. pass the Hash(패스더해시)란?
: Password에 대한 hash값을 사용하는 환경(NTLM/LM 인증 프로토콜을 사용하는 환경)에서, 획득한 hash 값을 사용하여 인증을 통과하는 공격 (사용자의 실제 Password는 몰라도 됨)
1) Mechanism
- NTLM/LM 인증을 사용하는 서버/서비스는 해시로 암호를 제공
- cleartext 암호는 원격 서버를 전송하기전에 해시로 전환
- 인증을 완료하는데에 Cleartext 암호는 필요하지 않음
- 기능적으로 해시는 원래 암호와 동일
→ Complete network 인증올 완료하는데에는 hash만 있으면 된다.
2) Pass-the-Hash 공격 과정
- 시스템에 침투
- 시스템의 보호된 자원에 접근할 수 있는 권한 획득
- 메모리 상에 있는 Password Hash값 수집
- 새로운 logon session을 생성하여 획득한 hash 값으로 접속
→ LM/NTLM 인증 프로토콜을 사용하는 Network의 특정 시스템에 침투한 후에는, Network에 연결된 다른 시스템에 속한 모든 시스템에도 침투할 수 있다.(보통 사용자는 Password를 플랫폼마다 바꾸지 않음)
우리는 'Pass the Hash' 공격을 하기위해 다음과 같은 모듈을 사용할 것이다.
→ PSExec 모듈은 암호학적 개인정보를 이미 알고있는 특정 시스템에 대한 접근을 얻기 위해 침투테스터에 의해 사용된다.
- Metasploit PsExec를 사용하기 위해 필요한 것
- 타겟 IP
- 타겟 시스템의 username
- Password Hash(or Password)
- Administractive Shares
우리는 가상환경에 설치한 winXP, windows 8 에 대한 대다수의 정보 가지고 있다. win xp와 windows 8을 PsExec 모듈을 사용하여 해킹할 것이다.
그렇다면 가장 중요한 Hash 암호는 어떻게 모을 것인가?
→ 미터프리터를 사용한다!
2. Meterpreter
winXP의 해쉬 암호를 모을 때 우리는 'Meterpreter' 라는 Payload의 모음을 사용할 것이다. (미터프리터 내장기능에 pass the hash 공격이 포함되어있다.)
1) 미터프리터란?
: Metasploit Framework에 포함되어 있는 Payload 중의 하나로, 특별한 기능을 제공한다. Metasploit의 기능을 활용해 대상 시스템을 손상시킬 수 있는 프레임워크의 확장기능이다.
2) 미터프리터의 특징
- 다양한 후속 공격을 지원, 인메모리 DLL injection stager을 사용
- 디스크를 건드리지 않음
→ 프로세스 인젝션 시 새로운 프로세스 생성하지 않음, 기존에 있는 프로세스에서 실행
- reflective DLL injection 을 사용
- 내장 기능에는 권한 상승, Pass the Hash, 이벤트 로그, 인코그니토, 원격 데스크톱 접근, 패킷 스니핑, 피버팅 등이 있다.
→ 이외에 더 많은 모듈들은 help 명령어를 통해 확인 할 수 있다.
Post-Exploitation
1. 후속 공격(Post-Exploitation)이란?
: 세션이 오픈된 후 일어나는 모든 행동을 일컫는다.
→ exploit을 하고 난 후 정보를 계속해서 모으는 것은 매우 중요하다. 이런 정보들이 다른 시스템을 공격할 때 도움을 줄 수도 있기 때문이다.
시스템을 해킹하고 난 후 해야하는 행동
- Persistence ( 시스템에 지속적인 접근 유지)
- Username과 Password Hashes 를 모은다
- Password Cracking
- 중요한 data 수집
따라서 exploit에 성공한 system에 지속적인 접근을 유지하는 것은 매우 중요하다.
Meterpreter Extensions
미터프리터 세션에 다양한 post-exploit session 명령어들이 있다.
포스트 익스플로잇 단계에서 어떤 용도로 사용되는 지에 따라 명령어들이 다음과 같이 분류 된다.
1) Stdapi
2) Priv
3) Incongnito
4) Sniffer
5) Core
Stdapi, Priv, Core 는 따로 load 해주지 않아도 meterpreter session이 열리면서 자동으로 load 되기 때문에 사용하기 전에 load 해 줄 필요가 없다.
Core Extension
→ 미터프리터 세션을 관리하는데 사용된다.
- help : 도움말
- sessinos : 세션 관리
- background : 현재의 미터프리터 세션을 MSF console prompt 로 이동
- migrate : 서버를 다른 프로세스로 옮김
- channel : 활성화된 채널의 목록을 제공하거나 제어(interact, read, wrtie, close)
→ channel 이란 클라이언트와 서버사이에 존재하는 데이터 이동통로를 말한다.
- load | use : meterpreter extension을 load하거나 사용
- run : 미터프리터 스크립트나 post 모듈 실행
우리는 sessions 명령어와 background 명령어를 이미 앞에서 사용해보았다.
Stdapi Extension
- file system commands
→ 타겟 시스템의 파일 시스템 관리
- cat : 출력창에 파일의 내용물을 출력
- cd / lcd : 폴더 이동
- pwd / lpwd : 현재 디렉토리 출력
→ pwd는 타겟시스템의 lpwd 는 local system의 현재 디렉토리
- upload / download : 파일 또는 디렉토리를 업/ 다운로드
- ls : 파일 목록 출력
- rm : 특정한 파일 제거
- search : 파일 검색
- system commands
→ 타겟 시스템에서 실행되는 시스템 관리
- execute : 명령어 실행
- getpid / getuid ": 현재 프로세스의 식별자/서버를 실행시키고 있는 사용자를 얻음
- shell :
- sysinfo : 현재 공격 대상에 대한 정보를 얻는다.
- ps : 실행되고 있는 프로세스 목록 출력
- kill : 현재 프로세스 종료
- UI &Webcam commands
→ 웹캠으로부터 keystroke, screenshot, snapshot 얻음
- idletime : 공격대상 pc가 몇 초동안 가동되지 않았는지 출력
- screenshot : 활성화된 데스크탑의 스크린샷 찍음
- record_mc : x초간 기본 마이크를 통해 오디오 녹음
- webcam_list : 웹캠 리스트 나열
- webcam_snap : 웹캡으로부터 스냅샷 가져옴
-
4) Password Cracking
패스워드 크래킹에는 3가지 종류가 있다.
(1) Brute Force Attacks
- 모든 가능한 수단이 전부 시행됨
- 패스워드 길이를 아는 것이 좋다. (패스워드 길이가 길수록 올바른 패스워드를 찾는 데 걸리는 시간이 기하급수적으로 늘어나기 때문)
(2) Dictionary Attacks
- 이미 만들어져 있는 워드리스트를 사용
- 공격툴들이 다양한 방법들을 이용 - 대문자/소문자, 숫자를 앞뒤로 붙이기 등
(3) Rainbow Table Attacks
- 미리 컴파일된 잠재 해쉬들의 리스트
- 빠르다
- RAM용량을 많이 사용한다
Password Hash
- Windows Hash※LM Hash : 패스워드를 저장하는 데 사용되는 매우 약한 단방향 기능.
- UserName:UserID:LM Hash:NTML Hash:::
- Linux Hash/etc/shadows 파일들은 실제 패스워드를 암호화된 포맷으로 저장하는데, 해쉬나 사용자 계정의 정보를 담고 있다.
- UserName:�������ℎ�Salt$Hash:Last Changed:Min:Max:Warn:::
패스워드 크래킹 툴
HYDRA
- 온라인 패스워드 크래킹 툴 : 패스워드 해쉬에 직접 액세스하지 않고, 웹의 형태로 사용자이름과 패스워드를 요청한다. 매우 느리다.
Cain & Abel
- 패스워드 복원 툴. Microsoft OS에서 사용 가능.
- Brute Force Attack, Dictionary Attack, Rainbow Attack
John the Ripper
- 가장 유명한 패스워드 크래킹 툴 중 하나. Unix, Windows, OpenVMS 등에서 사용 가능.
- Brute Force Attack, Dictionary Attack, Rainbow Attack
- 수많은 패스워드 크래커들을 하나의 패키지로 합친다.
- 패스워드의 해쉬 타입을 자동으로 탐지한다.
- 세 가지 버전이 존재. (Free, Pro, Community-Enhanced)