|
Chapter 1 |
- |
Encryption & Decryption for
Payloads |
-
1.1 Simple
Method for Execute Native Code in Memory via API
Programming
-
در این بخش اول از
فصل 1 شما با روش استفاده از توابع
API
در ویندوز بصورت مقدماتی آشنا می شوید که چگونه می
توانید در سی شارپ توابع API
را Call کنید و روش معرفی
توابع در Csharp و همچنین
موارد Cast کردن
Argument های توابع ویندوز از
محیط Unmanaged به محیط
Managed در سی شارپ.
-
1.2 Encryption and Decryption
for payloads via RC4
-
در بخش 2 از فصل 1 ما بر روی روش
Encryption برای
Payload های Meterpreter , CobaltStrike صحبت می کنیم و روش
RC4 را بررسی می کنیم
-
1.3 Encryption and Decryption
for Payload of Suspended Thread via XOR
-
در این بخش 3 از فصل 1 ما بر روی
روش Xor کار می کنیم برای
Encryption و این روش
XOR در بیشتر فصل های کتاب
از آن استفاده می شود و همچنین با توابع
VirtualAllocExNuma
,
VirtualAlloc2
آشنا می شویم که می توان بجای VirtualAlloc
استفاده کرد در این بخش یک نمونه مثال زده می شود
که چگونه می توان یک Thread
را در حالت Suspend ایجاد
کرد سپس موارد داخل آن را Encrypt/Decrypt
کرد بخش بخش سپس دوباره آن Thread
را Resume
کرد .در این بخش همچنین با تابع
VirtualProtectEx
آشنا می شویم.
|
|
Chapter 2 |
- |
Executing Native Codes in
Local Process |
-
2.1 Local Thread Injection
Classic Method and Indirect/Direct Technique D
-
در این بخش 1
از فصل 2 ما تکنیکی جدید
را در سی شارپ بررسی می کنیم بنام
Technique D
و در این روش شما به عنوان Pentester,
RedTeamer با موردی جدید
آشنا می شوید برای Bypass
کردن آنتی ویروسهایی مانند Kaspersky ,
Defender . این روش را می توان
بصورت Direct اجرا کرد
In-memory اما تکنیک جدید
دیگری را با آن آشنا خواهید شد که بصورت غیره
مستقیم کد In-memory اجرا
می شود و
Indirect Technique D نام گذاری
شده توسط من . در ایجا شما با هر دو نوع
Direct/Indirect
Technique D آشنا
می شوید. در این فصل شما با روشهای جدید آشنا می
شوید که بدون استفاده از توابع ویندوز می توان کدی
در Csharp نوشت که نتیجه
یکسان داشته باشد.
-
2.2
QueueUserAPC API
Methods and Indirect/Direct Technique D
-
در این بخش 2
از فصل 2 روش اجرای کد
توسط تابع
QueueUserAPC را بررسی می
کنیم و نتیجه استفاده از آن را بر روی
Technique D مرور می کنیم که
چگونه آنتی ویروس هایی مانند Kaspersky
, Defender توسط این روش
Bypass می شوند
-
2.3
QueueUserAPC Classic Method
-
در این بخش 3
از فصل 2 روش
استفاده از API Monitor
را برای کار در زمان Research
کردن را بررسی می کنیم همچنین از این ابزار برای
بررسی تکنیک Classic مربوط
به QueueUserAPC استفاده
می کنیم و با تابع جدید
NtQueueApcThread
آشنا می شویم.
|
|
Chapter 3 |
- |
Executing Native Codes in
Local Process (Part2) |
-
3.1 Simple Method for Execute
Native Code in Memory + JMP Method1
-
در این بخش اول فصل
3 یک Trick خیلی ساده را با هم کار می کنیم که به
Jump معروف می باشد
و یا همان پرش
از بخشی از کد در Memory به بخشی دیگر
در Memory
این کار می تواند موجب گیج شدن برخی آنتی ویروس ها
شود و برای دور زدن
آنها می تواند مفید باشد
مانند Defender.
-
3.2 Simple
Method for Execute Native Code in Memory + Delegate
Method + JMP Method1
-
در این بخش 2
از فصل 3 ما همان روش بخش قبلی را استفاده
می کنیم اما با تکنیکی دیگر برای اجرا Jump
کد خود و بجای CreateThread
از روش Technique D کمک می
گیریم برای اجرای غیره مستقیم کدهای Jump
خود.
-
3.3 Simple
Method for Execute Native Code in Memory + Delegate
Method + JMP Method1-Part2
-
در این بخش 3
از فصل 3 که در ادامه بخش قبلی می
باشد
روشی جدید را برای
Write کردن در
Memory را بررسی می کنیم و استفاده از
Marshal.writebyte
را بجای
Marshal.copy بررسی می
کنیم.
-
3.4 Indirect
Call C# Methods in Memory via Reflection.Emit Jump
Method
-
در این بخش چهارم از فصل سوم ما
روش جدیدی را کار خواهیم کرد برای
Jump کردن به آدرس شروع یک C# Method بدون استفاده
کردن از کدهای Asm بر روی Source Code در نتیجه
بصورت غیره مستقیم یک C# Method بر روی حافظه اجرا
می شود یا In-memory اجرا
می شود بدون آنکه ما در کد آن C# Method را Call
کنیم. در نتیجه این روش جدید
Indirect Call C# Methods
in-memory نام دارد .
در این روش جدید ما از بایتهای اسمبلی برای
Jumpاستفاده نمی کنیم بلکه بجای
آن ازامکان Reflection.Emit که یک Class در csharp
می باشد استفاده می کنیم و در آخر Bypass
کردن آنتی ویروس Defender
را خواهیم داشت.
-
3.5 Running C#
Managed Codes in Memory via CreateThread API
-
در این بخش پنجم از فصل سوم یک
تکنیک برای اجرای کد Managed توسط CreateThread
API را بررسی می کنیم .
تا اینجا همانطور که در فصلهای قبلی مشاهده کردید
ما از تابع CreateThread استفاده می کردیم برای
اجرای کدهای Native یا Unmanaged Code که همان
کدهای Shell ما بیشتر می بود یا برای اجرای یک
Jump Method اما شما می توانید از CreateThread
برای اجرای کدهای Managed نیز استفاده کنید. این
Managed Code شما می تواند یک FunctionPointer
باشد که اشاره می کند به یک C# Delegate و
-
یا یک C# Method .
|
|
Chapter 4 |
- |
Executing Native Codes in
Local Process (Part3) |
-
4.1 New Approach
with New APIs to Execute Payloads in Memory + Async
Method and Bypassing Kaspersky
-
در این فصل 4 که ادامه فصل 2 و 3
می باشد ما مواردی دیگر را برای اجرای کد Native
بر روی Local Process را بررسی می کنیم
اما در فصل 4 رویکرد ما در کد برای اجرا با کدهای
فصلهای 2 و 3 متفاوت می باشد به همین دلیل مطالب
این فصل از فصلهای 2 و 3 جدا شده منظور از رویکرد
متفاوت در اینجا استفاده از روش های جدید برای
اجرای کد می باشد و سعی بر اینکه کد ها جدید تر
باشد
برای مثال وقتی شما می خواهید مقداری همانند یک
Byte Array را در حافظه قرار دهید در کدها ما از
VirtualAlloc استفاده می کردیم
این رویکردی می باشد که در همه کدها تقریبا وجود
داشت و شما آن را نیز در کد های Public هم مشاهده
می کردید که
معمولا تمامی Red Teamer ها و Pentester ها از
توابعی همانند آن استفاده می کردند و این موجب شده
بود تا تمامی آنتی ویروس ها
بر روی این توابع حساس شوند توابعی همانند
VirtualAlloc یا WriteProcessMemory و یا
CreateThread و ...
رویکرد جدید در اینجا یعنی انجام دادن همان
کارهایی که این کد ها و توابع برای ما انجام می
دادند بدون استفاده از آنها
و استفاده کردن از توابع جدید که کاری مشابه آنها
را انجام می دهند و یا استفاده از تکنیک هایی که
موجب می شود
شما نتیجه مشابه بگیرید اما کد شما متفاوت باشد در
نتیجه رفتار کد متفاوت می شود و Signature کد
همینطور و شما
با این رویکرد جدید می توانید آنتی ویروس ها را
Bypass کنید
-
4.2 Indirect
Invoke C# Delegate + JMP Method2
-
در این فصل 4 که بخش 2 روشی جدید
را برای Jump کردن را با کمک روش Technique D اجرا
می کنیم و شما مشاهده
خواهید کرد که چگونه Kaspersky v21 و Windows
Defender با این روش Bypass می شوند .
در این تکنیک جدید من از VirtualAlloc استفاده
کرده ام اما بعد تست کد با آن این تابع را به
Marshal.AllocHGlobal
تغییر می دهیم
در نتیجه ما 2 ورژن از این کد خواهیم داشت یکی با
VirtualAlloc و دیگری با رویکرد جدید ما با توابعی
جدید که کار یکسان را انجام
می دهند.
-
4.3 Chunking
CobaltStrike Payloads + Jump Method and Bypassing
Kaspersky
-
در این بخش 3 از فصل چهارم تکنیکی
را بررسی می کنیم برای Chunk کردن Payload ها یا
جدا کردن Payload ها را بررسی می کنیم.
با کمک این روش جداکردن Payload در Memory شما
مشاهده خواهید کرد که چگونه Kaspersky دورزده می
شود .
|
|
Chapter 5 |
- |
Executing Native Code in
Remote Process |
-
5.1 Remote
Thread Injection Classic
-
در این فصل 5 ما بر روی Remote
Thread Injection کار خواهیم کرد در این بخش 1 ما
اول باید
روش Classic این تکنیک را یاد بگیریم که بسیار مهم
می باشد حتی اگر کد قدیمی باشد و الان دیگر ممکن
می باشد
بر روی برخی آنتی ویروس ها کارایی نداشته باشد اما
به عنوان Pentester /Red-Blue Teamer شما باید این
روش
را یاد بگیربد بدلیل اینکه کاربردی می باشد با
اینکه ممکن می باشد کد قدیمی باشد و بیشتر AV ها
آن را شناسایی کنند.
-
5.2
Remote Thread Injection + Delegate Method
and
bypassing Defender
-
در بخش 2 از فصل پنجم ما در مورد
روش استفاده از Function Pointer و Delegate در
Csharp را بررسی می کنیم
توسط این روش بدون Import کردن توابعی مثل
VirtualAllocEx /WriteProcessMemory /
CreateRemoteThread شما می توانید
در کد از آنها استفاده کنید و این کمک می کند به
شما برای Bypass کردن آنتی ویروس ها همانند
Windows Defender
-
5.3 Remote
Thread Injection + Jump Method and Bypassing
Kaspersky + Defender
-
در بخش 3 از فصل پنجم از روش
Classic استفاده می کنیم تا یک New Thread ایجاد
کنیم
اما Paylaod درون این New Thread ما یک Jump کد می
باشد به یک آدرس A دیگر در حافظه که
در آن آدرس A ما یک Jump code دیگر داریم که اشاره
می کند به آدرس B که همان CobaltStrike Paylaod ما
می باشد
در نتیجه مشاهده می کنید که توسط این تکنیک ما
بصورت Indirect کد مربوط به CobaltStrike Payload
را اجرا می کنیم
در نتیجه ما از CreateRemoteThread استفاده کرده
ایم در کد اما به دلیل اینکه در کد ما این تابع
قرار می باشد یک Jump code
را اجرا کند و نه یک Payload برای CobaltStrike را
در نتیجه توسط آنتی ویروس کد شناسایی نمی شود
|
|
Chapter 6 |
- |
[X technique] via Extension
Methods in C# |
-
6.1 X Technique,
Changing Codes via Extension Method
-
در فصل 6 روشی را معرفی می کنم که
توسط آن شما می توانید کد سی شارپ خود را تغییر
بدهید تا دارای یک Signature جدید
بشود و به شما کمک می کند در Bypass کردن آنتی
ویروس ها مخصوصا در زمانی که کد شما را بر روی
Harddisk شناسایی می کنند
من نام این روش را که برای اولین بار در نسخه 1.0
همین کتاب معرفی شده X Technique نام گذاری کرده
ام . در واقع من توسط این روش جدید سعی کرده ام با
کمک Extension ها در Csharp کد هایی که معمولا بر
روی هاردیسک شناسایی می شوند را جوری تغییر بدهم
که Signature کد تغییر کند و رفتار کد کمی تغییر
کند اما نتیجه کد یکسان باشد با زمان قبل از تغییر
کد در نتیجه این روش یکجور پیچیده کردن کد می توان
نام برد اما شاید پیچیده برای آنتی ویروس ها و نه
برای برنامه نویسان در نتیجه شما به عنوان برنامه
نویس کد می توانید آن را متوجه شوید .
|
|
Chapter 7 |
- |
Sliver C2 and your Csharp
Codes |
|
|
Chapter 8 |
- |
Native CallBack Functions by
C# |
-
8.1 Native
CallBack Functions by Csharp
-
در فصل 8 ما با Callback
Functions آشنا می شویم و روش کار با آنها بر روی
Csharp.
در فصل های گذشته ما با مواردی همچون CreateThread
/ CreateRemoteThread / FunctionPointers آشنا
شدیم برای اجرای
کدها و بایتهای خود در Memory در این فصل تکنیکهای
جدیدی را برای اجرای Byte های خود در Memory را
بررسی
می کنیم که همانند توابع قبلی به ما کمک می کند
برای انجام این کار .
|
|
Chapter 9 |
- |
Compiling and Running
Managed Codes In-Memory by C# |
-
9.1 Running C# Managed Codes
In-Memory by Csharp
-
در فصل 9 مواردی بر روی
Csharp را بررسی می کنیم که بیشتر به NameSpace
System.Reflection بر می گردد و برای
مواردی همچون
Compiling C# Codes in-memory کاربرد دارند و همچنین اجرای کدها و Exe های Dotnet که در اصطلاح به آنها Assembly گفته می شود در
Dotnet و دلیل استفاده از این روشها و تکنیکها در Dotnet برای Red-teaming این می باشد که کدهای شما در Memory اجرا می شوند بصورت Dynamic بدون آنکه شناسایی بشوند بر روی Harddisk و این بسیار مهم می باشد در Bypass کردن برخی آنتی ویروسها. در این بخش اول از
فصل 9 من یک نمونه کد بسیار ساده و بسیار مهم را معرفی می کنم که بسیار کاربرد دارد در Red-teaming و همچنین در نوشتن کدهای مانند C2 Server و یک نمونه مثال را با هم بررسی می کنیم که چگونه از این کد می توان در C2 Server هایی که با Dotnet و Csharp نوشته شده اند
استفاده کرد.
-
9.2 Running C# Managed Codes
In-Memory by C# , Part2
-
در فصل 9 بخش 2 ادامه
موارد فصل 9.1 را بررسی می کنیم و در اینجا چند
Trick ساده اما کاربردی برای Encrypt کردن
Exe فایل هایی که می خواهیم آنها را توسط تکنیکی
که در InMemoryRun وجود داشت اجرا کنیم بررسی می
کنیم و همچنین روش گرفتن Exe فایلها از طریق شبکه و ترافیک Web
بجای خواندن Exe فایلها از روی Harddisk.
-
9.3 Compiling C#
Source Codes In-Memory by Csharp
-
در فصل 9 بخش 3 روشی را
بررسی می کنیم که بسیار قدیمی می باشد اما بسیار
کاربردی در Red Teaming.
در این روش شما می توانید بجای اجرای Exe فایل در
Memory یک C# Source Code را در In-Memory اول آن را Compile کنید سپس اجرا کنید . در نتیجه در
این روش ما فقط یک Text فایل داریم یا یک سری Text
به عنوان کد برای اجرا در Memory . درنتیجه شناسایی آنها در
Memory بسیار سخت می باشد برای آنتی ویروس ها .
|
|
Chapter 10 |
- |
Detecting Memory Allocation
in-memory via ETW Events (Blue team) |
-
10.1 ETW and
VirtualMemAlloc Events
-
در فصل 10 در بخش اول بر روی ETW Event Trace for
Windows کار می کنیم که بسیار مهم می باشد برای
Detection
مخصوصا برای تیم آبی دراین فصل 10
هدف من بیشتر بر روی Detection می باشد برای افراد
Blue team و به عنوان Pentester
و یا Red teamer شما باید بدانید یکی از هدفهای
کار ما کمک به افراد تیم آبی می باشد برای بهتر
شدن کار تیم آبی و کمک به آنها
در شناسایی خطرات در شبکه و این کمک کردن به تیم
آبی در واقع فلسفه وجود تیم قرمز می باشد. در این
فصل من بیشتر تمرکز می کنم بر روی مواردی همچون
برنامه نویسی برای افراد تیم آبی و نوشتن کد برای
Detect کردن برخی از کدهای که در همین کتاب آنها
را بررسی کردیم . در این
فصل روش استفاده از دو ابزار ETWProcessMon
v1.1 و VirtualMemAllocMon
v1.1 را بررسی می کنیم و آشنا می
شوید با رویکرد استفاده از ETW Events
در این دو ابزار قدم به قدم برای Detect
کردن Jump Byte
ها در حافظه و همچنین چگونگی استفاده از این دو
ابزار و استفاده از ETW
VirtualMemAlloc Events برای
شناسایی بایتهای مربوط به Payload
های CobaltStrike
, Sliver-c2
وشناسایی برخی از بایتهای مرتبط به Payload
های
این دو C2 Server در
Memory و ...
-
10.2 ETW and VirtualMemAlloc Events , Part2
-
در فصل 10 در بخش دوم که ادامه
بخش یک می باشد بر روی کدهای سی شارپ ابزار
ETWProcessMon v1.1 بیشتر تمرکز
می کنیم و هدف این می باشد که شما با
Background کد بیشتر آشنا شوید.
-
10.3 ETW and VirtualMemAlloc Events , Part3
-
در فصل 10 در بخش سوم که
ادامه بخشهای 1 و 2 می باشد بر روی کدهای سی
شارپ ابزار VirtualMemAllocMon v1.1
بیشتر تمرکز می کنیم و هدف این می
باشد که شما با Background
کد در این Memory Scanner
که با ETW Events
کار می کند
بیشتر آشنا شوید.
|
|
Chapter 11 |
- |
Detecting Threats in-memory via other ETW Events (Blue team) |
-
11.1 ETW ImageLoads and TCPIP Events for Detecting Threats In-Memory
-
در فصل 11
در بخش 1 روش های دیگر استفاده از ETW
برای Detection را بررسی می کنیم
در بخش
یک فصل 11 تکنیکی بسیار ساده اما کاربردی را برای شناسایی
Process
هایی که توسط Sliver-c2 آلوده شده
اند
و یا Payload
مربوط به Sliver-c2 به آنها
Inject شده را بررسی می کنیم و آن روش
استفاده ازETW Event
های ImageLoads و
TCPIP Send می باشد برای شناسایی
Process های آلوده. در اینجا کد
ETWProcessMon v1.2 را که جدید می
باشد بررسی می کنیم.
-
11.2 Detecting Remote Thread Injection and Monitoring Windows Events Log by Csharp
-
در فصل 11
در بخش 2 روش استفاده از ETW ThreadStart Events
را برای Detect کردن
Remote Thread Injection
را بررسی می کنیم و تمرکز ما بر روی کد جدید
ETWProcessMon v1.3 می باشد و همچنین روش
ذخیره کردن ETW Events را بر روی
Windows Event logs را کار خواهیم
کرد که می تواند بسیار به افراد تیم آبی کمک کند در
استفاده از ETW Events برای انتقال
ETW Event Records به دیگر ابزار
های دفاعی خود در بخش SOC و ...
و یک نمونه مثال از چگونگی Monitor
کردن Windows Event Logs توسط
Csharp را بررسی می کنیم و ...
|
|
|
|
|
|
|
|
|
|
|