모의해킹 공부 - (4)

yxxun1216·2023년 3월 22일
0

Bypassing Antivirus Application


Trojans

타깃 Ubuntu의 Vsftpd 서버에 :) 기호를 이용하면 접근 가능한 백도어가 있다.
공격자가 Vsftpd에 트로이 목마를 추가할 수 있다.

Msfvenom

Msfvenom은 Metasploit payload를 합법적인 바이너리에 내장하는데 필요한 옵션을 가지고 있다.

-x 명령어를 사용하면 선택한 payload를 포함하는 template으로 실행 파일을 사용할 수 있다. -k 명령어를 사용하면 실행 파일의 template을 그대로 유지하고 새로운 thread에서 payload를 실행하여 원본 파일이 정상적으로 실행되도록 한다.

따라서 -x, -k 명령어를 사용하면 사용자에게는 정상적으로 보이지만 Meterpreter session을 백그라운드로 전송하는 트로이목마를 실행할 수 있다.

/usr/share/windows-binary를 이용한다.

radmin viewer 프로그램이 실행되는 것처럼 보인다.

내장된 payload에 의해 msfconsole에서 Meterpreter가 실행된다.

Microsoft Security Essentials

Microsoft Security Essentials를 이용하여 탐지 불가능한 트로이목마를 만들 수 있는지 알아본다.


Windows 7에 설치했던 Microsoft Security Essential에서 설정을 해준다.

위에서 만들었던 radmin.exe를 설치하려고 하면 실행되지 않는 것을 확인할 수 있다.

VirusTotal

VirusTotal (http://www.virustotal.com/)의 사이트에 프로그램을 업로드하면 악성 프로그램을 탐지하여 알려준다.

Getting Past an Antivirus Program

Encoding

Encoder는 payload를 훼손하여 실행하기 전에 디코딩 명령어를 추가한다.

encoder에서 순위는 출력의 엔트로피 레벨을 기반으로 한다. x86/shikata_ga_nai는 encoder에서 높은 순위이다. 이 encoder는 payload를 쉽게 인식할 수 없을 정도로 훼손시킨다.

sikata_ga_nai encoder를 이용한다. Msfvenomm 명령어로 LHOST, LPORT, -e, -i를 모두 설정한다.

생성된 파일을 virustotal 웹사이트에 업로드하면 다음과 같은 결과를 확인할 수 있다.

Metasploit의 다른 encoder도 사용해본다.

x86/shikata_ga_nai를 x86/bloxor과 함께 사용한다.
shikata_ga_nai로 인코딩하면서 .exe가 아니라 .bin 파일을 만들고 이 결과를 이용하여 bloxor로 인코딩한다.

아키텍처를 32bit로 지정하기 위해 -a x86옵션을 이용하고, -p -w 옵션으로 payload를 null로 설정한다. 플랫폼도 windows로 설정한다. 마지막으로 < 기호로 shikata_ga_nai로 인코딩한 .bin 파일을 연결한다.

만들어진 파일을 다시 한 번 virustotal 사이트에 업로드 해보면 탐지된 수가 shikata_ga_nai만을 사용했을 때보다 조금 줄은 것을 확인할 수 있다.

Custom Cross Compiling

raw 셸 코드를 통해 직접 실행 파일을 컴파일 하여 antivirus solution을 우회 능력을 향상시킬 수 있다.

변수 random과 shellcode에 데이터를 채우기 위해 Msfvenom의 payload에서 16진수 byte를 대입한다.
-f 옵션의 형식을 c로 설정한다.

또한 랜덤하게 만들기 위해 엔트로피를 사용하여 데이터를 생성하는 의사 난수 생성기인 /dev/urandom 파일을 이용한다.
char 배열에 맞는 데이터를 얻기 위해 tr Linux utility를 사용한다. tr -dc A-Z-a-z-0-9과 head 명령에 pipe를 연결한다.

/dev/urandom의 데이터를 c파일의 랜덤 변수에 넣는다.
c 파일을 컴파일 한다.

만들어진 파일을 virustotal 웹사이트에 업로드하면 악성 파일을 탐지하지만 그 수가 적어진 것을 확인할 수 있다. Microsoft Security Essentials에서는 설치도 불가능하다.

Encrypting Executables with Hyperion

암호화 도구인 Hyperion을 이용하여 Meterpreter 실행 파일을 암호화한다.

virustotal 웹사이트에서 악성 파일을 탐지하지만 Microsoft Security Essentials에서는 탐지하지 못하는 것을 알 수 있다.

Envading Antivirus with Veil-Evasion

Veil-Evasion은 antivirus를 회피할 수 있는 payloads를 자동 생성하는 python framework이다.

Creating Encrypted Python-Generated Executables with Veil-Evaison

Veil-Evaison에서 python 주입 기술을 사용한다. Hyperion에서와 같이 AES 암호화와 결합된 Python VirtualAlloc 주입을 사용한다.

VirtualAlloc 주입과 AES 암호화를 사용하기 위해 list 명령어와 23을 입력한다.

LHOST, LPORT, filename 등을 설정해주면 Microsoft Security Essentials에서 악성 파일이 탐지되지 않는다.
다른 antivirus solution에는 탐지될 수 있다.

Hiding in Plain Sight

antivirus 프로그램을 피하는 최선의 방법은 전통적인 payload를 완전히 피하는 것이다.
Msfvenom으로 payload를 만든 것처럼 악성 파일을 숨기는 대신 원하는 payload 기능을 수행하는 C 프로그램을 작성하는 것이 더 나은 결과를 얻을 수 있다.


Post Exploitation


공격 후 악용된 시스템에 대한 정보 수집, 권한 상승 및 시스템 간 이동에 대해 Metasploit에서의 공격 후 옵션을 통해 살펴본다.

Meterpreter

각 타깃 시스템에서 Meterpreter session을 여는 것으로 post exploitation이 시작한다.

Using the upload Command

웹서버에 파일을 업로드 하기 위해서 Meterpreter에서는 help upload 명령어로 쉽게 이용할 수 있다.

예를 들어, Netcat을 업로드 하는 경우 upload /usr/share/windows-binaries/nc.exe c:\ 명령어를 사용한다.

getuid

getuid 명령어를 사용하면 Meterpreter를 실행하는 시스템 사용자의 이름을 알 수 있다.

Meterpreter Scripts

Meterpreter에서 script를 실행할 수 있는데 /usr/share/metasploit-framework/scripts/meterpreter에서 찾을 수 있다. 이 script는 Ruby로 작성되었고 실행하려면 run [script name] 명령어를 입력한다.
run migrate -h 명령어를 입력하면 Meterpreter script에 대한 정보를 얻을 수 있다.

이 외에도 -n 명령어를 입력하면 이름별로 process로 migration 할 수 있고 process ID를 -p 명령어와 사용하면 process로 migration 할 수 있다.

Metasploit Post-Exploitation Modules

Metasploit framework에 post exploitation을 위한 모듈이 많다.
post/windows/gather/enum_logged_on_user를 통해 현재 로그온 되어있는 사용자를 확인할 수 있다.

Railgun

Railgun은 Meterpreter의 확장으로 윈도우 API에도 직접 접근할 수 있다. 또한 Meterpreter의 post-exploitation 모듈 내부에서 사용할 수 있다.
shell32 Windows DLL의 IsUserAnAdmin 기능에 직접 엑세스하여 세션이 관리 사용자로 실행되고 있는지 확인 가능하다.

Ruby shell의 명령어 irb를 입력하고 client.raligun.shell32.IsUserAnAdmin을 입력한다.

Local Privilege Escalation

공격 후 시스템을 제어하기 위해 로컬 권한 상승에 대해 살펴본다.

getsystem on Windows

Meterpreter의 getsystem 명령어는 대상에 대한 로컬 권한 상승 공격을 자동으로 실행한다.
getsystem -h 명령어를 통해 옵션을 자세히 살펴볼 수 있다.

argument 없이 getsystem 명령어를 실행하면 일련의 local exploit이 하나만 성공하거나 모든 공격을 전부 시도한다. -t 명령어와 공격번호를 입력하면 특정 공격을 실행할 수 있다.

Local Escalation Module for Windows

Metasploit의 local exploit 모듈을 사용하면 열린 session에서 exploit을 실행하여 추가 액세스 권한을 얻을 수 있다.
exploit/windows/local/ms11_080_afdjoinleaf는 Windows 드라이버의 afdjoinleaf 함수의 취약성을 이용한다.
payload와 LHOST를 설정하고 exploit을 실행한다.

Bypassing UAC on Windows

Windows 7에는 UAC(user account control)와 같은 추가 보안 기능이 있다. 타깃 Windows 7에서 권한을 높이는 방법을 알아본다.

session -i 2 명령어로 session에 연결하고 getuid와 getsystem 명령어를 통해 공격하려고 하면 실패하며 오류 메시지가 뜬다.

UAC 제어를 우회하기 위해 Metasploit의 windows/local/bypassuac를 이용한다.

모듈은 신뢰할 수 있는 게시자 인증서를 통해 UAC 제어를 bypass 한다. getuid 명령어를 입력하며 더 이상 UAC의 제한이 없는 것을 확인할 수 있다.

Udev Privilege Escalation on Linux

타깃 Linux에서 권한 상승을 시도한다.
SSH와 TikiWiki를 사용하여 Meterpreter의 shell을 얻는다.

0개의 댓글